2 # Name : initial setup script for HOOPLE
3 # Author : Chris Koeritz
5 # This script can bootstrap the HOOPLE libraries from a state where none #
6 # of the required binaries are built yet. It will build the tools that the #
7 # CLAM system and HOOPLE need to get a build done. Then the script builds #
8 # the whole source tree as a test of the code's overall health. #
10 # Copyright (c) 2004-$now By Author. This program is free software; you can #
11 # redistribute it and/or modify it under the terms of the GNU General Public #
12 # License as published by the Free Software Foundation; either version 2 of #
13 # the License or (at your option) any later version. This is online at: #
14 # http://www.fsf.org/copyleft/gpl.html #
15 # Please send any updates to: fred@gruntose.com #
18 # prerequisites for this script:
20 # (1) the script should be run with a full path, so that it can decide where
21 # it lives with minimal fuss.
22 # (2) on windows, the msys bin directory should already be in the path so that
23 # tools like dirname are already available.
25 # make sure we know how to find our bash bins.
26 export PATH=/bin:$PATH
27 # signals that we're doing a fresh build to the variables script.
28 export INCLUDED_FROM_BOOTSTRAP=true
29 # pull in our build variables using the path to this script.
30 export BUILD_SCRIPTS_DIR="$( \cd "$(\dirname "$0")" && \pwd )"
31 echo build script initial from bootstrap: $BUILD_SCRIPTS_DIR
32 BUILD_SCRIPTS_DIR="$(echo $BUILD_SCRIPTS_DIR | tr '\\\\' '/' )"
33 echo build script after: $BUILD_SCRIPTS_DIR
34 # load in feisty meow basic scripts, if not already loaded.
35 source "$BUILD_SCRIPTS_DIR/../core/profile.sh"
36 # drop any previous version of the repository variable.
38 source "$BUILD_SCRIPTS_DIR/build_variables.sh" "$BUILD_SCRIPTS_DIR/build_variables.sh"
42 # creates the directory for our binaries and gives it a reasonable paths configuration.
43 function prepare_binaries_dir()
45 # we'll store binaries here from the bootstrap process.
46 if [ ! -d "$BINARY_DIR" ]; then
47 echo "creating binary dir now in $BINARY_DIR"
50 if [ ! -f "$BINARY_DIR/paths.ini" ]; then
51 echo "copied paths.ini to binary dir."
52 cp "$PRODUCTION_DIR/paths.ini" "$BINARY_DIR"
58 # turn off sounds to avoid running the sound player that's not been built yet.
59 unset CLAM_ERROR_SOUND
60 unset CLAM_FINISH_SOUND
64 echo "Build bootstrap process has started."
66 # preconditions for the build process...
70 # set a flag for this process so we can omit certain compilations as necessary.
71 export BOOT_STRAPPING=true
73 # enable this macro to get a much noisier build.
74 #export BE_NOISY=NOISY=t
78 # these default flags turn off unnecessary support when we're rebuilding the
79 # minimal toolset needed for a successful build of hoople.
80 declare -a BUILD_DEFAULTS=( "BOOT_STRAPPING=t" "OPTIMIZE=t" "REBUILD=t" "DEBUG=" )
81 # bootstrapping is always turned on for this particular script.
82 # we also always optimize these builds and turn off the debug flag.
83 # rebuild ensures that the new apps are made fresh: "REBUILD=t"
84 # it can be turned off when the build bootstrapper is being tested.
85 # noisy can be added to spew lots of text: "NOISY=t"
86 # this can help with compilation issues by showing all the flags.
89 make $* $BE_NOISY ${BUILD_DEFAULTS[@]}
91 echo "Failed to make on: $*"
96 # removes pcdos eol from any scripts. that assumes that the bootstrap script
97 # itself isn't polluted with them.
101 tempgrep="$(mktemp "$TEMPORARIES_DIR/tempgrep.XXXXXX")"
102 grep -l "$ctrl_m" "$i" >$tempgrep
103 if [ ! -z "$(cat $tempgrep)" ]; then
104 temp="$(mktemp "$TEMPORARIES_DIR/tempsed.XXXXXX")"
105 sed -e "s/$ctrl_m$//" <$i >$temp
112 # the promote function moves a file from the exe directory into the build's
113 # bin directory. it performs the copy step and makes the file executable.
114 # the original name should just be the root of the filename without any
116 # NOTE: this depends on the operating system having been chosen above!
117 if [ "$OPERATING_SYSTEM" = "UNIX" ]; then
121 if [ ! -f "$INTERMEDIATE_EXE_DIR/$1" ]; then
122 echo "Failed to build the application $1--quitting now."
125 cp "$INTERMEDIATE_EXE_DIR/$1" "$BINARY_DIR/$1"
126 strip "$BINARY_DIR/$1"
127 chmod 755 "$BINARY_DIR/$1"
129 elif [ "$OPERATING_SYSTEM" = "WIN32" ]; then
133 if [ ! -f "$INTERMEDIATE_EXE_DIR/$1.exe" ]; then
134 echo "Failed to build the application $1.exe--quitting now."
137 cp "$INTERMEDIATE_EXE_DIR/$1.exe" "$BINARY_DIR"
138 chmod 755 "$BINARY_DIR/$1.exe"
141 echo "The OPERATING_SYSTEM variable is unset or unknown. Bailing out."
147 # start the actual build process now...
149 # clean out any current contents.
150 bash "$BUILD_SCRIPTS_DIR/whack_build.sh" clean
152 # recreate our useful waste directories and other things...
153 source "$BUILD_SCRIPTS_DIR/build_variables.sh" "$BUILD_SCRIPTS_DIR/build_variables.sh"
155 toolset_names=(makedep value_tagger version_stamper vsts_version_fixer write_build_config short_path sleep_ms zap_process playsound create_guid)
157 if [ -z "$SAVE_BINARIES" ]; then
158 for i in ${toolset_names[*]}; do
159 whack_name="$BINARY_DIR/$i$EXE_ENDING"
160 #echo removing "$whack_name"
165 # make the clam shell scripts executable.
166 chmod 755 "$CLAM_DIR"/*.sh
167 chmod 755 "$CLAM_DIR"/cpp/*.sh
168 #chmod 755 "$CLAM_DIR"/csharp/*.sh
170 # rebuild the dependency tool. needed by everything, pretty much, but
171 # since it's from the xfree project, it doesn't need any of our libraries.
172 if [ ! -f "$BINARY_DIR/makedep$EXE_ENDING" ]; then
173 pushd "$TOOL_SOURCES/dependency_tool" &>/dev/null
174 make_code pre_compilation NO_DEPS=t OMIT_VERSIONS=t
175 make_code NO_DEPS=t OMIT_VERSIONS=t
176 if [ ! -f "$INTERMEDIATE_EXE_DIR/makedep$EXE_ENDING" ]; then
179 echo "The build of the makedep tool has failed. Unknown causes... Argh."
183 # make the tool available for the rest of the build.
188 # rebuild the version tools and other support apps.
189 if [ ! -f "$BINARY_DIR/value_tagger$EXE_ENDING" \
190 -o ! -f "$BINARY_DIR/version_stamper$EXE_ENDING" \
191 -o ! -f "$BINARY_DIR/vsts_version_fixer$EXE_ENDING" \
192 -o ! -f "$BINARY_DIR/write_build_config$EXE_ENDING" ]; then
193 pushd "$TOOL_SOURCES/clam_tools" &>/dev/null
194 make_code pre_compilation OMIT_VERSIONS=t
195 make_code OMIT_VERSIONS=t
197 #hmmm: really this should check all the expected apps.
198 # nice to just have an array of the things built by this guy.
199 if [ ! -f "$INTERMEDIATE_EXE_DIR/version_stamper$EXE_ENDING" ]; then
202 echo "The build of the version_stamper tool has failed. Unknown causes... Argh."
207 promote value_tagger # tool scrambles through headers to standardize outcomes.
208 promote version_stamper # used for version stamping.
209 promote vsts_version_fixer # used for version stamping.
210 promote write_build_config # creates a header of build-specific config info.
215 # build a few other utilities.
216 if [ ! -f "$BINARY_DIR/short_path$EXE_ENDING" \
217 -o ! -f "$BINARY_DIR/sleep_ms$EXE_ENDING" \
218 -o ! -f "$BINARY_DIR/create_guid$EXE_ENDING" \
219 -o ! -f "$BINARY_DIR/zap_process$EXE_ENDING" \
220 -o ! -f "$BINARY_DIR/playsound$EXE_ENDING" ]; then
221 pushd "$TOOL_SOURCES/simple_utilities" &>/dev/null
222 make_code pre_compilation OMIT_VERSIONS=t
223 make_code OMIT_VERSIONS=t
225 promote create_guid # globally unique ID creator.
226 promote playsound # sound playback tool.
227 promote short_path # provides short path names for exes on windows.
228 promote sleep_ms # sleep tool is used in some scripts.
229 promote zap_process # kills a process in the task list.
234 echo "The build binaries have been re-created (or were already present)."
236 # we won't do the full build if they told us to just do the bootstrap.
237 if [ -z "$JUST_BOOTSTRAP_APPS" ]; then
238 echo Cleaning up the temporary files that were built.
239 bash "$BUILD_SCRIPTS_DIR/whack_build.sh" clean
241 # recreate our useful junk directories...
242 mkdir -p "$WASTE_DIR"
243 mkdir -p "$TEMPORARIES_DIR"
245 echo Now starting a normal build of the repository source code.
246 pushd "$REPOSITORY_DIR" &>/dev/null
248 declare -a BUILD_DEFAULTS=( "BOOT_STRAPPING=" "OPTIMIZE=t" "DEBUG=t" "REBUILD=t" )
249 export NOT_SLIMLINE=true