3 # Name : build variable calculator
4 # Author : Chris Koeritz
8 # This script sets up all the variables needed by the HOOPLE system for
9 # building the source code. It can either be run as a bash script directly
12 # bash ~/feisty_meow/scripts/generator/build_variables.sh
14 # which will establish a new shell containing all the variables, or you can
15 # 'source' the script like so:
17 # build_vars=~/feisty_meow/scripts/generator/build_variables.sh
18 # source $build_vars $build_vars
20 # to set all of the variables in your current shell. The full path is
21 # necessary in these commands to allow the script to easily find itself.
22 # The 'source' version needs to be fed the actual path to the script
23 # because bash 'source' commands cause the first parameter (called $0) to
24 # be set to just the path to bash itself.
27 # Copyright (c) 2004-$now By Author. This program is free software; you can
28 # redistribute it and/or modify it under the terms of the GNU General Public
29 # License as published by the Free Software Foundation; either version 2 of
30 # the License or (at your option) any later version. This is online at:
31 # http://www.fsf.org/copyleft/gpl.html
32 # Please send any updates to: fred@gruntose.com
35 # here is where we compute the locations for the build's pieces, based on
36 # where this script is located. we currently assume that the build scripts
37 # like this one are at the same height in the hierarchy as the clam scripts
38 # that are used in the bootstrapping process.
40 # get the most important bits first; the directory this script lives in and
47 # helpful build function zone.
49 source $FEISTY_MEOW_SCRIPTS/core/functions.sh
53 # outer check on whether this already was run or not.
54 if [ -z "$BUILD_VARS_LOADED" ]; then
56 # perform some calculations to get the right paths from our parameters.
57 if [ ! -z "$PARM_1" ]; then
58 # use the first real parameter since this is probably the 'source' version.
59 export BUILD_SCRIPTS_DIR="$(dirname "$PARM_1")"
60 THIS_TOOL_NAME="$(basename "$PARM_1")"
62 # use the zeroth parameter, since we know nothing more about our name.
63 export BUILD_SCRIPTS_DIR="$(dirname "$PARM_0")"
64 THIS_TOOL_NAME="$(basename "$PARM_0")"
66 BUILD_SCRIPTS_DIR="$(cd $(echo $BUILD_SCRIPTS_DIR | tr '\\\\' '/' ); \pwd)"
68 # figure out the other paths based on where we found this script.
69 export BUILDING_HIERARCHY="$(echo "$BUILD_SCRIPTS_DIR" | sed -e 's/\(.*\)\/[^\/]*/\1/')"
70 export CLAM_DIR="$(cd $BUILD_SCRIPTS_DIR/../clam ; \pwd)"
71 # synonym to make other builds happy.
72 export BUILDER_DIR="$BUILDING_HIERARCHY"
74 # set some clam parameters for compilation. if the script can't guess the
75 # right configuration, then you will need to set them in the last 'else'
77 if [ ! -z "$IS_UNIX" ]; then export OPERATING_SYSTEM=UNIX;
78 elif [ ! -z "$IS_DOS" ]; then export OPERATING_SYSTEM=WIN32;
80 # the system is unknown, so we give up on guessing.
81 export OPERATING_SYSTEM=unknown
83 if [ ! -z "$SHELL_DEBUG" ]; then
84 echo "[OS is \"$OPERATING_SYSTEM\"]"
87 if [ ! -z "$SHELL_DEBUG" ]; then
88 echo "[FEISTY_MEOW_DIR is $FEISTY_MEOW_DIR]"
91 if [ "$OPERATING_SYSTEM" == "WIN32" ]; then
92 # harsh on the paths and make them use backwards slashes.
93 export SERIOUS_SLASH_TREATMENT=true
96 # new BUILD_TOP variable points at the utter top-most level of any files
97 # in the building hierarchy.
98 export BUILD_TOP="$FEISTY_MEOW_DIR"
100 # this variable points at a folder where we store most of the generated products
101 # of the build. these tend to be the things that will be used for packaging into
102 # different types of products.
103 export PRODUCTION_DIR="$BUILD_TOP/production"
105 # we define a log file storage area that can be relied on by the build.
106 export LOGS_DIR="$PRODUCTION_DIR/logs"
107 if [ ! -d "$LOGS_DIR" ]; then
113 # debugging area where we say what we think we know.
115 if [ ! -z "$SHELL_DEBUG" ]; then
116 echo scripts: $BUILD_SCRIPTS_DIR
117 echo build tools hier: $BUILDING_HIERARCHY
118 echo this tool: $THIS_TOOL_NAME
119 echo repository: $FEISTY_MEOW_DIR
125 # test out our computed variables to make sure they look right.
126 pushd / &>/dev/null # jump to the root so relative paths are caught.
128 # flag for whether any checks have failed.
131 # first the scripts directory; do we find this script there?
132 if [ ! -f "$BUILD_SCRIPTS_DIR/$THIS_TOOL_NAME" ]; then
133 echo "This script cannot locate the proper build folders. The crucial path"
134 echo "variable seems to be '$BUILD_SCRIPTS_DIR', which"
135 echo "does not seem to contain '$THIS_TOOL_NAME' (this"
136 echo "script's apparent name)."
140 # next the clam directory; is the main variables file present there?
141 if [ -z "$got_bad" -a ! -f "$CLAM_DIR/variables.def" ]; then
142 echo "The clam directory could not be located under our build tools hierarchy."
143 echo "Please examine the configuration and make sure that this script is in a"
144 echo "directory that resides at the same height as the 'clam' directory."
148 # now compute some more paths with a bit of "heuristics" for where we can
149 # find the source code.
150 export TOOL_SOURCES="$FEISTY_MEOW_DIR/nucleus/tools"
151 if [ -z "$got_bad" -a ! -d "$TOOL_SOURCES/dependency_tool" -o ! -d "$TOOL_SOURCES/clam_tools" ]; then
152 echo "This script cannot locate the tool source code folder. This is where the"
153 echo "dependency_tool and clam_tools folders are expected to be."
157 ############################
159 # we only run the rest of the script if we know we didn't have some kind of
160 # bad thing happen earlier.
161 if [ -z "$got_bad" ]; then
163 # where we store the binaries used for building the rest of the code base.
164 export BINARY_DIR="$PRODUCTION_DIR/clam_bin"
165 # the final destination for the new binaries which provide the hoople
166 # build with all the apps it needs to get going.
167 export TARGETS_DIR="$PRODUCTION_DIR/binaries"
168 # targets directory is meaningful to clam, which will use it for output.
169 export INTERMEDIATE_EXE_DIR="$TARGETS_DIR"
170 # where we are building the apps before they get promoted.
172 export WASTE_DIR="$PRODUCTION_DIR/waste"
173 if [ ! -d "$WASTE_DIR" ]; then
174 mkdir -p "$WASTE_DIR"
176 export TEMPORARIES_DIR="$WASTE_DIR/temporaries"
177 if [ ! -d "$TEMPORARIES_DIR" ]; then
178 mkdir -p "$TEMPORARIES_DIR"
181 # calculate which build ini file to use.
182 export BUILD_PARAMETER_FILE="$PRODUCTION_DIR/feisty_meow_config.ini"
183 if [ ! -f "$BUILD_PARAMETER_FILE" ]; then
184 echo "Cannot find a useful build configuration file."
187 # pick the executable's file ending based on the platform.
188 if [ "$OPERATING_SYSTEM" == "UNIX" ]; then export EXE_ENDING=;
189 elif [ "$OPERATING_SYSTEM" == "WIN32" ]; then export EXE_ENDING=.exe;
191 echo "The OPERATING_SYSTEM variable is unset or unknown. Bailing out."
194 # we should have established our internal variables now, so let's try
196 export PATH=$BINARY_DIR:$PATH
198 # load up the helper variables for visual studio on winders.
199 if [ "$OPERATING_SYSTEM" == "WIN32" ]; then
200 source "$BUILD_SCRIPTS_DIR/vis_stu_vars.sh"
202 export LD_LIBRARY_PATH="$TARGETS_DIR"
205 popd &>/dev/null # checking is over, jump back to the starting point.
207 ############################
209 # at this point, all the build related variables should be valid.
211 if [ -z "$INCLUDED_FROM_BOOTSTRAP" \
212 -a -z "$PARM_1" ]; then
213 # we are running as a stand-alone script, so we stay resident with our
214 # current set of variables.
218 # sentinel that tells us this script was pulled in.
219 export BUILD_VARS_LOADED=true
223 fi # outer wrapper for already ran build vars check.
227 # hook clam into the compilation system.
228 # this always needs to be defined since functions aren't exported.
231 /usr/bin/make -I "$CLAM_DIR" $*