#!/bin/bash # -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- # ***** BEGIN LICENSE BLOCK ***** # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License # for the specific language governing rights and limitations under the # License. # # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Mozilla Corporation. # Portions created by the Initial Developer are Copyright (C) 2006. # the Initial Developer. All Rights Reserved. # # Contributor(s): # Bob Clary # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** if [[ -z "$LIBRARYSH" ]]; then source $TEST_DIR/bin/library.sh fi export MOZ_CVS_FLAGS="-z3 -q" export MOZILLA_OFFICIAL=1 export BUILD_OFFICIAL=1 if [[ -z "$CVSROOT" ]]; then if grep -q buildbot@qm ~/.ssh/id_dsa.pub; then export CVSROOT=:ext:unittest@cvs.mozilla.org:/cvsroot export CVS_RSH=ssh else export CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot fi fi # # options processing # options="p:b:T:e:" usage() { cat < /dev/null` fi if [[ -z "$VC71DIR" ]]; then export VC71DIR=`regtool get "$MSVC71KEY/ProductDir" 2> /dev/null` fi if [[ -z "$VC8DIR" ]]; then export VC8DIR=`regtool get "$MSVC8KEY/ProductDir" 2> /dev/null` fi if [[ -z "$VC8EXPRESSDIR" ]]; then export VC8EXPRESSDIR=`regtool get "$MSVC8EXPRESSKEY/ProductDir" 2> /dev/null` fi if [[ -z "$VC9DIR" ]]; then export VC9DIR=`regtool get "$MSVC9KEY/ProductDir" 2> /dev/null` fi if [[ -z "$VC9EXPRESSDIR" ]]; then export VC9EXPRESSDIR=`regtool get "$MSVC9EXPRESSKEY/ProductDir" 2> /dev/null` fi case $branch in 1.8.0) # only msvc6 supported if [[ -n "$VC6DIR" ]]; then startbat=start-msvc6.bat fi ;; 1.8.1) # msvc6 official, vc7.1 (2003) supported if [[ -n "$VC6DIR" ]]; then startbat=start-msvc6.bat elif [[ -n "$VC71DIR" ]]; then startbat=start-msvc71.bat fi ;; *) # msvc8 official, vc7.1, (2003), vc9 (2009) supported # for 1.9.0 and later if [[ -n "$VC8DIR" ]]; then startbat=start-msvc8.bat # set VCINSTALLDIR for use in detecting the MS CRT # source when building jemalloc. VCINSTALLDIR=$VC8DIR elif [[ -n "$VC8EXPRESSDIR" ]]; then startbat=start-msvc8.bat elif [[ -n "$VC71DIR" ]]; then startbat=start-msvc71.bat elif [[ -n "$VC9DIR" || -n "$VC9EXPRESSDIR" ]]; then startbat=start-msvc9.bat fi ;; *) ;; esac if [[ -z "$startbat" ]]; then myexit 2 fi startbat="$mozillabuild/$startbat" # The start batch file changes directory and starts an msys bash shell # which will block its execution. Create a working copy without the # bash invocation to just set the environment variables and save them # to ~/mozilla-build-env.dat. varsbat=`echo $startbat | sed 's|start|vars|'`; if [[ ! -e "$varsbat" ]]; then sed 's|\(^cd.*USERPROFILE.*\)|rem \1|; s|\(^.*MOZILLABUILD.*bash.*\)|\1 -c "set > ~/mozilla-build-env.dat"|' $startbat > $varsbat fi # call the windows command line to execute the new batch file varsbat=`cygpath -w "$varsbat"` cmd /c "$varsbat" # escape the windows path delimiter \ in the mozilla-build-env.dat sed -i.bak 's|\\|\\\\\\\\|g' ~/mozilla-build-env.dat # set IFS to bel in order to read full line including leading whitespace. saveIFS=$IFS IFS=`echo -e '\007'` # read from ~/mozilla-build-env.dat without forking a process # see "Advanced Bash-Scripting Guide" 19-4. Avoiding a subshell exec 3< ~/mozilla-build-env.dat while read line <&3; do if ! echo "$line" | grep -q '^[a-zA-Z_0-9]*=[^(]'; then # skip function definitions continue fi name="`echo $line | sed 's|\(^[a-zA-Z_0-9]*\)=.*|\1|'`" if [[ "$name" == "_" ]]; then continue fi if [[ "$name" == "BASH_EXECUTION_STRING" ]]; then continue fi eval "var=\$$name" # remove any single quotes around the value value="`echo $line | sed \"s|^[a-zA-Z_0-9]*='*\([^']*\)'*|\1|\"`" if [[ -z "$var" ]]; then # variable is not defined, i.e. was defined by the batch file. # export it into the current process. eval "export $name=\"$value\"" elif [[ "$name" == "PATH" ]]; then # convert msys relative paths to paths relative to /c/. value=`echo "$value" | sed 's|/local/bin|/c/mozilla-build/msys/local/bin|' | sed 's|:/usr/local/bin:/mingw/bin:/bin:|:/c/mozilla-build/msys/usr/local/bin:/c/mozilla-build/msys/mingw/bin:/c/mozilla-build/msys/bin:|'` eval "export BUILDPATH=\"$value:$PATH\"" fi done IFS=$saveIFS # close mozilla-build-env.dat exec 3>&- echo moztools Location: $MOZ_TOOLS # now convert TEST_DIR and BUILDDIR to cross compatible paths using # the common cygdrive prefix for cygwin and msys TEST_DIR_WIN=`cygpath -w $TEST_DIR` BUILDDIR_WIN=`cygpath -w $BUILDDIR` TEST_DIR=`cygpath -u $TEST_DIR_WIN` BUILDDIR=`cygpath -u $BUILDDIR_WIN` ;; linux) export BUILDDIR=${BUILDDIR:-/work/mozilla/builds} export buildbash="/bin/bash" export bashlogin=-l # if a 64 bit linux system, assume the # compiler is in the standard reference # location /tools/gcc/bin/ case "$TEST_PROCESSORTYPE" in *64) export PATH=/tools/gcc/bin:$PATH ;; esac ;; darwin) export BUILDDIR=${BUILDDIR:-/work/mozilla/builds} export buildbash="/bin/bash" export bashlogin=-l ;; *) ;; esac export SHELL=$buildbash export CONFIG_SHELL=$buildbash export CONFIGURE_ENV_ARGS=$buildbash export BUILDTREE="${BUILDTREE:-$BUILDDIR/$branch$extra}" # # extras can't be placed in mozconfigs since not all parts # of the build system use mozconfig (e.g. js shell) and since # the obj directory is not configurable for them as well thus # requiring separate source trees # case "$extra" in -too-much-gc) export XCFLAGS="-DWAY_TOO_MUCH_GC=1" export CFLAGS="-DWAY_TOO_MUCH_GC=1" export CXXFLAGS="-DWAY_TOO_MUCH_GC=1" ;; -gcov) if [[ "$OSID" == "nt" ]]; then echo "NT does not support gcov" myexit 1 fi export CFLAGS="--coverage" export CXXFLAGS="--coverage" export XCFLAGS="--coverage" export OS_CFLAGS="--coverage" export LDFLAGS="--coverage" export XLDFLAGS="--coverage" export XLDOPTS="--coverage" ;; -jprof) ;; -narcissus) export XCFLAGS="-DNARCISSUS=1" export CFLAGS="-DNARCISSUS=1" export CXXFLAGS="-DNARCISSUS=1" ;; esac if [[ ! -d $BUILDTREE ]]; then echo "Build directory $BUILDTREE does not exist" myexit 2 fi # here project refers to either browser or mail # and is used to find mozilla/(browser|mail)/config/mozconfig if [[ $product == "firefox" ]]; then project=browser case $branch in 1.9.1) export TEST_MOZILLA_HG=${TEST_MOZILLA_HG:-http://hg.mozilla.org/releases/mozilla-1.9.1} ;; 1.9.2) export TEST_MOZILLA_HG=${TEST_MOZILLA_HG:-http://hg.mozilla.org/releases/mozilla-1.9.2} ;; 1.9.3) export TEST_MOZILLA_HG=${TEST_MOZILLA_HG:-http://hg.mozilla.org/mozilla-central} ;; esac export MOZCONFIG=${MOZCONFIG:-"$BUILDTREE/mozconfig-firefox-$OSID-$TEST_PROCESSORTYPE-$buildtype"} else echo "Assuming project=browser for product: $product" project=browser case $branch in 1.9.1) export TEST_MOZILLA_HG=${TEST_MOZILLA_HG:-http://hg.mozilla.org/releases/mozilla-1.9.1} ;; 1.9.2) export TEST_MOZILLA_HG=${TEST_MOZILLA_HG:-http://hg.mozilla.org/releases/mozilla-1.9.2} ;; 1.9.3) export TEST_MOZILLA_HG=${TEST_MOZILLA_HG:-http://hg.mozilla.org/mozilla-central} ;; esac export MOZCONFIG=${MOZCONFIG:-"$BUILDTREE/mozconfig-firefox-$OSID-$TEST_PROCESSORTYPE-$buildtype"} fi if [[ -n "$TEST_MOZILLA_HG" ]]; then export TEST_MOZILLA_HG_REV=${TEST_MOZILLA_HG_REV:-tip} fi # js shell builds if [[ $buildtype == "debug" ]]; then unset BUILD_OPT else export BUILD_OPT=1 fi case "$OSID" in darwin) export JS_EDITLINE=1 # required for mac ;; esac # end js shell builds # set default "data" variables to reduce need for data files. case $product in firefox) profilename=${profilename:-$product-$branch$extra-profile} profiledirectory=${profiledirectory:-/tmp/$product-$branch$extra-profile} userpreferences=${userpreferences:-$TEST_DIR/prefs/test-user.js} extensiondir=${extensiondir:-$TEST_DIR/xpi} executablepath=${executablepath:-$BUILDTREE/mozilla/$product-$buildtype/dist} ;; js) jsshellsourcepath=${jsshellsourcepath:-$BUILDTREE/mozilla/js/src} ;; esac if [[ -n "$datafiles" && ! -e $datafiles ]]; then # if there is not already a data file for this configuration, create it # this will save this configuration for the tester.sh and other scripts # which use datafiles for passing configuration values. echo product=\${product:-$product} >> $datafiles echo branch=\${branch:-$branch} >> $datafiles echo buildtype=\${buildtype:-$buildtype} >> $datafiles if [[ $product == "js" ]]; then echo jsshellsourcepath=\${jsshellsourcepath:-$jsshellsourcepath} >> $datafiles else echo profilename=\${profilename:-$profilename} >> $datafiles echo profiledirectory=\${profiledirectory:-$profiledirectory} >> $datafiles echo executablepath=\${executablepath:-$executablepath} >> $datafiles echo userpreferences=\${userpreferences:-$userpreferences} >> $datafiles echo extensiondir=\${extensiondir:-$extensiondir} >> $datafiles fi if [[ -n "$TEST_MOZILLA_HG" ]]; then echo TEST_MOZILLA_HG=\${TEST_MOZILLA_HG:-$TEST_MOZILLA_HG} >> $datafiles echo TEST_MOZILLA_HG_REV=\${TEST_MOZILLA_HG_REV:-$TEST_MOZILLA_HG_REV} >> $datafiles fi fi set | sed 's/^/environment: /' echo "mozconfig: $MOZCONFIG" cat $MOZCONFIG | sed 's/^/mozconfig: /' done