From 664f27380c285763a91e7deeaf012e576c9ab668 Mon Sep 17 00:00:00 2001
From: Christian Goetze <cg@lindenlab.com>
Date: Mon, 13 Apr 2009 21:03:44 +0000
Subject: [PATCH] merge -r116796:116932
 svn+ssh://svn.lindenlab.com/svn/linden/branches/http-texture/http-texture-10
 DEV-8668 (llkdu) DEV-30348 (set development default channel to
 LindenDeveloper)

---
 indra/cmake/Variables.cmake                   |   2 +-
 indra/newview/viewer_manifest.py              |  11 +-
 .../automated_build_scripts/opensrc-build.sh  | 391 ++++++++++++++++++
 3 files changed, 401 insertions(+), 3 deletions(-)
 create mode 100755 scripts/automated_build_scripts/opensrc-build.sh

diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 5868e4d07e0..2fbd5a3fb87 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -79,7 +79,7 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
 set(GRID agni CACHE STRING "Target Grid")
 
 set(VIEWER ON CACHE BOOL "Build Second Life viewer.")
-set(VIEWER_CHANNEL "Developer" CACHE STRING "Viewer Channel Name")
+set(VIEWER_CHANNEL "LindenDeveloper" CACHE STRING "Viewer Channel Name")
 set(VIEWER_LOGIN_CHANNEL ${VIEWER_CHANNEL} CACHE STRING "Fake login channel for A/B Testing")
 
 set(STANDALONE OFF CACHE BOOL "Do not use Linden-supplied prebuilt libraries.")
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index c79c2aedf1d..bf2067968b9 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -447,8 +447,15 @@ def construct(self):
                 self.path("vivox-runtime/universal-darwin/libvivoxsdk.dylib", "libvivoxsdk.dylib")
                 self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice")
 
-                # llkdu dynamic library
-                self.path("../../libraries/universal-darwin/lib_release/libllkdu.dylib", "libllkdu.dylib")
+                # need to get the kdu dll from any of the build directories as well
+                try:
+                    self.path(self.find_existing_file('../llkdu/%s/libllkdu.dylib' % self.args['configuration'],
+                        "../../libraries/universal-darwin/lib_release/libllkdu.dylib"),
+                        dst='libllkdu.dylib')
+                    pass
+                except:
+                    print "Skipping libllkdu.dylib"
+                    pass
                 
                 #libfmodwrapper.dylib
                 self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
