Merged in lindenlab/viewer-release
commit
445cd96293
1
.hgtags
1
.hgtags
|
|
@ -515,3 +515,4 @@ ae3297cdd03ab14f19f3811acbc4acd3eb600336 4.0.0-release
|
|||
e9d350764dfbf5a46229e627547ef5c1b1eeef00 4.0.2-release
|
||||
86dfba7ec4332c323025ebeacd8bf343ed0d8cfd 4.0.3-release
|
||||
0a5de9ec2cb868f367501024d8d6958c20869053 4.0.4-release
|
||||
450de775fff66a011be1a001acd117cc623c445d 4.0.5-release
|
||||
|
|
|
|||
126
BuildParams
126
BuildParams
|
|
@ -19,6 +19,8 @@ build_Linux_Debug = false
|
|||
build_Darwin_Debug = false
|
||||
build_Debug = false
|
||||
|
||||
# enable Doxygen building on Linux for TeamCity (it can be done manually on any platform)
|
||||
build_Linux_Doxygen = true
|
||||
|
||||
# Update Public Inworld Build Status Indicators (setting should mirror "public_build")
|
||||
email_status_this_is_os = true
|
||||
|
|
@ -60,7 +62,7 @@ viewer_channel = "Second Life Test"
|
|||
# the default sourceid should always be a null string:
|
||||
sourceid = ""
|
||||
# the additional_packages variable is a blank separated list of package prefixes:
|
||||
additional_packages = ""
|
||||
# additional_packages = ""
|
||||
# to set the special values for a package, create variables using each prefix:
|
||||
# additional_packages = "Foo Bar"
|
||||
# Foo_sourceid = "bingo"
|
||||
|
|
@ -71,127 +73,21 @@ additional_packages = ""
|
|||
# for the package in a setting that overrides the compiled-in value
|
||||
################################################################
|
||||
additional_packages = "EDU"
|
||||
Linux.additional_packages = ""
|
||||
|
||||
# The EDU package allows us to create a separate release channel whose expirations
|
||||
# are synchronized as much as possible with the academic year
|
||||
EDU_sourceid = ""
|
||||
EDU_viewer_channel_suffix = "edu"
|
||||
|
||||
# Notifications - to configure email notices, add a setting like this:
|
||||
# <username>_<reponame>.email = <email-address>
|
||||
# The EDU package allows us to create a separate release channel whose expirations
|
||||
# are synchronized as much as possible with the academic year
|
||||
EDU_sourceid = ""
|
||||
EDU_viewer_channel_suffix = "edu"
|
||||
|
||||
# ========================================
|
||||
# mesh-development
|
||||
# ========================================
|
||||
mesh-development.viewer_channel = "Project Viewer - Mesh"
|
||||
mesh-development.viewer_grid = aditi
|
||||
mesh-development.build_debug_release_separately = true
|
||||
mesh-development.build_CYGWIN_Debug = false
|
||||
mesh-development.build_viewer_update_version_manager = false
|
||||
|
||||
# ========================================
|
||||
# mesh-development-release-1-candidate
|
||||
# ========================================
|
||||
mesh-development-release-1-candidate.viewer_channel = "Project Viewer - Mesh"
|
||||
mesh-development-release-1-candidate.viewer_grid = agni
|
||||
mesh-development-release-1-candidate.build_debug_release_separately = true
|
||||
mesh-development-release-1-candidate.build_CYGWIN_Debug = false
|
||||
mesh-development-release-1-candidate.build_viewer_update_version_manager = false
|
||||
|
||||
# ========================================
|
||||
# mesh-development-rc
|
||||
# ========================================
|
||||
mesh-development-rc.viewer_channel = "Project Viewer - Mesh"
|
||||
mesh-development-rc.viewer_grid = agni
|
||||
mesh-development-rc.build_debug_release_separately = true
|
||||
mesh-development-rc.build_CYGWIN_Debug = false
|
||||
mesh-development-rc.build_viewer_update_version_manager = false
|
||||
|
||||
# ========================================
|
||||
# mesh-asset-deprecation
|
||||
# ========================================
|
||||
mesh-asset-deprecation.viewer_channel = "Project Viewer - Mesh Asset Deprecation"
|
||||
mesh-asset-deprecation.viewer_grid = aditi
|
||||
mesh-asset-deprecation.build_debug_release_separately = true
|
||||
mesh-asset-deprecation.build_CYGWIN_Debug = false
|
||||
mesh-asset-deprecation.build_viewer_update_version_manager = false
|
||||
|
||||
# ========================================
|
||||
# viewer-mesh
|
||||
# ========================================
|
||||
|
||||
viewer-mesh.build_viewer = true
|
||||
viewer-mesh.build_server = false
|
||||
viewer-mesh.build_Linux = true
|
||||
viewer-mesh.build_hg_bundle = true
|
||||
viewer-mesh.build_viewer_update_version_manager = false
|
||||
viewer-mesh.build_Debug = false
|
||||
viewer-mesh.build_RelWithDebInfo = false
|
||||
viewer-mesh.viewer_channel = "Project Viewer - Mesh"
|
||||
viewer-mesh.viewer_grid = aditi
|
||||
viewer-mesh.email = shining@lists.lindenlab.com
|
||||
|
||||
# =================================================================
|
||||
# asset delivery 2010 projects
|
||||
# =================================================================
|
||||
viewer-asset-delivery.viewer_channel = "Second Life Development"
|
||||
viewer-asset-delivery.build_viewer_update_version_manager = false
|
||||
viewer-asset-delivery.email = monty@lindenlab.com
|
||||
viewer-asset-delivery.build_server = false
|
||||
viewer-asset-delivery.build_server_tests = false
|
||||
|
||||
viewer-asset-delivery-metrics.viewer_channel = "Second Life Development"
|
||||
viewer-asset-delivery-metrics.build_viewer_update_version_manager = false
|
||||
viewer-asset-delivery-metrics.email = monty@lindenlab.com
|
||||
viewer-asset-delivery-metrics.build_server = false
|
||||
viewer-asset-delivery-metrics.build_server_tests = false
|
||||
|
||||
# ========================================
|
||||
# Simon says
|
||||
# ========================================
|
||||
simon_viewer-dev-private.public_build = false
|
||||
simon_viewer-dev-private.email_status_this_is_os = false
|
||||
# Notifications - to configure email notices use the TeamCity parameter
|
||||
# setting screen for your project or build configuration to set the
|
||||
# environment variable 'email' to a space-separated list of email addresses
|
||||
|
||||
|
||||
# ========================================
|
||||
# Vir
|
||||
# ========================================
|
||||
vir-project-1.viewer_channel = "Second Life Release"
|
||||
|
||||
# ========================================
|
||||
# Merov
|
||||
# ========================================
|
||||
merov-viewer-maint-2287.viewer_channel = "Second Life Project Merchant Outbox"
|
||||
merov-viewer-maint-2287.login_channel = "Second Life Project Merchant Outbox"
|
||||
merov-viewer-maint-2287.build_viewer_update_version_manager = false
|
||||
merov-viewer-maint-2287.codeticket_add_context = false
|
||||
|
||||
# ========================================
|
||||
# THX-1138 / Runway projects
|
||||
# ========================================
|
||||
viewer-thx1138-runway-shared.viewer_channel = "Project Viewer - THX-1138 Runway"
|
||||
viewer-thx1138-runway-shared.viewer_grid = uma
|
||||
viewer-thx1138-runway-shared.build_debug_release_separately = true
|
||||
viewer-thx1138-runway-shared.build_CYGWIN_Debug = false
|
||||
viewer-thx1138-runway-shared.build_viewer_update_version_manager = false
|
||||
|
||||
viewer-thx1138.viewer_channel = "Project Viewer - THX-1138"
|
||||
viewer-thx1138.viewer_grid = uma
|
||||
viewer-thx1138.build_debug_release_separately = true
|
||||
viewer-thx1138.build_CYGWIN_Debug = false
|
||||
viewer-thx1138.build_viewer_update_version_manager = false
|
||||
|
||||
runway-merge.viewer_channel = "Project Viewer - Runway Merge"
|
||||
runway-merge.viewer_grid = agni
|
||||
runway-merge.build_debug_release_separately = true
|
||||
runway-merge.build_CYGWIN_Debug = false
|
||||
runway-merge.build_viewer_update_version_manager = false
|
||||
|
||||
runway.viewer_channel = "Project Viewer - Runway"
|
||||
runway.viewer_grid = agni
|
||||
runway.build_debug_release_separately = true
|
||||
runway.build_CYGWIN_Debug = false
|
||||
runway.build_viewer_update_version_manager = false
|
||||
# eof
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
Second Life Viewer
|
||||
====================
|
||||
|
||||
This project manages the source code for the
|
||||
[Second Life](https://www.secondlife.com) Viewer.
|
||||
|
||||
This source is available as open source; for details on licensing, see
|
||||
[the licensing page on the Second Life wiki](https://wiki.secondlife.com/wiki/Linden_Lab_Official:Second_Life_Viewer_Licensing_Program)
|
||||
|
||||
For information on how to use and contribute to this, see
|
||||
[the open source portal on the wiki](https://wiki.secondlife.com/wiki/Open_Source_Portal).
|
||||
|
||||
To download the current default version, visit
|
||||
[the download page](https://secondlife.com/support/downloads). For
|
||||
even newer versions try
|
||||
[the Alternate Viewers page](https://wiki.secondlife.com/wiki/Linden_Lab_Official:Alternate_Viewers)
|
||||
|
||||
173
build.sh
173
build.sh
|
|
@ -1,10 +1,13 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This is a the master build script - it is intended to be run by the Linden
|
||||
# Lab build farm
|
||||
# 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.
|
||||
# This is the custom build script for the viewer
|
||||
#
|
||||
# It must be run by the Linden Lab build farm shared buildscript because
|
||||
# it relies on the environment that sets up, functions it provides, and
|
||||
# the build result post-processing it does.
|
||||
#
|
||||
# The shared buildscript build.sh invokes this because it is named 'build.sh',
|
||||
# which is the default custom build script name in buildscripts/hg/BuildParams
|
||||
#
|
||||
# PLEASE NOTE:
|
||||
#
|
||||
|
|
@ -12,7 +15,6 @@
|
|||
# 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
|
||||
|
||||
check_for()
|
||||
{
|
||||
|
|
@ -94,13 +96,11 @@ installer_CYGWIN()
|
|||
pre_build()
|
||||
{
|
||||
local variant="$1"
|
||||
begin_section "Pre$variant"
|
||||
begin_section "Configure $variant"
|
||||
[ -n "$master_message_template_checkout" ] \
|
||||
&& [ -r "$master_message_template_checkout/message_template.msg" ] \
|
||||
&& template_verifier_master_url="-DTEMPLATE_VERIFIER_MASTER_URL=file://$master_message_template_checkout/message_template.msg"
|
||||
|
||||
check_for "Confirm dictionaries are installed before 'autobuild configure'" ${build_dir}/packages/dictionaries
|
||||
|
||||
"$autobuild" configure -c $variant -- \
|
||||
-DPACKAGE:BOOL=ON \
|
||||
-DRELEASE_CRASH_REPORTING:BOOL=ON \
|
||||
|
|
@ -109,7 +109,7 @@ pre_build()
|
|||
-DLL_TESTS:BOOL="$run_tests" \
|
||||
-DTEMPLATE_VERIFIER_OPTIONS:STRING="$template_verifier_options" $template_verifier_master_url
|
||||
|
||||
end_section "Pre$variant"
|
||||
end_section "Configure $variant"
|
||||
}
|
||||
|
||||
package_llphysicsextensions_tpv()
|
||||
|
|
@ -119,12 +119,12 @@ package_llphysicsextensions_tpv()
|
|||
if [ "$variant" = "Release" ]
|
||||
then
|
||||
llpetpvcfg=$build_dir/packages/llphysicsextensions/autobuild-tpv.xml
|
||||
"$autobuild" build --verbose --config-file $llpetpvcfg -c Tpv
|
||||
"$autobuild" build --quiet --config-file $llpetpvcfg -c Tpv
|
||||
|
||||
# capture the package file name for use in upload later...
|
||||
PKGTMP=`mktemp -t pgktpv.XXXXXX`
|
||||
trap "rm $PKGTMP* 2>/dev/null" 0
|
||||
"$autobuild" package --verbose --config-file $llpetpvcfg --results-file "$(native_path $PKGTMP)"
|
||||
"$autobuild" package --quiet --config-file $llpetpvcfg --results-file "$(native_path $PKGTMP)"
|
||||
tpv_status=$?
|
||||
if [ -r "${PKGTMP}" ]
|
||||
then
|
||||
|
|
@ -134,7 +134,7 @@ package_llphysicsextensions_tpv()
|
|||
echo "${autobuild_package_filename}" > $build_dir/llphysicsextensions_package
|
||||
fi
|
||||
else
|
||||
echo "Do not provide llphysicsextensions_tpv for $variant"
|
||||
record_event "Do not provide llphysicsextensions_tpv for $variant"
|
||||
llphysicsextensions_package=""
|
||||
fi
|
||||
end_section "PhysicsExtensions_TPV"
|
||||
|
|
@ -146,16 +146,15 @@ build()
|
|||
local variant="$1"
|
||||
if $build_viewer
|
||||
then
|
||||
begin_section "Viewer$variant"
|
||||
|
||||
"$autobuild" build --no-configure -c $variant
|
||||
build_ok=$?
|
||||
end_section "Viewer$variant"
|
||||
|
||||
# Run build extensions
|
||||
if [ $build_ok -eq 0 -a -d ${build_dir}/packages/build-extensions ]; then
|
||||
for extension in ${build_dir}/packages/build-extensions/*.sh; do
|
||||
begin_section "Extension $extension"
|
||||
. $extension
|
||||
end_section "Extension $extension"
|
||||
if [ $build_ok -ne 0 ]; then
|
||||
break
|
||||
fi
|
||||
|
|
@ -174,28 +173,6 @@ build()
|
|||
fi
|
||||
}
|
||||
|
||||
# This is called from the branch independent script upon completion of all platform builds.
|
||||
build_docs()
|
||||
{
|
||||
begin_section "Building Documentation"
|
||||
begin_section "Autobuild metadata"
|
||||
if [ -r "$build_dir/autobuild-package.xml" ]
|
||||
then
|
||||
upload_item docs "$build_dir/autobuild-package.xml" text/xml
|
||||
else
|
||||
record_event "no metadata at '$build_dir/autobuild-package.xml'"
|
||||
fi
|
||||
end_section "Autobuild metadata"
|
||||
if [ "$arch" != "Linux" ]
|
||||
then
|
||||
record_dependencies_graph # defined in build.sh
|
||||
else
|
||||
echo "TBD - skipping linux graph (probable python version dependency)" 1>&2
|
||||
fi
|
||||
end_section "Building Documentation"
|
||||
}
|
||||
|
||||
|
||||
# Check to see if we were invoked from the wrapper, if not, re-exec ourselves from there
|
||||
if [ "x$arch" = x ]
|
||||
then
|
||||
|
|
@ -207,7 +184,7 @@ then
|
|||
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.lindenlab.com/parabuild/buildscripts
|
||||
This repository is located at http://bitbucket.org/lindenlabinternal/sl-buildscripts
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -229,6 +206,13 @@ fi
|
|||
# load autobuild provided shell functions and variables
|
||||
eval "$("$autobuild" source_environment)"
|
||||
|
||||
# something about the additional_packages mechanism messes up buildscripts results.py on Linux
|
||||
# since we don't care about those packages on Linux, just zero it out, yes - a HACK
|
||||
if [ "$arch" = "Linux" ]
|
||||
then
|
||||
export additional_packages=
|
||||
fi
|
||||
|
||||
# dump environment variables for debugging
|
||||
begin_section "Environment"
|
||||
env|sort
|
||||
|
|
@ -246,70 +230,69 @@ do
|
|||
# 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"
|
||||
|
||||
begin_section "PreClean"
|
||||
begin_section "Initialize $variant Build Directory"
|
||||
rm -rf "$build_dir"
|
||||
end_section "PreClean"
|
||||
|
||||
mkdir -p "$build_dir"
|
||||
mkdir -p "$build_dir/tmp"
|
||||
end_section "Initialize $variant Build Directory"
|
||||
|
||||
if pre_build "$variant" "$build_dir" >> "$build_log" 2>&1
|
||||
if pre_build "$variant" "$build_dir"
|
||||
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
|
||||
else
|
||||
begin_section "Build$variant"
|
||||
begin_section "Build $variant"
|
||||
build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | sed -n 's/^ *\(##teamcity.*\)/\1/p'
|
||||
if `cat "$build_dir/build_ok"`
|
||||
then
|
||||
echo so far so good.
|
||||
case "$variant" in
|
||||
Release)
|
||||
if [ -r "$build_dir/autobuild-package.xml" ]
|
||||
then
|
||||
begin_section "Autobuild metadata"
|
||||
upload_item docs "$build_dir/autobuild-package.xml" text/xml
|
||||
if [ "$arch" != "Linux" ]
|
||||
then
|
||||
record_dependencies_graph # defined in buildscripts/hg/bin/build.sh
|
||||
else
|
||||
record_event "TBD - no dependency graph for linux (probable python version dependency)" 1>&2
|
||||
fi
|
||||
end_section "Autobuild metadata"
|
||||
else
|
||||
record_event "no autobuild metadata at '$build_dir/autobuild-package.xml'"
|
||||
fi
|
||||
;;
|
||||
Doxygen)
|
||||
if [ -r "$build_dir/doxygen_warnings.log" ]
|
||||
then
|
||||
record_event "Doxygen warnings generated; see doxygen_warnings.log"
|
||||
upload_item log "$build_dir/doxygen_warnings.log" text/plain
|
||||
fi
|
||||
if [ -d "$build_dir/doxygen/html" ]
|
||||
then
|
||||
tar -c -f "$build_dir/viewer-doxygen.tar.bz2" --strip-components 3 "$build_dir/doxygen/html"
|
||||
upload_item docs "$build_dir/viewer-doxygen.tar.bz2" binary/octet-stream
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
else
|
||||
record_failure "Build of \"$variant\" failed."
|
||||
record_failure "Build of \"$variant\" failed."
|
||||
fi
|
||||
end_section "Build$variant"
|
||||
fi
|
||||
end_section "Build $variant"
|
||||
else
|
||||
record_failure "Build Prep for \"$variant\" failed."
|
||||
record_event "configure for $variant failed: build skipped"
|
||||
fi
|
||||
|
||||
if ! $succeeded
|
||||
then
|
||||
record_event "remaining variants skipped due to $variant failure"
|
||||
break
|
||||
fi
|
||||
end_section "Do$variant"
|
||||
done
|
||||
|
||||
build_docs
|
||||
|
||||
# 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"
|
||||
tee -a $build_log < "$build_dir/build.log" | sed -n 's/^ *\(##teamcity.*\)/\1/p'
|
||||
if `cat "$build_dir/build_ok"`
|
||||
then
|
||||
echo so far so good.
|
||||
else
|
||||
record_failure "Parallel build of \"$variant\" failed."
|
||||
fi
|
||||
end_section "Build$variant"
|
||||
done
|
||||
end_section WaitParallel
|
||||
fi
|
||||
|
||||
# build debian package
|
||||
if [ "$arch" == "Linux" ]
|
||||
then
|
||||
|
|
@ -376,7 +359,7 @@ then
|
|||
end_section "Upload Debian Repository"
|
||||
|
||||
else
|
||||
echo skipping debian build
|
||||
echo debian build not enabled
|
||||
fi
|
||||
else
|
||||
echo skipping debian build due to failed build.
|
||||
|
|
@ -422,41 +405,33 @@ then
|
|||
upload_item symbolfile "$build_dir/$symbolfile" binary/octet-stream
|
||||
done
|
||||
|
||||
# Upload the actual dependencies used
|
||||
if [ -r "$build_dir/packages/installed-packages.xml" ]
|
||||
then
|
||||
upload_item installer "$build_dir/packages/installed-packages.xml" text/xml
|
||||
fi
|
||||
|
||||
# Upload the llphysicsextensions_tpv package, if one was produced
|
||||
# *TODO: Make this an upload-extension
|
||||
if [ -r "$build_dir/llphysicsextensions_package" ]
|
||||
then
|
||||
llphysicsextensions_package=$(cat $build_dir/llphysicsextensions_package)
|
||||
upload_item private_artifact "$llphysicsextensions_package" binary/octet-stream
|
||||
else
|
||||
echo "No llphysicsextensions_package"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Skipping mapfile for $last_built_variant"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Run upload extensions
|
||||
if [ -d ${build_dir}/packages/upload-extensions ]; then
|
||||
for extension in ${build_dir}/packages/upload-extensions/*.sh; do
|
||||
begin_section "Upload Extension $extension"
|
||||
. $extension
|
||||
end_section "Upload Extension $extension"
|
||||
done
|
||||
fi
|
||||
|
||||
# Upload stub installers
|
||||
upload_stub_installers "$build_dir_stubs"
|
||||
fi
|
||||
end_section Upload Installer
|
||||
else
|
||||
echo skipping upload of installer
|
||||
fi
|
||||
|
||||
|
||||
else
|
||||
echo skipping upload of installer due to failed build.
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
# Linden packages install in opt/linden
|
||||
secondlife-viewer: dir-or-file-in-opt
|
||||
secondlife-viewer: section-is-dh_make-template
|
||||
secondlife-viewer: binary-without-manpage
|
||||
secondlife-viewer: maintainer-script-empty postrm
|
||||
secondlife-viewer: maintainer-script-empty preinst
|
||||
secondlife-viewer: maintainer-script-empty prerm
|
||||
secondlife-viewer: unstripped-binary-or-object
|
||||
|
|
@ -11,7 +11,7 @@ summary, see http://creativecommons.org/licenses/by-sa/3.0/.
|
|||
Notwithstanding the foregoing, all of Linden Lab's trademarks, including
|
||||
but not limited to the Second Life brand name and Second Life Eye-in-Hand
|
||||
logo, are subject to our trademark policy at
|
||||
http://secondlife.com/corporate/trademark/.
|
||||
http://secondlife.com/corporate/brand/trademark/.
|
||||
|
||||
If you distribute any copies or adaptations of the Second Life viewer
|
||||
artwork or any other works in these files, you must include this Notice
|
||||
|
|
|
|||
|
|
@ -7,7 +7,9 @@ you under the terms of the GNU Lesser General Public License, version 2.1
|
|||
("LGPL"), unless you have obtained a separate licensing agreement
|
||||
("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
the GPL can be found in doc/LGPL-license.txt in this distribution, or
|
||||
online at http://secondlife.com/developers/opensource/lgplv2_1
|
||||
online at
|
||||
|
||||
https://wiki.secondlife.com/wiki/Linden_Lab_Official:GNU_Lesser_General_Public_License,_version_2.1
|
||||
|
||||
By copying, modifying or distributing this software, you acknowledge
|
||||
that you have read and understood your obligations described above,
|
||||
|
|
|
|||
|
|
@ -185,9 +185,11 @@ Ansariel Hiller
|
|||
BUG-3764
|
||||
STORM-1984
|
||||
STORM-1979
|
||||
STORM-2083
|
||||
MAINT-5533
|
||||
STORM-2094
|
||||
MAINT-5756
|
||||
MAINT-2199
|
||||
MAINT-4677
|
||||
Aralara Rajal
|
||||
Arare Chantilly
|
||||
CHUIBUG-191
|
||||
|
|
@ -319,6 +321,8 @@ Cinder Roxley
|
|||
BUG-8786
|
||||
OPEN-185
|
||||
OPEN-282
|
||||
OPEN-292
|
||||
OPEN-297
|
||||
STORM-1703
|
||||
STORM-1948
|
||||
STORM-1831
|
||||
|
|
@ -726,6 +730,12 @@ Jonathan Yap
|
|||
STORM-2030
|
||||
STORM-2034
|
||||
STORM-2018
|
||||
STORM-2082
|
||||
STORM-2086
|
||||
STORM-2085
|
||||
STORM-2088
|
||||
STORM-2094
|
||||
STORM-2099
|
||||
Kadah Coba
|
||||
STORM-1060
|
||||
STORM-1843
|
||||
|
|
@ -1007,6 +1017,7 @@ Nicky Dasmijn
|
|||
STORM-1937
|
||||
OPEN-187
|
||||
STORM-2010
|
||||
STORM-2082
|
||||
Nicky Perian
|
||||
OPEN-1
|
||||
STORM-1087
|
||||
|
|
@ -1249,6 +1260,8 @@ Sovereign Engineer
|
|||
OPEN-217
|
||||
OPEN-295
|
||||
MAINT-6107
|
||||
STORM-2107
|
||||
MAINT-6218
|
||||
SpacedOut Frye
|
||||
VWR-34
|
||||
VWR-45
|
||||
|
|
|
|||
|
|
@ -39,8 +39,6 @@ add_subdirectory(${LIBS_OPEN_PREFIX}llvfs)
|
|||
add_subdirectory(${LIBS_OPEN_PREFIX}llwindow)
|
||||
add_subdirectory(${LIBS_OPEN_PREFIX}llxml)
|
||||
|
||||
add_subdirectory(${LIBS_OPEN_PREFIX}lscript)
|
||||
|
||||
if (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
|
||||
add_subdirectory(${LIBS_CLOSED_PREFIX}copy_win_scripts)
|
||||
endif (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
|
||||
|
|
@ -85,8 +83,11 @@ endif (LINUX)
|
|||
add_subdirectory(${VIEWER_PREFIX}newview)
|
||||
add_dependencies(viewer secondlife-bin)
|
||||
|
||||
add_subdirectory(${VIEWER_PREFIX}doxygen EXCLUDE_FROM_ALL)
|
||||
|
||||
if (LL_TESTS)
|
||||
# Define after the custom targets are created so
|
||||
# individual apps can add themselves as dependencies
|
||||
add_subdirectory(${INTEGRATION_TESTS_PREFIX}integration_tests)
|
||||
endif (LL_TESTS)
|
||||
|
||||
|
|
|
|||
|
|
@ -15,27 +15,33 @@ if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/n
|
|||
message("Revision (from environment): ${VIEWER_VERSION_REVISION}")
|
||||
|
||||
else (DEFINED ENV{revision})
|
||||
find_program(MERCURIAL hg)
|
||||
find_program(WORDCOUNT wc)
|
||||
find_program(SED sed)
|
||||
if (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
|
||||
execute_process(
|
||||
COMMAND ${MERCURIAL} log -r tip:0 --template '\\n'
|
||||
COMMAND ${WORDCOUNT} -l
|
||||
COMMAND ${SED} "s/ //g"
|
||||
OUTPUT_VARIABLE VIEWER_VERSION_REVISION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
|
||||
message("Revision (from hg) ${VIEWER_VERSION_REVISION}")
|
||||
else ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
|
||||
message("Revision not set (repository not found?); using 0")
|
||||
set(VIEWER_VERSION_REVISION 0 )
|
||||
endif ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
|
||||
else (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
|
||||
message("Revision not set: 'hg', 'wc' or 'sed' not found; using 0")
|
||||
find_program(MERCURIAL
|
||||
NAMES hg
|
||||
PATHS [HKEY_LOCAL_MACHINE\\Software\\TortoiseHG]
|
||||
PATH_SUFFIXES Mercurial)
|
||||
mark_as_advanced(MERCURIAL)
|
||||
if (MERCURIAL)
|
||||
execute_process(COMMAND ${MERCURIAL} identify --num --rev tip
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE hg_id_result
|
||||
ERROR_VARIABLE hg_id_error
|
||||
OUTPUT_VARIABLE VIEWER_VERSION_REVISION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if (NOT ${hg_id_result} EQUAL 0)
|
||||
message(SEND_ERROR "Revision number generation failed with output:\n${hg_id_error}")
|
||||
else (NOT ${hg_id_result} EQUAL 0)
|
||||
string(REGEX REPLACE "[^0-9a-f]" "" VIEWER_VERSION_REVISION ${VIEWER_VERSION_REVISION})
|
||||
endif (NOT ${hg_id_result} EQUAL 0)
|
||||
if ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
|
||||
message("Revision (from hg) ${VIEWER_VERSION_REVISION}")
|
||||
else ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
|
||||
message("Revision not set (repository not found?); using 0")
|
||||
set(VIEWER_VERSION_REVISION 0 )
|
||||
endif ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
|
||||
else (MERCURIAL)
|
||||
message("Revision not set: mercurial not found; using 0")
|
||||
set(VIEWER_VERSION_REVISION 0)
|
||||
endif (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
|
||||
endif (MERCURIAL)
|
||||
endif (DEFINED ENV{revision})
|
||||
message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
|
||||
else ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
|
||||
|
|
@ -53,5 +59,6 @@ if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/n
|
|||
"LL_VIEWER_VERSION_MINOR=${VIEWER_VERSION_MINOR}"
|
||||
"LL_VIEWER_VERSION_PATCH=${VIEWER_VERSION_PATCH}"
|
||||
"LL_VIEWER_VERSION_BUILD=${VIEWER_VERSION_REVISION}"
|
||||
"LLBUILD_CONFIG=\"${CMAKE_BUILD_TYPE}\""
|
||||
)
|
||||
endif (NOT DEFINED VIEWER_SHORT_VERSION)
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ set(cmake_SOURCE_FILES
|
|||
Boost.cmake
|
||||
BuildVersion.cmake
|
||||
CEFPlugin.cmake
|
||||
CEFPlugin.cmake
|
||||
CMakeCopyIfDifferent.cmake
|
||||
ConfigurePkgConfig.cmake
|
||||
CURL.cmake
|
||||
|
|
@ -78,7 +79,6 @@ set(cmake_SOURCE_FILES
|
|||
LLVFS.cmake
|
||||
LLWindow.cmake
|
||||
LLXML.cmake
|
||||
LScript.cmake
|
||||
Linking.cmake
|
||||
MediaPluginBase.cmake
|
||||
NDOF.cmake
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
set(LSCRIPT_INCLUDE_DIRS
|
||||
${LIBS_OPEN_DIR}/lscript
|
||||
${LIBS_OPEN_DIR}/lscript/lscript_compile
|
||||
${LIBS_OPEN_DIR}/lscript/lscript_execute
|
||||
${LIBS_OPEN_DIR}/lscript/lscript_execute_mono
|
||||
)
|
||||
|
||||
set(LSCRIPT_LIBRARIES
|
||||
lscript_compile
|
||||
lscript_execute
|
||||
lscript_library
|
||||
)
|
||||
|
||||
set(LSCRIPT_EXECUTE_MONO_LIBRARIES lscript_execute_mono)
|
||||
|
|
@ -47,6 +47,8 @@ $/LicenseInfo$
|
|||
import os
|
||||
import sys
|
||||
import errno
|
||||
import HTMLParser
|
||||
import re
|
||||
import signal
|
||||
import subprocess
|
||||
|
||||
|
|
@ -76,7 +78,7 @@ def main(command, libpath=[], vars={}):
|
|||
# No idea what the right pathname might be! But only crump if this
|
||||
# feature is requested.
|
||||
if libpath:
|
||||
raise NotImplemented("run_build_test: unknown platform %s" % sys.platform)
|
||||
raise RuntimeError("run_build_test: unknown platform %s" % sys.platform)
|
||||
lpvars = []
|
||||
for var in lpvars:
|
||||
# Split the existing path. Bear in mind that the variable in question
|
||||
|
|
@ -148,15 +150,158 @@ def translate_rc(rc):
|
|||
if rc >= 0:
|
||||
return "terminated with rc %s" % rc
|
||||
|
||||
# Negative rc means the child was terminated by signal -rc.
|
||||
rc = -rc
|
||||
for attr in dir(signal):
|
||||
if attr.startswith('SIG') and getattr(signal, attr) == rc:
|
||||
strc = attr
|
||||
break
|
||||
if sys.platform.startswith("win"):
|
||||
# From http://stackoverflow.com/questions/20629027/process-finished-with-exit-code-1073741571
|
||||
# [-1073741571] is the signed integer representation of Microsoft's
|
||||
# "stack overflow/stack exhaustion" error code 0xC00000FD.
|
||||
# Anytime you see strange, large negative exit codes in windows, convert
|
||||
# them to hex and then look them up in the ntstatus error codes
|
||||
# http://msdn.microsoft.com/en-us/library/cc704588.aspx
|
||||
|
||||
# Python bends over backwards to give you all the integer precision
|
||||
# you need, avoiding truncation. But only with 32-bit signed ints is
|
||||
# -1073741571 equivalent to 0xC00000FD! Explicitly truncate before
|
||||
# converting.
|
||||
hexrc = "0x%X" % (rc & 0xFFFFFFFF)
|
||||
# At this point, we're only trying to format the rc to make it easier
|
||||
# for a human being to understand. Any exception here -- file doesn't
|
||||
# exist, HTML parsing error, unrecognized table structure, unknown key
|
||||
# -- should NOT kill the script! It should only cause us to shrug and
|
||||
# present our caller with the best information available.
|
||||
try:
|
||||
table = get_windows_table()
|
||||
symbol, desc = table[hexrc]
|
||||
except Exception, err:
|
||||
print >>sys.stderr, "(%s -- carrying on)" % err
|
||||
return "terminated with rc %s (%s)" % (rc, hexrc)
|
||||
else:
|
||||
return "terminated with rc %s: %s: %s" % (hexrc, symbol, desc)
|
||||
|
||||
else:
|
||||
strc = str(rc)
|
||||
return "terminated by signal %s" % strc
|
||||
# On Posix, negative rc means the child was terminated by signal -rc.
|
||||
rc = -rc
|
||||
for attr in dir(signal):
|
||||
if attr.startswith('SIG') and getattr(signal, attr) == rc:
|
||||
strc = attr
|
||||
break
|
||||
else:
|
||||
strc = str(rc)
|
||||
return "terminated by signal %s" % strc
|
||||
|
||||
class TableParser(HTMLParser.HTMLParser):
|
||||
"""
|
||||
This HTMLParser subclass is designed to parse the table we know exists
|
||||
in windows-rcs.html, hopefully without building in too much knowledge of
|
||||
the specific way that table is currently formatted.
|
||||
"""
|
||||
# regular expression matching any string containing only whitespace
|
||||
whitespace = re.compile(r'\s*$')
|
||||
|
||||
def __init__(self):
|
||||
# Because Python 2.x's HTMLParser is an old-style class, we must use
|
||||
# old-style syntax to forward the __init__() call -- not super().
|
||||
HTMLParser.HTMLParser.__init__(self)
|
||||
# this will collect all the data, eventually
|
||||
self.table = []
|
||||
# Stack whose top (last item) indicates where to append current
|
||||
# element data. When empty, don't collect data at all.
|
||||
self.dest = []
|
||||
|
||||
def handle_starttag(self, tag, attrs):
|
||||
if tag == "table":
|
||||
# This is the outermost tag we recognize. Collect nested elements
|
||||
# within self.table.
|
||||
self.dest.append(self.table)
|
||||
elif tag in ("tr", "td"):
|
||||
# Nested elements whose contents we want to capture as sublists.
|
||||
# To the list currently designated by the top of the dest stack,
|
||||
# append a new empty sublist.
|
||||
self.dest[-1].append([])
|
||||
# Now push THAT new, empty list as the new top of the dest stack.
|
||||
self.dest.append(self.dest[-1][-1])
|
||||
elif tag == "p":
|
||||
# We could handle <p> ... </p> just like <tr> or <td>, but that
|
||||
# introduces an unnecessary extra level of nesting. Just skip.
|
||||
pass
|
||||
else:
|
||||
# For any tag we don't recognize (notably <th>), push a new, empty
|
||||
# list to the top of the dest stack. This new list is NOT
|
||||
# referenced by anything in self.table; thus, when we pop it, any
|
||||
# data we've collected inside that list will be discarded.
|
||||
self.dest.append([])
|
||||
|
||||
def handle_endtag(self, tag):
|
||||
# Because we avoid pushing self.dest for <p> in handle_starttag(), we
|
||||
# must refrain from popping it for </p> here.
|
||||
if tag != "p":
|
||||
# For everything else, including unrecognized tags, pop the dest
|
||||
# stack, reverting to outer collection.
|
||||
self.dest.pop()
|
||||
|
||||
def handle_startendtag(self, tag, attrs):
|
||||
# The table of interest contains <td> entries of the form:
|
||||
# <p>0x00000000<br />STATUS_SUCCESS</p>
|
||||
# The <br/> is very useful -- we definitely want two different data
|
||||
# items for "0x00000000" and "STATUS_SUCCESS" -- but we don't need or
|
||||
# want it to push, then discard, an empty list as it would if we let
|
||||
# the default HTMLParser.handle_startendtag() call handle_starttag()
|
||||
# followed by handle_endtag(). Just ignore <br/> or any other
|
||||
# singleton tag.
|
||||
pass
|
||||
|
||||
def handle_data(self, data):
|
||||
# Outside the <table> of interest, self.dest is empty. Do not bother
|
||||
# collecting data when self.dest is empty.
|
||||
# HTMLParser calls handle_data() with every chunk of whitespace
|
||||
# between tags. That would be lovely if our eventual goal was to
|
||||
# reconstitute the original input stream with its existing formatting,
|
||||
# but for us, whitespace only clutters the table. Ignore it.
|
||||
if self.dest and not self.whitespace.match(data):
|
||||
# Here we're within our <table> and we have non-whitespace data.
|
||||
# Append it to the list designated by the top of the dest stack.
|
||||
self.dest[-1].append(data)
|
||||
|
||||
# cache for get_windows_table()
|
||||
_windows_table = None
|
||||
|
||||
def get_windows_table():
|
||||
global _windows_table
|
||||
# If we already loaded _windows_table, no need to load it all over again.
|
||||
if _windows_table:
|
||||
return _windows_table
|
||||
|
||||
# windows-rcs.html was fetched on 2015-03-24 with the following command:
|
||||
# curl -o windows-rcs.html \
|
||||
# https://msdn.microsoft.com/en-us/library/cc704588.aspx
|
||||
parser = TableParser()
|
||||
with open(os.path.join(os.path.dirname(__file__), "windows-rcs.html")) as hf:
|
||||
# We tried feeding the file data to TableParser in chunks, to avoid
|
||||
# buffering the entire file as a single string. Unfortunately its
|
||||
# handle_data() cannot tell the difference between distinct calls
|
||||
# separated by HTML tags, and distinct calls necessitated by a chunk
|
||||
# boundary. Sigh! Read in the whole file. At the time this was
|
||||
# written, it was only 500KB anyway.
|
||||
parser.feed(hf.read())
|
||||
parser.close()
|
||||
table = parser.table
|
||||
|
||||
# With our parser, any <tr><th>...</th></tr> row leaves a table entry
|
||||
# consisting only of an empty list. Remove any such.
|
||||
while table and not table[0]:
|
||||
table.pop(0)
|
||||
|
||||
# We expect rows of the form:
|
||||
# [['0x00000000', 'STATUS_SUCCESS'],
|
||||
# ['The operation completed successfully.']]
|
||||
# The latter list will have multiple entries if Microsoft embedded <br/>
|
||||
# or <p> ... </p> in the text, in which case joining with '\n' is
|
||||
# appropriate.
|
||||
# Turn that into a dict whose key is the hex string, and whose value is
|
||||
# the pair (symbol, desc).
|
||||
_windows_table = dict((key, (symbol, '\n'.join(desc)))
|
||||
for (key, symbol), desc in table)
|
||||
|
||||
return _windows_table
|
||||
|
||||
if __name__ == "__main__":
|
||||
from optparse import OptionParser
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue