summaryrefslogtreecommitdiff
path: root/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'build.sh')
-rw-r--r--build.sh317
1 files changed, 317 insertions, 0 deletions
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000000..c180fe12c4
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,317 @@
+#!/bin/sh
+
+# This is a the master build script - it is intended to be run by parabuild
+# It is called by a wrapper script in the shared repository which sets up
+# the environment from the various BuildParams files and does all the build
+# result post-processing.
+#
+# PLEASE NOTE:
+#
+# * This script is interpreted on three platforms, including windows and cygwin
+# Cygwin can be tricky....
+# * The special style in which python is invoked is intentional to permit
+# use of a native python install on windows - which requires paths in DOS form
+# * This script relies heavily on parameters defined in BuildParams
+# * The basic convention is that the build name can be mapped onto a mercurial URL,
+# which is also used as the "branch" name.
+
+build_dir_Darwin()
+{
+ echo build-darwin-i386
+}
+
+build_dir_Linux()
+{
+ echo viewer-linux-i686-$(echo $1 | tr A-Z a-z)
+}
+
+build_dir_CYGWIN()
+{
+ echo build-vc80
+}
+
+installer_Darwin()
+{
+ ls -1td "$(build_dir_Darwin Release)/newview/"*.dmg 2>/dev/null | sed 1q
+}
+
+installer_Linux()
+{
+ ls -1td "$(build_dir_Linux Release)/newview/"*.tar.bz2 2>/dev/null | sed 1q
+}
+
+installer_CYGWIN()
+{
+ d=$(build_dir_CYGWIN Release)
+ p=$(sed 's:.*=::' "$d/newview/Release/touched.bat")
+ echo "$d/newview/Release/$p"
+}
+
+pre_build()
+{
+ local variant="$1"
+ local build_dir="$2"
+ begin_section "Pre$variant"
+ #export PATH="/cygdrive/c/Program Files/Microsoft Visual Studio 8/Common7/IDE/:$PATH"
+ python develop.py \
+ --incredibuild \
+ --unattended \
+ -t $variant \
+ -G "$cmake_generator" \
+ configure \
+ -DGRID:STRING="$viewer_grid" \
+ -DVIEWER_CHANNEL:STRING="$viewer_channel" \
+ -DVIEWER_LOGIN_CHANNEL:STRING="$login_channel" \
+ -DINSTALL_PROPRIETARY:BOOL=ON \
+ -DLOCALIZESETUP:BOOL=ON \
+ -DPACKAGE:BOOL=ON
+ -DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE
+ end_section "Pre$variant"
+}
+
+build()
+{
+ local variant="$1"
+ local build_dir="$2"
+ if $build_viewer
+ then
+ begin_section "Viewer$variant"
+ if python develop.py \
+ --incredibuild \
+ --unattended \
+ -t $variant \
+ -G "$cmake_generator" \
+ build package
+# && \
+# python develop.py \
+# --incredibuild \
+# --unattended \
+# -t $variant \
+# -G "$cmake_generator" \
+# build package
+ then
+ echo true >"$build_dir"/build_ok
+ else
+ echo false >"$build_dir"/build_ok
+ fi
+ end_section "Viewer$variant"
+ fi
+}
+
+# This is called from the branch independent script upon completion of all platform builds.
+build_docs()
+{
+ begin_section Docs
+ # Stub code to generate docs
+ echo Hello world > documentation.txt
+ upload_item docs documentation.txt text/plain
+ end_section Docs
+}
+
+# Check to see if we were invoked from the wrapper, if not, re-exec ourselves from there
+if [ "x$arch" = x ]
+then
+ top=`hg root`
+ if [ -x "$top/../buildscripts/hg/bin/build.sh" ]
+ then
+ exec "$top/../buildscripts/hg/bin/build.sh" "$top"
+ elif [ -r "$top/README" ]
+ then
+ cat "$top/README"
+ exit 1
+ else
+ cat <<EOF
+This script, if called in a development environment, requires that the branch
+independent build script repository be checked out next to this repository.
+This repository is located at http://hg.secondlife.com/buildscripts
+EOF
+ exit 1
+ fi
+fi
+
+# Check to see if we're skipping the platform
+eval '$build_'"$arch" || pass
+
+# Run the version number update script
+# File no longer exists in code-sep branch, so let's make sure it exists in order to use it.
+if test -f scripts/update_version_files.py ; then
+ begin_section UpdateVer
+ scripts/update_version_files.py \
+ --channel="$viewer_channel" \
+ --server_channel="$server_channel" \
+ --revision=$revision \
+ --verbose \
+ || fail update_version_files.py
+ end_section UpdateVer
+fi
+
+# Now retrieve the version for use in the version manager
+# First three parts only, $revision will be appended automatically.
+build_viewer_update_version_manager_version=`scripts/get_version.py --viewer-version | sed 's/\.[0-9]*$//'`
+
+# Now run the build
+cd indra
+succeeded=true
+build_processes=
+last_built_variant=
+for variant in $variants
+do
+ eval '$build_'"$variant" || continue
+ eval '$build_'"$arch"_"$variant" || continue
+
+ # Only the last built arch is available for upload
+ last_built_variant="$variant"
+
+ begin_section "Do$variant"
+ build_dir=`build_dir_$arch $variant`
+ build_dir_stubs="$build_dir/win_setup/$variant"
+ rm -rf "$build_dir"
+ mkdir -p "$build_dir"
+ if pre_build "$variant" "$build_dir" >> "$build_log" 2>&1
+ then
+ if $build_link_parallel
+ then
+ begin_section BuildParallel
+ ( build "$variant" "$build_dir" > "$build_dir/build.log" 2>&1 ) &
+ build_processes="$build_processes $!"
+ end_section BuildParallel
+ elif $build_coverity
+ then
+ mkdir -p "$build_dir/cvbuild"
+ coverity_config=`cygpath --windows "$coverity_dir/config/coverity_config.xml"`
+ coverity_tmpdir=`cygpath --windows "$build_dir/cvbuild"`
+ coverity_root=`cygpath --windows "$top/latest"`
+ case "$variant" in
+ Release)
+ begin_section Coverity
+ begin_section CovBuild
+ "$coverity_dir"/bin/cov-build\
+ --verbose 4 \
+ --config "$coverity_config"\
+ --dir "$coverity_tmpdir"\
+ python develop.py -t $variant -G "$cmake_generator" build "$coverity_product"\
+ >> "$build_log" 2>&1\
+ &&\
+ end_section CovBuild\
+ &&\
+ begin_section CovAnalyze\
+ &&\
+ "$coverity_dir"/bin/cov-analyze\
+ --cxx\
+ --security\
+ --concurrency\
+ --dir "$coverity_tmpdir"\
+ >> "$build_log" 2>&1\
+ &&\
+ end_section CovAnalyze\
+ &&\
+ begin_section CovCommit\
+ &&\
+ "$coverity_dir"/bin/cov-commit-defects\
+ --product "$coverity_product"\
+ --dir "$coverity_tmpdir"\
+ --remote "$coverity_server"\
+ --strip-path "$coverity_root"\
+ --target "$branch/$arch"\
+ --version "$revision"\
+ --description "$repo: $variant $revision"\
+ --user admin --password admin\
+ >> "$build_log" 2>&1\
+ || record_failure "Coverity Build Failed"
+ # since any step could have failed, rely on the enclosing block to close any pending sub-blocks
+ end_section Coverity
+ ;;
+ esac
+ if test -r "$build_dir"/cvbuild/build-log.txt
+ then
+ upload_item log "$build_dir"/cvbuild/build-log.txt text/plain
+ fi
+ else
+ begin_section "Build$variant"
+ build "$variant" "$build_dir" >> "$build_log" 2>&1
+ begin_section Tests
+ grep --line-buffered "^##teamcity" "$build_log"
+ end_section Tests
+ if `cat "$build_dir/build_ok"`
+ then
+ echo so far so good.
+ else
+ record_failure "Build of \"$variant\" failed."
+ fi
+ end_section "Build$variant"
+ fi
+ else
+ record_failure "Build Prep for \"$variant\" failed."
+ fi
+ end_section "Do$variant"
+done
+
+# If we are building variants in parallel, wait, then collect results.
+# This requires that the build dirs are variant specific
+if $build_link_parallel && [ x"$build_processes" != x ]
+then
+ begin_section WaitParallel
+ wait $build_processes
+ for variant in $variants
+ do
+ eval '$build_'"$variant" || continue
+ eval '$build_'"$arch"_"$variant" || continue
+
+ begin_section "Build$variant"
+ build_dir=`build_dir_$arch $variant`
+ build_dir_stubs="$build_dir/win_setup/$variant"
+ cat "$build_dir/build.log" >> "$build_log"
+ if `cat "$build_dir/build_ok"`
+ then
+ echo so far so good.
+ else
+ record_failure "Parallel build of \"$variant\" failed."
+ fi
+ begin_section Tests
+ tee -a $build_log < "$build_dir/build.log" | grep --line-buffered "^##teamcity"
+ end_section Tests
+ end_section "Build$variant"
+ done
+ end_section WaitParallel
+fi
+
+# check status and upload results to S3
+if $succeeded
+then
+ if $build_viewer
+ then
+ begin_section Upload
+ # Upload installer - note that ONLY THE FIRST ITEM uploaded as "installer"
+ # will appear in the version manager.
+ package=$(installer_$arch)
+ if [ x"$package" = x ] || test -d "$package"
+ then
+ # Coverity doesn't package, so it's ok, anything else is fail
+ succeeded=$build_coverity
+ else
+ upload_item installer "$package" binary/octet-stream
+ upload_item quicklink "$package" binary/octet-stream
+
+ # Upload crash reporter files.
+ case "$last_built_variant" in
+ Release)
+ for symbolfile in $symbolfiles
+ do
+ upload_item symbolfile "$build_dir/$symbolfile" binary/octet-stream
+ done
+ ;;
+ esac
+
+ # Upload stub installers
+ upload_stub_installers "$build_dir_stubs"
+ fi
+ end_section Upload
+ else
+ echo skipping viewer
+ fi
+else
+ echo skipping upload of build results due to failed build.
+fi
+
+# The branch independent build.sh script invoking this script will finish processing
+$succeeded || exit 1