5 # Name : build variable calculator
6 # Author : Chris Koeritz
10 # This script sets up all the variables needed by the HOOPLE system for
11 # building the source code. It can either be run as a bash script directly
14 # bash $FEISTY_MEOW_APEX/scripts/generator/build_variables.sh
16 # which will establish a new shell containing all the variables, or you can
17 # 'source' the script like so:
19 # build_vars=$FEISTY_MEOW_APEX/scripts/generator/build_variables.sh
20 # source $build_vars $build_vars
22 # to set all of the variables in your current shell. The full path is
23 # necessary in these commands to allow the script to easily find itself.
24 # The 'source' version needs to be fed the actual path to the script
25 # because bash 'source' commands cause the first parameter (called $0) to
26 # be set to just the path to bash itself.
29 # Copyright (c) 2004-$now By Author. This program is free software; you can
30 # redistribute it and/or modify it under the terms of the GNU General Public
31 # License as published by the Free Software Foundation; either version 2 of
32 # the License or (at your option) any later version. This is online at:
33 # http://www.fsf.org/copyleft/gpl.html
34 # Please send any updates to: fred@gruntose.com
37 # here is where we compute the locations for the build's pieces, based on
38 # where this script is located. we currently assume that the build scripts
39 # like this one are at the same height in the hierarchy as the clam scripts
40 # that are used in the bootstrapping process.
42 # get the most important bits first; the directory this script lives in and
49 # helpful build function zone.
51 source "$FEISTY_MEOW_SCRIPTS/core/functions.sh"
55 # outer check on whether this already was run or not.
56 if [ -z "$BUILD_VARS_LOADED" ]; then
58 # perform some calculations to get the right paths from our parameters.
59 if [ ! -z "$PARM_1" ]; then
60 # use the first real parameter since this is probably the 'source' version.
61 export BUILD_SCRIPTS_PATH="$(dirname "$PARM_1")"
62 THIS_TOOL_NAME="$(basename "$PARM_1")"
64 # use the zeroth parameter, since we know nothing more about our name.
65 export BUILD_SCRIPTS_PATH="$(dirname "$PARM_0")"
66 THIS_TOOL_NAME="$(basename "$PARM_0")"
68 BUILD_SCRIPTS_PATH="$(cd $(echo $BUILD_SCRIPTS_PATH | tr '\\\\' '/' ); \pwd)"
70 # figure out the other paths based on where we found this script.
71 export BUILDING_HIERARCHY="$(echo "$BUILD_SCRIPTS_PATH" | sed -e 's/\(.*\)\/[^\/]*/\1/')"
72 export CLAM_SCRIPTS="$(cd $BUILD_SCRIPTS_PATH/../clam ; \pwd)"
73 # synonym to make other builds happy.
74 export BUILDER_PATH="$BUILDING_HIERARCHY"
76 # set some clam parameters for compilation. if the script can't guess the
77 # right configuration, then you will need to set them in the last 'else'
79 if [ ! -z "$IS_UNIX" ]; then export OPERATING_SYSTEM=UNIX;
80 elif [ ! -z "$IS_DOS" ]; then export OPERATING_SYSTEM=WIN32;
82 # the system is unknown, so we give up on guessing.
83 export OPERATING_SYSTEM=unknown
85 if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
86 echo "[OS is \"$OPERATING_SYSTEM\"]"
89 if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
90 echo "[FEISTY_MEOW_APEX is $FEISTY_MEOW_APEX]"
93 # set some extra variables that clam uses.
95 # CLAM_ON_UNIX or CLAM_ON_DOS might get defined here.
96 # we also can set OS_SUBCLASS if we detect darwin.
97 if [ $OPERATING_SYSTEM == UNIX ]; then
98 export CLAM_ON_UNIX=$(uname)
99 if [[ $CLAM_ON_UNIX =~ .*[Dd]arwin.* ]]; then
100 # pick the subclass now that we know this is darwin.
101 export CLAM_OS_SUBCLASS=darwin
103 elif [ $OPERATING_SYSTEM == WIN32 ]; then
104 export CLAM_ON_DOS=$(uname)
106 echo "Unknown operating system--clam will not build well here."
109 # CLAM_BASE_CPU is a flag that distinguishes the type of processor, if necessary.
110 export CLAM_BASE_CPU="$(machine 2>/dev/null || arch 2>/dev/null || uname -m 2>/dev/null || echo i686)"
112 # "FEISTY_MEOW_CPP_HEADERS" are folders where our C and C++ header files can be found.
113 # we'll compute the set of folders as best we can below.
114 if [ -d "$FEISTY_MEOW_APEX/nucleus" ]; then
115 # just assumes we're at home and know our header locations under the feisty meow hierarchy.
116 export LOCUS_LIBRARY_HEADERS="$FEISTY_MEOW_APEX/nucleus $FEISTY_MEOW_APEX/octopi $FEISTY_MEOW_APEX/graphiq"
118 export LOCUS_LIBRARY_HEADERS=
120 ####blech! maybe not needed now? was involved above. | tr "\\\\" / | sed -e "s/\([a-zA-Z]\):\/\([^ ]*\)/\/cygdrive\/\1\/\2/g" ')
121 export FEISTY_MEOW_CPP_HEADERS=$(find $LOCUS_LIBRARY_HEADERS -mindepth 1 -maxdepth 1 -type d | grep -v "\.settings" )
123 # the root name of the version file. This is currently irrelevant on
124 # non-windoze platforms.
125 export CLAM_VERSION_RC_ROOT=$(bash $CLAM_SCRIPTS/cpp/rc_name.sh)
127 # CLAM_COMPILER is the C/C++ compiler application that builds our code.
128 # The variable is mainly used within CLAM itself for determining the proper
131 if [ "$OPERATING_SYSTEM" == UNIX ]; then
132 if [ "$CLAM_OS_SUBCLASS" == darwin ]; then
133 CLAM_COMPILER=GNU_DARWIN
135 CLAM_COMPILER=GNU_LINUX
137 elif [ "$OPERATING_SYSTEM" == WIN32 ]; then
138 CLAM_COMPILER=GNU_WINDOWS
140 if [ -z "$CLAM_COMPILER" ]; then
141 # if we get into this case, we have no idea how to set the default compiler.
142 # so... pick a fun default.
143 CLAM_COMPILER=GNU_LINUX
146 # "CLAM_COMPILER_ROOT_DIR" is the top-level for the C++ compiler location.
147 # it is generally the top of the OS, although some variants may need this
148 # modified (e.g., gnu arm linux, but we haven't built on that in a bit).
149 export CLAM_COMPILER_ROOT_DIR="/"
151 # CLAM_COMPILER_VERSION specifies the version of the particular compiler we're using.
152 # this is sometimes needed to distinguish how the code is built or where headers/libraries are found.
153 export CLAM_COMPILER_VERSION=$(bash $CLAM_SCRIPTS/cpp/get_version.sh $CLAM_COMPILER $CLAM_COMPILER_ROOT_DIR )
155 # new BUILD_TOP variable points at the utter top-most level of any files
156 # in the building hierarchy.
157 export BUILD_TOP="$FEISTY_MEOW_APEX"
159 # the production directory is the location for all the scripts and setup
160 # code needed to produce the executables for feisty meow.
161 export PRODUCTION_STORE="$BUILD_TOP/production"
163 ## set up the top-level for all build creations and logs and such.
164 #export FEISTY_MEOW_GENERATED_STORE="$TMP/generated-feisty_meow"
165 #if [ ! -d "$FEISTY_MEOW_GENERATED_STORE" ]; then
166 # mkdir -p "$FEISTY_MEOW_GENERATED_STORE"
168 ## set up our effluent outsourcing valves.
169 #export TEMPORARIES_PILE="$FEISTY_MEOW_GENERATED_STORE/temporaries"
170 #if [ ! -d "$TEMPORARIES_PILE" ]; then
171 # mkdir -p "$TEMPORARIES_PILE"
174 # this variable points at a folder where we store the generated products of
175 # the build, such as the binaries and installer packages.
176 export RUNTIME_PATH="$FEISTY_MEOW_GENERATED_STORE/runtime"
177 if [ ! -d "$RUNTIME_PATH" ]; then
178 mkdir -p "$RUNTIME_PATH"
181 # we define a log file storage area that can be relied on by the build.
182 export FEISTY_MEOW_LOGS="$FEISTY_MEOW_GENERATED_STORE/logs"
183 if [ ! -d "$FEISTY_MEOW_LOGS" ]; then
184 mkdir -p "$FEISTY_MEOW_LOGS"
189 # debugging area where we say what we think we know.
191 if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
192 echo scripts: $BUILD_SCRIPTS_PATH
193 echo build tools hier: $BUILDING_HIERARCHY
194 echo this tool: $THIS_TOOL_NAME
195 echo repository: $FEISTY_MEOW_APEX
196 echo clam: $CLAM_SCRIPTS
201 # test out our computed variables to make sure they look right.
202 pushd / &>/dev/null # jump to the root so relative paths are caught.
204 # flag for whether any checks have failed.
207 # first the scripts directory; do we find this script there?
208 if [ ! -f "$BUILD_SCRIPTS_PATH/$THIS_TOOL_NAME" ]; then
209 echo "This script cannot locate the proper build folders. The crucial path"
210 echo "variable seems to be '$BUILD_SCRIPTS_PATH', which"
211 echo "does not seem to contain '$THIS_TOOL_NAME' (this"
212 echo "script's apparent name)."
216 # next the clam directory; is the main variables file present there?
217 if [ -z "$got_bad" -a ! -f "$CLAM_SCRIPTS/variables.def" ]; then
218 echo "The clam directory could not be located under our build tools hierarchy."
219 echo "Please examine the configuration and make sure that this script is in a"
220 echo "directory that resides at the same height as the 'clam' directory."
224 # now compute some more paths with a bit of "heuristics" for where we can
225 # find the source code.
226 export TOOL_SOURCES="$FEISTY_MEOW_APEX/nucleus/tools"
227 if [ -z "$got_bad" -a ! -d "$TOOL_SOURCES/dependency_tool" -o ! -d "$TOOL_SOURCES/clam_tools" ]; then
228 echo "This script cannot locate the tool source code folder. This is where the"
229 echo "dependency_tool and clam_tools folders are expected to be."
233 ############################
235 # we only run the rest of the script if we know we didn't have some kind of
236 # bad thing happen earlier.
237 if [ -z "$got_bad" ]; then
239 # where we store the binaries used for building the rest of the code base.
240 export CLAM_BINARIES="$RUNTIME_PATH/clam_bin"
241 # the final destination for the new binaries which provide the
242 # build with all the applications it needs to get going.
243 export TARGETS_STORE="$RUNTIME_PATH/binaries"
244 # targets directory is meaningful to clam, which will use it for output.
245 export INTERMEDIATE_STORE="$TARGETS_STORE"
246 # where we are building the applications before they get promoted.
248 #hmmm: could allow override on this if already set.
249 # calculate which build ini file to use.
250 export BUILD_PARAMETER_FILE="$PRODUCTION_STORE/feisty_meow_config.ini"
251 if [ ! -f "$BUILD_PARAMETER_FILE" ]; then
252 echo "Cannot find a useful build configuration file."
255 # pick the executable's file ending based on the platform.
256 if [ "$OPERATING_SYSTEM" == "UNIX" ]; then export EXE_ENDING=;
257 elif [ "$OPERATING_SYSTEM" == "WIN32" ]; then export EXE_ENDING=.exe;
259 echo "The OPERATING_SYSTEM variable is unset or unknown. Bailing out."
262 # we should have established our internal variables now, so let's try
264 export PATH=$(dos_to_unix_path $CLAM_BINARIES):$PATH
266 # load up the helper variables for visual studio on winders.
267 if [ "$OPERATING_SYSTEM" == "WIN32" ]; then
268 # moved back to the good path of using gcc, not visual studio.
270 #trying just unixy ones, since we're doing cygwin on doze.
271 export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$TARGETS_STORE"
273 export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$TARGETS_STORE"
276 popd &>/dev/null # checking is over, jump back to the starting point.
278 ############################
280 # at this point, all the build related variables should be valid.
282 if [ -z "$INCLUDED_FROM_BOOTSTRAP" \
283 -a -z "$PARM_1" ]; then
284 # we are running as a stand-alone script, so we stay resident with our
285 # current set of variables.
289 # sentinel that tells us this script was pulled in.
290 export BUILD_VARS_LOADED=true
294 fi # outer wrapper for already ran build vars check.
298 # hook clam into the compilation system.
299 # this always needs to be defined since functions aren't exported.
302 /usr/bin/make -I "$CLAM_SCRIPTS" $*