diff --git a/scripts/automated_build_scripts/opensrc-build.sh b/scripts/automated_build_scripts/opensrc-build.sh
new file mode 100755
index 00000000000..c1b592a9721
--- /dev/null
+++ b/scripts/automated_build_scripts/opensrc-build.sh
@@ -0,0 +1,391 @@
+#!/bin/sh
+
+# This is the build script used by Linden Lab's autmated build system.
+#
+
+set -x
+
+export PATH=/bin:/usr/bin:$PATH
+arch=`uname | cut -b-6`
+here=`echo $0 | sed 's:[^/]*$:.:'`
+year=`date +%Y`
+branch=`svn info | grep '^URL:' | sed 's:.*/::'`
+revision=`svn info | grep '^Revision:' | sed 's/.*: //'`
+
+[ x"$WGET_CACHE" = x ] && export WGET_CACHE=/var/tmp/parabuild/wget
+[ x"$S3GET_URL" = x ]  && export S3GET_URL=http://viewer-source-downloads.s3.amazonaws.com/$year
+[ x"$S3PUT_URL" = x ]  && export S3PUT_URL=https://s3.amazonaws.com/viewer-source-downloads/$year
+[ x"$PUBLIC_URL" = x ] && export PUBLIC_URL=http://secondlife.com/developers/opensource/downloads/$year
+[ x"$PUBLIC_EMAIL" = x ] && export PUBLIC_EMAIL=sldev-commits@lists.secondlife.com
+
+# Make sure command worked and bail out if not, reporting failure to parabuild
+fail()
+{
+  release_lock
+  echo "BUILD FAILED" $@
+  exit 1
+}
+  
+pass() 
+{ 
+  release_lock
+  echo "BUILD SUCCESSFUL"
+  exit 0
+}
+
+# Locking to avoid contention with u-s-c
+LOCK_CREATE=/usr/bin/lockfile-create
+LOCK_TOUCH=/usr/bin/lockfile-touch
+LOCK_REMOVE=/usr/bin/lockfile-remove
+LOCK_PROCESS=
+
+locking_available()
+{
+  test -x "$LOCK_CREATE"\
+    -a -x "$LOCK_TOUCH"\
+    -a -x "$LOCK_REMOVE"
+}
+
+acquire_lock()
+{
+  if locking_available 
+  then
+    if "$LOCK_CREATE" /var/lock/update-system-config --retry 99
+    then
+      "$LOCK_TOUCH" /var/lock/update-system-config &
+      LOCK_PROCESS="$!"
+    else
+      fail acquire lock
+    fi
+  else
+    true
+  fi
+}
+
+release_lock()
+{
+  if locking_available
+  then
+    if test x"$LOCK_PROCESS" != x
+    then
+      kill "$LOCK_PROCESS"
+      "$LOCK_REMOVE" /var/lock/update-system-config
+    else
+      echo No Lock Acquired >&2
+    fi
+  else
+    true
+  fi
+}
+
+get_asset()
+{
+  mkdir -p "$WGET_CACHE" || fail creating WGET_CACHE
+  local tarball=`basename "$1"`
+  test -r "$WGET_CACHE/$tarball" || ( cd "$WGET_CACHE" && curl --location --remote-name "$1" || fail getting $1 )
+  case "$tarball" in
+  *.zip) unzip -qq -d .. -o "$WGET_CACHE/$tarball" || fail unzip $tarball ;;
+  *.tar.gz|*.tgz) tar -C .. -xzf  "$WGET_CACHE/$tarball" || fail untar $tarball ;;
+  *) fail unrecognized filetype: $tarball ;;
+  esac
+}
+
+s3_available()
+{
+  test -x "$helpers/s3get.sh" -a -x "$helpers/s3put.sh" -a -r "$helpers/s3curl.pl"
+}
+
+build_dir_Darwin()
+{
+  echo build-darwin-universal
+}
+
+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"
+}
+
+# deal with aborts etc..
+trap fail 1 2 3 14 15
+
+# Check location
+cd "$here/../.."
+
+test -x ../linden/scripts/automated_build_scripts/opensrc-build.sh\
+ || fail 'The parent dir of your checkout needs to be named "linden"' 
+
+. doc/asset_urls.txt
+get_asset "$SLASSET_ART"
+
+
+# Set up platform specific stuff
+case "$arch" in
+
+# Note that we can only build the "Release" variant for Darwin, because of a compiler bug:
+# ld: bl out of range (-16777272 max is +/-16M)
+#  from __static_initialization_and_destruction_0(int, int)at 0x033D319C
+#  in __StaticInit of
+#  indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/llvoicevisualizer.o
+#  to ___cxa_atexit$island_2 at 0x023D50F8
+#  in __text of
+#  indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/Second Life
+#  in __static_initialization_and_destruction_0(int, int)
+#  from indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/llvoicevisualizer.o
+
+Darwin)
+  helpers=/usr/local/buildscripts/generic_vc
+  variants="Release"
+  cmake_generator="Xcode"
+  fmod=fmodapi375mac
+  fmod_tar="$fmod.zip"
+  fmod_so=libfmod.a
+  fmod_lib=lib
+  target_dirs="libraries/universal-darwin/lib_debug
+               libraries/universal-darwin/lib_release
+               libraries/universal-darwin/lib_release_client"
+  other_archs="$S3GET_URL/$branch/$revision/CYGWIN $S3GET_URL/$branch/$revision/Linux"
+  mail="$helpers"/mail.py
+  all_done="$helpers"/all_done.py
+  get_asset "$SLASSET_LIBS_DARWIN"
+  ;;
+
+CYGWIN)
+  helpers=/cygdrive/c/buildscripts
+  variants="Debug RelWithDebInfo Release"
+  #variants="Release"
+  cmake_generator="vc80"
+  fmod=fmodapi375win
+  fmod_tar=fmodapi375win.zip
+  fmod_so=fmodvc.lib
+  fmod_lib=lib
+  target_dirs="libraries/i686-win32/lib/debug
+               libraries/i686-win32/lib/release"
+  other_archs="$S3GET_URL/$branch/$revision/Darwin $S3GET_URL/$branch/$revision/Linux"
+  export PATH="/cygdrive/c/Python25:/cygdrive/c/Program Files/Cmake 2.6/bin":$PATH
+  export PERL="/cygdrive/c/Perl/bin/perl.exe"
+  export S3CURL="C:\\buildscripts\s3curl.pl"
+  export CURL="C:\\cygwin\\bin\\curl.exe"
+  mail="C:\\buildscripts\\mail.py"
+  all_done="C:\\buildscripts\\all_done.py"
+  get_asset "$SLASSET_LIBS_WIN32"
+  ;;
+
+Linux)
+  helpers=/var/opt/parabuild/buildscripts/generic_vc
+  [ x"$CXX" = x ] && test -x /usr/bin/g++-4.1 && export CXX=/usr/bin/g++-4.1
+  acquire_lock
+  variants="Debug RelWithDebInfo Release"
+  #variants="Release"
+  cmake_generator="Unix Makefiles"
+  fmod=fmodapi375linux
+  fmod_tar="$fmod".tar.gz
+  fmod_so=libfmod-3.75.so
+  fmod_lib=.
+  target_dirs="libraries/i686-linux/lib_debug
+               libraries/i686-linux/lib_release
+               libraries/i686-linux/lib_release_client"
+  other_archs="$S3GET_URL/$branch/$revision/Darwin $S3GET_URL/$branch/$revision/CYGWIN"
+  mail="$helpers"/mail.py
+  all_done="$helpers"/all_done.py
+  # Change the DISTCC_DIR to be somewhere that the parabuild process can write to
+  if test -r /etc/debian_version
+  then
+    [ x"$DISTCC_DIR" = x ] && export DISTCC_DIR=/var/tmp/parabuild
+    case `cat /etc/debian_version` in
+    3.*) [ x"$DISTCC_HOSTS" = x ]\
+         && export DISTCC_HOSTS="build-linux-1
+                                 build-linux-2
+                                 build-linux-3
+                                 build-linux-4
+                                 build-linux-5" ;;
+    4.*) [ x"$DISTCC_HOSTS" = x ]\
+         && export DISTCC_HOSTS="build-linux-6
+                                 build-linux-7
+                                 build-linux-8
+                                 build-linux-9" ;;
+    esac
+  fi
+
+  get_asset "$SLASSET_LIBS_LINUXI386"
+  ;;
+
+*) fail undefined $arch ;;
+esac
+
+get_asset "http://www.fmod.org/index.php/release/version/$fmod_tar"
+
+# Special case for Mac...
+case "$arch" in
+
+Darwin)
+  if lipo -create -output "../$fmod"/api/$fmod_lib/libfmod-universal.a\
+     "../$fmod"/api/$fmod_lib/libfmod.a\
+     "../$fmod"/api/$fmod_lib/libfmodx86.a
+  then
+    mv "../$fmod"/api/$fmod_lib/libfmod.a "../$fmod"/api/$fmod_lib/libfmodppc.a
+    mv "../$fmod"/api/$fmod_lib/libfmod-universal.a "../$fmod"/api/$fmod_lib/libfmod.a
+    echo Created fat binary
+  else
+    fail running lipo
+  fi
+  ;;
+
+esac
+
+# ensure helpers are up to date
+( cd "$helpers" && svn up )
+
+# First, go into the directory where the code was checked out by Parabuild
+cd indra
+
+# This is the way it works now, but it will soon work on a variant dependent way
+for target_dir in $target_dirs
+do
+  mkdir -p "../$target_dir"
+  cp -f "../../$fmod/api/$fmod_lib/$fmod_so"  "../$target_dir"
+done
+mkdir -p "../libraries/include"
+cp -f "../../$fmod/api/inc/"*  "../libraries/include"
+
+# Special Windows case
+test -r "../../$fmod/api/fmod.dll" && cp -f "../../$fmod/api/fmod.dll" newview
+
+# Now run the build command over all variants
+succeeded=true
+cp /dev/null build.log
+
+### TEST CODE - remove when done
+### variants=
+### echo "Artificial build failure to test notifications" > build.log
+### succeeded=false
+### END TEST CODE
+
+for variant in $variants
+do
+  build_dir=`build_dir_$arch $variant`
+  rm -rf "$build_dir"
+  # This is the way it will work in future
+  #for target_dir in $target_dirs
+  #do
+  #  mkdir -p "$build_dir/$target_dir"
+  #  cp "../../$fmod/api/$fmod_lib/$fmod_so"  "$build_dir/$target_dir"
+  #done
+  #mkdir -p "$build_dir/libraries/include"
+  #cp "../../$fmod/api/inc/"*  "$build_dir/libraries/include"
+  echo "==== $variant ====" >> build.log
+  if ./develop.py \
+    --unattended \
+    --incredibuild \
+    -t $variant \
+    -G "$cmake_generator" \
+   configure \
+    -DPACKAGE:BOOL=ON >>build.log 2>&1
+  then
+    if ./develop.py\
+         --unattended\
+         --incredibuild \
+         -t $variant\
+         -G "$cmake_generator" \
+       build package >>build.log 2>&1
+    then
+      # run tests if needed
+      true
+    else
+      succeeded=false
+    fi
+  else
+    succeeded=false
+  fi
+done
+
+# check statuis and upload results to S3
+subject=
+if $succeeded
+then
+  package=`installer_$arch`
+  test -r "$package" || fail not found: $package
+  package_file=`echo $package | sed 's:.*/::'`
+  if s3_available
+  then
+    echo "$PUBLIC_URL/$branch/$revision/$package_file" > "$arch"
+    echo "$PUBLIC_URL/$branch/$revision/good-build.$arch" >> "$arch"
+    "$helpers/s3put.sh" "$package" "$S3PUT_URL/$branch/$revision/$package_file"    binary/octet-stream\
+	   || fail Uploading "$package"
+    "$helpers/s3put.sh" build.log  "$S3PUT_URL/$branch/$revision/good-build.$arch" text/plain\
+	   || fail Uploading build.log
+    "$helpers/s3put.sh" "$arch"    "$S3PUT_URL/$branch/$revision/$arch"            text/plain\
+	   || fail Uploading token file
+    if python "$all_done"\
+          curl\
+         "$S3GET_URL/$branch/$revision/$arch"\
+          $other_archs > message
+    then
+      subject="Successful Build for $branch ($revision)"
+    fi
+  else
+    true s3 is not available
+  fi
+else
+  if s3_available
+  then
+    "$helpers/s3put.sh" build.log "$S3PUT_URL/$branch/$revision/failed-build.$arch" text/plain\
+	   || fail Uploading build.log
+    subject="Failed Build for $branch ($revision) on $arch"
+    cat >message <<EOF
+Build for $branch ($revision) failed for $arch.
+Please see the build log for details:
+
+$PUBLIC_URL/$branch/$revision/failed-build.$arch
+
+EOF
+  else
+    true s3 is not available
+  fi
+fi
+
+# We have something to say...
+if [ x"$subject" != x ]
+then
+  # Extract change list since last build
+  if [ x"$PARABUILD_CHANGE_LIST_NUMBER" = x ]
+  then
+    echo "No change information available" >> message
+  elif [ x"$PARABUILD_PREVIOUS_CHANGE_LIST_NUMBER" = x ]
+  then
+    ( cd .. && svn log --verbose --stop-on-copy --limit 50 ) >>message
+  else
+    ( cd .. && svn log --verbose -r"$PARABUILD_PREVIOUS_CHANGE_LIST_NUMBER":"$PARABUILD_CHANGE_LIST_NUMBER" ) >>message
+  fi
+  # $PUBLIC_EMAIL can be a list, so no quotes
+  python "$mail" "$subject" $PUBLIC_EMAIL <message
+fi
+
+if $succeeded
+then
+  pass
+else
+  fail
+fi
+
-- 
GitLab