Automated merge up from viewer-development into mesh-development
commit
47781184fc
|
|
@ -12,7 +12,10 @@ syntax: glob
|
|||
*.orig
|
||||
LICENSES
|
||||
indra/.distcc
|
||||
indra/build-darwin-*
|
||||
build-linux-*
|
||||
build-darwin-*
|
||||
build-vc80/
|
||||
build-vc100/
|
||||
indra/build-vc[0-9]*
|
||||
indra/CMakeFiles
|
||||
indra/lib/mono/1.0/*.dll
|
||||
|
|
|
|||
6
.hgtags
6
.hgtags
|
|
@ -83,6 +83,8 @@ f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start
|
|||
4e9eec6a347f89b2b3f295beb72f1cf7837dff66 2.6.0-start
|
||||
9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1
|
||||
9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
|
||||
|
|
@ -91,3 +93,7 @@ c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
|
|||
56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start
|
||||
42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
|
||||
42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
|
||||
d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1
|
||||
d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1
|
||||
52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py
|
||||
ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start
|
||||
|
|
|
|||
20
BuildParams
20
BuildParams
|
|
@ -67,7 +67,6 @@ viewer-pre-release.login_channel = "Second Life Release"
|
|||
viewer-pre-release.build_debug_release_separately = true
|
||||
viewer-pre-release.build_viewer_update_version_manager = true
|
||||
viewer-pre-release.release-viewer.jira = DRTVWR-39
|
||||
|
||||
# =======================================
|
||||
# brad
|
||||
# ========================================
|
||||
|
|
@ -182,6 +181,7 @@ media.build_viewer_update_version_manager = false
|
|||
# ================
|
||||
|
||||
oz-viewer-devreview.build_debug_release_separately = true
|
||||
viewer-devreview.build_debug_release_separately = true
|
||||
oz_viewer-poreview.build_debug_release_separately = true
|
||||
oz-project-1.build_debug_release_separately = true
|
||||
oz-project-2.build_debug_release_separately = true
|
||||
|
|
@ -219,5 +219,23 @@ viewer-asset-delivery-metrics.email = monty@lindenlab.com
|
|||
viewer-asset-delivery-metrics.build_server = false
|
||||
viewer-asset-delivery-metrics.build_server_tests = false
|
||||
|
||||
#==============================================================================
|
||||
# autobuild viewers
|
||||
#==============================================================================
|
||||
viewer-autobuild2010.build_debug_release_separately = true
|
||||
viewer-autobuild2010.viewer_channel = "Project Viewer - VS2010"
|
||||
viewer-autobuild2010.login_channel = "Project Viewer - VS2010"
|
||||
viewer-autobuild2010.viewer_grid = agni
|
||||
viewer-autobuild2010.build_link_parallel = false
|
||||
|
||||
#========================================
|
||||
# VS2010
|
||||
#========================================
|
||||
viewer-vs2010.viewer_channel = "Project Viewer - VS2010"
|
||||
viewer-vs2010.login_channel = "Project Viewer - VS2010"
|
||||
viewer-vs2010.viewer_grid = agni
|
||||
viewer-vs2010.build_debug_release_separately = true
|
||||
viewer-vs2010.build_viewer_update_version_manager = false
|
||||
viewer-vs2010.build_link_parallel = false
|
||||
|
||||
# eof
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
171
build.sh
171
build.sh
|
|
@ -22,12 +22,12 @@ build_dir_Darwin()
|
|||
|
||||
build_dir_Linux()
|
||||
{
|
||||
echo viewer-linux-i686-$(echo $1 | tr A-Z a-z)
|
||||
echo build-linux-i686
|
||||
}
|
||||
|
||||
build_dir_CYGWIN()
|
||||
{
|
||||
echo build-vc80
|
||||
echo build-vc100
|
||||
}
|
||||
|
||||
installer_Darwin()
|
||||
|
|
@ -50,47 +50,30 @@ installer_CYGWIN()
|
|||
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 \
|
||||
-DRELEASE_CRASH_REPORTING:BOOL=ON \
|
||||
-DLOCALIZESETUP:BOOL=ON \
|
||||
-DPACKAGE:BOOL=ON
|
||||
-DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
|
||||
-DLL_TESTS:BOOL="$run_tests"
|
||||
end_section "Pre$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"
|
||||
|
||||
"$AUTOBUILD" configure -c $variant -- \
|
||||
-DPACKAGE:BOOL=ON \
|
||||
-DRELEASE_CRASH_REPORTING:BOOL=ON \
|
||||
-DUSE_PRECOMPILED_HEADERS=FALSE \
|
||||
-DVIEWER_CHANNEL:STRING="\"$viewer_channel\"" \
|
||||
-DVIEWER_LOGIN_CHANNEL:STRING="\"$viewer_login_channel\"" \
|
||||
-DGRID:STRING="\"$viewer_grid\"" \
|
||||
-DLL_TESTS:BOOL="$run_tests" \
|
||||
-DTEMPLATE_VERIFIER_OPTIONS:STRING="$template_verifier_options" $template_verifier_master_url
|
||||
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
|
||||
if "$AUTOBUILD" build --no-configure -c $variant
|
||||
then
|
||||
echo true >"$build_dir"/build_ok
|
||||
else
|
||||
|
|
@ -110,6 +93,7 @@ build_docs()
|
|||
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
|
||||
|
|
@ -117,15 +101,11 @@ then
|
|||
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
|
||||
This repository is located at http://hg.lindenlab.com/parabuild/buildscripts
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -138,7 +118,7 @@ eval '$build_'"$arch" || pass
|
|||
# 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 \
|
||||
python scripts/update_version_files.py \
|
||||
--channel="$viewer_channel" \
|
||||
--server_channel="$server_channel" \
|
||||
--revision=$revision \
|
||||
|
|
@ -149,10 +129,53 @@ 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]*$//'`
|
||||
build_viewer_update_version_manager_version=`python scripts/get_version.py --viewer-version | sed 's/\.[0-9]*$//'`
|
||||
|
||||
if [ -z "$AUTOBUILD" ]
|
||||
then
|
||||
export autobuild_dir="$here/../../../autobuild/bin/"
|
||||
if [ -d "$autobuild_dir" ]
|
||||
then
|
||||
export AUTOBUILD="$autobuild_dir"autobuild
|
||||
if [ -x "$AUTOBUILD" ]
|
||||
then
|
||||
# *HACK - bash doesn't know how to pass real pathnames to native windows python
|
||||
case "$arch" in
|
||||
CYGWIN) AUTOBUILD=$(cygpath -u $AUTOBUILD.cmd) ;;
|
||||
esac
|
||||
else
|
||||
record_failure "Not executable: $AUTOBUILD"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
record_failure "Not found: $autobuild_dir"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# load autbuild provided shell functions and variables
|
||||
# Merov: going back to the previous code that passes even if it fails catching a failure
|
||||
# TODO: use the correct code here under and fix the llbase import in python code
|
||||
#if "$AUTOBUILD" source_environment > source_environment
|
||||
#then
|
||||
# . source_environment
|
||||
#else
|
||||
# dump environment variables for debugging
|
||||
# env|sort
|
||||
# record_failure "autobuild source_environment failed"
|
||||
# cat source_environment >&3
|
||||
# exit 1
|
||||
#fi
|
||||
eval "$("$AUTOBUILD" source_environment)"
|
||||
|
||||
# dump environment variables for debugging
|
||||
env|sort
|
||||
|
||||
|
||||
# Install packages.
|
||||
"$AUTOBUILD" install --skip-license-check
|
||||
|
||||
# Now run the build
|
||||
cd indra
|
||||
succeeded=true
|
||||
build_processes=
|
||||
last_built_variant=
|
||||
|
|
@ -169,59 +192,11 @@ do
|
|||
build_dir_stubs="$build_dir/win_setup/$variant"
|
||||
rm -rf "$build_dir"
|
||||
mkdir -p "$build_dir"
|
||||
mkdir -p "$build_dir/tmp"
|
||||
#export TMP="$build_dir/tmp"
|
||||
if pre_build "$variant" "$build_dir" >> "$build_log" 2>&1
|
||||
then
|
||||
if $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\
|
||||
--security\
|
||||
--concurrency\
|
||||
--dir "$coverity_tmpdir"\
|
||||
>> "$build_log" 2>&1\
|
||||
&&\
|
||||
end_section CovAnalyze\
|
||||
&&\
|
||||
begin_section CovCommit\
|
||||
&&\
|
||||
"$coverity_dir"/bin/cov-commit-defects\
|
||||
--stream "$coverity_product"\
|
||||
--dir "$coverity_tmpdir"\
|
||||
--host "$coverity_server"\
|
||||
--strip-path "$coverity_root"\
|
||||
--target "$branch/$arch"\
|
||||
--version "$revision"\
|
||||
--description "$repo: $variant $revision"\
|
||||
--user admin --password coverity\
|
||||
>> "$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
|
||||
elif $build_link_parallel
|
||||
if $build_link_parallel
|
||||
then
|
||||
begin_section BuildParallel
|
||||
( build "$variant" "$build_dir" > "$build_dir/build.log" 2>&1 ) &
|
||||
|
|
@ -229,10 +204,7 @@ do
|
|||
end_section BuildParallel
|
||||
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
|
||||
build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | grep --line-buffered "^##teamcity"
|
||||
if `cat "$build_dir/build_ok"`
|
||||
then
|
||||
echo so far so good.
|
||||
|
|
@ -261,16 +233,13 @@ then
|
|||
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"
|
||||
tee -a $build_log < "$build_dir/build.log" | grep --line-buffered "^##teamcity"
|
||||
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
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
Linden Lab would like to acknowledge source code contributions from the
|
||||
following residents. The Second Life resident name is given below,
|
||||
along with the issue identifier corresponding to the patches we've
|
||||
received from them. To see more about these contributions, visit the
|
||||
browsable version: http://wiki.secondlife.com/wiki/Source_contributions
|
||||
received from them.
|
||||
|
||||
Able Whitman
|
||||
VWR-650
|
||||
|
|
@ -194,7 +193,8 @@ blino Nakamura
|
|||
VWR-17
|
||||
Boroondas Gupte
|
||||
OPEN-29
|
||||
CTS-323
|
||||
OPEN-39
|
||||
OPEN-39
|
||||
SNOW-278
|
||||
SNOW-503
|
||||
SNOW-510
|
||||
|
|
@ -207,6 +207,7 @@ Boroondas Gupte
|
|||
VWR-20583
|
||||
VWR-20891
|
||||
VWR-23455
|
||||
VWR-24487
|
||||
WEB-262
|
||||
Bulli Schumann
|
||||
CT-218
|
||||
|
|
@ -412,9 +413,13 @@ Jonathan Yap
|
|||
VWR-24347
|
||||
STORM-975
|
||||
STORM-1019
|
||||
STORM-844
|
||||
STORM-643
|
||||
STORM-1020
|
||||
STORM-1064
|
||||
STORM-960
|
||||
STORM-1077
|
||||
STORM-953
|
||||
Kage Pixel
|
||||
VWR-11
|
||||
Ken March
|
||||
|
|
@ -575,6 +580,10 @@ Nicholaz Beresford
|
|||
VWR-2412
|
||||
VWR-2682
|
||||
VWR-2684
|
||||
Nicky Perian
|
||||
OPEN-1
|
||||
OPEN-1087
|
||||
STORM-1090
|
||||
Nounouch Hapmouche
|
||||
VWR-238
|
||||
Patric Mills
|
||||
|
|
@ -839,6 +848,8 @@ Whoops Babii
|
|||
Wilton Lundquist
|
||||
VWR-7682
|
||||
WolfPup Lowenhar
|
||||
OPEN-1
|
||||
OPEN-37
|
||||
SNOW-622
|
||||
SNOW-772
|
||||
STORM-102
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ if (VIEWER)
|
|||
endif (VIEWER)
|
||||
|
||||
# Linux builds the viewer and server in 2 separate projects
|
||||
# In order for ./develop.py build server to work on linux,
|
||||
# In order for build server to work on linux,
|
||||
# the viewer project needs a server target.
|
||||
# This is not true for mac and windows.
|
||||
if (LINUX)
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ include(Variables)
|
|||
# Portable compilation flags.
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DNDEBUG")
|
||||
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -DNDEBUG")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
"-DLL_RELEASE=1 -D_SECURE_SCL=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
|
||||
"-DLL_RELEASE=1 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
|
||||
|
||||
# Configure crash reporting
|
||||
set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
|
||||
|
|
@ -36,13 +36,13 @@ if (WINDOWS)
|
|||
# Don't build DLLs.
|
||||
set(BUILD_SHARED_LIBS OFF)
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP"
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP -D_SCL_SECURE_NO_WARNINGS=1"
|
||||
CACHE STRING "C++ compiler debug options" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob2"
|
||||
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob2 -D_SECURE_STL=0"
|
||||
CACHE STRING "C++ compiler release-with-debug options" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Gm /Ob2"
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
||||
CACHE STRING "C++ compiler release options" FORCE)
|
||||
|
||||
set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
||||
|
|
@ -60,19 +60,10 @@ if (WINDOWS)
|
|||
/Zc:forScope
|
||||
/nologo
|
||||
/Oy-
|
||||
)
|
||||
|
||||
if(MSVC80 OR MSVC90)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
||||
CACHE STRING "C++ compiler release options" FORCE)
|
||||
|
||||
add_definitions(
|
||||
/Zc:wchar_t-
|
||||
/arch:SSE2
|
||||
)
|
||||
endif (MSVC80 OR MSVC90)
|
||||
|
||||
|
||||
# Are we using the crummy Visual Studio KDU build workaround?
|
||||
if (NOT VS_DISABLE_FATAL_WARNINGS)
|
||||
add_definitions(/WX)
|
||||
|
|
|
|||
|
|
@ -32,27 +32,21 @@ else (STANDALONE)
|
|||
)
|
||||
elseif (DARWIN)
|
||||
if (LLCOMMON_LINK_SHARED)
|
||||
set(APR_selector "0.3.7.dylib")
|
||||
set(APRUTIL_selector "0.3.8.dylib")
|
||||
set(APR_selector "0.dylib")
|
||||
set(APRUTIL_selector "0.dylib")
|
||||
else (LLCOMMON_LINK_SHARED)
|
||||
set(APR_selector "a")
|
||||
set(APRUTIL_selector "a")
|
||||
endif (LLCOMMON_LINK_SHARED)
|
||||
set(APR_LIBRARIES
|
||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapr-1.${APR_selector}
|
||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.${APR_selector}
|
||||
)
|
||||
set(APRUTIL_LIBRARIES
|
||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.${APRUTIL_selector}
|
||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.${APRUTIL_selector}
|
||||
)
|
||||
set(APR_LIBRARIES libapr-1.${APR_selector})
|
||||
set(APRUTIL_LIBRARIES libaprutil-1.${APRUTIL_selector})
|
||||
set(APRICONV_LIBRARIES iconv)
|
||||
else (WINDOWS)
|
||||
set(APR_LIBRARIES apr-1)
|
||||
set(APRUTIL_LIBRARIES aprutil-1)
|
||||
set(APRICONV_LIBRARIES iconv)
|
||||
endif (WINDOWS)
|
||||
set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/apr-1)
|
||||
set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1)
|
||||
|
||||
if (LINUX)
|
||||
if (VIEWER)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@ if (STANDALONE)
|
|||
else (STANDALONE)
|
||||
if (LINUX)
|
||||
# Need to add dependency pthread explicitely to support ld.gold.
|
||||
set(DB_LIBRARIES db-4.2 pthread)
|
||||
use_prebuilt_binary(db)
|
||||
set(DB_LIBRARIES db-5.1 pthread)
|
||||
else (LINUX)
|
||||
set(DB_LIBRARIES db-4.2)
|
||||
endif (LINUX)
|
||||
|
|
|
|||
|
|
@ -10,23 +10,15 @@ if (STANDALONE)
|
|||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
|
||||
set(BOOST_REGEX_LIBRARY boost_regex-mt)
|
||||
set(BOOST_SIGNALS_LIBRARY boost_signals-mt)
|
||||
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
|
||||
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
|
||||
else (STANDALONE)
|
||||
use_prebuilt_binary(boost)
|
||||
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
||||
|
||||
if (WINDOWS)
|
||||
set(BOOST_VERSION 1_39)
|
||||
if (MSVC71)
|
||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY
|
||||
optimized libboost_program_options-vc71-mt-s-${BOOST_VERSION}
|
||||
debug libboost_program_options-vc71-mt-sgd-${BOOST_VERSION})
|
||||
set(BOOST_REGEX_LIBRARY
|
||||
optimized libboost_regex-vc71-mt-s-${BOOST_VERSION}
|
||||
debug libboost_regex-vc71-mt-sgd-${BOOST_VERSION})
|
||||
set(BOOST_SIGNALS_LIBRARY
|
||||
optimized libboost_signals-vc71-mt-s-${BOOST_VERSION}
|
||||
debug libboost_signals-vc71-mt-sgd-${BOOST_VERSION})
|
||||
else (MSVC71)
|
||||
set(BOOST_VERSION 1_45)
|
||||
if(MSVC80)
|
||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY
|
||||
optimized libboost_program_options-vc80-mt-${BOOST_VERSION}
|
||||
debug libboost_program_options-vc80-mt-gd-${BOOST_VERSION})
|
||||
|
|
@ -36,14 +28,31 @@ else (STANDALONE)
|
|||
set(BOOST_SIGNALS_LIBRARY
|
||||
optimized libboost_signals-vc80-mt-${BOOST_VERSION}
|
||||
debug libboost_signals-vc80-mt-gd-${BOOST_VERSION})
|
||||
endif (MSVC71)
|
||||
elseif (DARWIN)
|
||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-xgcc40-mt)
|
||||
set(BOOST_REGEX_LIBRARY boost_regex-xgcc40-mt)
|
||||
set(BOOST_SIGNALS_LIBRARY boost_signals-xgcc40-mt)
|
||||
elseif (LINUX)
|
||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-gcc41-mt)
|
||||
set(BOOST_REGEX_LIBRARY boost_regex-gcc41-mt)
|
||||
set(BOOST_SIGNALS_LIBRARY boost_signals-gcc41-mt)
|
||||
set(BOOST_SYSTEM_LIBRARY
|
||||
optimized libboost_system-vc80-mt-${BOOST_VERSION}
|
||||
debug libboost_system-vc80-mt-gd-${BOOST_VERSION})
|
||||
set(BOOST_FILESYSTEM_LIBRARY
|
||||
optimized libboost_filesystem-vc80-mt-${BOOST_VERSION}
|
||||
debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION})
|
||||
else(MSVC80)
|
||||
# MSVC 10.0 config
|
||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY
|
||||
optimized libboost_program_options-vc100-mt-${BOOST_VERSION}
|
||||
debug libboost_program_options-vc100-mt-gd-${BOOST_VERSION})
|
||||
set(BOOST_REGEX_LIBRARY
|
||||
optimized libboost_regex-vc100-mt-${BOOST_VERSION}
|
||||
debug libboost_regex-vc100-mt-gd-${BOOST_VERSION})
|
||||
set(BOOST_SYSTEM_LIBRARY
|
||||
optimized libboost_system-vc100-mt-${BOOST_VERSION}
|
||||
debug libboost_system-vc100-mt-gd-${BOOST_VERSION})
|
||||
set(BOOST_FILESYSTEM_LIBRARY
|
||||
optimized libboost_filesystem-vc100-mt-${BOOST_VERSION}
|
||||
debug libboost_filesystem-vc100-mt-gd-${BOOST_VERSION})
|
||||
endif (MSVC80)
|
||||
elseif (DARWIN OR LINUX)
|
||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options)
|
||||
set(BOOST_REGEX_LIBRARY boost_regex)
|
||||
set(BOOST_SYSTEM_LIBRARY boost_system)
|
||||
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem)
|
||||
endif (WINDOWS)
|
||||
endif (STANDALONE)
|
||||
|
|
|
|||
|
|
@ -13,10 +13,7 @@ else (STANDALONE)
|
|||
if (WINDOWS)
|
||||
set(CARES_LIBRARIES areslib)
|
||||
elseif (DARWIN)
|
||||
set(CARES_LIBRARIES
|
||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libcares.a
|
||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libcares.a
|
||||
)
|
||||
set(CARES_LIBRARIES cares)
|
||||
else (WINDOWS)
|
||||
set(CARES_LIBRARIES cares)
|
||||
endif (WINDOWS)
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ set(cmake_SOURCE_FILES
|
|||
CSharpMacros.cmake
|
||||
DBusGlib.cmake
|
||||
DirectX.cmake
|
||||
ELFIO.cmake
|
||||
EXPAT.cmake
|
||||
FindAPR.cmake
|
||||
FindBerkeleyDB.cmake
|
||||
|
|
@ -29,7 +28,6 @@ set(cmake_SOURCE_FILES
|
|||
FindFMOD.cmake
|
||||
FindGooglePerfTools.cmake
|
||||
FindMono.cmake
|
||||
FindMT.cmake
|
||||
FindMySQL.cmake
|
||||
FindOpenJPEG.cmake
|
||||
FindXmlRpcEpi.cmake
|
||||
|
|
@ -87,7 +85,6 @@ source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})
|
|||
|
||||
set(master_SOURCE_FILES
|
||||
../CMakeLists.txt
|
||||
../develop.py
|
||||
)
|
||||
|
||||
if (SERVER)
|
||||
|
|
|
|||
|
|
@ -1,329 +1,382 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
# The copy_win_libs folder contains file lists and a script used to
|
||||
# copy dlls, exes and such needed to run the SecondLife from within
|
||||
# VisualStudio.
|
||||
|
||||
include(CMakeCopyIfDifferent)
|
||||
|
||||
###################################################################
|
||||
# set up platform specific lists of files that need to be copied
|
||||
###################################################################
|
||||
if(WINDOWS)
|
||||
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug")
|
||||
set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo")
|
||||
set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release")
|
||||
|
||||
#*******************************
|
||||
# VIVOX - *NOTE: no debug version
|
||||
set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32")
|
||||
set(vivox_files
|
||||
SLVoice.exe
|
||||
libsndfile-1.dll
|
||||
vivoxplatform.dll
|
||||
vivoxsdk.dll
|
||||
ortp.dll
|
||||
zlib1.dll
|
||||
vivoxoal.dll
|
||||
)
|
||||
|
||||
#*******************************
|
||||
# Misc shared libs
|
||||
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
|
||||
set(debug_files
|
||||
openjpegd.dll
|
||||
libapr-1.dll
|
||||
libaprutil-1.dll
|
||||
libapriconv-1.dll
|
||||
libcollada14dom21-d.dll
|
||||
glod.dll
|
||||
)
|
||||
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
|
||||
set(release_files
|
||||
openjpeg.dll
|
||||
libapr-1.dll
|
||||
libaprutil-1.dll
|
||||
libapriconv-1.dll
|
||||
libcollada14dom21.dll
|
||||
glod.dll
|
||||
)
|
||||
|
||||
if(USE_GOOGLE_PERFTOOLS)
|
||||
set(debug_files ${debug_files} libtcmalloc_minimal-debug.dll)
|
||||
set(release_files ${release_files} libtcmalloc_minimal.dll)
|
||||
endif(USE_GOOGLE_PERFTOOLS)
|
||||
|
||||
if (FMOD)
|
||||
set(debug_files ${debug_files} fmod.dll)
|
||||
set(release_files ${release_files} fmod.dll)
|
||||
endif (FMOD)
|
||||
|
||||
#*******************************
|
||||
# Copy MS C runtime dlls, required for packaging.
|
||||
# *TODO - Adapt this to support VC9
|
||||
if (MSVC80)
|
||||
FIND_PATH(debug_msvc8_redist_path msvcr80d.dll
|
||||
PATHS
|
||||
${MSVC_DEBUG_REDIST_PATH}
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT
|
||||
NO_DEFAULT_PATH
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if(EXISTS ${debug_msvc8_redist_path})
|
||||
set(debug_msvc8_files
|
||||
msvcr80d.dll
|
||||
msvcp80d.dll
|
||||
Microsoft.VC80.DebugCRT.manifest
|
||||
)
|
||||
|
||||
copy_if_different(
|
||||
${debug_msvc8_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_DEBUG}"
|
||||
out_targets
|
||||
${debug_msvc8_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
endif (EXISTS ${debug_msvc8_redist_path})
|
||||
|
||||
FIND_PATH(release_msvc8_redist_path msvcr80.dll
|
||||
PATHS
|
||||
${MSVC_REDIST_PATH}
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT
|
||||
NO_DEFAULT_PATH
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if(EXISTS ${release_msvc8_redist_path})
|
||||
set(release_msvc8_files
|
||||
msvcr80.dll
|
||||
msvcp80.dll
|
||||
Microsoft.VC80.CRT.manifest
|
||||
)
|
||||
|
||||
copy_if_different(
|
||||
${release_msvc8_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_RELEASE}"
|
||||
out_targets
|
||||
${release_msvc8_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_msvc8_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
|
||||
out_targets
|
||||
${release_msvc8_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
endif (EXISTS ${release_msvc8_redist_path})
|
||||
endif (MSVC80)
|
||||
|
||||
elseif(DARWIN)
|
||||
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug/Resources")
|
||||
set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Resources")
|
||||
set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release/Resources")
|
||||
|
||||
set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/universal-darwin")
|
||||
set(vivox_files
|
||||
SLVoice
|
||||
libsndfile.dylib
|
||||
libvivoxoal.dylib
|
||||
libortp.dylib
|
||||
libvivoxplatform.dylib
|
||||
libvivoxsdk.dylib
|
||||
)
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_debug")
|
||||
set(debug_files
|
||||
)
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release")
|
||||
set(release_files
|
||||
libapr-1.0.3.7.dylib
|
||||
libapr-1.dylib
|
||||
libaprutil-1.0.3.8.dylib
|
||||
libaprutil-1.dylib
|
||||
libexpat.0.5.0.dylib
|
||||
libexpat.dylib
|
||||
libGLOD.dylib
|
||||
libllqtwebkit.dylib
|
||||
libndofdev.dylib
|
||||
libexception_handler.dylib
|
||||
libcollada14dom.dylib
|
||||
)
|
||||
|
||||
# fmod is statically linked on darwin
|
||||
set(fmod_files "")
|
||||
|
||||
elseif(LINUX)
|
||||
# linux is weird, multiple side by side configurations aren't supported
|
||||
# and we don't seem to have any debug shared libs built yet anyways...
|
||||
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}")
|
||||
set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}")
|
||||
set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}")
|
||||
|
||||
set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux")
|
||||
set(vivox_files
|
||||
libsndfile.so.1
|
||||
libortp.so
|
||||
libvivoxoal.so.1
|
||||
libvivoxplatform.so
|
||||
libvivoxsdk.so
|
||||
SLVoice
|
||||
)
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_debug")
|
||||
set(debug_files
|
||||
)
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_release_client")
|
||||
# *FIX - figure out what to do with duplicate libalut.so here -brad
|
||||
set(release_files
|
||||
libapr-1.so.0
|
||||
libaprutil-1.so.0
|
||||
libatk-1.0.so
|
||||
libbreakpad_client.so.0
|
||||
libcrypto.so.0.9.7
|
||||
libdb-4.2.so
|
||||
libexpat.so
|
||||
libexpat.so.1
|
||||
libgmock_main.so
|
||||
libgmock.so.0
|
||||
libgmodule-2.0.so
|
||||
libgobject-2.0.so
|
||||
libgtest_main.so
|
||||
libgtest.so.0
|
||||
libopenal.so
|
||||
libopenjpeg.so
|
||||
libssl.so
|
||||
libstacktrace.so
|
||||
libtcmalloc_minimal.so
|
||||
libtcmalloc_minimal.so.0
|
||||
libuuid.so.1
|
||||
libssl.so.0.9.7
|
||||
)
|
||||
|
||||
if (FMOD)
|
||||
set(release_files ${release_files} "libfmod-3.75.so")
|
||||
endif (FMOD)
|
||||
|
||||
else(WINDOWS)
|
||||
message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")
|
||||
set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux")
|
||||
set(vivox_files "")
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug")
|
||||
set(debug_files "")
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release")
|
||||
set(release_files "")
|
||||
|
||||
set(fmod_files "")
|
||||
|
||||
set(debug_llkdu_src "")
|
||||
set(debug_llkdu_dst "")
|
||||
set(release_llkdu_src "")
|
||||
set(release_llkdu_dst "")
|
||||
set(relwithdebinfo_llkdu_dst "")
|
||||
endif(WINDOWS)
|
||||
|
||||
|
||||
################################################################
|
||||
# Done building the file lists, now set up the copy commands.
|
||||
################################################################
|
||||
|
||||
copy_if_different(
|
||||
${vivox_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_DEBUG}"
|
||||
out_targets
|
||||
${vivox_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${vivox_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_RELEASE}"
|
||||
out_targets
|
||||
${vivox_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${vivox_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
|
||||
out_targets
|
||||
${vivox_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
|
||||
|
||||
copy_if_different(
|
||||
${debug_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_DEBUG}"
|
||||
out_targets
|
||||
${debug_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_RELEASE}"
|
||||
out_targets
|
||||
${release_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
|
||||
out_targets
|
||||
${release_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
if (FMOD_SDK_DIR)
|
||||
copy_if_different(
|
||||
${FMOD_SDK_DIR}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/Debug"
|
||||
out_targets
|
||||
${fmod_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
copy_if_different(
|
||||
${FMOD_SDK_DIR}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/Release"
|
||||
out_targets
|
||||
${fmod_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
copy_if_different(
|
||||
${FMOD_SDK_DIR}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDbgInfo"
|
||||
out_targets
|
||||
${fmod_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
endif (FMOD_SDK_DIR)
|
||||
|
||||
if(NOT STANDALONE)
|
||||
add_custom_target(
|
||||
stage_third_party_libs ALL
|
||||
DEPENDS ${third_party_targets}
|
||||
)
|
||||
endif(NOT STANDALONE)
|
||||
# -*- cmake -*-
|
||||
|
||||
# The copy_win_libs folder contains file lists and a script used to
|
||||
# copy dlls, exes and such needed to run the SecondLife from within
|
||||
# VisualStudio.
|
||||
|
||||
include(CMakeCopyIfDifferent)
|
||||
include(Linking)
|
||||
|
||||
###################################################################
|
||||
# set up platform specific lists of files that need to be copied
|
||||
###################################################################
|
||||
if(WINDOWS)
|
||||
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug")
|
||||
set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo")
|
||||
set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release")
|
||||
|
||||
#*******************************
|
||||
# VIVOX - *NOTE: no debug version
|
||||
set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
|
||||
set(vivox_files
|
||||
SLVoice.exe
|
||||
libsndfile-1.dll
|
||||
vivoxplatform.dll
|
||||
vivoxsdk.dll
|
||||
ortp.dll
|
||||
zlib1.dll
|
||||
vivoxoal.dll
|
||||
)
|
||||
|
||||
#*******************************
|
||||
# Misc shared libs
|
||||
|
||||
set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
|
||||
set(debug_files
|
||||
openjpegd.dll
|
||||
libapr-1.dll
|
||||
libaprutil-1.dll
|
||||
libapriconv-1.dll
|
||||
ssleay32.dll
|
||||
libeay32.dll
|
||||
libcollada14dom21-d.dll
|
||||
glod.dll
|
||||
)
|
||||
|
||||
set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
|
||||
set(release_files
|
||||
openjpeg.dll
|
||||
libapr-1.dll
|
||||
libaprutil-1.dll
|
||||
libapriconv-1.dll
|
||||
ssleay32.dll
|
||||
libeay32.dll
|
||||
libcollada14dom21.dll
|
||||
glod.dll
|
||||
)
|
||||
|
||||
if(USE_GOOGLE_PERFTOOLS)
|
||||
set(debug_files ${debug_files} libtcmalloc_minimal-debug.dll)
|
||||
set(release_files ${release_files} libtcmalloc_minimal.dll)
|
||||
endif(USE_GOOGLE_PERFTOOLS)
|
||||
|
||||
if (FMOD)
|
||||
set(debug_files ${debug_files} fmod.dll)
|
||||
set(release_files ${release_files} fmod.dll)
|
||||
endif (FMOD)
|
||||
|
||||
#*******************************
|
||||
# Copy MS C runtime dlls, required for packaging.
|
||||
# *TODO - Adapt this to support VC9
|
||||
if (MSVC80)
|
||||
FIND_PATH(debug_msvc8_redist_path msvcr80d.dll
|
||||
PATHS
|
||||
${MSVC_DEBUG_REDIST_PATH}
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT
|
||||
NO_DEFAULT_PATH
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if(EXISTS ${debug_msvc8_redist_path})
|
||||
set(debug_msvc8_files
|
||||
msvcr80d.dll
|
||||
msvcp80d.dll
|
||||
Microsoft.VC80.DebugCRT.manifest
|
||||
)
|
||||
|
||||
copy_if_different(
|
||||
${debug_msvc8_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_DEBUG}"
|
||||
out_targets
|
||||
${debug_msvc8_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
endif (EXISTS ${debug_msvc8_redist_path})
|
||||
|
||||
FIND_PATH(release_msvc8_redist_path msvcr80.dll
|
||||
PATHS
|
||||
${MSVC_REDIST_PATH}
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT
|
||||
NO_DEFAULT_PATH
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if(EXISTS ${release_msvc8_redist_path})
|
||||
set(release_msvc8_files
|
||||
msvcr80.dll
|
||||
msvcp80.dll
|
||||
Microsoft.VC80.CRT.manifest
|
||||
)
|
||||
|
||||
copy_if_different(
|
||||
${release_msvc8_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_RELEASE}"
|
||||
out_targets
|
||||
${release_msvc8_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_msvc8_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
|
||||
out_targets
|
||||
${release_msvc8_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
endif (EXISTS ${release_msvc8_redist_path})
|
||||
elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010
|
||||
FIND_PATH(debug_msvc10_redist_path msvcr100d.dll
|
||||
PATHS
|
||||
${MSVC_DEBUG_REDIST_PATH}
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC100.DebugCRT
|
||||
NO_DEFAULT_PATH
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if(EXISTS ${debug_msvc10_redist_path})
|
||||
set(debug_msvc10_files
|
||||
msvcr100d.dll
|
||||
msvcp100d.dll
|
||||
)
|
||||
|
||||
copy_if_different(
|
||||
${debug_msvc10_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_DEBUG}"
|
||||
out_targets
|
||||
${debug_msvc10_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
endif ()
|
||||
|
||||
FIND_PATH(release_msvc10_redist_path msvcr100.dll
|
||||
PATHS
|
||||
${MSVC_REDIST_PATH}
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC100.CRT
|
||||
NO_DEFAULT_PATH
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if(EXISTS ${release_msvc10_redist_path})
|
||||
set(release_msvc10_files
|
||||
msvcr100.dll
|
||||
msvcp100.dll
|
||||
)
|
||||
|
||||
copy_if_different(
|
||||
${release_msvc10_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_RELEASE}"
|
||||
out_targets
|
||||
${release_msvc10_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_msvc10_redist_path}
|
||||
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
|
||||
out_targets
|
||||
${release_msvc10_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
endif ()
|
||||
endif (MSVC80)
|
||||
|
||||
elseif(DARWIN)
|
||||
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug/Resources")
|
||||
set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Resources")
|
||||
set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release/Resources")
|
||||
|
||||
set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
|
||||
set(vivox_files
|
||||
SLVoice
|
||||
libsndfile.dylib
|
||||
libvivoxoal.dylib
|
||||
libortp.dylib
|
||||
libvivoxplatform.dylib
|
||||
libvivoxsdk.dylib
|
||||
)
|
||||
set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
|
||||
set(debug_files
|
||||
)
|
||||
set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
|
||||
set(release_files
|
||||
libapr-1.0.dylib
|
||||
libapr-1.dylib
|
||||
libaprutil-1.0.dylib
|
||||
libaprutil-1.dylib
|
||||
libexpat.1.5.2.dylib
|
||||
libexpat.dylib
|
||||
libGLOD.dylib
|
||||
libllqtwebkit.dylib
|
||||
libndofdev.dylib
|
||||
libexception_handler.dylib
|
||||
libcollada14dom.dylib
|
||||
)
|
||||
|
||||
# fmod is statically linked on darwin
|
||||
set(fmod_files "")
|
||||
|
||||
elseif(LINUX)
|
||||
# linux is weird, multiple side by side configurations aren't supported
|
||||
# and we don't seem to have any debug shared libs built yet anyways...
|
||||
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}")
|
||||
set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}")
|
||||
set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}")
|
||||
|
||||
set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
|
||||
set(vivox_files
|
||||
libsndfile.so.1
|
||||
libortp.so
|
||||
libvivoxoal.so.1
|
||||
libvivoxplatform.so
|
||||
libvivoxsdk.so
|
||||
SLVoice
|
||||
)
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
|
||||
set(debug_files
|
||||
)
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
|
||||
# *FIX - figure out what to do with duplicate libalut.so here -brad
|
||||
set(release_files
|
||||
libapr-1.so.0
|
||||
libaprutil-1.so.0
|
||||
libatk-1.0.so
|
||||
libbreakpad_client.so.0
|
||||
libcrypto.so.0.9.8
|
||||
libdb-5.1.so
|
||||
libexpat.so
|
||||
libexpat.so.1
|
||||
libgmock_main.so
|
||||
libgmock.so.0
|
||||
libgmodule-2.0.so
|
||||
libgobject-2.0.so
|
||||
libgtest_main.so
|
||||
libgtest.so.0
|
||||
libopenal.so
|
||||
libopenjpeg.so
|
||||
libssl.so
|
||||
libtcmalloc_minimal.so
|
||||
libuuid.so.16
|
||||
libuuid.so.16.0.22
|
||||
libssl.so.0.9.8
|
||||
libfontconfig.so.1.4.4
|
||||
)
|
||||
|
||||
if (FMOD)
|
||||
set(release_files ${release_files} "libfmod-3.75.so")
|
||||
endif (FMOD)
|
||||
|
||||
else(WINDOWS)
|
||||
message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")
|
||||
set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux")
|
||||
set(vivox_files "")
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug")
|
||||
set(debug_files "")
|
||||
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
|
||||
# or ARCH_PREBUILT_DIRS
|
||||
set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release")
|
||||
set(release_files "")
|
||||
|
||||
set(fmod_files "")
|
||||
|
||||
set(debug_llkdu_src "")
|
||||
set(debug_llkdu_dst "")
|
||||
set(release_llkdu_src "")
|
||||
set(release_llkdu_dst "")
|
||||
set(relwithdebinfo_llkdu_dst "")
|
||||
endif(WINDOWS)
|
||||
|
||||
|
||||
################################################################
|
||||
# Done building the file lists, now set up the copy commands.
|
||||
################################################################
|
||||
|
||||
copy_if_different(
|
||||
${vivox_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_DEBUG}"
|
||||
out_targets
|
||||
${vivox_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${vivox_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_RELEASE}"
|
||||
out_targets
|
||||
${vivox_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${vivox_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
|
||||
out_targets
|
||||
${vivox_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
|
||||
|
||||
copy_if_different(
|
||||
${debug_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_DEBUG}"
|
||||
out_targets
|
||||
${debug_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_RELEASE}"
|
||||
out_targets
|
||||
${release_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_src_dir}
|
||||
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
|
||||
out_targets
|
||||
${release_files}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
if (FMOD_SDK_DIR)
|
||||
copy_if_different(
|
||||
${FMOD_SDK_DIR}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/Debug"
|
||||
out_targets
|
||||
${fmod_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
copy_if_different(
|
||||
${FMOD_SDK_DIR}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/Release"
|
||||
out_targets
|
||||
${fmod_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
copy_if_different(
|
||||
${FMOD_SDK_DIR}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDbgInfo"
|
||||
out_targets
|
||||
${fmod_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
endif (FMOD_SDK_DIR)
|
||||
|
||||
if(NOT STANDALONE)
|
||||
add_custom_target(
|
||||
stage_third_party_libs ALL
|
||||
DEPENDS ${third_party_targets}
|
||||
)
|
||||
endif(NOT STANDALONE)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ elseif (LINUX)
|
|||
use_prebuilt_binary(dbusglib)
|
||||
set(DBUSGLIB_FOUND ON FORCE BOOL)
|
||||
set(DBUSGLIB_INCLUDE_DIRS
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0
|
||||
${LIBS_PREBUILT_DIR}/include/dbus
|
||||
)
|
||||
# We don't need to explicitly link against dbus-glib itself, because
|
||||
# the viewer probes for the system's copy at runtime.
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
if (VIEWER AND WINDOWS)
|
||||
find_path(DIRECTX_INCLUDE_DIR dxdiag.h
|
||||
"$ENV{DXSDK_DIR}/Include"
|
||||
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2009)/Include"
|
||||
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Include"
|
||||
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Include"
|
||||
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Include"
|
||||
|
|
@ -24,6 +25,7 @@ if (VIEWER AND WINDOWS)
|
|||
|
||||
find_path(DIRECTX_LIBRARY_DIR dxguid.lib
|
||||
"$ENV{DXSDK_DIR}/Lib/x86"
|
||||
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2009)/Lib/x86"
|
||||
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Lib/x86"
|
||||
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Lib/x86"
|
||||
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Lib/x86"
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
set(ELFIO_FIND_QUIETLY ON)
|
||||
|
||||
if (STANDALONE)
|
||||
include(FindELFIO)
|
||||
elseif (LINUX)
|
||||
use_prebuilt_binary(elfio)
|
||||
set(ELFIO_LIBRARIES ELFIO)
|
||||
set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
set(ELFIO_FOUND "YES")
|
||||
endif (STANDALONE)
|
||||
|
||||
if (ELFIO_FOUND)
|
||||
add_definitions(-DLL_ELFBIN=1)
|
||||
else (ELFIO_FOUND)
|
||||
set(ELFIO_INCLUDE_DIR "")
|
||||
endif (ELFIO_FOUND)
|
||||
|
|
@ -1,26 +1,39 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
set(FMOD ON CACHE BOOL "Use FMOD sound library.")
|
||||
# FMOD can be set when launching the make using the argument -DFMOD:BOOL=ON
|
||||
# When building using proprietary binaries though (i.e. having access to LL private servers),
|
||||
# we always build with FMOD.
|
||||
# Open source devs should use the -DFMOD:BOOL=ON then if they want to build with FMOD, whether
|
||||
# they are using STANDALONE or not.
|
||||
if (INSTALL_PROPRIETARY)
|
||||
set(FMOD ON CACHE BOOL "Use FMOD sound library.")
|
||||
endif (INSTALL_PROPRIETARY)
|
||||
|
||||
if (FMOD)
|
||||
if (STANDALONE)
|
||||
# In that case, we use the version of the library installed on the system
|
||||
set(FMOD_FIND_REQUIRED ON)
|
||||
include(FindFMOD)
|
||||
else (STANDALONE)
|
||||
if (INSTALL_PROPRIETARY)
|
||||
include(Prebuilt)
|
||||
use_prebuilt_binary(fmod)
|
||||
endif (INSTALL_PROPRIETARY)
|
||||
|
||||
if (WINDOWS)
|
||||
set(FMOD_LIBRARY fmod)
|
||||
elseif (DARWIN)
|
||||
set(FMOD_LIBRARY fmod)
|
||||
elseif (LINUX)
|
||||
set(FMOD_LIBRARY fmod-3.75)
|
||||
endif (WINDOWS)
|
||||
|
||||
SET(FMOD_LIBRARIES ${FMOD_LIBRARY})
|
||||
set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
if (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
|
||||
# If the path have been specified in the arguments, use that
|
||||
set(FMOD_LIBRARIES ${FMOD_LIBRARY})
|
||||
MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}")
|
||||
else (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
|
||||
# If not, we're going to try to get the package listed in autobuild.xml
|
||||
# Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL)
|
||||
# as accessing the private LL location will fail if you don't have the credential
|
||||
include(Prebuilt)
|
||||
use_prebuilt_binary(fmod)
|
||||
if (WINDOWS)
|
||||
set(FMOD_LIBRARY fmod)
|
||||
elseif (DARWIN)
|
||||
set(FMOD_LIBRARY fmod)
|
||||
elseif (LINUX)
|
||||
set(FMOD_LIBRARY fmod-3.75)
|
||||
endif (WINDOWS)
|
||||
set(FMOD_LIBRARIES ${FMOD_LIBRARY})
|
||||
set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
endif (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
|
||||
endif (STANDALONE)
|
||||
endif (FMOD)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
# -*- cmake -*-
|
||||
#
|
||||
# Find the autobuild tool
|
||||
#
|
||||
# Output variables:
|
||||
#
|
||||
# AUTOBUILD_EXECUTABLE - path to autobuild or pautobuild executable
|
||||
|
||||
# *TODO - if cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var
|
||||
# update this to check for that case
|
||||
|
||||
IF (NOT AUTOBUILD_EXECUTABLE)
|
||||
IF(WIN32)
|
||||
SET(AUTOBUILD_EXE_NAMES autobuild.cmd autobuild.exe)
|
||||
ELSE(WIN32)
|
||||
SET(AUTOBUILD_EXE_NAMES autobuild)
|
||||
ENDIF(WIN32)
|
||||
|
||||
SET(AUTOBUILD_EXECUTABLE)
|
||||
FIND_PROGRAM(
|
||||
AUTOBUILD_EXECUTABLE
|
||||
NAMES ${AUTOBUILD_EXE_NAMES}
|
||||
PATHS
|
||||
ENV PATH
|
||||
${CMAKE_SOURCE_DIR}/..
|
||||
${CMAKE_SOURCE_DIR}/../..
|
||||
${CMAKE_SOURCE_DIR}/../../..
|
||||
PATH_SUFFIXES "/autobuild/bin/"
|
||||
)
|
||||
|
||||
IF (AUTOBUILD_EXECUTABLE)
|
||||
GET_FILENAME_COMPONENT(_autobuild_name ${AUTOBUILD_EXECUTABLE} NAME_WE)
|
||||
MESSAGE(STATUS "Using autobuild at: ${AUTOBUILD_EXECUTABLE}")
|
||||
ELSE (AUTOBUILD_EXECUTABLE)
|
||||
IF (AUTOBUILD_FIND_REQUIRED)
|
||||
MESSAGE(FATAL_ERROR "Could not find autobuild executable")
|
||||
ENDIF (AUTOBUILD_FIND_REQUIRED)
|
||||
ENDIF (AUTOBUILD_EXECUTABLE)
|
||||
|
||||
MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE)
|
||||
ENDIF (NOT AUTOBUILD_EXECUTABLE)
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
FIND_PATH(FMOD_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod)
|
||||
|
||||
SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmod-3.75)
|
||||
SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmodex fmod-3.75)
|
||||
FIND_LIBRARY(FMOD_LIBRARY
|
||||
NAMES ${FMOD_NAMES}
|
||||
PATH_SUFFIXES fmod
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ else (STANDALONE)
|
|||
use_prebuilt_binary(freetype)
|
||||
if (LINUX)
|
||||
set(FREETYPE_INCLUDE_DIRS
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||
${LIBS_PREBUILT_DIR}/include)
|
||||
else (LINUX)
|
||||
set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
||||
endif (LINUX)
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ elseif (LINUX)
|
|||
set(GSTREAMER010_FOUND ON FORCE BOOL)
|
||||
set(GSTREAMER010_PLUGINS_BASE_FOUND ON FORCE BOOL)
|
||||
set(GSTREAMER010_INCLUDE_DIRS
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/gstreamer-0.10
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/libxml2
|
||||
${LIBS_PREBUILT_DIR}/include/gstreamer-0.10
|
||||
${LIBS_PREBUILT_DIR}/include/glib-2.0
|
||||
${LIBS_PREBUILT_DIR}/include/libxml2
|
||||
)
|
||||
# We don't need to explicitly link against gstreamer itself, because
|
||||
# LLMediaImplGStreamer probes for the system's copy at runtime.
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ include(Prebuilt)
|
|||
if (STANDALONE)
|
||||
include(FindGooglePerfTools)
|
||||
else (STANDALONE)
|
||||
use_prebuilt_binary(google)
|
||||
if (WINDOWS)
|
||||
use_prebuilt_binary(tcmalloc)
|
||||
set(TCMALLOC_LIBRARIES
|
||||
|
|
@ -13,13 +12,12 @@ else (STANDALONE)
|
|||
set(GOOGLE_PERFTOOLS_FOUND "YES")
|
||||
endif (WINDOWS)
|
||||
if (LINUX)
|
||||
use_prebuilt_binary(tcmalloc)
|
||||
use_prebuilt_binary(google-perftools)
|
||||
set(TCMALLOC_LIBRARIES
|
||||
tcmalloc_minimal)
|
||||
set(STACKTRACE_LIBRARIES stacktrace)
|
||||
set(PROFILER_LIBRARIES profiler)
|
||||
set(GOOGLE_PERFTOOLS_INCLUDE_DIR
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||
${LIBS_PREBUILT_DIR}/include)
|
||||
set(GOOGLE_PERFTOOLS_FOUND "YES")
|
||||
endif (LINUX)
|
||||
endif (STANDALONE)
|
||||
|
|
|
|||
|
|
@ -12,10 +12,7 @@ else (STANDALONE)
|
|||
if (LINUX)
|
||||
set(JPEG_LIBRARIES jpeg)
|
||||
elseif (DARWIN)
|
||||
set(JPEG_LIBRARIES
|
||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/liblljpeg.a
|
||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/liblljpeg.a
|
||||
)
|
||||
set(JPEG_LIBRARIES jpeg)
|
||||
elseif (WINDOWS)
|
||||
set(JPEG_LIBRARIES jpeglib)
|
||||
endif (LINUX)
|
||||
|
|
|
|||
|
|
@ -11,12 +11,12 @@ else (STANDALONE)
|
|||
use_prebuilt_binary(jsoncpp)
|
||||
if (WINDOWS)
|
||||
set(JSONCPP_LIBRARIES
|
||||
debug json_vc80d
|
||||
optimized json_vc80)
|
||||
debug json_vc100debug_libmt.lib
|
||||
optimized json_vc100_libmt)
|
||||
elseif (DARWIN)
|
||||
set(JSONCPP_LIBRARIES json_mac-universal-gcc_libmt)
|
||||
set(JSONCPP_LIBRARIES libjson_linux-gcc-4.0.1_libmt.a)
|
||||
elseif (LINUX)
|
||||
set(JSONCPP_LIBRARIES jsoncpp)
|
||||
set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)
|
||||
endif (WINDOWS)
|
||||
set(JSONCPP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/jsoncpp)
|
||||
set(JSONCPP_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json")
|
||||
endif (STANDALONE)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
# -*- cmake -*-
|
||||
include(LLTestCommand)
|
||||
include(GoogleMock)
|
||||
include(Tut)
|
||||
|
||||
MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
|
||||
# Given a project name and a list of sourcefiles (with optional properties on each),
|
||||
|
|
|
|||
|
|
@ -1,20 +1,21 @@
|
|||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
# USE_KDU can be set when launching cmake or develop.py as an option using the argument -DUSE_KDU:BOOL=ON
|
||||
# When building using proprietary binaries though (i.e. having access to LL private servers), we always build with KDU
|
||||
if (INSTALL_PROPRIETARY AND NOT STANDALONE)
|
||||
set(USE_KDU ON)
|
||||
endif (INSTALL_PROPRIETARY AND NOT STANDALONE)
|
||||
# USE_KDU can be set when launching cmake as an option using the argument -DUSE_KDU:BOOL=ON
|
||||
# When building using proprietary binaries though (i.e. having access to LL private servers),
|
||||
# we always build with KDU
|
||||
if (INSTALL_PROPRIETARY)
|
||||
set(USE_KDU ON CACHE BOOL "Use Kakadu library.")
|
||||
endif (INSTALL_PROPRIETARY)
|
||||
|
||||
if (USE_KDU)
|
||||
include(Prebuilt)
|
||||
use_prebuilt_binary(kdu)
|
||||
if (WINDOWS)
|
||||
set(KDU_LIBRARY kdu.lib)
|
||||
else (WINDOWS)
|
||||
set(KDU_LIBRARY libkdu.a)
|
||||
endif (WINDOWS)
|
||||
set(KDU_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/kdu)
|
||||
set(KDU_INCLUDE_DIR ${AUTOBUILD_INSTALL_DIR}/include/kdu)
|
||||
set(LLKDU_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llkdu)
|
||||
set(LLKDU_LIBRARIES llkdu)
|
||||
endif (USE_KDU)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ else (STANDALONE)
|
|||
use_prebuilt_binary(SDL)
|
||||
set (SDL_FOUND TRUE)
|
||||
set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux)
|
||||
set (SDL_LIBRARY SDL)
|
||||
set (SDL_LIBRARY SDL directfb fusion direct)
|
||||
endif (LINUX AND VIEWER)
|
||||
endif (STANDALONE)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,32 +1,43 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
include(Variables)
|
||||
|
||||
|
||||
if (NOT STANDALONE)
|
||||
set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib)
|
||||
set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release)
|
||||
set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug)
|
||||
if (WINDOWS)
|
||||
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib)
|
||||
set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
|
||||
set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug)
|
||||
set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs")
|
||||
set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged executables")
|
||||
set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
|
||||
set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
|
||||
elseif (LINUX)
|
||||
if (VIEWER)
|
||||
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client)
|
||||
else (VIEWER)
|
||||
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release)
|
||||
endif (VIEWER)
|
||||
set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS})
|
||||
set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS})
|
||||
set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib CACHE FILEPATH "Location of staged .sos")
|
||||
set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin CACHE FILEPATH "Location of staged executables")
|
||||
set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib)
|
||||
set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin)
|
||||
elseif (DARWIN)
|
||||
set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release)
|
||||
set(ARCH_PREBUILT_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
|
||||
set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS_RELEASE})
|
||||
set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs")
|
||||
set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)" CACHE FILEPATH "Location of staged executables")
|
||||
set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
|
||||
set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)")
|
||||
endif (WINDOWS)
|
||||
endif (NOT STANDALONE)
|
||||
|
||||
link_directories(${ARCH_PREBUILT_DIRS})
|
||||
# Autobuild packages must provide 'release' versions of libraries, but may provide versions for
|
||||
# specific build types. AUTOBUILD_LIBS_INSTALL_DIRS lists first the build type directory and then
|
||||
# the 'release' directory (as a default fallback).
|
||||
# *NOTE - we have to take special care to use CMAKE_CFG_INTDIR on IDE generators (like mac and
|
||||
# windows) and CMAKE_BUILD_TYPE on Makefile based generators (like linux). The reason for this is
|
||||
# that CMAKE_BUILD_TYPE is essentially meaningless at configuration time for IDE generators and
|
||||
# CMAKE_CFG_INTDIR is meaningless at build time for Makefile generators
|
||||
if(WINDOWS OR DARWIN)
|
||||
# the cmake xcode and VS generators implicitly append ${CMAKE_CFG_INTDIR} to the library paths for us
|
||||
# fortunately both windows and darwin are case insensitive filesystems so this works.
|
||||
set(AUTOBUILD_LIBS_INSTALL_DIRS "${AUTOBUILD_INSTALL_DIR}/lib/")
|
||||
else(WINDOWS OR DARWIN)
|
||||
# else block is for linux and any other makefile based generators
|
||||
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
|
||||
set(AUTOBUILD_LIBS_INSTALL_DIRS ${AUTOBUILD_INSTALL_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER})
|
||||
endif(WINDOWS OR DARWIN)
|
||||
|
||||
list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
|
||||
link_directories(${AUTOBUILD_LIBS_INSTALL_DIRS})
|
||||
|
||||
if (LINUX)
|
||||
set(DL_LIBRARY dl)
|
||||
|
|
|
|||
|
|
@ -37,9 +37,9 @@ IF (DARWIN)
|
|||
|
||||
ELSE (DARWIN)
|
||||
|
||||
SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||
SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
SET(GLIB_2_0_PLATFORM_INCLUDE_DIR
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0)
|
||||
${LIBS_PREBUILT_DIR}/include/glib-2.0)
|
||||
SET(GLIB_2_0_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/glib-2.0)
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use_prebuilt_binary(mysql)
|
|||
if (LINUX)
|
||||
if (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
||||
set(MYSQL_LIBRARIES mysqlclient)
|
||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
else (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
||||
# Use the native MySQL library on a 64-bit system.
|
||||
set(MYSQL_FIND_QUIETLY ON)
|
||||
|
|
@ -16,9 +16,9 @@ if (LINUX)
|
|||
endif (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
||||
elseif (WINDOWS)
|
||||
set(MYSQL_LIBRARIES mysqlclient)
|
||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
elseif (DARWIN)
|
||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
set(MYSQL_LIBRARIES
|
||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libmysqlclient.a
|
||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libmysqlclient.a
|
||||
|
|
|
|||
|
|
@ -9,18 +9,26 @@ else (LINUX)
|
|||
endif (LINUX)
|
||||
|
||||
if (OPENAL)
|
||||
set(OPENAL_LIB_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/AL")
|
||||
if (STANDALONE)
|
||||
include(FindPkgConfig)
|
||||
include(FindOpenAL)
|
||||
pkg_check_modules(OPENAL_LIB REQUIRED openal)
|
||||
pkg_check_modules(FREEALUT_LIB REQUIRED freealut)
|
||||
else (STANDALONE)
|
||||
use_prebuilt_binary(openal-soft)
|
||||
use_prebuilt_binary(openal_soft)
|
||||
endif (STANDALONE)
|
||||
set(OPENAL_LIBRARIES
|
||||
openal
|
||||
alut
|
||||
if(WINDOWS)
|
||||
set(OPENAL_LIBRARIES
|
||||
OpenAL32
|
||||
alut
|
||||
)
|
||||
else()
|
||||
set(OPENAL_LIBRARIES
|
||||
openal
|
||||
alut
|
||||
)
|
||||
endif()
|
||||
endif (OPENAL)
|
||||
|
||||
if (OPENAL)
|
||||
|
|
|
|||
|
|
@ -5,5 +5,5 @@ if (NOT STANDALONE)
|
|||
use_prebuilt_binary(GL)
|
||||
# possible glh_linear should have its own .cmake file instead
|
||||
use_prebuilt_binary(glh_linear)
|
||||
set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||
set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
endif (NOT STANDALONE)
|
||||
|
|
|
|||
|
|
@ -13,11 +13,11 @@ else (STANDALONE)
|
|||
else (WINDOWS)
|
||||
set(OPENSSL_LIBRARIES ssl)
|
||||
endif (WINDOWS)
|
||||
set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||
set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
||||
endif (STANDALONE)
|
||||
|
||||
if (LINUX)
|
||||
set(CRYPTO_LIBRARIES crypto)
|
||||
elseif (DARWIN)
|
||||
set(CRYPTO_LIBRARIES llcrypto)
|
||||
set(CRYPTO_LIBRARIES crypto)
|
||||
endif (LINUX)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,14 @@ if (STANDALONE)
|
|||
include(FindPNG)
|
||||
else (STANDALONE)
|
||||
use_prebuilt_binary(libpng)
|
||||
set(PNG_LIBRARIES png12)
|
||||
set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng12)
|
||||
if (WINDOWS)
|
||||
set(PNG_LIBRARIES libpng15)
|
||||
set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
|
||||
elseif(DARWIN)
|
||||
set(PNG_LIBRARIES png15)
|
||||
set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
|
||||
else()
|
||||
set(PNG_LIBRARIES png15)
|
||||
set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
|
||||
endif()
|
||||
endif (STANDALONE)
|
||||
|
|
|
|||
|
|
@ -1,36 +1,31 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
include(Python)
|
||||
include(FindSCP)
|
||||
include(FindAutobuild)
|
||||
|
||||
macro (use_prebuilt_binary _binary)
|
||||
if (NOT STANDALONE)
|
||||
if (NOT DEFINED STANDALONE_${_binary})
|
||||
set(STANDALONE_${_binary} ${STANDALONE})
|
||||
endif (NOT DEFINED STANDALONE_${_binary})
|
||||
|
||||
if (NOT STANDALONE_${_binary})
|
||||
if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed)
|
||||
if(INSTALL_PROPRIETARY)
|
||||
include(FindSCP)
|
||||
if(DEBUG_PREBUILT)
|
||||
message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. --scp=${SCP_EXECUTABLE} ${_binary}")
|
||||
endif(DEBUG_PREBUILT)
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE}
|
||||
install.py
|
||||
--install-dir=${CMAKE_SOURCE_DIR}/..
|
||||
--scp=${SCP_EXECUTABLE}
|
||||
${_binary}
|
||||
WORKING_DIRECTORY ${SCRIPTS_DIR}
|
||||
RESULT_VARIABLE ${_binary}_installed
|
||||
)
|
||||
else(INSTALL_PROPRIETARY)
|
||||
if(DEBUG_PREBUILT)
|
||||
message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. ${_binary}")
|
||||
endif(DEBUG_PREBUILT)
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE}
|
||||
install.py
|
||||
--install-dir=${CMAKE_SOURCE_DIR}/..
|
||||
${_binary}
|
||||
WORKING_DIRECTORY ${SCRIPTS_DIR}
|
||||
RESULT_VARIABLE ${_binary}_installed
|
||||
)
|
||||
endif(INSTALL_PROPRIETARY)
|
||||
if(DEBUG_PREBUILT)
|
||||
message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install
|
||||
--install-dir=${AUTOBUILD_INSTALL_DIR}
|
||||
--skip-license-check
|
||||
${_binary} ")
|
||||
endif(DEBUG_PREBUILT)
|
||||
execute_process(COMMAND "${AUTOBUILD_EXECUTABLE}"
|
||||
install
|
||||
--install-dir=${AUTOBUILD_INSTALL_DIR}
|
||||
--skip-license-check
|
||||
${_binary}
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
RESULT_VARIABLE ${_binary}_installed
|
||||
)
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${${_binary}_installed}")
|
||||
else(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed)
|
||||
set(${_binary}_installed 0)
|
||||
|
|
@ -40,5 +35,5 @@ macro (use_prebuilt_binary _binary)
|
|||
"Failed to download or unpack prebuilt '${_binary}'."
|
||||
" Process returned ${${_binary}_installed}.")
|
||||
endif (NOT ${_binary}_installed EQUAL 0)
|
||||
endif (NOT STANDALONE)
|
||||
endif (NOT STANDALONE_${_binary})
|
||||
endmacro (use_prebuilt_binary _binary)
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ elseif (WINDOWS)
|
|||
endif (DEBUG_QUICKTIME_LIBRARY AND RELEASE_QUICKTIME_LIBRARY)
|
||||
|
||||
include_directories(
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/quicktime
|
||||
${LIBS_PREBUILT_DIR}/include/quicktime
|
||||
"${QUICKTIME_SDK_DIR}\\CIncludes"
|
||||
)
|
||||
endif (DARWIN)
|
||||
|
|
|
|||
|
|
@ -5,11 +5,10 @@ include(Python)
|
|||
macro (check_message_template _target)
|
||||
add_custom_command(
|
||||
TARGET ${_target}
|
||||
POST_BUILD
|
||||
PRE_LINK
|
||||
COMMAND ${PYTHON_EXECUTABLE}
|
||||
ARGS ${SCRIPTS_DIR}/md5check.py
|
||||
0441fea513458ade4b81607acf481692
|
||||
${SCRIPTS_DIR}/messages/message_template.msg
|
||||
ARGS ${SCRIPTS_DIR}/template_verifier.py
|
||||
--mode=development --cache_master --master_url=${TEMPLATE_VERIFIER_MASTER_URL} ${TEMPLATE_VERIFIER_OPTIONS}
|
||||
COMMENT "Verifying message template - See http://wiki.secondlife.com/wiki/Template_verifier.py"
|
||||
)
|
||||
endmacro (check_message_template)
|
||||
|
|
|
|||
|
|
@ -51,11 +51,11 @@ else (STANDALONE)
|
|||
endif (LINUX)
|
||||
|
||||
include_directories (
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include
|
||||
${LIBS_PREBUILT_DIR}/include
|
||||
${LIBS_PREBUILT_DIR}/include
|
||||
)
|
||||
foreach(include ${${LL_ARCH}_INCLUDES})
|
||||
include_directories(${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/${include})
|
||||
include_directories(${LIBS_PREBUILT_DIR}/include/${include})
|
||||
endforeach(include)
|
||||
endif (STANDALONE)
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,10 @@
|
|||
|
||||
# Relative and absolute paths to subtrees.
|
||||
|
||||
if(NOT DEFINED COMMON_CMAKE_DIR)
|
||||
set(COMMON_CMAKE_DIR "${CMAKE_SOURCE_DIR}/cmake")
|
||||
endif(NOT DEFINED COMMON_CMAKE_DIR)
|
||||
|
||||
set(LIBS_CLOSED_PREFIX)
|
||||
set(LIBS_OPEN_PREFIX)
|
||||
set(LIBS_SERVER_PREFIX)
|
||||
|
|
@ -27,21 +31,39 @@ set(INTEGRATION_TESTS_PREFIX)
|
|||
set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation")
|
||||
set(INCREMENTAL_LINK OFF CACHE BOOL "Use incremental linking on win32 builds (enable for faster links on some machines)")
|
||||
|
||||
set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX})
|
||||
set(LIBS_OPEN_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX})
|
||||
if(LIBS_CLOSED_DIR)
|
||||
file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR)
|
||||
else(LIBS_CLOSED_DIR)
|
||||
set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX})
|
||||
endif(LIBS_CLOSED_DIR)
|
||||
if(LIBS_COMMON_DIR)
|
||||
file(TO_CMAKE_PATH "${LIBS_COMMON_DIR}" LIBS_COMMON_DIR)
|
||||
else(LIBS_COMMON_DIR)
|
||||
set(LIBS_COMMON_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX})
|
||||
endif(LIBS_COMMON_DIR)
|
||||
set(LIBS_OPEN_DIR ${LIBS_COMMON_DIR})
|
||||
|
||||
set(LIBS_SERVER_DIR ${CMAKE_SOURCE_DIR}/${LIBS_SERVER_PREFIX})
|
||||
set(SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/${SCRIPTS_PREFIX})
|
||||
set(SERVER_DIR ${CMAKE_SOURCE_DIR}/${SERVER_PREFIX})
|
||||
set(VIEWER_DIR ${CMAKE_SOURCE_DIR}/${VIEWER_PREFIX})
|
||||
|
||||
set(LIBS_PREBUILT_DIR ${CMAKE_SOURCE_DIR}/../libraries CACHE PATH
|
||||
set(AUTOBUILD_INSTALL_DIR ${CMAKE_BINARY_DIR}/packages)
|
||||
|
||||
set(LIBS_PREBUILT_DIR ${AUTOBUILD_INSTALL_DIR} CACHE PATH
|
||||
"Location of prebuilt libraries.")
|
||||
|
||||
if (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
|
||||
# We use this as a marker that you can try to use the proprietary libraries.
|
||||
set(INSTALL_PROPRIETARY ON CACHE BOOL "Install proprietary binaries")
|
||||
endif (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
|
||||
set(TEMPLATE_VERIFIER_OPTIONS "" CACHE STRING "Options for scripts/template_verifier.py")
|
||||
set(TEMPLATE_VERIFIER_MASTER_URL "http://bitbucket.org/lindenlab/master-message-template/raw/tip/message_template.msg" CACHE STRING "Location of the master message template")
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
|
||||
"Build type. One of: Debug Release RelWithDebInfo" FORCE)
|
||||
endif (NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(WINDOWS ON BOOL FORCE)
|
||||
|
|
@ -55,20 +77,19 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|||
set(LINUX ON BOOl FORCE)
|
||||
|
||||
# If someone has specified a word size, use that to determine the
|
||||
# architecture. Otherwise, let the compiler specify the word size.
|
||||
# Using uname will break under chroots and other cross arch compiles. RC
|
||||
# architecture. Otherwise, let the architecture specify the word size.
|
||||
if (WORD_SIZE EQUAL 32)
|
||||
set(ARCH i686)
|
||||
elseif (WORD_SIZE EQUAL 64)
|
||||
set(ARCH x86_64)
|
||||
else (WORD_SIZE EQUAL 32)
|
||||
if(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
set(ARCH i686)
|
||||
set(WORD_SIZE 32)
|
||||
else(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
set(ARCH x86_64)
|
||||
execute_process(COMMAND uname -m COMMAND sed s/i.86/i686/
|
||||
OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if (ARCH STREQUAL x86_64)
|
||||
set(WORD_SIZE 64)
|
||||
endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
||||
else (ARCH STREQUAL x86_64)
|
||||
set(WORD_SIZE 32)
|
||||
endif (ARCH STREQUAL x86_64)
|
||||
endif (WORD_SIZE EQUAL 32)
|
||||
|
||||
set(LL_ARCH ${ARCH}_linux)
|
||||
|
|
@ -77,25 +98,12 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|||
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(DARWIN 1)
|
||||
|
||||
# NOTE: If specifying a different SDK with CMAKE_OSX_SYSROOT at configure
|
||||
# time you should also specify CMAKE_OSX_DEPLOYMENT_TARGET explicitly,
|
||||
# otherwise CMAKE_OSX_SYSROOT will be overridden here. We can't just check
|
||||
# for it being unset, as it gets set to the system default :(
|
||||
|
||||
# Default to building against the 10.4u SDK if no deployment target is
|
||||
# specified.
|
||||
if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
|
||||
# NOTE: setting -isysroot is NOT adequate: http://lists.apple.com/archives/Xcode-users/2007/Oct/msg00696.html
|
||||
# see http://public.kitware.com/Bug/view.php?id=9959 + poppy
|
||||
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.4)
|
||||
endif (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
|
||||
|
||||
# GCC 4.2 is incompatible with the MacOSX 10.4 SDK
|
||||
if (${CMAKE_OSX_SYSROOT} MATCHES "10.4u")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.0")
|
||||
endif (${CMAKE_OSX_SYSROOT} MATCHES "10.4u")
|
||||
|
||||
# To support a different SDK update these Xcode settings:
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
|
||||
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
|
||||
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.2")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "DWARF with dSYM File")
|
||||
|
||||
# NOTE: To attempt an i386/PPC Universal build, add this on the configure line:
|
||||
# -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc'
|
||||
|
|
@ -126,6 +134,7 @@ set(VIEWER ON CACHE BOOL "Build Second Life viewer.")
|
|||
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(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")
|
||||
set(STANDALONE OFF CACHE BOOL "Do not use Linden-supplied prebuilt libraries.")
|
||||
|
||||
if (NOT STANDALONE AND EXISTS ${CMAKE_SOURCE_DIR}/llphysics)
|
||||
|
|
@ -142,6 +151,7 @@ For more information, please see JIRA DEV-14943 - Cmake Linux cannot build both
|
|||
endif (LINUX AND SERVER AND VIEWER)
|
||||
|
||||
|
||||
set(USE_PRECOMPILED_HEADERS ON CACHE BOOL "Enable use of precompiled header directives where supported.")
|
||||
set(USE_PRECOMPILED_HEADERS OFF CACHE BOOL "Enable use of precompiled header directives where supported.")
|
||||
|
||||
source_group("CMake Rules" FILES CMakeLists.txt)
|
||||
|
||||
|
|
|
|||
|
|
@ -60,21 +60,18 @@ elseif (LINUX)
|
|||
set(WEBKIT_PLUGIN_LIBRARIES ${LLQTWEBKIT_LIBRARY} ${QT_LIBRARIES} ${QT_PLUGIN_LIBRARIES})
|
||||
set(WEBKIT_PLUGIN_LIBRARIES
|
||||
llqtwebkit
|
||||
|
||||
qgif
|
||||
# qico
|
||||
qjpeg
|
||||
# qpng
|
||||
# qtiff
|
||||
# qsvg
|
||||
|
||||
# QtSvg
|
||||
QtWebKit
|
||||
QtOpenGL
|
||||
QtNetwork
|
||||
QtGui
|
||||
QtCore
|
||||
|
||||
qgif
|
||||
qjpeg
|
||||
jpeg
|
||||
fontconfig
|
||||
X11
|
||||
|
|
|
|||
|
|
@ -9,7 +9,10 @@ if (STANDALONE)
|
|||
else (STANDALONE)
|
||||
use_prebuilt_binary(xmlrpc-epi)
|
||||
if (WINDOWS)
|
||||
set(XMLRPCEPI_LIBRARIES xmlrpcepi)
|
||||
set(XMLRPCEPI_LIBRARIES
|
||||
debug xmlrpc-epid
|
||||
optimized xmlrpc-epi
|
||||
)
|
||||
else (WINDOWS)
|
||||
set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
|
||||
endif (WINDOWS)
|
||||
|
|
|
|||
863
indra/develop.py
863
indra/develop.py
|
|
@ -1,863 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
"""\
|
||||
@file develop.py
|
||||
@authors Bryan O'Sullivan, Mark Palange, Aaron Brashears
|
||||
@brief Fire and forget script to appropriately configure cmake for SL.
|
||||
|
||||
$LicenseInfo:firstyear=2007&license=viewerlgpl$
|
||||
Second Life Viewer Source Code
|
||||
Copyright (C) 2007-2011, Linden Research, Inc.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation;
|
||||
version 2.1 of the License only.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
$/LicenseInfo$
|
||||
"""
|
||||
|
||||
|
||||
import errno
|
||||
import getopt
|
||||
import os
|
||||
import random
|
||||
import re
|
||||
import shutil
|
||||
import socket
|
||||
import sys
|
||||
import commands
|
||||
import subprocess
|
||||
|
||||
class CommandError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def mkdir(path):
|
||||
try:
|
||||
os.mkdir(path)
|
||||
return path
|
||||
except OSError, err:
|
||||
if err.errno != errno.EEXIST or not os.path.isdir(path):
|
||||
raise
|
||||
|
||||
def getcwd():
|
||||
cwd = os.getcwd()
|
||||
if 'a' <= cwd[0] <= 'z' and cwd[1] == ':':
|
||||
# CMake wants DOS drive letters to be in uppercase. The above
|
||||
# condition never asserts on platforms whose full path names
|
||||
# always begin with a slash, so we don't need to test whether
|
||||
# we are running on Windows.
|
||||
cwd = cwd[0].upper() + cwd[1:]
|
||||
return cwd
|
||||
|
||||
def quote(opts):
|
||||
return '"' + '" "'.join([ opt.replace('"', '') for opt in opts ]) + '"'
|
||||
|
||||
class PlatformSetup(object):
|
||||
generator = None
|
||||
build_types = {}
|
||||
for t in ('Debug', 'Release', 'RelWithDebInfo'):
|
||||
build_types[t.lower()] = t
|
||||
|
||||
build_type = build_types['relwithdebinfo']
|
||||
standalone = 'OFF'
|
||||
unattended = 'OFF'
|
||||
universal = 'OFF'
|
||||
project_name = 'SecondLife'
|
||||
distcc = True
|
||||
cmake_opts = []
|
||||
word_size = 32
|
||||
using_express = False
|
||||
|
||||
def __init__(self):
|
||||
self.script_dir = os.path.realpath(
|
||||
os.path.dirname(__import__(__name__).__file__))
|
||||
|
||||
def os(self):
|
||||
'''Return the name of the OS.'''
|
||||
|
||||
raise NotImplemented('os')
|
||||
|
||||
def arch(self):
|
||||
'''Return the CPU architecture.'''
|
||||
|
||||
return None
|
||||
|
||||
def platform(self):
|
||||
'''Return a stringified two-tuple of the OS name and CPU
|
||||
architecture.'''
|
||||
|
||||
ret = self.os()
|
||||
if self.arch():
|
||||
ret += '-' + self.arch()
|
||||
return ret
|
||||
|
||||
def build_dirs(self):
|
||||
'''Return the top-level directories in which builds occur.
|
||||
|
||||
This can return more than one directory, e.g. if doing a
|
||||
32-bit viewer and server build on Linux.'''
|
||||
|
||||
return ['build-' + self.platform()]
|
||||
|
||||
def cmake_commandline(self, src_dir, build_dir, opts, simple):
|
||||
'''Return the command line to run cmake with.'''
|
||||
|
||||
args = dict(
|
||||
dir=src_dir,
|
||||
generator=self.generator,
|
||||
opts=quote(opts),
|
||||
standalone=self.standalone,
|
||||
unattended=self.unattended,
|
||||
word_size=self.word_size,
|
||||
type=self.build_type.upper(),
|
||||
)
|
||||
#if simple:
|
||||
# return 'cmake %(opts)s %(dir)r' % args
|
||||
return ('cmake -DCMAKE_BUILD_TYPE:STRING=%(type)s '
|
||||
'-DSTANDALONE:BOOL=%(standalone)s '
|
||||
'-DUNATTENDED:BOOL=%(unattended)s '
|
||||
'-DWORD_SIZE:STRING=%(word_size)s '
|
||||
'-G %(generator)r %(opts)s %(dir)r' % args)
|
||||
|
||||
def run_cmake(self, args=[]):
|
||||
'''Run cmake.'''
|
||||
|
||||
# do a sanity check to make sure we have a generator
|
||||
if not hasattr(self, 'generator'):
|
||||
raise "No generator available for '%s'" % (self.__name__,)
|
||||
cwd = getcwd()
|
||||
created = []
|
||||
try:
|
||||
for d in self.build_dirs():
|
||||
simple = True
|
||||
if mkdir(d):
|
||||
created.append(d)
|
||||
simple = False
|
||||
try:
|
||||
os.chdir(d)
|
||||
cmd = self.cmake_commandline(cwd, d, args, simple)
|
||||
print 'Running %r in %r' % (cmd, d)
|
||||
self.run(cmd, 'cmake')
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
except:
|
||||
# If we created a directory in which to run cmake and
|
||||
# something went wrong, the directory probably just
|
||||
# contains garbage, so delete it.
|
||||
os.chdir(cwd)
|
||||
for d in created:
|
||||
print 'Cleaning %r' % d
|
||||
shutil.rmtree(d)
|
||||
raise
|
||||
|
||||
def parse_build_opts(self, arguments):
|
||||
opts, targets = getopt.getopt(arguments, 'o:', ['option='])
|
||||
build_opts = []
|
||||
for o, a in opts:
|
||||
if o in ('-o', '--option'):
|
||||
build_opts.append(a)
|
||||
return build_opts, targets
|
||||
|
||||
def run_build(self, opts, targets):
|
||||
'''Build the default targets for this platform.'''
|
||||
|
||||
raise NotImplemented('run_build')
|
||||
|
||||
def cleanup(self):
|
||||
'''Delete all build directories.'''
|
||||
|
||||
cleaned = 0
|
||||
for d in self.build_dirs():
|
||||
if os.path.isdir(d):
|
||||
print 'Cleaning %r' % d
|
||||
shutil.rmtree(d)
|
||||
cleaned += 1
|
||||
if not cleaned:
|
||||
print 'Nothing to clean up!'
|
||||
|
||||
def is_internal_tree(self):
|
||||
'''Indicate whether we are building in an internal source tree.'''
|
||||
|
||||
return os.path.isdir(os.path.join(self.script_dir, 'newsim'))
|
||||
|
||||
def find_in_path(self, name, defval=None, basename=False):
|
||||
for ext in self.exe_suffixes:
|
||||
name_ext = name + ext
|
||||
if os.sep in name_ext:
|
||||
path = os.path.abspath(name_ext)
|
||||
if os.access(path, os.X_OK):
|
||||
return [basename and os.path.basename(path) or path]
|
||||
for p in os.getenv('PATH', self.search_path).split(os.pathsep):
|
||||
path = os.path.join(p, name_ext)
|
||||
if os.access(path, os.X_OK):
|
||||
return [basename and os.path.basename(path) or path]
|
||||
if defval:
|
||||
return [defval]
|
||||
return []
|
||||
|
||||
|
||||
class UnixSetup(PlatformSetup):
|
||||
'''Generic Unixy build instructions.'''
|
||||
|
||||
search_path = '/usr/bin:/usr/local/bin'
|
||||
exe_suffixes = ('',)
|
||||
|
||||
def __init__(self):
|
||||
super(UnixSetup, self).__init__()
|
||||
self.generator = 'Unix Makefiles'
|
||||
|
||||
def os(self):
|
||||
return 'unix'
|
||||
|
||||
def arch(self):
|
||||
cpu = os.uname()[-1]
|
||||
if cpu.endswith('386'):
|
||||
cpu = 'i386'
|
||||
elif cpu.endswith('86'):
|
||||
cpu = 'i686'
|
||||
elif cpu in ('athlon',):
|
||||
cpu = 'i686'
|
||||
elif cpu == 'Power Macintosh':
|
||||
cpu = 'ppc'
|
||||
elif cpu == 'x86_64' and self.word_size == 32:
|
||||
cpu = 'i686'
|
||||
return cpu
|
||||
|
||||
def run(self, command, name=None):
|
||||
'''Run a program. If the program fails, raise an exception.'''
|
||||
sys.stdout.flush()
|
||||
ret = os.system(command)
|
||||
if ret:
|
||||
if name is None:
|
||||
name = command.split(None, 1)[0]
|
||||
if os.WIFEXITED(ret):
|
||||
st = os.WEXITSTATUS(ret)
|
||||
if st == 127:
|
||||
event = 'was not found'
|
||||
else:
|
||||
event = 'exited with status %d' % st
|
||||
elif os.WIFSIGNALED(ret):
|
||||
event = 'was killed by signal %d' % os.WTERMSIG(ret)
|
||||
else:
|
||||
event = 'died unexpectedly (!?) with 16-bit status %d' % ret
|
||||
raise CommandError('the command %r %s' %
|
||||
(name, event))
|
||||
|
||||
|
||||
class LinuxSetup(UnixSetup):
|
||||
def __init__(self):
|
||||
super(LinuxSetup, self).__init__()
|
||||
try:
|
||||
self.debian_sarge = open('/etc/debian_version').read().strip() == '3.1'
|
||||
except:
|
||||
self.debian_sarge = False
|
||||
|
||||
def os(self):
|
||||
return 'linux'
|
||||
|
||||
def build_dirs(self):
|
||||
# Only build the server code if we have it.
|
||||
platform_build = '%s-%s' % (self.platform(), self.build_type.lower())
|
||||
|
||||
if self.arch() == 'i686' and self.is_internal_tree():
|
||||
return ['viewer-' + platform_build, 'server-' + platform_build]
|
||||
elif self.arch() == 'x86_64' and self.is_internal_tree():
|
||||
# the viewer does not build in 64bit -- kdu5 issues
|
||||
# we can either use openjpeg, or overhaul our viewer to handle kdu5 or higher
|
||||
# doug knows about kdu issues
|
||||
return ['server-' + platform_build]
|
||||
else:
|
||||
return ['viewer-' + platform_build]
|
||||
|
||||
def cmake_commandline(self, src_dir, build_dir, opts, simple):
|
||||
args = dict(
|
||||
dir=src_dir,
|
||||
generator=self.generator,
|
||||
opts=quote(opts),
|
||||
standalone=self.standalone,
|
||||
unattended=self.unattended,
|
||||
type=self.build_type.upper(),
|
||||
project_name=self.project_name,
|
||||
word_size=self.word_size,
|
||||
)
|
||||
if not self.is_internal_tree():
|
||||
args.update({'cxx':'g++', 'server':'OFF', 'viewer':'ON'})
|
||||
else:
|
||||
if self.distcc:
|
||||
distcc = self.find_in_path('distcc')
|
||||
baseonly = True
|
||||
else:
|
||||
distcc = []
|
||||
baseonly = False
|
||||
if 'server' in build_dir:
|
||||
gcc = distcc + self.find_in_path(
|
||||
self.debian_sarge and 'g++-3.3' or 'g++-4.1',
|
||||
'g++', baseonly)
|
||||
args.update({'cxx': ' '.join(gcc), 'server': 'ON',
|
||||
'viewer': 'OFF'})
|
||||
else:
|
||||
gcc41 = distcc + self.find_in_path('g++-4.1', 'g++', baseonly)
|
||||
args.update({'cxx': ' '.join(gcc41),
|
||||
'server': 'OFF',
|
||||
'viewer': 'ON'})
|
||||
cmd = (('cmake -DCMAKE_BUILD_TYPE:STRING=%(type)s '
|
||||
'-G %(generator)r -DSERVER:BOOL=%(server)s '
|
||||
'-DVIEWER:BOOL=%(viewer)s -DSTANDALONE:BOOL=%(standalone)s '
|
||||
'-DUNATTENDED:BOOL=%(unattended)s '
|
||||
'-DWORD_SIZE:STRING=%(word_size)s '
|
||||
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
|
||||
'%(opts)s %(dir)r')
|
||||
% args)
|
||||
if 'CXX' not in os.environ:
|
||||
args.update({'cmd':cmd})
|
||||
cmd = ('CXX=%(cxx)r %(cmd)s' % args)
|
||||
return cmd
|
||||
|
||||
def run_build(self, opts, targets):
|
||||
job_count = None
|
||||
|
||||
for i in range(len(opts)):
|
||||
if opts[i].startswith('-j'):
|
||||
try:
|
||||
job_count = int(opts[i][2:])
|
||||
except ValueError:
|
||||
try:
|
||||
job_count = int(opts[i+1])
|
||||
except ValueError:
|
||||
job_count = True
|
||||
|
||||
def get_cpu_count():
|
||||
count = 0
|
||||
for line in open('/proc/cpuinfo'):
|
||||
if re.match(r'processor\s*:', line):
|
||||
count += 1
|
||||
return count
|
||||
|
||||
def localhost():
|
||||
count = get_cpu_count()
|
||||
return 'localhost/' + str(count), count
|
||||
|
||||
def get_distcc_hosts():
|
||||
try:
|
||||
hosts = []
|
||||
name = os.getenv('DISTCC_DIR', '/etc/distcc') + '/hosts'
|
||||
for l in open(name):
|
||||
l = l[l.find('#')+1:].strip()
|
||||
if l: hosts.append(l)
|
||||
return hosts
|
||||
except IOError:
|
||||
return (os.getenv('DISTCC_HOSTS', '').split() or
|
||||
[localhost()[0]])
|
||||
|
||||
def count_distcc_hosts():
|
||||
cpus = 0
|
||||
hosts = 0
|
||||
for host in get_distcc_hosts():
|
||||
m = re.match(r'.*/(\d+)', host)
|
||||
hosts += 1
|
||||
cpus += m and int(m.group(1)) or 1
|
||||
return hosts, cpus
|
||||
|
||||
def mk_distcc_hosts(basename, range, num_cpus):
|
||||
'''Generate a list of LL-internal machines to build on.'''
|
||||
loc_entry, cpus = localhost()
|
||||
hosts = [loc_entry]
|
||||
dead = []
|
||||
stations = [s for s in xrange(range) if s not in dead]
|
||||
random.shuffle(stations)
|
||||
hosts += ['%s%d.lindenlab.com/%d,lzo' % (basename, s, num_cpus) for s in stations]
|
||||
cpus += 2 * len(stations)
|
||||
return ' '.join(hosts), cpus
|
||||
|
||||
if job_count is None:
|
||||
hosts, job_count = count_distcc_hosts()
|
||||
hostname = socket.gethostname()
|
||||
if hosts == 1:
|
||||
if hostname.startswith('station'):
|
||||
hosts, job_count = mk_distcc_hosts('station', 36, 2)
|
||||
os.environ['DISTCC_HOSTS'] = hosts
|
||||
if hostname.startswith('eniac'):
|
||||
hosts, job_count = mk_distcc_hosts('eniac', 71, 2)
|
||||
os.environ['DISTCC_HOSTS'] = hosts
|
||||
if hostname.startswith('build'):
|
||||
max_jobs = 6
|
||||
else:
|
||||
max_jobs = 12
|
||||
if job_count > max_jobs:
|
||||
job_count = max_jobs;
|
||||
opts.extend(['-j', str(job_count)])
|
||||
|
||||
if targets:
|
||||
targets = ' '.join(targets)
|
||||
else:
|
||||
targets = 'all'
|
||||
|
||||
for d in self.build_dirs():
|
||||
cmd = 'make -C %r %s %s' % (d, ' '.join(opts), targets)
|
||||
print 'Running %r' % cmd
|
||||
self.run(cmd)
|
||||
|
||||
|
||||
class DarwinSetup(UnixSetup):
|
||||
def __init__(self):
|
||||
super(DarwinSetup, self).__init__()
|
||||
self.generator = 'Xcode'
|
||||
|
||||
def os(self):
|
||||
return 'darwin'
|
||||
|
||||
def arch(self):
|
||||
if self.universal == 'ON':
|
||||
return 'universal'
|
||||
else:
|
||||
return UnixSetup.arch(self)
|
||||
|
||||
def cmake_commandline(self, src_dir, build_dir, opts, simple):
|
||||
args = dict(
|
||||
dir=src_dir,
|
||||
generator=self.generator,
|
||||
opts=quote(opts),
|
||||
standalone=self.standalone,
|
||||
word_size=self.word_size,
|
||||
unattended=self.unattended,
|
||||
project_name=self.project_name,
|
||||
universal=self.universal,
|
||||
type=self.build_type.upper(),
|
||||
)
|
||||
if self.universal == 'ON':
|
||||
args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386;ppc\''
|
||||
#if simple:
|
||||
# return 'cmake %(opts)s %(dir)r' % args
|
||||
return ('cmake -G %(generator)r '
|
||||
'-DCMAKE_BUILD_TYPE:STRING=%(type)s '
|
||||
'-DSTANDALONE:BOOL=%(standalone)s '
|
||||
'-DUNATTENDED:BOOL=%(unattended)s '
|
||||
'-DWORD_SIZE:STRING=%(word_size)s '
|
||||
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
|
||||
'%(universal)s '
|
||||
'%(opts)s %(dir)r' % args)
|
||||
|
||||
def run_build(self, opts, targets):
|
||||
cwd = getcwd()
|
||||
if targets:
|
||||
targets = ' '.join(['-target ' + repr(t) for t in targets])
|
||||
else:
|
||||
targets = ''
|
||||
cmd = ('xcodebuild -configuration %s %s %s | grep -v "^[[:space:]]*setenv" ; exit ${PIPESTATUS[0]}' %
|
||||
(self.build_type, ' '.join(opts), targets))
|
||||
for d in self.build_dirs():
|
||||
try:
|
||||
os.chdir(d)
|
||||
print 'Running %r in %r' % (cmd, d)
|
||||
self.run(cmd)
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
|
||||
|
||||
class WindowsSetup(PlatformSetup):
|
||||
gens = {
|
||||
'vc71' : {
|
||||
'gen' : r'Visual Studio 7 .NET 2003',
|
||||
'ver' : r'7.1'
|
||||
},
|
||||
'vc80' : {
|
||||
'gen' : r'Visual Studio 8 2005',
|
||||
'ver' : r'8.0'
|
||||
},
|
||||
'vc90' : {
|
||||
'gen' : r'Visual Studio 9 2008',
|
||||
'ver' : r'9.0'
|
||||
}
|
||||
}
|
||||
gens['vs2003'] = gens['vc71']
|
||||
gens['vs2005'] = gens['vc80']
|
||||
gens['vs2008'] = gens['vc90']
|
||||
|
||||
search_path = r'C:\windows'
|
||||
exe_suffixes = ('.exe', '.bat', '.com')
|
||||
|
||||
def __init__(self):
|
||||
super(WindowsSetup, self).__init__()
|
||||
self._generator = None
|
||||
self.incredibuild = False
|
||||
|
||||
def _get_generator(self):
|
||||
if self._generator is None:
|
||||
for version in 'vc80 vc90 vc71'.split():
|
||||
if self.find_visual_studio(version):
|
||||
self._generator = version
|
||||
print 'Building with ', self.gens[version]['gen']
|
||||
break
|
||||
else:
|
||||
print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions'
|
||||
for version in 'vc80 vc90 vc71'.split():
|
||||
if self.find_visual_studio_express(version):
|
||||
self._generator = version
|
||||
self.using_express = True
|
||||
print 'Building with ', self.gens[version]['gen'] , "Express edition"
|
||||
break
|
||||
else:
|
||||
print >> sys.stderr, 'Cannot find any Visual Studio installation'
|
||||
sys.exit(1)
|
||||
return self._generator
|
||||
|
||||
def _set_generator(self, gen):
|
||||
self._generator = gen
|
||||
|
||||
generator = property(_get_generator, _set_generator)
|
||||
|
||||
def os(self):
|
||||
return 'win32'
|
||||
|
||||
def build_dirs(self):
|
||||
return ['build-' + self.generator]
|
||||
|
||||
def cmake_commandline(self, src_dir, build_dir, opts, simple):
|
||||
args = dict(
|
||||
dir=src_dir,
|
||||
generator=self.gens[self.generator.lower()]['gen'],
|
||||
opts=quote(opts),
|
||||
standalone=self.standalone,
|
||||
unattended=self.unattended,
|
||||
project_name=self.project_name,
|
||||
word_size=self.word_size,
|
||||
)
|
||||
#if simple:
|
||||
# return 'cmake %(opts)s "%(dir)s"' % args
|
||||
return ('cmake -G "%(generator)s" '
|
||||
'-DSTANDALONE:BOOL=%(standalone)s '
|
||||
'-DUNATTENDED:BOOL=%(unattended)s '
|
||||
'-DWORD_SIZE:STRING=%(word_size)s '
|
||||
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
|
||||
'%(opts)s "%(dir)s"' % args)
|
||||
|
||||
def get_HKLM_registry_value(self, key_str, value_str):
|
||||
import _winreg
|
||||
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
|
||||
key = _winreg.OpenKey(reg, key_str)
|
||||
value = _winreg.QueryValueEx(key, value_str)[0]
|
||||
print 'Found: %s' % value
|
||||
return value
|
||||
|
||||
def find_visual_studio(self, gen=None):
|
||||
if gen is None:
|
||||
gen = self._generator
|
||||
gen = gen.lower()
|
||||
value_str = (r'EnvironmentDirectory')
|
||||
key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
|
||||
self.gens[gen]['ver'])
|
||||
print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
|
||||
(key_str, value_str))
|
||||
try:
|
||||
return self.get_HKLM_registry_value(key_str, value_str)
|
||||
except WindowsError, err:
|
||||
key_str = (r'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%s\Setup\VS' %
|
||||
self.gens[gen]['ver'])
|
||||
|
||||
try:
|
||||
return self.get_HKLM_registry_value(key_str, value_str)
|
||||
except:
|
||||
print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
|
||||
|
||||
return ''
|
||||
|
||||
def find_visual_studio_express(self, gen=None):
|
||||
if gen is None:
|
||||
gen = self._generator
|
||||
gen = gen.lower()
|
||||
try:
|
||||
import _winreg
|
||||
key_str = (r'SOFTWARE\Microsoft\VCEXpress\%s\Setup\VC' %
|
||||
self.gens[gen]['ver'])
|
||||
value_str = (r'ProductDir')
|
||||
print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
|
||||
(key_str, value_str))
|
||||
print key_str
|
||||
|
||||
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
|
||||
key = _winreg.OpenKey(reg, key_str)
|
||||
value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
|
||||
print 'Found: %s' % value
|
||||
return value
|
||||
except WindowsError, err:
|
||||
print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
|
||||
return ''
|
||||
|
||||
def get_build_cmd(self):
|
||||
if self.incredibuild:
|
||||
config = self.build_type
|
||||
if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0' ]:
|
||||
config = '\"%s|Win32\"' % config
|
||||
|
||||
executable = 'buildconsole'
|
||||
cmd = "%(bin)s %(prj)s.sln /build /cfg=%(cfg)s" % {'prj': self.project_name, 'cfg': config, 'bin': executable}
|
||||
return (executable, cmd)
|
||||
|
||||
environment = self.find_visual_studio()
|
||||
if environment == '':
|
||||
environment = self.find_visual_studio_express()
|
||||
if environment == '':
|
||||
print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio installation."
|
||||
else:
|
||||
build_dirs=self.build_dirs();
|
||||
print >> sys.stderr, "\nSolution generation complete, it can can now be found in:", build_dirs[0]
|
||||
print >> sys.stderr, "\nPlease see https://wiki.secondlife.com/wiki/Microsoft_Visual_Studio#Extra_steps_for_Visual_Studio_Express_editions for express specific information"
|
||||
exit(0)
|
||||
|
||||
# devenv.com is CLI friendly, devenv.exe... not so much.
|
||||
executable = '%sdevenv.com' % (self.find_visual_studio(),)
|
||||
cmd = ('"%s" %s.sln /build %s' %
|
||||
(executable, self.project_name, self.build_type))
|
||||
return (executable, cmd)
|
||||
|
||||
def run(self, command, name=None, retry_on=None, retries=1):
|
||||
'''Run a program. If the program fails, raise an exception.'''
|
||||
assert name is not None, 'On windows an executable path must be given in name. [DEV-44838]'
|
||||
if os.path.isfile(name):
|
||||
path = name
|
||||
else:
|
||||
path = self.find_in_path(name)[0]
|
||||
while retries:
|
||||
retries = retries - 1
|
||||
print "develop.py tries to run:", command
|
||||
ret = subprocess.call(command, executable=path)
|
||||
print "got ret", ret, "from", command
|
||||
if ret == 0:
|
||||
break
|
||||
else:
|
||||
error = 'exited with status %d' % ret
|
||||
if retry_on is not None and retry_on == ret:
|
||||
print "Retrying... the command %r %s" % (name, error)
|
||||
else:
|
||||
raise CommandError('the command %r %s' % (name, error))
|
||||
|
||||
def run_cmake(self, args=[]):
|
||||
'''Override to add the vstool.exe call after running cmake.'''
|
||||
PlatformSetup.run_cmake(self, args)
|
||||
if self.unattended == 'OFF':
|
||||
if self.using_express == False:
|
||||
self.run_vstool()
|
||||
|
||||
def run_vstool(self):
|
||||
for build_dir in self.build_dirs():
|
||||
stamp = os.path.join(build_dir, 'vstool.txt')
|
||||
try:
|
||||
prev_build = open(stamp).read().strip()
|
||||
except IOError:
|
||||
prev_build = ''
|
||||
if prev_build == self.build_type:
|
||||
# Only run vstool if the build type has changed.
|
||||
continue
|
||||
executable = os.path.join('tools','vstool','VSTool.exe')
|
||||
vstool_cmd = (executable +
|
||||
' --solution ' +
|
||||
os.path.join(build_dir,'SecondLife.sln') +
|
||||
' --config ' + self.build_type +
|
||||
' --startup secondlife-bin')
|
||||
print 'Running %r in %r' % (vstool_cmd, getcwd())
|
||||
self.run(vstool_cmd, name=executable)
|
||||
print >> open(stamp, 'w'), self.build_type
|
||||
|
||||
def run_build(self, opts, targets):
|
||||
for t in targets:
|
||||
assert t.strip(), 'Unexpected empty targets: ' + repr(targets)
|
||||
cwd = getcwd()
|
||||
executable, build_cmd = self.get_build_cmd()
|
||||
|
||||
for d in self.build_dirs():
|
||||
try:
|
||||
os.chdir(d)
|
||||
if targets:
|
||||
for t in targets:
|
||||
cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
|
||||
print 'Running %r in %r' % (cmd, d)
|
||||
self.run(cmd, name=executable, retry_on=4, retries=3)
|
||||
else:
|
||||
cmd = '%s %s' % (build_cmd, ' '.join(opts))
|
||||
print 'Running %r in %r' % (cmd, d)
|
||||
self.run(cmd, name=executable, retry_on=4, retries=3)
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
|
||||
class CygwinSetup(WindowsSetup):
|
||||
def __init__(self):
|
||||
super(CygwinSetup, self).__init__()
|
||||
self.generator = 'vc80'
|
||||
|
||||
def cmake_commandline(self, src_dir, build_dir, opts, simple):
|
||||
dos_dir = commands.getoutput("cygpath -w %s" % src_dir)
|
||||
args = dict(
|
||||
dir=dos_dir,
|
||||
generator=self.gens[self.generator.lower()]['gen'],
|
||||
opts=quote(opts),
|
||||
standalone=self.standalone,
|
||||
unattended=self.unattended,
|
||||
project_name=self.project_name,
|
||||
word_size=self.word_size,
|
||||
)
|
||||
#if simple:
|
||||
# return 'cmake %(opts)s "%(dir)s"' % args
|
||||
return ('cmake -G "%(generator)s" '
|
||||
'-DUNATTENDED:BOOl=%(unattended)s '
|
||||
'-DSTANDALONE:BOOL=%(standalone)s '
|
||||
'-DWORD_SIZE:STRING=%(word_size)s '
|
||||
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
|
||||
'%(opts)s "%(dir)s"' % args)
|
||||
|
||||
setup_platform = {
|
||||
'darwin': DarwinSetup,
|
||||
'linux2': LinuxSetup,
|
||||
'win32' : WindowsSetup,
|
||||
'cygwin' : CygwinSetup
|
||||
}
|
||||
|
||||
|
||||
usage_msg = '''
|
||||
Usage: develop.py [options] [command [command-options]]
|
||||
|
||||
Options:
|
||||
-h | --help print this help message
|
||||
--standalone build standalone, without Linden prebuild libraries
|
||||
--unattended build unattended, do not invoke any tools requiring
|
||||
a human response
|
||||
--universal build a universal binary on Mac OS X (unsupported)
|
||||
-t | --type=NAME build type ("Debug", "Release", or "RelWithDebInfo")
|
||||
-m32 | -m64 build architecture (32-bit or 64-bit)
|
||||
-N | --no-distcc disable use of distcc
|
||||
-G | --generator=NAME generator name
|
||||
Windows: VC71 or VS2003 (default), VC80 (VS2005) or
|
||||
VC90 (VS2008)
|
||||
Mac OS X: Xcode (default), Unix Makefiles
|
||||
Linux: Unix Makefiles (default), KDevelop3
|
||||
-p | --project=NAME set the root project name. (Doesn't effect makefiles)
|
||||
|
||||
Commands:
|
||||
build configure and build default target
|
||||
clean delete all build directories, does not affect sources
|
||||
configure configure project by running cmake (default if none given)
|
||||
printbuilddirs print the build directory that will be used
|
||||
|
||||
Command-options for "configure":
|
||||
We use cmake variables to change the build configuration.
|
||||
-DSERVER:BOOL=OFF Don't configure simulator/dataserver/etc
|
||||
-DVIEWER:BOOL=OFF Don't configure the viewer
|
||||
-DPACKAGE:BOOL=ON Create "package" target to make installers
|
||||
-DLOCALIZESETUP:BOOL=ON Create one win_setup target per supported language
|
||||
|
||||
Examples:
|
||||
Set up a viewer-only project for your system:
|
||||
develop.py configure -DSERVER:BOOL=OFF
|
||||
|
||||
Set up a Visual Studio 2005 project with "package" target:
|
||||
develop.py -G vc80 configure -DPACKAGE:BOOL=ON
|
||||
'''
|
||||
|
||||
def main(arguments):
|
||||
setup = setup_platform[sys.platform]()
|
||||
try:
|
||||
opts, args = getopt.getopt(
|
||||
arguments,
|
||||
'?hNt:p:G:m:',
|
||||
['help', 'standalone', 'no-distcc', 'unattended', 'universal', 'type=', 'incredibuild', 'generator=', 'project='])
|
||||
except getopt.GetoptError, err:
|
||||
print >> sys.stderr, 'Error:', err
|
||||
print >> sys.stderr, """
|
||||
Note: You must pass -D options to cmake after the "configure" command
|
||||
For example: develop.py configure -DSERVER:BOOL=OFF"""
|
||||
print >> sys.stderr, usage_msg.strip()
|
||||
sys.exit(1)
|
||||
|
||||
for o, a in opts:
|
||||
if o in ('-?', '-h', '--help'):
|
||||
print usage_msg.strip()
|
||||
sys.exit(0)
|
||||
elif o in ('--standalone',):
|
||||
setup.standalone = 'ON'
|
||||
elif o in ('--unattended',):
|
||||
setup.unattended = 'ON'
|
||||
elif o in ('--universal',):
|
||||
setup.universal = 'ON'
|
||||
elif o in ('-m',):
|
||||
if a in ('32', '64'):
|
||||
setup.word_size = int(a)
|
||||
else:
|
||||
print >> sys.stderr, 'Error: unknown word size', repr(a)
|
||||
print >> sys.stderr, 'Supported word sizes: 32, 64'
|
||||
sys.exit(1)
|
||||
elif o in ('-t', '--type'):
|
||||
try:
|
||||
setup.build_type = setup.build_types[a.lower()]
|
||||
except KeyError:
|
||||
print >> sys.stderr, 'Error: unknown build type', repr(a)
|
||||
print >> sys.stderr, 'Supported build types:'
|
||||
types = setup.build_types.values()
|
||||
types.sort()
|
||||
for t in types:
|
||||
print ' ', t
|
||||
sys.exit(1)
|
||||
elif o in ('-G', '--generator'):
|
||||
setup.generator = a
|
||||
elif o in ('-N', '--no-distcc'):
|
||||
setup.distcc = False
|
||||
elif o in ('-p', '--project'):
|
||||
setup.project_name = a
|
||||
elif o in ('--incredibuild'):
|
||||
setup.incredibuild = True
|
||||
else:
|
||||
print >> sys.stderr, 'INTERNAL ERROR: unhandled option', repr(o)
|
||||
sys.exit(1)
|
||||
if not args:
|
||||
setup.run_cmake()
|
||||
return
|
||||
try:
|
||||
cmd = args.pop(0)
|
||||
if cmd in ('cmake', 'configure'):
|
||||
setup.run_cmake(args)
|
||||
elif cmd == 'build':
|
||||
if os.getenv('DISTCC_DIR') is None:
|
||||
distcc_dir = os.path.join(getcwd(), '.distcc')
|
||||
if not os.path.exists(distcc_dir):
|
||||
os.mkdir(distcc_dir)
|
||||
print "setting DISTCC_DIR to %s" % distcc_dir
|
||||
os.environ['DISTCC_DIR'] = distcc_dir
|
||||
else:
|
||||
print "DISTCC_DIR is set to %s" % os.getenv('DISTCC_DIR')
|
||||
for d in setup.build_dirs():
|
||||
if not os.path.exists(d):
|
||||
raise CommandError('run "develop.py cmake" first')
|
||||
setup.run_cmake()
|
||||
opts, targets = setup.parse_build_opts(args)
|
||||
setup.run_build(opts, targets)
|
||||
elif cmd == 'clean':
|
||||
if args:
|
||||
raise CommandError('clean takes no arguments')
|
||||
setup.cleanup()
|
||||
elif cmd == 'printbuilddirs':
|
||||
for d in setup.build_dirs():
|
||||
print >> sys.stdout, d
|
||||
else:
|
||||
print >> sys.stderr, 'Error: unknown subcommand', repr(cmd)
|
||||
print >> sys.stderr, "(run 'develop.py --help' for help)"
|
||||
sys.exit(1)
|
||||
except getopt.GetoptError, err:
|
||||
print >> sys.stderr, 'Error with %r subcommand: %s' % (cmd, err)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
main(sys.argv[1:])
|
||||
except CommandError, err:
|
||||
print >> sys.stderr, 'Error:', err
|
||||
sys.exit(1)
|
||||
|
|
@ -1,4 +1,8 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
add_subdirectory(llui_libtest)
|
||||
add_subdirectory(llimage_libtest)
|
||||
IF (LLIMAGE_LIBTEST)
|
||||
MESSAGE(STATUS "Build llimage_libtest")
|
||||
add_subdirectory(llimage_libtest)
|
||||
ELSE (LLIMAGE_LIBTEST)
|
||||
MESSAGE(STATUS "Skip llimage_libtest")
|
||||
ENDIF (LLIMAGE_LIBTEST)
|
||||
|
|
|
|||
|
|
@ -6,19 +6,15 @@ project (llimage_libtest)
|
|||
|
||||
include(00-Common)
|
||||
include(LLCommon)
|
||||
include(Linking)
|
||||
include(LLSharedLibs)
|
||||
include(LLImage)
|
||||
include(LLImageJ2COJ)
|
||||
include(LLKDU)
|
||||
include(LLMath)
|
||||
include(LLVFS)
|
||||
|
||||
include_directories(
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
${LLVFS_INCLUDE_DIRS}
|
||||
${LLIMAGE_INCLUDE_DIRS}
|
||||
${LLMATH_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
set(llimage_libtest_SOURCE_FILES
|
||||
|
|
@ -53,9 +49,9 @@ if (DARWIN)
|
|||
find_library(COREFOUNDATION_LIBRARY CoreFoundation)
|
||||
set(OS_LIBRARIES ${COREFOUNDATION_LIBRARY})
|
||||
elseif (WINDOWS)
|
||||
# set(OS_LIBRARIES)
|
||||
set(OS_LIBRARIES)
|
||||
elseif (LINUX)
|
||||
# set(OS_LIBRARIES)
|
||||
set(OS_LIBRARIES)
|
||||
else (DARWIN)
|
||||
message(FATAL_ERROR "Unknown platform")
|
||||
endif (DARWIN)
|
||||
|
|
@ -102,20 +98,20 @@ add_custom_command(TARGET llimage_libtest POST_BUILD
|
|||
if (DARWIN)
|
||||
# Copy the required libraries to the package app
|
||||
add_custom_command(TARGET llimage_libtest POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libapr-1.0.3.7.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libapr-1.0.3.7.dylib
|
||||
)
|
||||
add_custom_command(TARGET llimage_libtest POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libaprutil-1.0.3.8.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libaprutil-1.0.3.8.dylib
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libapr-1.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libapr-1.0.dylib
|
||||
)
|
||||
add_custom_command(TARGET llimage_libtest POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexception_handler.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexception_handler.dylib
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libaprutil-1.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libaprutil-1.0.dylib
|
||||
)
|
||||
add_custom_command(TARGET llimage_libtest POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexpat.0.5.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexpat.0.5.0.dylib
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexception_handler.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexception_handler.dylib
|
||||
)
|
||||
add_custom_command(TARGET llimage_libtest POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexpat.1.5.2.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexpat.1.5.2.dylib
|
||||
)
|
||||
endif (DARWIN)
|
||||
|
||||
|
|
@ -127,5 +123,3 @@ endif (WINDOWS)
|
|||
# *NOTE: This could be removed, or only built by TeamCity, if the build
|
||||
# and link times become too long.
|
||||
add_dependencies(viewer llimage_libtest)
|
||||
|
||||
ll_deploy_sharedlibs_command(llimage_libtest)
|
||||
|
|
|
|||
|
|
@ -91,14 +91,14 @@ if (WINDOWS)
|
|||
# Copy over OpenJPEG.dll
|
||||
# *NOTE: On Windows with VS2005, only the first comment prints
|
||||
set(OPENJPEG_RELEASE
|
||||
"${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/openjpeg.dll")
|
||||
"${ARCH_PREBUILT_DIRS_RELEASE}/openjpeg.dll")
|
||||
add_custom_command( TARGET llui_libtest POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${OPENJPEG_RELEASE} ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Copying OpenJPEG DLLs to binary directory"
|
||||
)
|
||||
set(OPENJPEG_DEBUG
|
||||
"${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/openjpegd.dll")
|
||||
"${ARCH_PREBUILT_DIRS_DEBUG}/openjpegd.dll")
|
||||
add_custom_command( TARGET llui_libtest POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${OPENJPEG_DEBUG} ${CMAKE_CURRENT_BINARY_DIR}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ include_directories(
|
|||
${VORBIS_INCLUDE_DIRS}
|
||||
${OPENAL_LIB_INCLUDE_DIRS}
|
||||
${FREEAULT_LIB_INCLUDE_DIRS}
|
||||
${FMOD_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
set(llaudio_SOURCE_FILES
|
||||
|
|
|
|||
|
|
@ -680,4 +680,10 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
#if LL_DARWIN || LL_LINUX
|
||||
// HACK: to fool the compiler into not emitting unused warnings.
|
||||
namespace {
|
||||
const ov_callbacks callback_array[4] = {OV_CALLBACKS_DEFAULT, OV_CALLBACKS_NOCLOSE, OV_CALLBACKS_STREAMONLY,
|
||||
OV_CALLBACKS_STREAMONLY_NOCLOSE};
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@
|
|||
#include "lllistener_openal.h"
|
||||
|
||||
|
||||
const float LLAudioEngine_OpenAL::WIND_BUFFER_SIZE_SEC = 0.05f;
|
||||
|
||||
LLAudioEngine_OpenAL::LLAudioEngine_OpenAL()
|
||||
:
|
||||
mWindGen(NULL),
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class LLAudioEngine_OpenAL : public LLAudioEngine
|
|||
int mNumEmptyWindALBuffers;
|
||||
|
||||
static const int MAX_NUM_WIND_BUFFERS = 80;
|
||||
static const float WIND_BUFFER_SIZE_SEC = 0.05f; // 1/20th sec
|
||||
static const float WIND_BUFFER_SIZE_SEC; // 1/20th sec
|
||||
};
|
||||
|
||||
class LLAudioChannelOpenAL : public LLAudioChannel
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ include(LLSharedLibs)
|
|||
include(GoogleBreakpad)
|
||||
include(GooglePerfTools)
|
||||
include(Copy3rdPartyLibs)
|
||||
include(ZLIB)
|
||||
|
||||
include_directories(
|
||||
${EXPAT_INCLUDE_DIRS}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
const S32 LL_VERSION_MAJOR = 2;
|
||||
const S32 LL_VERSION_MINOR = 6;
|
||||
const S32 LL_VERSION_PATCH = 3;
|
||||
const S32 LL_VERSION_PATCH = 4;
|
||||
const S32 LL_VERSION_BUILD = 0;
|
||||
|
||||
const char * const LL_CHANNEL = "Second Life Developer";
|
||||
|
|
|
|||
|
|
@ -258,10 +258,10 @@ namespace tut
|
|||
++const_iterator;
|
||||
ensure_equals(const_iterator->first, "def");
|
||||
ensure_equals(const_iterator->second, 2);
|
||||
NameIndexDeps::node_range node_range(nideps.get_node_range());
|
||||
ensure_equals(instance_from_range<std::vector<int> >(node_range), make< std::vector<int> >(list_of(1)(2)(3)));
|
||||
*node_range.begin() = 0;
|
||||
*node_range.begin() = 1;
|
||||
// NameIndexDeps::node_range node_range(nideps.get_node_range());
|
||||
// ensure_equals(instance_from_range<std::vector<int> >(node_range), make< std::vector<int> >(list_of(1)(2)(3)));
|
||||
// *node_range.begin() = 0;
|
||||
// *node_range.begin() = 1;
|
||||
NameIndexDeps::const_node_range const_node_range(const_nideps.get_node_range());
|
||||
ensure_equals(instance_from_range<std::vector<int> >(const_node_range), make< std::vector<int> >(list_of(1)(2)(3)));
|
||||
NameIndexDeps::const_key_range const_key_range(const_nideps.get_key_range());
|
||||
|
|
@ -278,8 +278,8 @@ namespace tut
|
|||
def);
|
||||
ensure_equals(instance_from_range<StringList>(const_nideps.get_after_range(const_nideps.get_range().begin())),
|
||||
def);
|
||||
ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_node_range().begin())),
|
||||
def);
|
||||
// ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_node_range().begin())),
|
||||
// def);
|
||||
ensure_equals(instance_from_range<StringList>(const_nideps.get_after_range(const_nideps.get_node_range().begin())),
|
||||
def);
|
||||
ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_key_range().begin())),
|
||||
|
|
|
|||
|
|
@ -48,7 +48,10 @@ namespace
|
|||
{
|
||||
static bool fatalWasCalled;
|
||||
void fatalCall(const std::string&) { fatalWasCalled = true; }
|
||||
}
|
||||
|
||||
namespace tut
|
||||
{
|
||||
class TestRecorder : public LLError::Recorder
|
||||
{
|
||||
public:
|
||||
|
|
@ -56,7 +59,7 @@ namespace
|
|||
~TestRecorder() { LLError::removeRecorder(this); }
|
||||
|
||||
void recordMessage(LLError::ELevel level,
|
||||
const std::string& message)
|
||||
const std::string& message)
|
||||
{
|
||||
mMessages.push_back(message);
|
||||
}
|
||||
|
|
@ -66,12 +69,12 @@ namespace
|
|||
|
||||
void setWantsTime(bool t) { mWantsTime = t; }
|
||||
bool wantsTime() { return mWantsTime; }
|
||||
|
||||
|
||||
std::string message(int n)
|
||||
{
|
||||
std::ostringstream test_name;
|
||||
test_name << "testing message " << n << ", not enough messages";
|
||||
|
||||
|
||||
tut::ensure(test_name.str(), n < countMessages());
|
||||
return mMessages[n];
|
||||
}
|
||||
|
|
@ -82,10 +85,7 @@ namespace
|
|||
|
||||
bool mWantsTime;
|
||||
};
|
||||
}
|
||||
|
||||
namespace tut
|
||||
{
|
||||
|
||||
struct ErrorTestData
|
||||
{
|
||||
TestRecorder mRecorder;
|
||||
|
|
@ -381,7 +381,7 @@ namespace
|
|||
}
|
||||
|
||||
typedef std::string (*LogFromFunction)(bool);
|
||||
void testLogName(TestRecorder& recorder, LogFromFunction f,
|
||||
void testLogName(tut::TestRecorder& recorder, LogFromFunction f,
|
||||
const std::string& class_name = "")
|
||||
{
|
||||
recorder.clearMessages();
|
||||
|
|
|
|||
|
|
@ -452,7 +452,7 @@ namespace tut
|
|||
checkRoundTrip(msg + " nested arrays", v);
|
||||
|
||||
v = LLSD::emptyMap();
|
||||
fillmap(v, 10, 6); // 10^6 maps
|
||||
fillmap(v, 10, 3); // 10^6 maps
|
||||
checkRoundTrip(msg + " many nested maps", v);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ include_directories(
|
|||
${LLCOMMON_INCLUDE_DIRS}
|
||||
${LLIMAGE_INCLUDE_DIRS}
|
||||
${KDU_INCLUDE_DIR}
|
||||
${LLKDU_INCLUDE_DIRS}
|
||||
${LLMATH_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
|
|
@ -49,6 +50,15 @@ if (USE_KDU)
|
|||
SET(llkdu_TEST_SOURCE_FILES
|
||||
llimagej2ckdu.cpp
|
||||
)
|
||||
SET(llkdu_test_additional_HEADER_FILES
|
||||
llimagej2ckdu.h
|
||||
llkdumem.h
|
||||
lltut.h
|
||||
)
|
||||
SET(llkdu_test_additional_INCLUDE_DIRS
|
||||
${KDU_INCLUDE_DIR}
|
||||
${LLKDU_INCLUDE_DIRS}
|
||||
)
|
||||
LL_ADD_PROJECT_UNIT_TESTS(llkdu "${llkdu_TEST_SOURCE_FILES}")
|
||||
endif (LL_TESTS)
|
||||
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@
|
|||
|
||||
#include "linden_common.h"
|
||||
// Class to test
|
||||
#include "../llimagej2ckdu.h"
|
||||
#include "../llkdumem.h"
|
||||
#include "llimagej2ckdu.h"
|
||||
#include "llkdumem.h"
|
||||
// Tut header
|
||||
#include "../test/lltut.h"
|
||||
#include "lltut.h"
|
||||
|
||||
// -------------------------------------------------------------------------------------------
|
||||
// Stubbing: Declarations required to link and run the class being tested
|
||||
|
|
|
|||
|
|
@ -37,6 +37,16 @@
|
|||
|
||||
#include "../test/lltut.h"
|
||||
|
||||
#if LL_WINDOWS
|
||||
// disable unreachable code warnings caused by usage of skip.
|
||||
#pragma warning(disable: 4702)
|
||||
#endif
|
||||
|
||||
#if LL_WINDOWS
|
||||
// disable unreachable code warnings caused by usage of skip.
|
||||
#pragma warning(disable: 4702)
|
||||
#endif
|
||||
|
||||
namespace tut
|
||||
{
|
||||
struct m3math_test
|
||||
|
|
@ -277,19 +287,21 @@ namespace tut
|
|||
LLVector3 llvec2(1, 2, 0);
|
||||
LLVector3 llvec3(2, 4, 2);
|
||||
|
||||
skip("This test fails depending on architecture. Need to fix comparison operation, is_approx_equal, to work on more than one platform.");
|
||||
|
||||
llmat_obj.setRows(llvec1, llvec2, llvec3);
|
||||
llmat_obj.orthogonalize();
|
||||
|
||||
ensure("LLMatrix3::orthogonalize failed ",
|
||||
is_approx_equal(0.19611613f, llmat_obj.mMatrix[0][0]) &&
|
||||
is_approx_equal(0.19611614f, llmat_obj.mMatrix[0][0]) &&
|
||||
is_approx_equal(0.78446454f, llmat_obj.mMatrix[0][1]) &&
|
||||
is_approx_equal(0.58834839f, llmat_obj.mMatrix[0][2]) &&
|
||||
is_approx_equal(0.47628206f, llmat_obj.mMatrix[1][0]) &&
|
||||
is_approx_equal(0.44826555f, llmat_obj.mMatrix[1][1]) &&
|
||||
is_approx_equal(-0.75644791f, llmat_obj.mMatrix[1][2]) &&
|
||||
is_approx_equal(-0.85714287f, llmat_obj.mMatrix[2][0]) &&
|
||||
is_approx_equal(0.58834841f, llmat_obj.mMatrix[0][2]) &&
|
||||
is_approx_equal(0.47628204f, llmat_obj.mMatrix[1][0]) &&
|
||||
is_approx_equal(0.44826545f, llmat_obj.mMatrix[1][1]) &&
|
||||
is_approx_equal(-0.75644795f, llmat_obj.mMatrix[1][2]) &&
|
||||
is_approx_equal(-0.85714286f, llmat_obj.mMatrix[2][0]) &&
|
||||
is_approx_equal(0.42857143f, llmat_obj.mMatrix[2][1]) &&
|
||||
is_approx_equal(-0.28571427f, llmat_obj.mMatrix[2][2]));
|
||||
is_approx_equal(-0.28571429f, llmat_obj.mMatrix[2][2]));
|
||||
}
|
||||
|
||||
//test case for adjointTranspose() fn.
|
||||
|
|
|
|||
|
|
@ -134,6 +134,21 @@ BOOL LLVector3::clampLength( F32 length_limit )
|
|||
return changed;
|
||||
}
|
||||
|
||||
BOOL LLVector3::clamp(const LLVector3 &min_vec, const LLVector3 &max_vec)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (mV[0] < min_vec[0]) { mV[0] = min_vec[0]; ret = TRUE; }
|
||||
if (mV[1] < min_vec[1]) { mV[1] = min_vec[1]; ret = TRUE; }
|
||||
if (mV[2] < min_vec[2]) { mV[2] = min_vec[2]; ret = TRUE; }
|
||||
|
||||
if (mV[0] > max_vec[0]) { mV[0] = max_vec[0]; ret = TRUE; }
|
||||
if (mV[1] > max_vec[1]) { mV[1] = max_vec[1]; ret = TRUE; }
|
||||
if (mV[2] > max_vec[2]) { mV[2] = max_vec[2]; ret = TRUE; }
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// Sets all values to absolute value of their original values
|
||||
// Returns TRUE if data changed
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ class LLVector3
|
|||
|
||||
inline BOOL isFinite() const; // checks to see if all values of LLVector3 are finite
|
||||
BOOL clamp(F32 min, F32 max); // Clamps all values to (min,max), returns TRUE if data changed
|
||||
BOOL clamp(const LLVector3 &min_vec, const LLVector3 &max_vec); // Scales vector by another vector
|
||||
BOOL clampLength( F32 length_limit ); // Scales vector to limit length to a value
|
||||
|
||||
void quantize16(F32 lowerxy, F32 upperxy, F32 lowerz, F32 upperz); // changes the vector to reflect quatization
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ include(LLMath)
|
|||
include(LLMessage)
|
||||
include(LLVFS)
|
||||
include(LLAddBuildTest)
|
||||
include(Python)
|
||||
include(Tut)
|
||||
include(Python)
|
||||
|
||||
include_directories (${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
|
|
|
|||
|
|
@ -440,6 +440,9 @@ bool LLURLRequest::configure()
|
|||
case HTTP_GET:
|
||||
mDetail->mCurlRequest->setopt(CURLOPT_HTTPGET, 1);
|
||||
mDetail->mCurlRequest->setopt(CURLOPT_FOLLOWLOCATION, 1);
|
||||
|
||||
// Set Accept-Encoding to allow response compression
|
||||
mDetail->mCurlRequest->setoptString(CURLOPT_ENCODING, "");
|
||||
rv = true;
|
||||
break;
|
||||
|
||||
|
|
@ -464,6 +467,9 @@ bool LLURLRequest::configure()
|
|||
|
||||
// Set the handle for an http post
|
||||
mDetail->mCurlRequest->setPost(NULL, bytes);
|
||||
|
||||
// Set Accept-Encoding to allow response compression
|
||||
mDetail->mCurlRequest->setoptString(CURLOPT_ENCODING, "");
|
||||
rv = true;
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -2441,12 +2441,12 @@ void dump_prehash_files()
|
|||
" * Generated from message template version number %.3f\n"
|
||||
" */\n",
|
||||
gMessageSystem->mMessageFileVersionNumber);
|
||||
fprintf(fp, "\n\nextern F32 gPrehashVersionNumber;\n\n");
|
||||
fprintf(fp, "\n\nextern F32 const gPrehashVersionNumber;\n\n");
|
||||
for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++)
|
||||
{
|
||||
if (!LLMessageStringTable::getInstance()->mEmpty[i] && LLMessageStringTable::getInstance()->mString[i][0] != '.')
|
||||
{
|
||||
fprintf(fp, "extern char * _PREHASH_%s;\n", LLMessageStringTable::getInstance()->mString[i]);
|
||||
fprintf(fp, "extern char const* const _PREHASH_%s;\n", LLMessageStringTable::getInstance()->mString[i]);
|
||||
}
|
||||
}
|
||||
fprintf(fp, "\n\n#endif\n");
|
||||
|
|
@ -2471,12 +2471,12 @@ void dump_prehash_files()
|
|||
gMessageSystem->mMessageFileVersionNumber);
|
||||
fprintf(fp, "#include \"linden_common.h\"\n");
|
||||
fprintf(fp, "#include \"message.h\"\n\n");
|
||||
fprintf(fp, "\n\nF32 gPrehashVersionNumber = %.3ff;\n\n", gMessageSystem->mMessageFileVersionNumber);
|
||||
fprintf(fp, "\n\nF32 const gPrehashVersionNumber = %.3ff;\n\n", gMessageSystem->mMessageFileVersionNumber);
|
||||
for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++)
|
||||
{
|
||||
if (!LLMessageStringTable::getInstance()->mEmpty[i] && LLMessageStringTable::getInstance()->mString[i][0] != '.')
|
||||
{
|
||||
fprintf(fp, "char * _PREHASH_%s = LLMessageStringTable::getInstance()->getString(\"%s\");\n", LLMessageStringTable::getInstance()->mString[i], LLMessageStringTable::getInstance()->mString[i]);
|
||||
fprintf(fp, "char const* const _PREHASH_%s = LLMessageStringTable::getInstance()->getString(\"%s\");\n", LLMessageStringTable::getInstance()->mString[i], LLMessageStringTable::getInstance()->mString[i]);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -151,6 +151,7 @@ namespace tut
|
|||
template<> template<>
|
||||
void host_object::test<9>()
|
||||
{
|
||||
skip("this test is flaky, but we should figure out why...");
|
||||
// skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\"");
|
||||
std::string hostStr = "lindenlab.com";
|
||||
LLHost host;
|
||||
|
|
|
|||
|
|
@ -1227,12 +1227,12 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
S32 LLPrimitive::unpackTEMessage(LLMessageSystem *mesgsys, char *block_name)
|
||||
S32 LLPrimitive::unpackTEMessage(LLMessageSystem* mesgsys, char const* block_name)
|
||||
{
|
||||
return(unpackTEMessage(mesgsys,block_name,-1));
|
||||
}
|
||||
|
||||
S32 LLPrimitive::unpackTEMessage(LLMessageSystem *mesgsys, char *block_name, const S32 block_num)
|
||||
S32 LLPrimitive::unpackTEMessage(LLMessageSystem* mesgsys, char const* block_name, const S32 block_num)
|
||||
{
|
||||
// use a negative block_num to indicate a single-block read (a non-variable block)
|
||||
S32 retval = 0;
|
||||
|
|
|
|||
|
|
@ -358,8 +358,8 @@ public:
|
|||
S32 unpackTEField(U8 *cur_ptr, U8 *buffer_end, U8 *data_ptr, U8 data_size, U8 face_count, EMsgVariableType type);
|
||||
BOOL packTEMessage(LLMessageSystem *mesgsys) const;
|
||||
BOOL packTEMessage(LLDataPacker &dp) const;
|
||||
S32 unpackTEMessage(LLMessageSystem *mesgsys, char *block_name);
|
||||
S32 unpackTEMessage(LLMessageSystem *mesgsys, char *block_name, const S32 block_num); // Variable num of blocks
|
||||
S32 unpackTEMessage(LLMessageSystem* mesgsys, char const* block_name);
|
||||
S32 unpackTEMessage(LLMessageSystem* mesgsys, char const* block_name, const S32 block_num); // Variable num of blocks
|
||||
BOOL unpackTEMessage(LLDataPacker &dp);
|
||||
|
||||
#ifdef CHECK_FOR_FINITE
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ bool LLVolumeMessage::packProfileParams(
|
|||
bool LLVolumeMessage::unpackProfileParams(
|
||||
LLProfileParams* params,
|
||||
LLMessageSystem* mesgsys,
|
||||
char* block_name,
|
||||
char const* block_name,
|
||||
S32 block_num)
|
||||
{
|
||||
bool ok = true;
|
||||
|
|
@ -322,7 +322,7 @@ bool LLVolumeMessage::packPathParams(
|
|||
bool LLVolumeMessage::unpackPathParams(
|
||||
LLPathParams* params,
|
||||
LLMessageSystem* mesgsys,
|
||||
char* block_name,
|
||||
char const* block_name,
|
||||
S32 block_num)
|
||||
{
|
||||
U8 curve;
|
||||
|
|
@ -522,7 +522,7 @@ bool LLVolumeMessage::packVolumeParams(const LLVolumeParams* params, LLDataPacke
|
|||
bool LLVolumeMessage::unpackVolumeParams(
|
||||
LLVolumeParams* params,
|
||||
LLMessageSystem* mesgsys,
|
||||
char* block_name,
|
||||
char const* block_name,
|
||||
S32 block_num)
|
||||
{
|
||||
bool ok = true;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ protected:
|
|||
static bool unpackProfileParams(
|
||||
LLProfileParams* params,
|
||||
LLMessageSystem* mesgsys,
|
||||
char* block_name,
|
||||
char const* block_name,
|
||||
S32 block_num = 0);
|
||||
static bool unpackProfileParams(LLProfileParams* params, LLDataPacker& dp);
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ protected:
|
|||
static bool unpackPathParams(
|
||||
LLPathParams* params,
|
||||
LLMessageSystem* mesgsys,
|
||||
char* block_name,
|
||||
char const* block_name,
|
||||
S32 block_num = 0);
|
||||
static bool unpackPathParams(LLPathParams* params, LLDataPacker& dp);
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ public:
|
|||
static bool unpackVolumeParams(
|
||||
LLVolumeParams* params,
|
||||
LLMessageSystem* mesgsys,
|
||||
char* block_name,
|
||||
char const* block_name,
|
||||
S32 block_num = 0);
|
||||
static bool unpackVolumeParams(LLVolumeParams* params, LLDataPacker &dp);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -482,7 +482,7 @@ void LLFontFreetype::renderGlyph(U32 glyph_index) const
|
|||
if (mFTFace == NULL)
|
||||
return;
|
||||
|
||||
int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT );
|
||||
int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_FORCE_AUTOHINT );
|
||||
llassert(!error);
|
||||
|
||||
error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode);
|
||||
|
|
|
|||
|
|
@ -193,8 +193,8 @@ LLFontGL* LLFontGL::getFontDefault()
|
|||
return NULL;
|
||||
}
|
||||
|
||||
char* _PREHASH_AgentData = "AgentData";
|
||||
char* _PREHASH_AgentID = "AgentID";
|
||||
char const* const _PREHASH_AgentData = (char *)"AgentData";
|
||||
char const* const _PREHASH_AgentID = (char *)"AgentID";
|
||||
|
||||
LLHost LLHost::invalid(INVALID_PORT,INVALID_HOST_IP_ADDRESS);
|
||||
|
||||
|
|
|
|||
|
|
@ -81,10 +81,11 @@ LLDir_Win32::LLDir_Win32()
|
|||
|
||||
// fprintf(stderr, "mTempDir = <%s>",mTempDir);
|
||||
|
||||
#if 1
|
||||
// Don't use the real app path for now, as we'll have to add parsing to detect if
|
||||
// we're in a developer tree, which has a different structure from the installed product.
|
||||
// Set working directory, for LLDir::getWorkingDir()
|
||||
GetCurrentDirectory(MAX_PATH, w_str);
|
||||
mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
|
||||
|
||||
// Set the executable directory
|
||||
S32 size = GetModuleFileName(NULL, w_str, MAX_PATH);
|
||||
if (size)
|
||||
{
|
||||
|
|
@ -100,33 +101,36 @@ LLDir_Win32::LLDir_Win32()
|
|||
{
|
||||
mExecutableFilename = mExecutablePathAndName;
|
||||
}
|
||||
GetCurrentDirectory(MAX_PATH, w_str);
|
||||
mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "Couldn't get APP path, assuming current directory!");
|
||||
GetCurrentDirectory(MAX_PATH, w_str);
|
||||
mExecutableDir = utf16str_to_utf8str(llutf16string(w_str));
|
||||
mExecutableDir = mWorkingDir;
|
||||
// Assume it's the current directory
|
||||
}
|
||||
#else
|
||||
GetCurrentDirectory(MAX_PATH, w_str);
|
||||
mExecutableDir = utf16str_to_utf8str(llutf16string(w_str));
|
||||
#endif
|
||||
|
||||
if (mExecutableDir.find("indra") == std::string::npos)
|
||||
{
|
||||
// Running from installed directory. Make sure current
|
||||
// directory isn't something crazy (e.g. if invoking from
|
||||
// command line).
|
||||
SetCurrentDirectory(utf8str_to_utf16str(mExecutableDir).c_str());
|
||||
GetCurrentDirectory(MAX_PATH, w_str);
|
||||
mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
|
||||
}
|
||||
// mAppRODataDir = ".";
|
||||
|
||||
// Determine the location of the App-Read-Only-Data
|
||||
// Try the working directory then the exe's dir.
|
||||
mAppRODataDir = mWorkingDir;
|
||||
|
||||
|
||||
// if (mExecutableDir.find("indra") == std::string::npos)
|
||||
|
||||
// *NOTE:Mani - It is a mistake to put viewer specific code in
|
||||
// the LLDir implementation. The references to 'skins' and
|
||||
// 'llplugin' need to go somewhere else.
|
||||
// alas... this also gets called during static initialization
|
||||
// time due to the construction of gDirUtil in lldir.cpp.
|
||||
if(! LLFile::isdir(mAppRODataDir + mDirDelimiter + "skins"))
|
||||
{
|
||||
// What? No skins in the working dir?
|
||||
// Try the executable's directory.
|
||||
mAppRODataDir = mExecutableDir;
|
||||
}
|
||||
|
||||
llinfos << "mAppRODataDir = " << mAppRODataDir << llendl;
|
||||
|
||||
mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
|
||||
|
|
@ -249,7 +253,7 @@ BOOL LLDir_Win32::getNextFileInDir(const std::string &dirname, const std::string
|
|||
if (pathname != mCurrentDir)
|
||||
{
|
||||
// different dir specified, close old search
|
||||
if (mCurrentDir[0])
|
||||
if (!mCurrentDir.empty())
|
||||
{
|
||||
FindClose(mDirSearch_h);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,203 @@
|
|||
/**
|
||||
* @file lldiriterator.cpp
|
||||
* @brief Iterator through directory entries matching the search pattern.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "lldiriterator.h"
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
namespace fs = boost::filesystem;
|
||||
|
||||
static std::string glob_to_regex(const std::string& glob);
|
||||
|
||||
class LLDirIterator::Impl
|
||||
{
|
||||
public:
|
||||
Impl(const std::string &dirname, const std::string &mask);
|
||||
~Impl();
|
||||
|
||||
bool next(std::string &fname);
|
||||
|
||||
private:
|
||||
boost::regex mFilterExp;
|
||||
fs::directory_iterator mIter;
|
||||
bool mIsValid;
|
||||
};
|
||||
|
||||
LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
|
||||
: mIsValid(false)
|
||||
{
|
||||
fs::path dir_path(dirname);
|
||||
|
||||
// Check if path exists.
|
||||
if (!fs::exists(dir_path))
|
||||
{
|
||||
llerrs << "Invalid path: \"" << dir_path.string() << "\"" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
// Initialize the directory iterator for the given path.
|
||||
try
|
||||
{
|
||||
mIter = fs::directory_iterator(dir_path);
|
||||
}
|
||||
catch (fs::basic_filesystem_error<fs::path>& e)
|
||||
{
|
||||
llerrs << e.what() << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
// Convert the glob mask to a regular expression
|
||||
std::string exp = glob_to_regex(mask);
|
||||
|
||||
// Initialize boost::regex with the expression converted from
|
||||
// the glob mask.
|
||||
// An exception is thrown if the expression is not valid.
|
||||
try
|
||||
{
|
||||
mFilterExp.assign(exp);
|
||||
}
|
||||
catch (boost::regex_error& e)
|
||||
{
|
||||
llerrs << "\"" << exp << "\" is not a valid regular expression: "
|
||||
<< e.what() << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
mIsValid = true;
|
||||
}
|
||||
|
||||
LLDirIterator::Impl::~Impl()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLDirIterator::Impl::next(std::string &fname)
|
||||
{
|
||||
fname = "";
|
||||
|
||||
if (!mIsValid)
|
||||
{
|
||||
llerrs << "The iterator is not correctly initialized." << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
fs::directory_iterator end_itr; // default construction yields past-the-end
|
||||
bool found = false;
|
||||
while (mIter != end_itr && !found)
|
||||
{
|
||||
boost::smatch match;
|
||||
std::string name = mIter->path().filename();
|
||||
if (found = boost::regex_match(name, match, mFilterExp))
|
||||
{
|
||||
fname = name;
|
||||
}
|
||||
|
||||
++mIter;
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
std::string glob_to_regex(const std::string& glob)
|
||||
{
|
||||
std::string regex;
|
||||
regex.reserve(glob.size()<<1);
|
||||
S32 braces = 0;
|
||||
bool escaped = false;
|
||||
bool square_brace_open = false;
|
||||
|
||||
for (std::string::const_iterator i = glob.begin(); i != glob.end(); ++i)
|
||||
{
|
||||
char c = *i;
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case '.':
|
||||
regex+="\\.";
|
||||
break;
|
||||
case '*':
|
||||
if (glob.begin() == i)
|
||||
{
|
||||
regex+="[^.].*";
|
||||
}
|
||||
else
|
||||
{
|
||||
regex+= escaped ? "*" : ".*";
|
||||
}
|
||||
break;
|
||||
case '?':
|
||||
regex+= escaped ? '?' : '.';
|
||||
break;
|
||||
case '{':
|
||||
braces++;
|
||||
regex+='(';
|
||||
break;
|
||||
case '}':
|
||||
if (!braces)
|
||||
{
|
||||
llerrs << "glob_to_regex: Closing brace without an equivalent opening brace: " << glob << llendl;
|
||||
}
|
||||
|
||||
regex+=')';
|
||||
braces--;
|
||||
break;
|
||||
case ',':
|
||||
regex+= braces ? '|' : c;
|
||||
break;
|
||||
case '!':
|
||||
regex+= square_brace_open ? '^' : c;
|
||||
break;
|
||||
default:
|
||||
regex+=c;
|
||||
break;
|
||||
}
|
||||
|
||||
escaped = ('\\' == c);
|
||||
square_brace_open = ('[' == c);
|
||||
}
|
||||
|
||||
if (braces)
|
||||
{
|
||||
llerrs << "glob_to_regex: Unterminated brace expression: " << glob << llendl;
|
||||
}
|
||||
|
||||
return regex;
|
||||
}
|
||||
|
||||
LLDirIterator::LLDirIterator(const std::string &dirname, const std::string &mask)
|
||||
{
|
||||
mImpl = new Impl(dirname, mask);
|
||||
}
|
||||
|
||||
LLDirIterator::~LLDirIterator()
|
||||
{
|
||||
delete mImpl;
|
||||
}
|
||||
|
||||
bool LLDirIterator::next(std::string &fname)
|
||||
{
|
||||
return mImpl->next(fname);
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
/**
|
||||
* @file lldiriterator.h
|
||||
* @brief Iterator through directory entries matching the search pattern.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLDIRITERATOR_H
|
||||
#define LL_LLDIRITERATOR_H
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
/**
|
||||
* Class LLDirIterator
|
||||
*
|
||||
* Iterates through directory entries matching the search pattern.
|
||||
*/
|
||||
class LLDirIterator
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Constructs LLDirIterator object to search for glob pattern
|
||||
* matches in a directory.
|
||||
*
|
||||
* @param dirname - name of a directory to search in.
|
||||
* @param mask - search pattern, a glob expression
|
||||
*
|
||||
* Wildcards supported in glob expressions:
|
||||
* --------------------------------------------------------------
|
||||
* | Wildcard | Matches |
|
||||
* --------------------------------------------------------------
|
||||
* | * |zero or more characters |
|
||||
* | ? |exactly one character |
|
||||
* | [abcde] |exactly one character listed |
|
||||
* | [a-e] |exactly one character in the given range |
|
||||
* | [!abcde] |any character that is not listed |
|
||||
* | [!a-e] |any character that is not in the given range |
|
||||
* | {abc,xyz} |exactly one entire word in the options given |
|
||||
* --------------------------------------------------------------
|
||||
*/
|
||||
LLDirIterator(const std::string &dirname, const std::string &mask);
|
||||
|
||||
~LLDirIterator();
|
||||
|
||||
/**
|
||||
* Searches for the next directory entry matching the glob mask
|
||||
* specified upon iterator construction.
|
||||
* Returns true if a match is found, sets fname
|
||||
* parameter to the name of the matched directory entry and
|
||||
* increments the iterator position.
|
||||
*
|
||||
* Typical usage:
|
||||
* <code>
|
||||
* LLDirIterator iter(directory, pattern);
|
||||
* if ( iter.next(scanResult) )
|
||||
* </code>
|
||||
*
|
||||
* @param fname - name of the matched directory entry.
|
||||
* @return true if a match is found, false otherwise.
|
||||
*/
|
||||
bool next(std::string &fname);
|
||||
|
||||
protected:
|
||||
class Impl;
|
||||
Impl* mImpl;
|
||||
};
|
||||
|
||||
#endif //LL_LLDIRITERATOR_H
|
||||
|
|
@ -30,6 +30,7 @@ include_directories(
|
|||
${LLVFS_INCLUDE_DIRS}
|
||||
${LLWINDOW_INCLUDE_DIRS}
|
||||
${LLXML_INCLUDE_DIRS}
|
||||
${DIRECTX_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
set(llwindow_SOURCE_FILES
|
||||
|
|
|
|||
|
|
@ -8,8 +8,11 @@ FS (f|F)
|
|||
%n 4000
|
||||
%p 5000
|
||||
|
||||
%top {
|
||||
#include "linden_common.h"
|
||||
}
|
||||
|
||||
%{
|
||||
#include "linden_common.h"
|
||||
// Deal with the fact that lex/yacc generates unreachable code
|
||||
#ifdef LL_WINDOWS
|
||||
#pragma warning (disable : 4018) // warning C4018: signed/unsigned mismatch
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ project(mac_updater)
|
|||
include(00-Common)
|
||||
include(OpenSSL)
|
||||
include(CURL)
|
||||
include(CARes)
|
||||
include(LLCommon)
|
||||
include(LLVFS)
|
||||
include(Linking)
|
||||
|
|
@ -12,6 +13,8 @@ include(Linking)
|
|||
include_directories(
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
${LLVFS_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${CARES_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
set(mac_updater_SOURCE_FILES
|
||||
|
|
@ -53,6 +56,7 @@ target_link_libraries(mac-updater
|
|||
${OPENSSL_LIBRARIES}
|
||||
${CRYPTO_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${CARES_LIBRARIES}
|
||||
${LLCOMMON_LIBRARIES}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1230,20 +1230,14 @@ void *updatethreadproc(void*)
|
|||
// Move work directory to the trash
|
||||
if(tempDir[0] != 0)
|
||||
{
|
||||
// chdir("/");
|
||||
// FSDeleteObjects(tempDirRef);
|
||||
|
||||
llinfos << "Moving work directory to the trash." << llendl;
|
||||
|
||||
err = FSMoveObject(&tempDirRef, &trashFolderRef, NULL);
|
||||
FSRef trashRef;
|
||||
OSStatus err = FSMoveObjectToTrashSync(&tempDirRef, &trashRef, 0);
|
||||
if(err != noErr) {
|
||||
llwarns << "failed to move files to trash, (error code " <<
|
||||
err << ")" << llendl;
|
||||
}
|
||||
|
||||
// snprintf(temp, sizeof(temp), "rm -rf '%s'", tempDir);
|
||||
// printf("%s\n", temp);
|
||||
// system(temp);
|
||||
}
|
||||
|
||||
if(!gCancelled && !gFailure && (target[0] != 0))
|
||||
|
|
|
|||
|
|
@ -121,8 +121,8 @@ if (DARWIN)
|
|||
add_custom_command(
|
||||
TARGET media_plugin_webkit POST_BUILD
|
||||
# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
|
||||
DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
|
||||
DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
|
||||
)
|
||||
|
||||
endif (DARWIN)
|
||||
|
|
|
|||
|
|
@ -1231,7 +1231,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
|
|||
std::string url = message_in.getValue("url");
|
||||
if ( 404 == code ) // browser lib only supports 404 right now
|
||||
{
|
||||
LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url );
|
||||
#if LLQTWEBKIT_API_VERSION < 8
|
||||
LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url );
|
||||
#endif
|
||||
};
|
||||
}
|
||||
else if(message_name == "set_user_agent")
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ include(DBusGlib)
|
|||
include(DirectX)
|
||||
include(OpenSSL)
|
||||
include(DragDrop)
|
||||
include(ELFIO)
|
||||
include(EXPAT)
|
||||
include(FMOD)
|
||||
include(OPENAL)
|
||||
include(FindOpenGL)
|
||||
|
|
@ -46,13 +46,13 @@ include(CMakeCopyIfDifferent)
|
|||
|
||||
include_directories(
|
||||
${DBUSGLIB_INCLUDE_DIRS}
|
||||
${ELFIO_INCLUDE_DIR}
|
||||
${JSONCPP_INCLUDE_DIRS}
|
||||
${GLOD_INCLUDE_DIR}
|
||||
${LLAUDIO_INCLUDE_DIRS}
|
||||
${LLCHARACTER_INCLUDE_DIRS}
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
${LLCONVEXDECOMP_INCLUDE_DIRS}
|
||||
${FMOD_INCLUDE_DIR}
|
||||
${LLIMAGE_INCLUDE_DIRS}
|
||||
${LLKDU_INCLUDE_DIRS}
|
||||
${LLINVENTORY_INCLUDE_DIRS}
|
||||
|
|
@ -71,6 +71,7 @@ include_directories(
|
|||
${LLLOGIN_INCLUDE_DIRS}
|
||||
${UPDATER_INCLUDE_DIRS}
|
||||
${LIBS_PREBUILT_DIR}/include/collada
|
||||
${OPENAL_LIB_INCLUDE_DIRS}
|
||||
${LIBS_PREBUILT_DIR}/include/collada/1.4
|
||||
)
|
||||
|
||||
|
|
@ -390,6 +391,7 @@ set(viewer_SOURCE_FILES
|
|||
llparcelselection.cpp
|
||||
llparticipantlist.cpp
|
||||
llpatchvertexarray.cpp
|
||||
llphysicsmotion.cpp
|
||||
llphysicsshapebuilderutil.cpp
|
||||
llplacesinventorybridge.cpp
|
||||
llplacesinventorypanel.cpp
|
||||
|
|
@ -413,6 +415,7 @@ set(viewer_SOURCE_FILES
|
|||
llscreenchannel.cpp
|
||||
llscriptfloater.cpp
|
||||
llscrollingpanelparam.cpp
|
||||
llscrollingpanelparambase.cpp
|
||||
llsearchcombobox.cpp
|
||||
llsearchhistory.cpp
|
||||
llsecapi.cpp
|
||||
|
|
@ -931,6 +934,7 @@ set(viewer_HEADER_FILES
|
|||
llparcelselection.h
|
||||
llparticipantlist.h
|
||||
llpatchvertexarray.h
|
||||
llphysicsmotion.h
|
||||
llphysicsshapebuilderutil.h
|
||||
llplacesinventorybridge.h
|
||||
llplacesinventorypanel.h
|
||||
|
|
@ -956,6 +960,7 @@ set(viewer_HEADER_FILES
|
|||
llscreenchannel.h
|
||||
llscriptfloater.h
|
||||
llscrollingpanelparam.h
|
||||
llscrollingpanelparambase.h
|
||||
llsearchcombobox.h
|
||||
llsearchhistory.h
|
||||
llsecapi.h
|
||||
|
|
@ -1309,8 +1314,6 @@ if (WINDOWS)
|
|||
if (INTEL_MEMOPS_LIBRARY)
|
||||
list(APPEND viewer_LIBRARIES ${INTEL_MEMOPS_LIBRARY})
|
||||
endif (INTEL_MEMOPS_LIBRARY)
|
||||
|
||||
use_prebuilt_binary(dbghelp)
|
||||
endif (WINDOWS)
|
||||
|
||||
# Add the xui files. This is handy for searching for xui elements
|
||||
|
|
@ -1452,12 +1455,6 @@ set(PACKAGE ON CACHE BOOL
|
|||
"Add a package target that builds an installer package.")
|
||||
|
||||
if (WINDOWS)
|
||||
if(MSVC71)
|
||||
set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map /MAPINFO:LINES")
|
||||
else(MSVC71)
|
||||
set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map")
|
||||
endif(MSVC71)
|
||||
|
||||
if (INCREMENTAL_LINK)
|
||||
set_target_properties(${VIEWER_BINARY_NAME}
|
||||
PROPERTIES
|
||||
|
|
@ -1465,12 +1462,11 @@ if (WINDOWS)
|
|||
LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\""
|
||||
LINK_FLAGS_RELEASE ${release_flags}
|
||||
)
|
||||
else(INCREMENTAL_LINK)
|
||||
LINK_FLAGS_RELEASE ""
|
||||
set_target_properties(${VIEWER_BINARY_NAME}
|
||||
PROPERTIES
|
||||
LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /INCLUDE:__tcmalloc"
|
||||
LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\""
|
||||
LINK_FLAGS_RELEASE ${release_flags}
|
||||
)
|
||||
endif(INCREMENTAL_LINK)
|
||||
|
||||
|
|
@ -1521,15 +1517,12 @@ if (WINDOWS)
|
|||
${SHARED_LIB_STAGING_DIR}/Release/fmod.dll
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/fmod.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/fmod.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Release/msvcr80.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Release/msvcp80.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Release/Microsoft.VC80.CRT.manifest
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcr80.dll
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcp80.dll
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/msvcr80d.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/msvcp80d.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest
|
||||
${SHARED_LIB_STAGING_DIR}/Release/msvcr100.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Release/msvcp100.dll
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcr100.dll
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcp100.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/msvcr100d.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/msvcp100d.dll
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/SLVoice.exe
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/vivoxsdk.dll
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/ortp.dll
|
||||
|
|
@ -1541,7 +1534,6 @@ if (WINDOWS)
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/licenses-win32.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/featuretable.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/featuretable_xp.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/dbghelp.dll
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/libeay32.dll
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/qtcore4.dll
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/qtgui4.dll
|
||||
|
|
@ -1680,8 +1672,6 @@ if (WINDOWS)
|
|||
# sorted out on the parabuild cluster...
|
||||
#${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2)
|
||||
|
||||
check_message_template(package)
|
||||
|
||||
endif (PACKAGE)
|
||||
endif (WINDOWS)
|
||||
|
||||
|
|
@ -1725,8 +1715,8 @@ target_link_libraries(${VIEWER_BINARY_NAME}
|
|||
${SMARTHEAP_LIBRARY}
|
||||
${UI_LIBRARIES}
|
||||
${WINDOWS_LIBRARIES}
|
||||
${EXPAT_LIBRARIES}
|
||||
${XMLRPCEPI_LIBRARIES}
|
||||
${ELFIO_LIBRARIES}
|
||||
${OPENSSL_LIBRARIES}
|
||||
${CRYPTO_LIBRARIES}
|
||||
${LLLOGIN_LIBRARIES}
|
||||
|
|
@ -1808,7 +1798,7 @@ if (LINUX)
|
|||
${COPY_INPUT_DEPENDENCIES}
|
||||
COMMENT "Performing viewer_manifest copy"
|
||||
)
|
||||
|
||||
|
||||
add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)
|
||||
|
||||
if (PACKAGE)
|
||||
|
|
@ -1855,7 +1845,6 @@ if (DARWIN)
|
|||
|
||||
if (PACKAGE)
|
||||
add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
|
||||
check_message_template(package)
|
||||
|
||||
add_custom_command(
|
||||
TARGET package POST_BUILD
|
||||
|
|
@ -1886,7 +1875,9 @@ if (PACKAGE)
|
|||
if (WINDOWS)
|
||||
set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
|
||||
set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-windows.tar.bz2")
|
||||
set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX} slplugin.exe")
|
||||
# slplugin.exe failing symbols dump - need to debug, might have to do with updated version of google breakpad
|
||||
# set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX} slplugin.exe")
|
||||
set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX}")
|
||||
set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}")
|
||||
set(VIEWER_COPY_MANIFEST copy_w_viewer_manifest)
|
||||
endif (WINDOWS)
|
||||
|
|
@ -1920,7 +1911,7 @@ if (PACKAGE)
|
|||
"${VIEWER_DIST_DIR}"
|
||||
"${VIEWER_EXE_GLOBS}"
|
||||
"${VIEWER_LIB_GLOB}"
|
||||
"${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/bin/dump_syms"
|
||||
"${AUTOBUILD_INSTALL_DIR}/bin/dump_syms"
|
||||
"${VIEWER_SYMBOL_FILE}"
|
||||
DEPENDS generate_breakpad_symbols.py
|
||||
VERBATIM)
|
||||
|
|
@ -2038,4 +2029,5 @@ if (LL_TESTS)
|
|||
|
||||
endif (LL_TESTS)
|
||||
|
||||
check_message_template(${VIEWER_BINARY_NAME})
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
<RenderAvatarCloth value="FALSE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="0.9"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="TRUE"/>
|
||||
<!--Short Range-->
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="0.5"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="0.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarMaxVisible value="3"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="FALSE"/>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
<RenderAvatarCloth value="FALSE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="0.5"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="0.75"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="TRUE"/>
|
||||
<!--Short Range-->
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -4,6 +4,8 @@
|
|||
<RenderAvatarCloth value="TRUE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="1.0"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="TRUE"/>
|
||||
<!--Short Range-->
|
||||
|
|
|
|||
|
|
@ -612,7 +612,7 @@
|
|||
id="36"
|
||||
group="0"
|
||||
name="Shoulders"
|
||||
label="Shoulders"
|
||||
label="Shoulders"
|
||||
wearable="shape"
|
||||
edit_group="shape_torso"
|
||||
edit_group_order="4"
|
||||
|
|
@ -4040,7 +4040,6 @@
|
|||
scale="0.0 0.0 0.01"
|
||||
pos="0 0 -0.01"/>
|
||||
</param_morph>
|
||||
|
||||
</param>
|
||||
|
||||
<param
|
||||
|
|
@ -4061,7 +4060,7 @@
|
|||
camera_distance=".8">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
|
||||
<param
|
||||
id="628"
|
||||
group="1"
|
||||
|
|
@ -4130,7 +4129,7 @@
|
|||
camera_distance=".8">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
|
||||
<param
|
||||
id="685"
|
||||
group="0"
|
||||
|
|
@ -4327,9 +4326,67 @@
|
|||
<param_morph />
|
||||
</param>
|
||||
|
||||
<!--
|
||||
#############
|
||||
# physics morphs (not user controlled)
|
||||
#############
|
||||
-->
|
||||
<param
|
||||
id="1200"
|
||||
group="1"
|
||||
sex="female"
|
||||
name="Breast_Physics_UpDown_Driven"
|
||||
wearable="shape"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-2"
|
||||
value_max="2">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1201"
|
||||
group="1"
|
||||
sex="female"
|
||||
name="Breast_Physics_InOut_Driven"
|
||||
wearable="shape"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-1"
|
||||
value_max="1">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1204"
|
||||
group="1"
|
||||
name="Belly_Physics_Torso_UpDown_Driven"
|
||||
wearable="physics"
|
||||
cross_wearable="true"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-1"
|
||||
value_max="1">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1207"
|
||||
group="1"
|
||||
name="Breast_Physics_LeftRight_Driven"
|
||||
wearable="physics"
|
||||
cross_wearable="true"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-2"
|
||||
value_max="2">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
<!--
|
||||
#end morph targets
|
||||
-->
|
||||
|
||||
</mesh>
|
||||
|
||||
<mesh
|
||||
|
|
@ -4390,6 +4447,7 @@
|
|||
<param_morph />
|
||||
</param>
|
||||
|
||||
|
||||
<param
|
||||
id="151"
|
||||
group="1"
|
||||
|
|
@ -4828,9 +4886,54 @@
|
|||
<param_morph />
|
||||
</param>
|
||||
|
||||
<!--
|
||||
#############
|
||||
# physics morphs (not user controlled)
|
||||
#############
|
||||
-->
|
||||
<param
|
||||
id="1202"
|
||||
group="1"
|
||||
name="Belly_Physics_Legs_UpDown_Driven"
|
||||
wearable="physics"
|
||||
cross_wearable="true"
|
||||
edit_group="driven"
|
||||
value_min="-1"
|
||||
value_max="1">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
|
||||
<param
|
||||
id="1205"
|
||||
group="1"
|
||||
name="Butt_Physics_UpDown_Driven"
|
||||
wearable="physics"
|
||||
cross_wearable="true"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-1"
|
||||
value_max="1">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1206"
|
||||
group="1"
|
||||
name="Butt_Physics_LeftRight_Driven"
|
||||
wearable="physics"
|
||||
cross_wearable="true"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-1"
|
||||
value_max="1">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
<!--
|
||||
#end morph targets
|
||||
-->
|
||||
|
||||
</mesh>
|
||||
|
||||
<mesh
|
||||
|
|
@ -5199,6 +5302,25 @@
|
|||
value_max="1">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
<!--
|
||||
#############
|
||||
# physics morphs (not user controlled)
|
||||
#############
|
||||
-->
|
||||
<param
|
||||
id="1203"
|
||||
group="1"
|
||||
name="Belly_Physics_Skirt_UpDown_Driven"
|
||||
wearable="physics"
|
||||
cross_wearable="true"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-1"
|
||||
value_max="1">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
</mesh>
|
||||
|
||||
<mesh
|
||||
|
|
@ -9074,12 +9196,13 @@ render_pass="bump">
|
|||
|
||||
<!-- =========================================================== -->
|
||||
<driver_parameters>
|
||||
|
||||
<param
|
||||
id="828"
|
||||
group="0"
|
||||
name="Loose Upper Clothing"
|
||||
label="Shirt Fit"
|
||||
show_simple="true"
|
||||
show_simple="true"
|
||||
wearable="shirt"
|
||||
edit_group="shirt"
|
||||
edit_group_order="4"
|
||||
|
|
@ -11631,6 +11754,525 @@ render_pass="bump">
|
|||
</param_driver>
|
||||
</param>
|
||||
|
||||
<!-- ==PHYSICS PARAMETERS======================================= -->
|
||||
|
||||
<param
|
||||
id="1100"
|
||||
group="1"
|
||||
sex="female"
|
||||
wearable="physics"
|
||||
name="Breast_Physics_UpDown_Controller"
|
||||
label="Breast Physics UpDown Controller"
|
||||
value_min="-1"
|
||||
value_max="1"
|
||||
value_default="0">
|
||||
<param_driver>
|
||||
<driven
|
||||
id="1200" />
|
||||
</param_driver>
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1101"
|
||||
group="1"
|
||||
sex="female"
|
||||
wearable="physics"
|
||||
name="Breast_Physics_InOut_Controller"
|
||||
label="Breast Physics InOut Controller"
|
||||
value_min="-1"
|
||||
value_max="1"
|
||||
value_default="0">
|
||||
<param_driver>
|
||||
<driven
|
||||
id="1201" />
|
||||
</param_driver>
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1102"
|
||||
group="1"
|
||||
wearable="physics"
|
||||
name="Belly_Physics_UpDown_Controller"
|
||||
label="Belly Physics UpDown Controller"
|
||||
value_min="-1"
|
||||
value_max="1"
|
||||
value_default="0">
|
||||
<param_driver>
|
||||
<driven
|
||||
id="1202" />
|
||||
<driven
|
||||
id="1203" />
|
||||
<driven
|
||||
id="1204" />
|
||||
</param_driver>
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1103"
|
||||
group="1"
|
||||
wearable="shape"
|
||||
name="Butt_Physics_UpDown_Controller"
|
||||
label="Butt Physics UpDown Controller"
|
||||
value_min="-1"
|
||||
value_max="1"
|
||||
value_default="0">
|
||||
<param_driver>
|
||||
<driven
|
||||
id="1205" />
|
||||
</param_driver>
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1104"
|
||||
group="1"
|
||||
wearable="shape"
|
||||
name="Butt_Physics_LeftRight_Controller"
|
||||
label="Butt Physics LeftRight Controller"
|
||||
value_min="-1"
|
||||
value_max="1"
|
||||
value_default="0">
|
||||
<param_driver>
|
||||
<driven
|
||||
id="1206" />
|
||||
</param_driver>
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="1105"
|
||||
group="1"
|
||||
wearable="shape"
|
||||
name="Breast_Physics_LeftRight_Controller"
|
||||
label="Breast Physics LeftRight Controller"
|
||||
value_min="-1"
|
||||
value_max="1"
|
||||
value_default="0">
|
||||
<param_driver>
|
||||
<driven
|
||||
id="1207" />
|
||||
</param_driver>
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10000"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_Mass"
|
||||
label="Breast Physics Mass"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default=".1"
|
||||
value_min=".1"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10001"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_Gravity"
|
||||
label="Breast Physics Gravity"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max=".1">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10002"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_Drag"
|
||||
label="Breast Physics Drag"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default=".15"
|
||||
value_min="0"
|
||||
value_max=".5">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10003"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_UpDown_Max_Effect"
|
||||
label="Breast Physics UpDown Max Effect"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_updown"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10004"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_UpDown_Spring"
|
||||
label="Breast Physics UpDown Spring"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_updown"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10005"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_UpDown_Gain"
|
||||
label="Breast Physics UpDown Gain"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_updown"
|
||||
value_default="10"
|
||||
value_min="1"
|
||||
value_max="100">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10006"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_UpDown_Damping"
|
||||
label="Breast Physics UpDown Damping"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_updown"
|
||||
value_default=".05"
|
||||
value_min="0"
|
||||
value_max=".1"
|
||||
camera_elevation=".3"
|
||||
camera_distance=".8">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10007"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_InOut_Max_Effect"
|
||||
label="Breast Physics InOut Max Effect"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_inout"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10008"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_InOut_Spring"
|
||||
label="Breast Physics InOut Spring"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_inout"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10009"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_InOut_Gain"
|
||||
label="Breast Physics InOut Gain"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_inout"
|
||||
value_default="10"
|
||||
value_min="1"
|
||||
value_max="100">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10010"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_InOut_Damping"
|
||||
label="Breast Physics InOut Damping"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_inout"
|
||||
value_default=".05"
|
||||
value_min="0"
|
||||
value_max=".1">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10011"
|
||||
group="0"
|
||||
name="Belly_Physics_Mass"
|
||||
label="Belly Physics Mass"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default=".1"
|
||||
value_min=".1"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10012"
|
||||
group="0"
|
||||
name="Belly_Physics_Gravity"
|
||||
label="Belly Physics Gravity"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max=".1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10013"
|
||||
group="0"
|
||||
name="Belly_Physics_Drag"
|
||||
label="Belly Physics Drag"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default=".15"
|
||||
value_min="0"
|
||||
value_max=".5">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10014"
|
||||
group="0"
|
||||
name="Belly_Physics_UpDown_Max_Effect"
|
||||
label="Belly Physics UpDown Max Effect"
|
||||
wearable="physics"
|
||||
edit_group="physics_belly_updown"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10015"
|
||||
group="0"
|
||||
name="Belly_Physics_UpDown_Spring"
|
||||
label="Belly Physics UpDown Spring"
|
||||
wearable="physics"
|
||||
edit_group="physics_belly_updown"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10016"
|
||||
group="0"
|
||||
name="Belly_Physics_UpDown_Gain"
|
||||
label="Belly Physics UpDown Gain"
|
||||
wearable="physics"
|
||||
edit_group="physics_belly_updown"
|
||||
value_default="10"
|
||||
value_min="1"
|
||||
value_max="100">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10017"
|
||||
group="0"
|
||||
name="Belly_Physics_UpDown_Damping"
|
||||
label="Belly Physics UpDown Damping"
|
||||
wearable="physics"
|
||||
edit_group="physics_belly_updown"
|
||||
value_default=".05"
|
||||
value_min="0"
|
||||
value_max=".1">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10018"
|
||||
group="0"
|
||||
name="Butt_Physics_Mass"
|
||||
label="Butt Physics Mass"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default=".1"
|
||||
value_min=".1"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10019"
|
||||
group="0"
|
||||
name="Butt_Physics_Gravity"
|
||||
label="Butt Physics Gravity"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max=".1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10020"
|
||||
group="0"
|
||||
name="Butt_Physics_Drag"
|
||||
label="Butt Physics Drag"
|
||||
wearable="physics"
|
||||
edit_group="physics_advanced"
|
||||
value_default=".15"
|
||||
value_min="0"
|
||||
value_max=".5">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10021"
|
||||
group="0"
|
||||
name="Butt_Physics_UpDown_Max_Effect"
|
||||
label="Butt Physics UpDown Max Effect"
|
||||
wearable="physics"
|
||||
edit_group="physics_butt_updown"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10022"
|
||||
group="0"
|
||||
name="Butt_Physics_UpDown_Spring"
|
||||
label="Butt Physics UpDown Spring"
|
||||
wearable="physics"
|
||||
edit_group="physics_butt_updown"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10023"
|
||||
group="0"
|
||||
name="Butt_Physics_UpDown_Gain"
|
||||
label="Butt Physics UpDown Gain"
|
||||
wearable="physics"
|
||||
edit_group="physics_butt_updown"
|
||||
value_default="10"
|
||||
value_min="1"
|
||||
value_max="100">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10024"
|
||||
group="0"
|
||||
name="Butt_Physics_UpDown_Damping"
|
||||
label="Butt Physics UpDown Damping"
|
||||
wearable="physics"
|
||||
edit_group="physics_butt_updown"
|
||||
value_default=".05"
|
||||
value_min="0"
|
||||
value_max=".1">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10025"
|
||||
group="0"
|
||||
name="Butt_Physics_LeftRight_Max_Effect"
|
||||
label="Butt Physics LeftRight Max Effect"
|
||||
wearable="physics"
|
||||
edit_group="physics_butt_leftright"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10026"
|
||||
group="0"
|
||||
name="Butt_Physics_LeftRight_Spring"
|
||||
label="Butt Physics LeftRight Spring"
|
||||
wearable="physics"
|
||||
edit_group="physics_butt_leftright"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10027"
|
||||
group="0"
|
||||
name="Butt_Physics_LeftRight_Gain"
|
||||
label="Butt Physics LeftRight Gain"
|
||||
wearable="physics"
|
||||
edit_group="physics_butt_leftright"
|
||||
value_default="10"
|
||||
value_min="1"
|
||||
value_max="100">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10028"
|
||||
group="0"
|
||||
name="Butt_Physics_LeftRight_Damping"
|
||||
label="Butt Physics LeftRight Damping"
|
||||
wearable="physics"
|
||||
edit_group="physics_butt_leftright"
|
||||
value_default=".05"
|
||||
value_min="0"
|
||||
value_max=".1">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
<param
|
||||
id="10029"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_LeftRight_Max_Effect"
|
||||
label="Breast Physics LeftRight Max Effect"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_leftright"
|
||||
value_default="0"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10030"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_LeftRight_Spring"
|
||||
label="Breast Physics LeftRight Spring"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_leftright"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10031"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_LeftRight_Gain"
|
||||
label="Breast Physics LeftRight Gain"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_leftright"
|
||||
value_default="10"
|
||||
value_min="1"
|
||||
value_max="100">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
id="10032"
|
||||
group="0"
|
||||
sex="female"
|
||||
name="Breast_Physics_LeftRight_Damping"
|
||||
label="Breast Physics LeftRight Damping"
|
||||
wearable="physics"
|
||||
edit_group="physics_breasts_leftright"
|
||||
value_default=".05"
|
||||
value_min="0"
|
||||
value_max=".1">
|
||||
<param_driver />
|
||||
</param>
|
||||
|
||||
</driver_parameters>
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ list all
|
|||
RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarPhysicsLODFactor 1 1.0
|
||||
RenderAvatarMaxVisible 1 12
|
||||
RenderAvatarVP 1 1
|
||||
RenderCubeMap 1 1
|
||||
|
|
@ -71,6 +72,7 @@ list Low
|
|||
RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
|
|
@ -101,6 +103,7 @@ list Mid
|
|||
RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0.5
|
||||
RenderAvatarPhysicsLODFactor 1 0.75
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 96
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
|
|
@ -129,6 +132,7 @@ list High
|
|||
RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarPhysicsLODFactor 1 0.9
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 128
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
|
|
|
|||
|
|
@ -821,7 +821,7 @@ void LLAgentWearables::popWearable(const LLWearableType::EType type, U32 index)
|
|||
}
|
||||
}
|
||||
|
||||
U32 LLAgentWearables::getWearableIndex(LLWearable *wearable)
|
||||
U32 LLAgentWearables::getWearableIndex(const LLWearable *wearable) const
|
||||
{
|
||||
if (wearable == NULL)
|
||||
{
|
||||
|
|
@ -2045,8 +2045,9 @@ void LLAgentWearables::editWearable(const LLUUID& item_id)
|
|||
return;
|
||||
}
|
||||
|
||||
const BOOL disable_camera_switch = LLWearableType::getDisableCameraSwitch(wearable->getType());
|
||||
LLPanel* panel = LLSideTray::getInstance()->getPanel("sidepanel_appearance");
|
||||
LLSidepanelAppearance::editWearable(wearable, panel);
|
||||
LLSidepanelAppearance::editWearable(wearable, panel, disable_camera_switch);
|
||||
}
|
||||
|
||||
// Request editing the item after it gets worn.
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ public:
|
|||
void setWearableOutfit(const LLInventoryItem::item_array_t& items, const LLDynamicArray< LLWearable* >& wearables, BOOL remove);
|
||||
void setWearableName(const LLUUID& item_id, const std::string& new_name);
|
||||
void addLocalTextureObject(const LLWearableType::EType wearable_type, const LLVOAvatarDefines::ETextureIndex texture_type, U32 wearable_index);
|
||||
U32 getWearableIndex(LLWearable *wearable);
|
||||
U32 getWearableIndex(const LLWearable *wearable) const;
|
||||
|
||||
protected:
|
||||
void setWearableFinal(LLInventoryItem* new_item, LLWearable* new_wearable, bool do_append = false);
|
||||
|
|
|
|||
|
|
@ -500,6 +500,7 @@ static void settings_to_globals()
|
|||
LLVolumeImplFlexible::sUpdateFactor = gSavedSettings.getF32("RenderFlexTimeFactor");
|
||||
LLVOTree::sTreeFactor = gSavedSettings.getF32("RenderTreeLODFactor");
|
||||
LLVOAvatar::sLODFactor = gSavedSettings.getF32("RenderAvatarLODFactor");
|
||||
LLVOAvatar::sPhysicsLODFactor = gSavedSettings.getF32("RenderAvatarPhysicsLODFactor");
|
||||
LLVOAvatar::sMaxVisible = (U32)gSavedSettings.getS32("RenderAvatarMaxVisible");
|
||||
LLVOAvatar::sVisibleInFirstPerson = gSavedSettings.getBOOL("FirstPersonAvatarVisible");
|
||||
// clamp auto-open time to some minimum usable value
|
||||
|
|
|
|||
|
|
@ -0,0 +1,402 @@
|
|||
/**
|
||||
* @file llbreastmotion.cpp
|
||||
* @brief Implementation of LLBreastMotion class.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), 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/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Header Files
|
||||
//-----------------------------------------------------------------------------
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "m3math.h"
|
||||
#include "v3dmath.h"
|
||||
|
||||
#include "llbreastmotion.h"
|
||||
#include "llcharacter.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewervisualparam.h"
|
||||
#include "llvoavatarself.h"
|
||||
|
||||
#define MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION 0.f;
|
||||
|
||||
#define N_PARAMS 2
|
||||
|
||||
// User-set params
|
||||
static const std::string breast_param_names_user[N_PARAMS] =
|
||||
{
|
||||
"Breast_Female_Cleavage_Driver",
|
||||
"Breast_Gravity_Driver"
|
||||
};
|
||||
|
||||
// Params driven by this algorithm
|
||||
static const std::string breast_param_names_driven[N_PARAMS] =
|
||||
{
|
||||
"Breast_Female_Cleavage",
|
||||
"Breast_Gravity"
|
||||
};
|
||||
|
||||
|
||||
|
||||
LLBreastMotion::LLBreastMotion(const LLUUID &id) :
|
||||
LLMotion(id),
|
||||
mCharacter(NULL)
|
||||
{
|
||||
mName = "breast_motion";
|
||||
mChestState = new LLJointState;
|
||||
|
||||
mBreastMassParam = (F32)1.0;
|
||||
mBreastDragParam = LLVector3((F32)0.1, (F32)0.1, (F32)0.1);
|
||||
mBreastSmoothingParam = (U32)2;
|
||||
mBreastGravityParam = (F32)0.0;
|
||||
|
||||
mBreastSpringParam = LLVector3((F32)3.0, (F32)0.0, (F32)3.0);
|
||||
mBreastGainParam = LLVector3((F32)50.0, (F32)0.0, (F32)50.0);
|
||||
mBreastDampingParam = LLVector3((F32)0.3, (F32)0.0, (F32)0.3);
|
||||
mBreastMaxVelocityParam = LLVector3((F32)10.0, (F32)0.0, (F32)10.0);
|
||||
|
||||
mBreastParamsUser[0] = mBreastParamsUser[1] = mBreastParamsUser[2] = NULL;
|
||||
mBreastParamsDriven[0] = mBreastParamsDriven[1] = mBreastParamsDriven[2] = NULL;
|
||||
|
||||
mCharLastPosition_world_pt = LLVector3(0,0,0);
|
||||
mCharLastVelocity_local_vec = LLVector3(0,0,0);
|
||||
mCharLastAcceleration_local_vec = LLVector3(0,0,0);
|
||||
mBreastLastPosition_local_pt = LLVector3(0,0,0);
|
||||
mBreastLastUpdatePosition_local_pt = LLVector3(0,0,0);
|
||||
mBreastVelocity_local_vec = LLVector3(0,0,0);
|
||||
}
|
||||
|
||||
LLBreastMotion::~LLBreastMotion()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLBreastMotion::onActivate()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLBreastMotion::onDeactivate()
|
||||
{
|
||||
}
|
||||
|
||||
LLMotion::LLMotionInitStatus LLBreastMotion::onInitialize(LLCharacter *character)
|
||||
{
|
||||
mCharacter = character;
|
||||
|
||||
if (!mChestState->setJoint(character->getJoint("mChest")))
|
||||
{
|
||||
return STATUS_FAILURE;
|
||||
}
|
||||
|
||||
mChestState->setUsage(LLJointState::ROT);
|
||||
addJointState( mChestState );
|
||||
|
||||
for (U32 i=0; i < N_PARAMS; i++)
|
||||
{
|
||||
mBreastParamsUser[i] = NULL;
|
||||
mBreastParamsDriven[i] = NULL;
|
||||
mBreastParamsMin[i] = 0;
|
||||
mBreastParamsMax[i] = 0;
|
||||
if (breast_param_names_user[i] != "" && breast_param_names_driven[i] != "")
|
||||
{
|
||||
mBreastParamsUser[i] = (LLViewerVisualParam*)mCharacter->getVisualParam(breast_param_names_user[i].c_str());
|
||||
mBreastParamsDriven[i] = (LLViewerVisualParam*)mCharacter->getVisualParam(breast_param_names_driven[i].c_str());
|
||||
if (mBreastParamsDriven[i])
|
||||
{
|
||||
mBreastParamsMin[i] = mBreastParamsDriven[i]->getMinWeight();
|
||||
mBreastParamsMax[i] = mBreastParamsDriven[i]->getMaxWeight();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mTimer.reset();
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
F32 LLBreastMotion::getMinPixelArea()
|
||||
{
|
||||
return MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION;
|
||||
}
|
||||
|
||||
|
||||
F32 LLBreastMotion::calculateTimeDelta()
|
||||
{
|
||||
const F32 time = mTimer.getElapsedTimeF32();
|
||||
const F32 time_delta = time - mLastTime;
|
||||
mLastTime = time;
|
||||
return time_delta;
|
||||
}
|
||||
|
||||
// Local space means "parameter space".
|
||||
LLVector3 LLBreastMotion::toLocal(const LLVector3 &world_vector)
|
||||
{
|
||||
LLVector3 local_vec(0,0,0);
|
||||
|
||||
LLJoint *chest_joint = mChestState->getJoint();
|
||||
const LLQuaternion world_rot = chest_joint->getWorldRotation();
|
||||
|
||||
// Cleavage
|
||||
LLVector3 breast_dir_world_vec = LLVector3(-1,0,0) * world_rot; // -1 b/c cleavage param changes opposite to direction
|
||||
breast_dir_world_vec.normalize();
|
||||
local_vec[0] = world_vector * breast_dir_world_vec;
|
||||
|
||||
// Up-Down Bounce
|
||||
LLVector3 breast_up_dir_world_vec = LLVector3(0,0,1) * world_rot;
|
||||
breast_up_dir_world_vec.normalize();
|
||||
local_vec[1] = world_vector * breast_up_dir_world_vec;
|
||||
|
||||
return local_vec;
|
||||
}
|
||||
|
||||
LLVector3 LLBreastMotion::calculateVelocity_local(const F32 time_delta)
|
||||
{
|
||||
LLJoint *chest_joint = mChestState->getJoint();
|
||||
const LLVector3 world_pos_pt = chest_joint->getWorldPosition();
|
||||
const LLQuaternion world_rot = chest_joint->getWorldRotation();
|
||||
const LLVector3 last_world_pos_pt = mCharLastPosition_world_pt;
|
||||
const LLVector3 char_velocity_world_vec = (world_pos_pt-last_world_pos_pt) / time_delta;
|
||||
const LLVector3 char_velocity_local_vec = toLocal(char_velocity_world_vec);
|
||||
|
||||
return char_velocity_local_vec;
|
||||
}
|
||||
|
||||
LLVector3 LLBreastMotion::calculateAcceleration_local(const LLVector3 &new_char_velocity_local_vec,
|
||||
const F32 time_delta)
|
||||
{
|
||||
LLVector3 char_acceleration_local_vec = new_char_velocity_local_vec - mCharLastVelocity_local_vec;
|
||||
|
||||
char_acceleration_local_vec =
|
||||
char_acceleration_local_vec * 1.0/mBreastSmoothingParam +
|
||||
mCharLastAcceleration_local_vec * (mBreastSmoothingParam-1.0)/mBreastSmoothingParam;
|
||||
|
||||
mCharLastAcceleration_local_vec = char_acceleration_local_vec;
|
||||
|
||||
return char_acceleration_local_vec;
|
||||
}
|
||||
|
||||
BOOL LLBreastMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
// Skip if disabled globally.
|
||||
if (!gSavedSettings.getBOOL("AvatarPhysics"))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Higher LOD is better. This controls the granularity
|
||||
// and frequency of updates for the motions.
|
||||
const F32 lod_factor = LLVOAvatar::sPhysicsLODFactor;
|
||||
if (lod_factor == 0)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (mCharacter->getSex() != SEX_FEMALE) return TRUE;
|
||||
const F32 time_delta = calculateTimeDelta();
|
||||
if (time_delta < .01 || time_delta > 10.0) return TRUE;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Get all parameters and settings
|
||||
//
|
||||
|
||||
mBreastMassParam = mCharacter->getVisualParamWeight("Breast_Physics_Mass");
|
||||
mBreastSmoothingParam = (U32)(mCharacter->getVisualParamWeight("Breast_Physics_Smoothing"));
|
||||
mBreastGravityParam = mCharacter->getVisualParamWeight("Breast_Physics_Gravity");
|
||||
|
||||
mBreastSpringParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Spring");
|
||||
mBreastGainParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Gain");
|
||||
mBreastDampingParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Damping");
|
||||
mBreastMaxVelocityParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Max_Velocity");
|
||||
mBreastDragParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Drag");
|
||||
|
||||
mBreastSpringParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Spring");
|
||||
mBreastGainParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Gain");
|
||||
mBreastDampingParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Damping");
|
||||
mBreastMaxVelocityParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Max_Velocity");
|
||||
mBreastDragParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Drag");
|
||||
|
||||
|
||||
// Get the current morph parameters.
|
||||
LLVector3 breast_user_local_pt(0,0,0);
|
||||
for (U32 i=0; i < N_PARAMS; i++)
|
||||
{
|
||||
if (mBreastParamsUser[i] != NULL)
|
||||
{
|
||||
breast_user_local_pt[i] = mBreastParamsUser[i]->getWeight();
|
||||
}
|
||||
}
|
||||
|
||||
LLVector3 breast_current_local_pt = mBreastLastPosition_local_pt;
|
||||
|
||||
//
|
||||
// End parameters and settings
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Calculate velocity and acceleration in parameter space.
|
||||
//
|
||||
|
||||
const LLVector3 char_velocity_local_vec = calculateVelocity_local(time_delta);
|
||||
const LLVector3 char_acceleration_local_vec = calculateAcceleration_local(char_velocity_local_vec, time_delta);
|
||||
mCharLastVelocity_local_vec = char_velocity_local_vec;
|
||||
|
||||
LLJoint *chest_joint = mChestState->getJoint();
|
||||
mCharLastPosition_world_pt = chest_joint->getWorldPosition();
|
||||
|
||||
//
|
||||
// End velocity and acceleration
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Calculate the total force
|
||||
//
|
||||
|
||||
// Spring force is a restoring force towards the original user-set breast position.
|
||||
// F = kx
|
||||
const LLVector3 spring_length_local = breast_current_local_pt-breast_user_local_pt;
|
||||
LLVector3 force_spring_local_vec = -spring_length_local; force_spring_local_vec *= mBreastSpringParam;
|
||||
|
||||
// Acceleration is the force that comes from the change in velocity of the torso.
|
||||
// F = ma + mg
|
||||
LLVector3 force_accel_local_vec = char_acceleration_local_vec * mBreastMassParam;
|
||||
const LLVector3 force_gravity_local_vec = toLocal(LLVector3(0,0,1))* mBreastGravityParam * mBreastMassParam;
|
||||
force_accel_local_vec += force_gravity_local_vec;
|
||||
force_accel_local_vec *= mBreastGainParam;
|
||||
|
||||
// Damping is a restoring force that opposes the current velocity.
|
||||
// F = -kv
|
||||
LLVector3 force_damping_local_vec = -mBreastDampingParam;
|
||||
force_damping_local_vec *= mBreastVelocity_local_vec;
|
||||
|
||||
// Drag is a force imparted by velocity, intuitively it is similar to wind resistance.
|
||||
// F = .5v*v
|
||||
LLVector3 force_drag_local_vec = .5*char_velocity_local_vec;
|
||||
force_drag_local_vec *= char_velocity_local_vec;
|
||||
force_drag_local_vec *= mBreastDragParam[0];
|
||||
|
||||
LLVector3 force_net_local_vec =
|
||||
force_accel_local_vec +
|
||||
force_gravity_local_vec +
|
||||
force_spring_local_vec +
|
||||
force_damping_local_vec +
|
||||
force_drag_local_vec;
|
||||
|
||||
//
|
||||
// End total force
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Calculate new params
|
||||
//
|
||||
|
||||
// Calculate the new acceleration based on the net force.
|
||||
// a = F/m
|
||||
LLVector3 acceleration_local_vec = force_net_local_vec / mBreastMassParam;
|
||||
mBreastVelocity_local_vec += acceleration_local_vec;
|
||||
mBreastVelocity_local_vec.clamp(-mBreastMaxVelocityParam*100.0, mBreastMaxVelocityParam*100.0);
|
||||
|
||||
// Temporary debugging setting to cause all avatars to move, for profiling purposes.
|
||||
if (gSavedSettings.getBOOL("AvatarPhysicsTest"))
|
||||
{
|
||||
mBreastVelocity_local_vec[0] = sin(mTimer.getElapsedTimeF32()*4.0)*5.0;
|
||||
mBreastVelocity_local_vec[1] = sin(mTimer.getElapsedTimeF32()*3.0)*5.0;
|
||||
}
|
||||
// Calculate the new parameters and clamp them to the min/max ranges.
|
||||
LLVector3 new_local_pt = breast_current_local_pt + mBreastVelocity_local_vec*time_delta;
|
||||
new_local_pt.clamp(mBreastParamsMin,mBreastParamsMax);
|
||||
|
||||
// Set the new parameters.
|
||||
for (U32 i=0; i < 3; i++)
|
||||
{
|
||||
// If the param is disabled, just set the param to the user value.
|
||||
if (mBreastMaxVelocityParam[i] == 0)
|
||||
{
|
||||
new_local_pt[i] = breast_user_local_pt[i];
|
||||
}
|
||||
if (mBreastParamsDriven[i])
|
||||
{
|
||||
mCharacter->setVisualParamWeight(mBreastParamsDriven[i],
|
||||
new_local_pt[i],
|
||||
FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
mBreastLastPosition_local_pt = new_local_pt;
|
||||
|
||||
//
|
||||
// End calculate new params
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Conditionally update the visual params
|
||||
//
|
||||
|
||||
// Updating the visual params (i.e. what the user sees) is fairly expensive.
|
||||
// So only update if the params have changed enough, and also take into account
|
||||
// the graphics LOD settings.
|
||||
|
||||
// For non-self, if the avatar is small enough visually, then don't update.
|
||||
const BOOL is_self = (dynamic_cast<LLVOAvatarSelf *>(this) != NULL);
|
||||
if (!is_self)
|
||||
{
|
||||
const F32 area_for_max_settings = 0.0;
|
||||
const F32 area_for_min_settings = 1400.0;
|
||||
|
||||
const F32 area_for_this_setting = area_for_max_settings + (area_for_min_settings-area_for_max_settings)*(1.0-lod_factor);
|
||||
const F32 pixel_area = fsqrtf(mCharacter->getPixelArea());
|
||||
if (pixel_area < area_for_this_setting)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// If the parameter hasn't changed enough, then don't update.
|
||||
LLVector3 position_diff = mBreastLastUpdatePosition_local_pt-new_local_pt;
|
||||
for (U32 i=0; i < 3; i++)
|
||||
{
|
||||
const F32 min_delta = (1.0-lod_factor)*(mBreastParamsMax[i]-mBreastParamsMin[i])/2.0;
|
||||
if (llabs(position_diff[i]) > min_delta)
|
||||
{
|
||||
mCharacter->updateVisualParams();
|
||||
mBreastLastUpdatePosition_local_pt = new_local_pt;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// End update visual params
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
/**
|
||||
* @file llbreastmotion.h
|
||||
* @brief Implementation of LLBreastMotion class.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), 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/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLBREASTMOTION_H
|
||||
#define LL_LLBREASTMOTION_H
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Header files
|
||||
//-----------------------------------------------------------------------------
|
||||
#include "llmotion.h"
|
||||
#include "llframetimer.h"
|
||||
|
||||
#define BREAST_MOTION_FADEIN_TIME 1.0f
|
||||
#define BREAST_MOTION_FADEOUT_TIME 1.0f
|
||||
|
||||
class LLViewerVisualParam;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class LLBreastMotion
|
||||
//-----------------------------------------------------------------------------
|
||||
class LLBreastMotion :
|
||||
public LLMotion
|
||||
{
|
||||
public:
|
||||
// Constructor
|
||||
LLBreastMotion(const LLUUID &id);
|
||||
|
||||
// Destructor
|
||||
virtual ~LLBreastMotion();
|
||||
|
||||
public:
|
||||
//-------------------------------------------------------------------------
|
||||
// functions to support MotionController and MotionRegistry
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// static constructor
|
||||
// all subclasses must implement such a function and register it
|
||||
static LLMotion *create(const LLUUID &id) { return new LLBreastMotion(id); }
|
||||
|
||||
public:
|
||||
//-------------------------------------------------------------------------
|
||||
// animation callbacks to be implemented by subclasses
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() { return TRUE; }
|
||||
|
||||
// motions must report their total duration
|
||||
virtual F32 getDuration() { return 0.0; }
|
||||
|
||||
// motions must report their "ease in" duration
|
||||
virtual F32 getEaseInDuration() { return BREAST_MOTION_FADEIN_TIME; }
|
||||
|
||||
// motions must report their "ease out" duration.
|
||||
virtual F32 getEaseOutDuration() { return BREAST_MOTION_FADEOUT_TIME; }
|
||||
|
||||
// called to determine when a motion should be activated/deactivated based on avatar pixel coverage
|
||||
virtual F32 getMinPixelArea();
|
||||
|
||||
// motions must report their priority
|
||||
virtual LLJoint::JointPriority getPriority() { return LLJoint::MEDIUM_PRIORITY; }
|
||||
|
||||
virtual LLMotionBlendType getBlendType() { return ADDITIVE_BLEND; }
|
||||
|
||||
// run-time (post constructor) initialization,
|
||||
// called after parameters have been set
|
||||
// must return true to indicate success and be available for activation
|
||||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate();
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate();
|
||||
|
||||
protected:
|
||||
LLVector3 toLocal(const LLVector3 &world_vector);
|
||||
LLVector3 calculateVelocity_local(const F32 time_delta);
|
||||
LLVector3 calculateAcceleration_local(const LLVector3 &new_char_velocity_local_vec,
|
||||
const F32 time_delta);
|
||||
F32 calculateTimeDelta();
|
||||
private:
|
||||
//-------------------------------------------------------------------------
|
||||
// joint states to be animated
|
||||
//-------------------------------------------------------------------------
|
||||
LLPointer<LLJointState> mChestState;
|
||||
LLCharacter* mCharacter;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// miscellaneous parameters
|
||||
//-------------------------------------------------------------------------
|
||||
LLViewerVisualParam *mBreastParamsUser[3];
|
||||
LLViewerVisualParam *mBreastParamsDriven[3];
|
||||
LLVector3 mBreastParamsMin;
|
||||
LLVector3 mBreastParamsMax;
|
||||
|
||||
LLVector3 mCharLastPosition_world_pt; // Last position of the avatar
|
||||
LLVector3 mCharLastVelocity_local_vec; // How fast the character is moving
|
||||
LLVector3 mCharLastAcceleration_local_vec; // Change in character velocity
|
||||
|
||||
LLVector3 mBreastLastPosition_local_pt; // Last parameters for breast
|
||||
LLVector3 mBreastVelocity_local_vec; // How fast the breast params are moving
|
||||
LLVector3 mBreastLastUpdatePosition_local_pt; // Last parameters when visual update was sent
|
||||
|
||||
|
||||
F32 mBreastMassParam;
|
||||
F32 mBreastGravityParam;
|
||||
U32 mBreastSmoothingParam;
|
||||
|
||||
LLVector3 mBreastSpringParam;
|
||||
LLVector3 mBreastDampingParam;
|
||||
LLVector3 mBreastGainParam;
|
||||
LLVector3 mBreastMaxVelocityParam;
|
||||
LLVector3 mBreastDragParam;
|
||||
|
||||
LLFrameTimer mTimer;
|
||||
F32 mLastTime;
|
||||
|
||||
U32 mFileTicks;
|
||||
};
|
||||
|
||||
#endif // LL_LLBREASTMOTION_H
|
||||
|
||||
|
|
@ -30,6 +30,7 @@
|
|||
#include "llviewervisualparam.h"
|
||||
#include "llwearabletype.h"
|
||||
|
||||
class LLPhysicsMotion;
|
||||
class LLVOAvatar;
|
||||
class LLWearable;
|
||||
|
||||
|
|
@ -76,6 +77,7 @@ protected:
|
|||
|
||||
class LLDriverParam : public LLViewerVisualParam
|
||||
{
|
||||
friend class LLPhysicsMotion; // physics motion needs to access driven params directly.
|
||||
public:
|
||||
LLDriverParam(LLVOAvatar *avatarp);
|
||||
LLDriverParam(LLWearable *wearablep);
|
||||
|
|
|
|||
|
|
@ -2871,7 +2871,10 @@ void LLPanelLandCovenant::refresh()
|
|||
LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
|
||||
if (region_landtype)
|
||||
{
|
||||
region_landtype->setText(region->getSimProductName());
|
||||
std::string land_type;
|
||||
bool is_land_type_localized = LLTrans::findString(land_type, region->getSimProductName());
|
||||
|
||||
region_landtype->setText(is_land_type_localized ? land_type : region->getSimProductName());
|
||||
}
|
||||
|
||||
LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
|
||||
|
|
|
|||
|
|
@ -1201,6 +1201,7 @@ void LLFloaterPreference::refresh()
|
|||
updateSliderText(getChild<LLSliderCtrl>("FlexibleMeshDetail", true), getChild<LLTextBox>("FlexibleMeshDetailText", true));
|
||||
updateSliderText(getChild<LLSliderCtrl>("TreeMeshDetail", true), getChild<LLTextBox>("TreeMeshDetailText", true));
|
||||
updateSliderText(getChild<LLSliderCtrl>("AvatarMeshDetail", true), getChild<LLTextBox>("AvatarMeshDetailText", true));
|
||||
updateSliderText(getChild<LLSliderCtrl>("AvatarPhysicsDetail", true), getChild<LLTextBox>("AvatarPhysicsDetailText", true));
|
||||
updateSliderText(getChild<LLSliderCtrl>("TerrainMeshDetail", true), getChild<LLTextBox>("TerrainMeshDetailText", true));
|
||||
updateSliderText(getChild<LLSliderCtrl>("RenderPostProcess", true), getChild<LLTextBox>("PostProcessText", true));
|
||||
updateSliderText(getChild<LLSliderCtrl>("SkyMeshDetail", true), getChild<LLTextBox>("SkyMeshDetailText", true));
|
||||
|
|
|
|||
|
|
@ -223,7 +223,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
columns[3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
|
||||
columns[3]["font"] = "SANSSERIF";
|
||||
columns[4]["column"] = "time";
|
||||
columns[4]["value"] = formatted_time((time_t)time_stamp);
|
||||
columns[4]["type"] = "date";
|
||||
columns[4]["value"] = LLDate((time_t)time_stamp);
|
||||
columns[4]["font"] = "SANSSERIF";
|
||||
|
||||
if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@
|
|||
#include <boost/regex.hpp>
|
||||
|
||||
#if LL_MSVC
|
||||
#pragma warning(push)
|
||||
// disable boost::lexical_cast warning
|
||||
#pragma warning (disable:4702)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -4691,10 +4691,18 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
else
|
||||
{
|
||||
items.push_back(std::string("Wearable And Object Wear"));
|
||||
items.push_back(std::string("Wearable Add"));
|
||||
disabled_items.push_back(std::string("Take Off"));
|
||||
disabled_items.push_back(std::string("Wearable Edit"));
|
||||
}
|
||||
|
||||
if (LLWearableType::getAllowMultiwear(mWearableType))
|
||||
{
|
||||
items.push_back(std::string("Wearable Add"));
|
||||
if (gAgentWearables.getWearableCount(mWearableType) > 0)
|
||||
{
|
||||
disabled_items.push_back(std::string("Wearable Add"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue