Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • alchemy-archive/alchemy
  • Liru/alchemy
  • TesticularSlingshot/alchemy
3 results
Show changes
Commits on Source (16695)
Showing with 3473 additions and 2033 deletions
---
Language: Cpp
# BasedOnStyle: Microsoft
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
BinPackArguments: true
BinPackParameters: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Allman
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 120
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 0
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
- Regex: '.*'
Priority: 1
SortPriority: 0
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentCaseLabels: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 1000
PointerAlignment: Right
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: true
SpaceAfterCStyleCast: true
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
Standard: Latest
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
UseCRLF: false
UseTab: Never
...
* text eol=lf
# Viewer Files
*.db2 binary
*.llm binary
*.sln text eol=crlf
*.vcproj text eol=crlf
*.vcxproj text eol=crlf
*.gif binary
*.png binary
*.tga binary
*.jpg binary
*.j2k binary
*.j2c binary
*.ico binary
*.icns binary
*.bmp binary
*.BMP binary
/indra/tools/manifests/compatibility.manifest text eol=crlf
\ No newline at end of file
syntax: glob
# WinMerge temp files # WinMerge temp files
*.bak *.bak
# Compiled python bytecode # Compiled python bytecode
*.pyc *.pyc
# Emacs temp files # Emacs temp files
*~
.*.swp .*.swp
#OSX image cache file #OSX image cache file
*.DS_Store *.DS_Store
#*.orig *.orig
LICENSES *.cpp.bak
*.h.bak
*.diff
*.old
*.rej
**/.vs
Pipfile.lock
.env
/build-*
/clion-*
indra/.distcc indra/.distcc
build-linux-*
build-darwin-* clion-linux*
build-vc80/ indra/.idea
build-vc100/ indra-build/
indra/build-vc[0-9]* indra/build-vc[0-9]*
indra/out/
indra/CMakeFiles indra/CMakeFiles
indra/CMakeLists.txt.user
indra/lib/mono/1.0/*.dll indra/lib/mono/1.0/*.dll
indra/lib/mono/indra/*.dll indra/lib/mono/indra/*.dll
indra/lib/mono/indra/*.exe indra/lib/mono/indra/*.exe
...@@ -57,22 +67,13 @@ debian/files ...@@ -57,22 +67,13 @@ debian/files
build-stamp build-stamp
configure-stamp configure-stamp
^indra/lib/python/mulib.* ^indra/lib/python/mulib.*
^web/locale.*
^web/secondlife.com.* indra/newview/typed_locations.txt
^web/config.* indra/newview/teleport_history.txt
^indra/web/dataservice/locale.* indra/newview/search_history.txt
^indra/web/dataservice/lib/shared/vault.* indra/newview/filters.xml
^indra/web/dataservice/vendor.* indra/newview/avatar_icons_cache.txt
glob:indra/newview/dbghelp.dll indra/newview/avatar_lad.log
glob:*.cpp.orig indra/newview/pilot.txt
glob:*.cpp.bak indra/newview/pilot.xml
glob:*.h.bak
glob:*.h.orig
glob:indra/newview/typed_locations.txt
glob:indra/newview/teleport_history.txt
glob:indra/newview/search_history.txt
glob:indra/newview/filters.xml
glob:indra/newview/avatar_icons_cache.txt
glob:indra/newview/avatar_lad.log
glob:*.diff
#*.rej
stages:
- build
- deploy
variables:
VIEWER_USE_CRASHPAD: "TRUE"
VIEWER_CRASHPAD_URL: $SENTRY_DSN
.win_build: &win_build
stage: build
tags:
- autobuild
- windows
before_script:
- pipenv install
script:
- If ($env:VIEWER_CHANNEL_TYPE -eq 'Project')
{
$env:VIEWER_CHANNEL_CODENAME = $env:CI_COMMIT_REF_NAME[8..100] -join ''
}
- pipenv run autobuild configure -c ReleaseOS -- -DUSE_FMODSTUDIO=ON -DUSE_NVAPI=ON -DUSE_LTO=ON -DVS_DISABLE_FATAL_WARNINGS=ON
- pipenv run autobuild build -c ReleaseOS --no-configure
- If ($env:VIEWER_USE_CRASHPAD -eq 'TRUE') {
- Push-Location .\build-vc-*\newview\Release\
- sentry-cli upload-dif --include-sources alchemy-bin.exe alchemy-bin.pdb crashpad_handler.exe crashpad_handler.pdb openjpeg.pdb openjpeg.dll fmod.dll libcrypto-1_1.dll libcrypto-1_1.pdb libssl-1_1.dll libssl-1_1.pdb libcrypto-1_1-x64.dll libcrypto-1_1-x64.pdb libssl-1_1-x64.dll libssl-1_1-x64.pdb vcruntime140.dll msvcp140.dll nghttp2.dll glod.dll
- Pop-Location }
artifacts:
name: "$env:CI_COMMIT_REF_NAME-$env:CI_COMMIT_SHORT_SHA"
expire_in: 2 week
paths:
- build-vc-*/newview/Release/build_data.json
- build-vc-*/newview/Release/alchemy-bin.pdb
- build-vc-*/newview/Release/Alchemy_*_Setup.exe
.beta_rules: &beta_rules
only:
- /^.*-beta$/
except:
- branches
.release_rules: &release_rules
only:
- /^.*-release$/
except:
- branches
build:master:windows32:
<<: *win_build
interruptible: true
variables:
AUTOBUILD_ADDRSIZE: 32
VIEWER_CHANNEL_TYPE: Test
VIEWER_USE_CRASHPAD: "FALSE"
only:
- schedules
- web
build:master:windows64:
<<: *win_build
interruptible: true
variables:
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Test
VIEWER_USE_CRASHPAD: "FALSE"
only:
- schedules
- web
build:project:windows32:
<<: *win_build
interruptible: true
variables:
AUTOBUILD_ADDRSIZE: 32
VIEWER_CHANNEL_TYPE: Project
only:
- /^project-.*$/
build:project:windows64:
<<: *win_build
interruptible: true
variables:
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Project
only:
- /^project-.*$/
build:beta:windows32:
<<: *win_build
variables:
AUTOBUILD_ADDRSIZE: 32
VIEWER_CHANNEL_TYPE: Beta
<<: *beta_rules
build:beta:windows64:
<<: *win_build
variables:
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Beta
<<: *beta_rules
build:release:windows32:
<<: *win_build
variables:
AUTOBUILD_ADDRSIZE: 32
VIEWER_CHANNEL_TYPE: Release
<<: *release_rules
build:release:windows64:
<<: *win_build
variables:
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Release
<<: *release_rules
.deploy_template: &deploy_template
stage: deploy
tags:
- autobuild
- windows
script:
- $BuildData = Get-Content .\build-vc-64\newview\Release\build_data.json | ConvertFrom-Json
- $BuildChannelVersion = $BuildData."Channel" + ' ' + $BuildData."Version"
- $UploadDestViewerDir = $BuildChannelVersion.ToLower().Replace(" ", "/")
- $UploadDestURL = "https://pkg.alchemyviewer.org/repository/viewer/${UploadDestViewerDir}"
- $UploadParams = @{ UseBasicParsing = $true;
Method = "PUT";
Headers = @{
ContentType = "application/x-executable";
Authorization = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$env:AUTOBUILD_HTTP_USER`:$env:AUTOBUILD_HTTP_PASS")))"; };
Verbose = $true; };
- Push-Location .\build-vc-32\newview\Release\
- $FileNameWin32 = Get-ChildItem -Path . -Name -Include Alchemy_*_Setup.exe
- Invoke-WebRequest @UploadParams -InFile .\$FileNameWin32 -Uri "${UploadDestURL}/${FileNameWin32}"
- Pop-Location
- Push-Location .\build-vc-64\newview\Release\
- $FileNameWin64 = Get-ChildItem -Path . -Name -Include Alchemy_*_Setup.exe
- Invoke-WebRequest @UploadParams -InFile .\$FileNameWin64 -Uri "${UploadDestURL}/${FileNameWin64}"
- Pop-Location
- sentry-cli releases new $BuildChannelVersion
- sentry-cli releases set-commits --auto $BuildChannelVersion
- sentry-cli releases finalize $BuildChannelVersion
when: manual
deploy_project:
<<: *deploy_template
environment:
name: qa
only:
- /^project-.*$/
deploy_beta:
<<: *deploy_template
environment:
name: staging
<<: *beta_rules
deploy_release:
<<: *deploy_template
environment:
name: production
<<: *release_rules
\ No newline at end of file
## Summary
(Summarize the bug encountered concisely)
## Steps to reproduce
(How one can reproduce the issue - this is very important)
## What is the current bug behavior?
(What actually happens)
## What is the expected correct behavior?
(What you should see instead)
## Environment
```
(Please open `Help->About Alchemy` and click Copy to Clipboard then paste its contents here)
```
## Relevant logs and/or screenshots
(Attach or paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)
/label ~Type::Bug ~Status::Awaiting-Investigation
## Summary
(Summarize the requested feature concisely.)
## How would you like the feature to work?
(Describe how the feature should function in as much detail as possible.)
## Why is this feature important to you? How would it benefit the community?Required
(Provide reasoning as to why the feature is important to you, and ways it could benefit the larger Alchemy Viewer community.)
## Screenshots, Mockups, etc
(Attach or paste any relevant screenshots or mockups.)
/label ~Type::New Feature ~Status::Awaiting-Investigation
\ No newline at end of file
This diff is collapsed.
# BuildParams
#
# Please refer to:
# https://wiki.secondlife.com/wiki/Automated_Build_System
# Global setting for now...
Darwin.symbolfiles = "newview/Release/secondlife-symbols-darwin.tar.bz2"
CYGWIN.symbolfiles = "newview/Release/secondlife-symbols-windows.tar.bz2"
Linux.symbolfiles = "newview/secondlife-symbols-linux.tar.bz2"
# Use Public Upload Locations
public_build = true
# skip windows debug build until we can get a fix in.
build_CYGWIN_Debug = false
# Update Public Inworld Build Status Indicators (setting should mirror "public_build")
email_status_this_is_os = true
# Limit extent of codeticket updates to revisions after...
codeticket_since = 3.3.0-release
# Override build system default toolchain
# Note that this will only affect automated builds.
Linux.distcc_version =
Linux.gcc_version = /usr/bin/gcc-4.6
Linux.cxx_version = /usr/bin/g++-4.6
################################################################
#### Examples of how to set the viewer_channel ####
#
# To build a Release or Release candidate in build bingo:
# bingo.viewer_channel = "Second Life Release"
#
# To build a Beta for the 'Bingo' project in build bingo:
# bingo.viewer_channel = "Second Life Beta Bingo"
#
# To build a Project viewer for the 'Bingo' project in build bingo:
# bingo.viewer_channel = "Second Life Project Bingo"
#
# If left unset, viewer_channel defaults to 'Second Life Test',
# which is appropriate for individual developer builds.
#
# All Linden Lab builds (and only Linden Lab builds)
# should use a viewer_channel that begins with "Second Life"
################################################################
viewer_channel = "Second Life Test"
# Setup default packaging parameters.
sourceid = ""
additional_packages = "Amazon Desura"
Amazon_sourceid = "1207v_Amazon"
Amazon_viewer_channel_suffix = "Amazon"
Desura_sourceid = "1208_desura"
Desura_viewer_channel_suffix = "Desura"
# Report changes since...
viewer-development.show_changes_since = last_sprint
# Build Settings
viewer-development.build_debug_release_separately = true
# Notifications - to configure email notices, add a setting like this:
# <username>_<reponame>.email = <email-address>
viewer-release.viewer_channel = "Second Life Release"
viewer-release.build_debug_release_separately = true
viewer-release.build_viewer_update_version_manager = true
viewer-release.codeticket_add_context = false
# ========================================
# mesh-development
# ========================================
mesh-development.viewer_channel = "Project Viewer - Mesh"
mesh-development.viewer_grid = aditi
mesh-development.build_debug_release_separately = true
mesh-development.build_CYGWIN_Debug = false
mesh-development.build_viewer_update_version_manager = false
# ========================================
# mesh-development-release-1-candidate
# ========================================
mesh-development-release-1-candidate.viewer_channel = "Project Viewer - Mesh"
mesh-development-release-1-candidate.viewer_grid = agni
mesh-development-release-1-candidate.build_debug_release_separately = true
mesh-development-release-1-candidate.build_CYGWIN_Debug = false
mesh-development-release-1-candidate.build_viewer_update_version_manager = false
# ========================================
# mesh-development-rc
# ========================================
mesh-development-rc.viewer_channel = "Project Viewer - Mesh"
mesh-development-rc.viewer_grid = agni
mesh-development-rc.build_debug_release_separately = true
mesh-development-rc.build_CYGWIN_Debug = false
mesh-development-rc.build_viewer_update_version_manager = false
# ========================================
# mesh-asset-deprecation
# ========================================
mesh-asset-deprecation.viewer_channel = "Project Viewer - Mesh Asset Deprecation"
mesh-asset-deprecation.viewer_grid = aditi
mesh-asset-deprecation.build_debug_release_separately = true
mesh-asset-deprecation.build_CYGWIN_Debug = false
mesh-asset-deprecation.build_viewer_update_version_manager = false
# ========================================
# viewer-mesh
# ========================================
viewer-mesh.build_viewer = true
viewer-mesh.build_server = false
viewer-mesh.build_Linux = true
viewer-mesh.build_hg_bundle = true
viewer-mesh.build_viewer_update_version_manager = false
viewer-mesh.build_Debug = false
viewer-mesh.build_RelWithDebInfo = false
viewer-mesh.viewer_channel = "Project Viewer - Mesh"
viewer-mesh.viewer_grid = aditi
viewer-mesh.email = shining@lists.lindenlab.com
# ========================================
# viewer-pathfinding
# ========================================
viewer-pathfinding.viewer_channel = "Project Viewer - Pathfinding"
viewer-pathfinding.viewer_grid = agni
viewer-pathfinding.build_debug_release_separately = true
viewer-pathfinding.build_CYGWIN_Debug = false
viewer-pathfinding.build_viewer_update_version_manager = false
# ========================================
# viewer-materials
# ========================================
viewer-materials.viewer_channel = "Second Life Beta Materials"
viewer-materials.build_debug_release_separately = true
viewer-materials.build_CYGWIN_Debug = false
viewer-materials.build_viewer_update_version_manager = false
# =================================================================
# asset delivery 2010 projects
# =================================================================
viewer-asset-delivery.viewer_channel = "Second Life Development"
viewer-asset-delivery.build_viewer_update_version_manager = false
viewer-asset-delivery.email = monty@lindenlab.com
viewer-asset-delivery.build_server = false
viewer-asset-delivery.build_server_tests = false
viewer-asset-delivery-metrics.viewer_channel = "Second Life Development"
viewer-asset-delivery-metrics.build_viewer_update_version_manager = false
viewer-asset-delivery-metrics.email = monty@lindenlab.com
viewer-asset-delivery-metrics.build_server = false
viewer-asset-delivery-metrics.build_server_tests = false
# ========================================
# Simon says
# ========================================
simon_viewer-dev-private.public_build = false
simon_viewer-dev-private.email_status_this_is_os = false
# ========================================
# Vir
# ========================================
vir-project-1.viewer_channel = "Second Life Release"
# ========================================
# THX-1138 / Runway projects
# ========================================
viewer-thx1138-runway-shared.viewer_channel = "Project Viewer - THX-1138 Runway"
viewer-thx1138-runway-shared.viewer_grid = uma
viewer-thx1138-runway-shared.build_debug_release_separately = true
viewer-thx1138-runway-shared.build_CYGWIN_Debug = false
viewer-thx1138-runway-shared.build_viewer_update_version_manager = false
viewer-thx1138.viewer_channel = "Project Viewer - THX-1138"
viewer-thx1138.viewer_grid = uma
viewer-thx1138.build_debug_release_separately = true
viewer-thx1138.build_CYGWIN_Debug = false
viewer-thx1138.build_viewer_update_version_manager = false
runway-merge.viewer_channel = "Project Viewer - Runway Merge"
runway-merge.viewer_grid = agni
runway-merge.build_debug_release_separately = true
runway-merge.build_CYGWIN_Debug = false
runway-merge.build_viewer_update_version_manager = false
runway.viewer_channel = "Project Viewer - Runway"
runway.viewer_grid = agni
runway.build_debug_release_separately = true
runway.build_CYGWIN_Debug = false
runway.build_viewer_update_version_manager = false
# eof
This diff is collapsed.
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[dev-packages]
[packages]
llbase = "*"
certifi = "*"
autobuild = {git = "https://git.alchemyviewer.org/alchemy/autobuild.git"}
[requires]
python_version = "2.7"
![Alchemy Logo](https://www.alchemyviewer.org/images/banner.png)
[![pipeline status](https://git.alchemyviewer.org/alchemy/alchemy/badges/master/pipeline.svg)](https://git.alchemyviewer.org/alchemy/alchemy/commits/master)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/1904/badge.svg)](https://scan.coverity.com/projects/1904)
## About
Alchemy is a client for Second Life and OpenMetaverse protocol simulators. We focus on creating a smooth and easy to use experience with secure and sane defaults.
## Resources
* [Alchemy Website](http://www.alchemyviewer.org)
* [Issue Tracker](https://git.alchemyviewer.org/alchemy/alchemy/issues)
* [Wiki](https://git.alchemyviewer.org/alchemy/alchemy/wikis/home)
This diff is collapsed.
#!/bin/sh
# This is a the master build script - it is intended to be run by parabuild
# It is called by a wrapper script in the shared repository which sets up
# the environment from the various BuildParams files and does all the build
# result post-processing.
#
# PLEASE NOTE:
#
# * This script is interpreted on three platforms, including windows and cygwin
# Cygwin can be tricky....
# * The special style in which python is invoked is intentional to permit
# use of a native python install on windows - which requires paths in DOS form
# * This script relies heavily on parameters defined in BuildParams
# * The basic convention is that the build name can be mapped onto a mercurial URL,
# which is also used as the "branch" name.
check_for()
{
if [ -e "$2" ]; then found_dict='FOUND'; else found_dict='MISSING'; fi
echo "$1 ${found_dict} '$2' " 1>&2
}
build_dir_Darwin()
{
echo build-darwin-i386
}
build_dir_Linux()
{
echo build-linux-i686
}
build_dir_CYGWIN()
{
echo build-vc100
}
viewer_channel_suffix()
{
local package_name="$1"
local suffix_var="${package_name}_viewer_channel_suffix"
local suffix=$(eval "echo \$${suffix_var}")
if [ "$suffix"x = ""x ]
then
echo ""
else
echo "_$suffix"
fi
}
installer_Darwin()
{
local package_name="$1"
local package_dir="$(build_dir_Darwin ${last_built_variant:-Release})/newview/"
local pattern=".*$(viewer_channel_suffix ${package_name})_[0-9]+_[0-9]+_[0-9]+_[0-9]+_i386\\.dmg\$"
# since the additional packages are built after the base package,
# sorting oldest first ensures that the unqualified package is returned
# even if someone makes a qualified name that duplicates the last word of the base name
local package=$(ls -1tr "$package_dir" 2>/dev/null | grep -E "$pattern" | head -n 1)
test "$package"x != ""x && echo "$package_dir/$package"
}
installer_Linux()
{
local package_name="$1"
local package_dir="$(build_dir_Linux ${last_built_variant:-Release})/newview/"
local pattern=".*$(viewer_channel_suffix ${package_name})_[0-9]+_[0-9]+_[0-9]+_[0-9]+_i686\\.tar\\.bz2\$"
# since the additional packages are built after the base package,
# sorting oldest first ensures that the unqualified package is returned
# even if someone makes a qualified name that duplicates the last word of the base name
package=$(ls -1tr "$package_dir" 2>/dev/null | grep -E "$pattern" | head -n 1)
test "$package"x != ""x && echo "$package_dir/$package"
}
installer_CYGWIN()
{
local package_name="$1"
local variant=${last_built_variant:-Release}
local build_dir=$(build_dir_CYGWIN ${variant})
local package_dir
if [ "$package_name"x = ""x ]
then
package_dir="${build_dir}/newview/${variant}"
else
package_dir="${build_dir}/newview/${package_name}/${variant}"
fi
if [ -r "${package_dir}/touched.bat" ]
then
local package_file=$(sed 's:.*=::' "${package_dir}/touched.bat")
echo "${package_dir}/${package_file}"
fi
}
pre_build()
{
local variant="$1"
begin_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"
check_for "Confirm dictionaries are installed before 'autobuild configure'" ${build_dir}/packages/dictionaries
"$AUTOBUILD" configure -c $variant -- \
-DPACKAGE:BOOL=ON \
-DRELEASE_CRASH_REPORTING:BOOL=ON \
-DVIEWER_CHANNEL:STRING="\"$viewer_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"
}
package_llphysicsextensions_tpv()
{
begin_section "PhysicsExtensions_TPV"
tpv_status=0
if [ "$variant" = "Release" ]
then
llpetpvcfg=$build_dir/packages/llphysicsextensions/autobuild-tpv.xml
"$AUTOBUILD" build --verbose --config-file $llpetpvcfg -c Tpv
# capture the package file name for use in upload later...
PKGTMP=`mktemp -t pgktpv.XXXXXX`
trap "rm $PKGTMP* 2>/dev/null" 0
"$AUTOBUILD" package --verbose --config-file $llpetpvcfg > $PKGTMP
tpv_status=$?
sed -n -e 's/^wrote *//p' $PKGTMP > $build_dir/llphysicsextensions_package
else
echo "Do not provide llphysicsextensions_tpv for $variant"
llphysicsextensions_package=""
fi
end_section "PhysicsExtensions_TPV"
return $tpv_status
}
build()
{
local variant="$1"
if $build_viewer
then
begin_section "Viewer$variant"
"$AUTOBUILD" build --no-configure -c $variant
build_ok=$?
end_section "Viewer$variant"
# Run build extensions
if [ $build_ok -eq 0 -a -d ${build_dir}/packages/build-extensions ]; then
for extension in ${build_dir}/packages/build-extensions/*.sh; do
. $extension
if [ $build_ok -ne 0 ]; then
break
fi
done
fi
# *TODO: Make this a build extension.
package_llphysicsextensions_tpv
tpvlib_build_ok=$?
if [ $build_ok -eq 0 -a $tpvlib_build_ok -eq 0 ]
then
echo true >"$build_dir"/build_ok
else
echo false >"$build_dir"/build_ok
fi
fi
}
# This is called from the branch independent script upon completion of all platform builds.
build_docs()
{
begin_section Docs
# Stub code to generate docs
echo Hello world > documentation.txt
upload_item docs documentation.txt text/plain
end_section Docs
}
# Check to see if we were invoked from the wrapper, if not, re-exec ourselves from there
if [ "x$arch" = x ]
then
top=`hg root`
if [ -x "$top/../buildscripts/hg/bin/build.sh" ]
then
exec "$top/../buildscripts/hg/bin/build.sh" "$top"
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.lindenlab.com/parabuild/buildscripts
EOF
exit 1
fi
fi
# Check to see if we're skipping the platform
eval '$build_'"$arch" || pass
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
eval "$("$AUTOBUILD" source_environment)"
# dump environment variables for debugging
env|sort
# Now run the build
succeeded=true
build_processes=
last_built_variant=
for variant in $variants
do
eval '$build_'"$variant" || continue
eval '$build_'"$arch"_"$variant" || continue
# Only the last built arch is available for upload
last_built_variant="$variant"
begin_section "Do$variant"
build_dir=`build_dir_$arch $variant`
build_dir_stubs="$build_dir/win_setup/$variant"
begin_section "PreClean"
rm -rf "$build_dir"
end_section "PreClean"
mkdir -p "$build_dir"
mkdir -p "$build_dir/tmp"
if pre_build "$variant" "$build_dir" >> "$build_log" 2>&1
then
if $build_link_parallel
then
begin_section BuildParallel
( build "$variant" "$build_dir" > "$build_dir/build.log" 2>&1 ) &
build_processes="$build_processes $!"
end_section BuildParallel
else
begin_section "Build$variant"
build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | sed -n 's/^ *\(##teamcity.*\)/\1/p'
if `cat "$build_dir/build_ok"`
then
echo so far so good.
else
record_failure "Build of \"$variant\" failed."
fi
end_section "Build$variant"
fi
else
record_failure "Build Prep for \"$variant\" failed."
fi
end_section "Do$variant"
done
# If we are building variants in parallel, wait, then collect results.
# This requires that the build dirs are variant specific
if $build_link_parallel && [ x"$build_processes" != x ]
then
begin_section WaitParallel
wait $build_processes
for variant in $variants
do
eval '$build_'"$variant" || continue
eval '$build_'"$arch"_"$variant" || continue
begin_section "Build$variant"
build_dir=`build_dir_$arch $variant`
build_dir_stubs="$build_dir/win_setup/$variant"
tee -a $build_log < "$build_dir/build.log" | sed -n 's/^ *\(##teamcity.*\)/\1/p'
if `cat "$build_dir/build_ok"`
then
echo so far so good.
else
record_failure "Parallel build of \"$variant\" failed."
fi
end_section "Build$variant"
done
end_section WaitParallel
fi
# build debian package
if [ "$arch" == "Linux" ]
then
if $succeeded
then
if $build_viewer_deb && [ "$last_built_variant" == "Release" ]
then
begin_section "Build Viewer Debian Package"
have_private_repo=false
# mangle the changelog
dch --force-bad-version \
--distribution unstable \
--newversion "${VIEWER_VERSION}" \
"Automated build #$build_id, repository $branch revision $revision." \
>> "$build_log" 2>&1
# build the debian package
$pkg_default_debuild_command >>"$build_log" 2>&1 || record_failure "\"$pkg_default_debuild_command\" failed."
# Unmangle the changelog file
hg revert debian/changelog
end_section "Build Viewer Debian Package"
# Run debian extensions
if [ -d ${build_dir}/packages/debian-extensions ]; then
for extension in ${build_dir}/packages/debian-extensions/*.sh; do
. $extension
done
fi
# Move any .deb results.
mkdir -p ../packages_public
mkdir -p ../packages_private
mv ${build_dir}/packages/*.deb ../packages_public 2>/dev/null || true
mv ${build_dir}/packages/packages_private/*.deb ../packages_private 2>/dev/null || true
# upload debian package and create repository
begin_section "Upload Debian Repository"
for deb_file in `/bin/ls ../packages_public/*.deb ../*.deb 2>/dev/null`; do
upload_item debian $deb_file binary/octet-stream
done
for deb_file in `/bin/ls ../packages_private/*.deb 2>/dev/null`; do
upload_item debian_private $deb_file binary/octet-stream
have_private_repo=true
done
create_deb_repo
# Rename the local debian_repo* directories so that the master buildscript
# doesn't make a remote repo again.
for debian_repo_type in debian_repo debian_repo_private; do
if [ -d "$build_log_dir/$debian_repo_type" ]; then
mv $build_log_dir/$debian_repo_type $build_log_dir/${debian_repo_type}_pushed
fi
done
if [ $have_private_repo = true ]; then
eval "$python_command \"$redirect\" '\${private_S3PROXY_URL}${S3PREFIX}repo/$repo/rev/$revision/index.html'"\
>"$build_log_dir/private.html" || fatal generating redirect
upload_item global_redirect "$build_log_dir/private.html" text/html
fi
end_section "Upload Debian Repository"
else
echo skipping debian build
fi
else
echo skipping debian build due to failed build.
fi
fi
# check status and upload results to S3
if $succeeded
then
if $build_viewer
then
begin_section Upload Installer
# Upload installer
package=$(installer_$arch)
if [ x"$package" = x ] || test -d "$package"
then
# Coverity doesn't package, so it's ok, anything else is fail
succeeded=$build_coverity
else
# Upload base package.
upload_item installer "$package" binary/octet-stream
upload_item quicklink "$package" binary/octet-stream
[ -f $build_dir/summary.json ] && upload_item installer $build_dir/summary.json text/plain
# Upload additional packages.
for package_id in $additional_packages
do
package=$(installer_$arch "$package_id")
if [ x"$package" != x ]
then
upload_item installer "$package" binary/octet-stream
upload_item quicklink "$package" binary/octet-stream
else
record_failure "Failed to find additional package for '$package_id'."
fi
done
case "$last_built_variant" in
Release)
# Upload crash reporter files
for symbolfile in $symbolfiles
do
upload_item symbolfile "$build_dir/$symbolfile" binary/octet-stream
done
# Upload the actual dependencies used
if [ -r "$build_dir/packages/installed-packages.xml" ]
then
upload_item installer "$build_dir/packages/installed-packages.xml" text/xml
fi
# Upload the llphysicsextensions_tpv package, if one was produced
# *TODO: Make this an upload-extension
if [ -r "$build_dir/llphysicsextensions_package" ]
then
llphysicsextensions_package=$(cat $build_dir/llphysicsextensions_package)
upload_item private_artifact "$llphysicsextensions_package" binary/octet-stream
else
echo "No llphysicsextensions_package"
fi
;;
*)
echo "Skipping mapfile for $last_built_variant"
;;
esac
# Run upload extensions
if [ -d ${build_dir}/packages/upload-extensions ]; then
for extension in ${build_dir}/packages/upload-extensions/*.sh; do
. $extension
done
fi
# Upload stub installers
upload_stub_installers "$build_dir_stubs"
fi
end_section Upload Installer
else
echo skipping upload of installer
fi
else
echo skipping upload of installer due to failed build.
fi
# The branch independent build.sh script invoking this script will finish processing
$succeeded || exit 1
# Linden packages install in opt/linden
secondlife-viewer: dir-or-file-in-opt
secondlife-viewer: section-is-dh_make-template
secondlife-viewer: binary-without-manpage
secondlife-viewer: maintainer-script-empty postrm
secondlife-viewer: maintainer-script-empty preinst
secondlife-viewer: maintainer-script-empty prerm
secondlife-viewer: unstripped-binary-or-object
...@@ -11,7 +11,7 @@ summary, see http://creativecommons.org/licenses/by-sa/3.0/. ...@@ -11,7 +11,7 @@ summary, see http://creativecommons.org/licenses/by-sa/3.0/.
Notwithstanding the foregoing, all of Linden Lab's trademarks, including Notwithstanding the foregoing, all of Linden Lab's trademarks, including
but not limited to the Second Life brand name and Second Life Eye-in-Hand but not limited to the Second Life brand name and Second Life Eye-in-Hand
logo, are subject to our trademark policy at logo, are subject to our trademark policy at
http://secondlife.com/corporate/trademark/. http://secondlife.com/corporate/brand/trademark/.
If you distribute any copies or adaptations of the Second Life viewer If you distribute any copies or adaptations of the Second Life viewer
artwork or any other works in these files, you must include this Notice artwork or any other works in these files, you must include this Notice
......
...@@ -7,7 +7,9 @@ you under the terms of the GNU Lesser General Public License, version 2.1 ...@@ -7,7 +7,9 @@ you under the terms of the GNU Lesser General Public License, version 2.1
("LGPL"), unless you have obtained a separate licensing agreement ("LGPL"), unless you have obtained a separate licensing agreement
("Other License"), formally executed by you and Linden Lab. Terms of ("Other License"), formally executed by you and Linden Lab. Terms of
the GPL can be found in doc/LGPL-license.txt in this distribution, or the GPL can be found in doc/LGPL-license.txt in this distribution, or
online at http://secondlife.com/developers/opensource/lgplv2_1 online at
https://wiki.secondlife.com/wiki/Linden_Lab_Official:GNU_Lesser_General_Public_License,_version_2.1
By copying, modifying or distributing this software, you acknowledge By copying, modifying or distributing this software, you acknowledge
that you have read and understood your obligations described above, that you have read and understood your obligations described above,
......
...@@ -12,6 +12,7 @@ Able Whitman ...@@ -12,6 +12,7 @@ Able Whitman
Adam Marker Adam Marker
VWR-2755 VWR-2755
Adeon Writer Adeon Writer
MAINT-1211
Aeonix Aeon Aeonix Aeon
Agathos Frascati Agathos Frascati
CT-246 CT-246
...@@ -180,9 +181,48 @@ Ansariel Hiller ...@@ -180,9 +181,48 @@ Ansariel Hiller
MAINT-2368 MAINT-2368
STORM-1931 STORM-1931
MAINT-2773 MAINT-2773
STORM-2011
MAINT-3187
BUG-3764 BUG-3764
STORM-1984 STORM-1984
STORM-1979 STORM-1979
STORM-2083
MAINT-5533
STORM-2094
MAINT-5756
MAINT-4677
MAINT-6300
MAINT-6397
MAINT-6432
MAINT-6513
MAINT-6514
MAINT-6552
STORM-2133
MAINT-6511
MAINT-6612
MAINT-6637
MAINT-6636
MAINT-6744
MAINT-6752
MAINT-6773
MAINT-6906
MAINT-6911
STORM-2140
MAINT-6912
MAINT-6929
STORM-2141
MAINT-6953
MAINT-7028
MAINT-7059
MAINT-6519
MAINT-7899
STORM-2105
STORM-2151
MAINT-6917
MAINT-8085
MAINT-8723
SL-10385
SL-10891
Aralara Rajal Aralara Rajal
Arare Chantilly Arare Chantilly
CHUIBUG-191 CHUIBUG-191
...@@ -297,6 +337,7 @@ Catherine Pfeffer ...@@ -297,6 +337,7 @@ Catherine Pfeffer
VWR-1282 VWR-1282
VWR-8624 VWR-8624
VWR-10854 VWR-10854
Cathy Foil
Cayu Cluny Cayu Cluny
Celierra Darling Celierra Darling
VWR-1274 VWR-1274
...@@ -304,6 +345,8 @@ Celierra Darling ...@@ -304,6 +345,8 @@ Celierra Darling
Chantal Harvey Chantal Harvey
Charles Courtois Charles Courtois
Charlie Sazaland Charlie Sazaland
Chaser Zaks
BUG-225599
Cherry Cheevers Cherry Cheevers
ChickyBabes Zuzu ChickyBabes Zuzu
Christopher Organiser Christopher Organiser
...@@ -311,13 +354,29 @@ Ciaran Laval ...@@ -311,13 +354,29 @@ Ciaran Laval
Cinder Roxley Cinder Roxley
BUG-2326 BUG-2326
BUG-3863 BUG-3863
BUG-8786
OPEN-185 OPEN-185
OPEN-282
OPEN-292
OPEN-297
STORM-1703 STORM-1703
STORM-1948 STORM-1948
STORM-1831
STORM-1888 STORM-1888
STORM-1958 STORM-1958
STORM-1952 STORM-1952
STORM-1951 STORM-1951
STORM-1949
STORM-2035
STORM-2036
STORM-2037
STORM-2053
STORM-2096
STORM-2113
STORM-2116
STORM-2127
STORM-2144
SL-3404
Clara Young Clara Young
Coaldust Numbers Coaldust Numbers
VWR-1095 VWR-1095
...@@ -330,6 +389,9 @@ Cron Stardust ...@@ -330,6 +389,9 @@ Cron Stardust
VWR-25120 VWR-25120
STORM-1075 STORM-1075
STORM-1919 STORM-1919
STORM-1920
OPEN-209
STORM-2017
Cypren Christenson Cypren Christenson
STORM-417 STORM-417
Dante Tucker Dante Tucker
...@@ -347,6 +409,7 @@ Decro Schmooz ...@@ -347,6 +409,7 @@ Decro Schmooz
Denim Kamachi Denim Kamachi
DiJodi Dubratt DiJodi Dubratt
Dil Spitz Dil Spitz
MAINT-4455
Dimitrio Lewis Dimitrio Lewis
Dirk Dirk
Draconis Neurocam Draconis Neurocam
...@@ -519,8 +582,16 @@ Ima Mechanique ...@@ -519,8 +582,16 @@ Ima Mechanique
STORM-959 STORM-959
STORM-1175 STORM-1175
STORM-1708 STORM-1708
STORM-1831
STORM-1832
STORM-1855 STORM-1855
VWR-10791
VWR-20553 VWR-20553
VWR-19213
VWR-22401
VWR-23739
VWR-24766
VWR-28065
Imnotgoing Sideways Imnotgoing Sideways
Inma Rau Inma Rau
Innula Zenovka Innula Zenovka
...@@ -663,6 +734,7 @@ Jonathan Yap ...@@ -663,6 +734,7 @@ Jonathan Yap
STORM-1809 STORM-1809
STORM-1793 STORM-1793
STORM-1810 STORM-1810
STORM-68
STORM-1838 STORM-1838
STORM-1892 STORM-1892
STORM-1894 STORM-1894
...@@ -673,12 +745,15 @@ Jonathan Yap ...@@ -673,12 +745,15 @@ Jonathan Yap
STORM-1858 STORM-1858
STORM-1862 STORM-1862
STORM-1918 STORM-1918
STORM-1915
STORM-1929 STORM-1929
STORM-1953 STORM-1953
OPEN-161 OPEN-161
STORM-1953 STORM-1953
STORM-1957 STORM-1957
STORM-1993 STORM-1993
STORM-2017
STORM-2007
STORM-1980 STORM-1980
OPEN-113 OPEN-113
STORM-1975 STORM-1975
...@@ -691,10 +766,29 @@ Jonathan Yap ...@@ -691,10 +766,29 @@ Jonathan Yap
STORM-1987 STORM-1987
STORM-1986 STORM-1986
STORM-1981 STORM-1981
STORM-2015
STORM-2031
STORM-2030
STORM-2034
STORM-2018
STORM-2082
STORM-2086
STORM-2085
STORM-2088
STORM-2094
STORM-2099
STORM-2091
STORM-2092
STORM-2100
STORM-2104
STORM-2142
SL-10089
Kadah Coba Kadah Coba
STORM-1060 STORM-1060
STORM-1843 STORM-1843
Jondan Lundquist Jondan Lundquist
Joosten Briebers
MAINT-7074
Josef Munster Josef Munster
Josette Windlow Josette Windlow
Juilan Tripsa Juilan Tripsa
...@@ -735,6 +829,17 @@ Kitty Barnett ...@@ -735,6 +829,17 @@ Kitty Barnett
STORM-1905 STORM-1905
VWR-24217 VWR-24217
STORM-1804 STORM-1804
MAINT-5416
MAINT-6041
MAINT-6142
MAINT-6144
MAINT-6152
MAINT-6153
MAINT-6154
MAINT-6568
STORM-2149
MAINT-7581
MAINT-7081
Kolor Fall Kolor Fall
Komiko Okamoto Komiko Okamoto
Korvel Noh Korvel Noh
...@@ -744,6 +849,7 @@ Kunnis Basiat ...@@ -744,6 +849,7 @@ Kunnis Basiat
Lance Corrimal Lance Corrimal
STORM-1910 STORM-1910
VWR-25269 VWR-25269
STORM-2008
Latif Khalifa Latif Khalifa
VWR-5370 VWR-5370
leliel Mirihi leliel Mirihi
...@@ -803,6 +909,7 @@ MartinRJ Fayray ...@@ -803,6 +909,7 @@ MartinRJ Fayray
STORM-1845 STORM-1845
STORM-1911 STORM-1911
STORM-1934 STORM-1934
Matrice Laville
Matthew Anthony Matthew Anthony
Matthew Dowd Matthew Dowd
VWR-1344 VWR-1344
...@@ -862,6 +969,8 @@ Mm Alder ...@@ -862,6 +969,8 @@ Mm Alder
VWR-4794 VWR-4794
VWR-13578 VWR-13578
Mo Hax Mo Hax
Moon Metty
STORM-2078
Mourna Biziou Mourna Biziou
Mr Greggan Mr Greggan
VWR-445 VWR-445
...@@ -946,10 +1055,11 @@ Nicholaz Beresford ...@@ -946,10 +1055,11 @@ Nicholaz Beresford
VWR-2682 VWR-2682
VWR-2684 VWR-2684
Nick Rhodes Nick Rhodes
NickyD
MAINT-873
Nicky Dasmijn Nicky Dasmijn
MAINT-873
MAINT-7541
VWR-29228 VWR-29228
MAINT-1392
MAINT-873 MAINT-873
SUN-72 SUN-72
BUG-2432 BUG-2432
...@@ -960,12 +1070,51 @@ Nicky Dasmijn ...@@ -960,12 +1070,51 @@ Nicky Dasmijn
OPEN-187 OPEN-187
STORM-1937 STORM-1937
OPEN-187 OPEN-187
STORM-2010
STORM-2082
MAINT-6665
SL-10291
SL-10293
SL-11061
Nicky Perian Nicky Perian
OPEN-1 OPEN-1
STORM-1087 STORM-1087
STORM-1090 STORM-1090
STORM-1828 STORM-1828
STORM-2080
Nicoladie Gymnast Nicoladie Gymnast
NiranV Dean
STORM-2040
STORM-2042
STORM-2043
STORM-2044
STORM-2045
STORM-2046
STORM-2047
STORM-2048
STORM-2049
STORM-2050
STORM-2051
STORM-2052
STORM-2057
STORM-2058
STORM-2059
STORM-2060
STORM-2061
STORM-2063
STORM-2065
STORM-2066
STORM-2068
STORM-2073
STORM-2076
BUG-372
BUG-1179
BUG-6835
BUG-6837
BUG-6839
BUG-6840
BUG-6958
BUG-7020
Nounouch Hapmouche Nounouch Hapmouche
VWR-238 VWR-238
Ollie Kubrick Ollie Kubrick
...@@ -993,6 +1142,12 @@ Peekay Semyorka ...@@ -993,6 +1142,12 @@ Peekay Semyorka
VWR-19 VWR-19
VWR-49 VWR-49
VWR-79 VWR-79
Pell Smit
MAINT-4323
STORM-2069
STORM-2070
STORM-2071
STORM-2072
Peter Lameth Peter Lameth
VWR-7331 VWR-7331
PeterPunk Mooney PeterPunk Mooney
...@@ -1132,6 +1287,8 @@ Shnurui Troughton ...@@ -1132,6 +1287,8 @@ Shnurui Troughton
Shyotl Kuhr Shyotl Kuhr
MAINT-1138 MAINT-1138
MAINT-2334 MAINT-2334
MAINT-6913
STORM-2143
Siana Gearz Siana Gearz
STORM-960 STORM-960
STORM-1088 STORM-1088
...@@ -1157,7 +1314,19 @@ snowy Sidran ...@@ -1157,7 +1314,19 @@ snowy Sidran
Sovereign Engineer Sovereign Engineer
MAINT-2334 MAINT-2334
OPEN-189 OPEN-189
STORM-1972
STORM-2113
OPEN-195 OPEN-195
OPEN-217
OPEN-295
MAINT-6107
STORM-2107
MAINT-6218
MAINT-6913
STORM-2143
STORM-2148
MAINT-7343
SL-11079
SpacedOut Frye SpacedOut Frye
VWR-34 VWR-34
VWR-45 VWR-45
...@@ -1198,6 +1367,8 @@ Takeda Terrawyng ...@@ -1198,6 +1367,8 @@ Takeda Terrawyng
TankMaster Finesmith TankMaster Finesmith
OPEN-140 OPEN-140
OPEN-142 OPEN-142
OPEN-154
OPEN-295
STORM-1100 STORM-1100
STORM-1258 STORM-1258
STORM-1602 STORM-1602
...@@ -1279,6 +1450,7 @@ Tonya Souther ...@@ -1279,6 +1450,7 @@ Tonya Souther
STORM-1905 STORM-1905
BUG-3875 BUG-3875
BUG-3968 BUG-3968
OPEN-345
Torben Trautman Torben Trautman
TouchaHoney Perhaps TouchaHoney Perhaps
TraductoresAnonimos Alter TraductoresAnonimos Alter
...@@ -1332,6 +1504,8 @@ Whirly Fizzle ...@@ -1332,6 +1504,8 @@ Whirly Fizzle
VWR-29543 VWR-29543
MAINT-873 MAINT-873
STORM-1930 STORM-1930
BUG-6659
STORM-2078
Whoops Babii Whoops Babii
VWR-631 VWR-631
VWR-1640 VWR-1640
...@@ -1417,7 +1591,3 @@ Zipherius Turas ...@@ -1417,7 +1591,3 @@ Zipherius Turas
VWR-77 VWR-77
Zoex Flanagan Zoex Flanagan
...@@ -236,6 +236,14 @@ ...@@ -236,6 +236,14 @@
<boolean>false</boolean> <boolean>false</boolean>
</map> </map>
<key>ObjectAnimation</key>
<map>
<key>flavor</key>
<string>template</string>
<key>trusted-sender</key>
<boolean>false</boolean>
</map>
<key>AvatarAppearance</key> <key>AvatarAppearance</key>
<map> <map>
<key>flavor</key> <key>flavor</key>
......
...@@ -3,31 +3,27 @@ ...@@ -3,31 +3,27 @@
# cmake_minimum_required should appear before any # cmake_minimum_required should appear before any
# other commands to guarantee full compatibility # other commands to guarantee full compatibility
# with the version specified # with the version specified
## prior to 2.8, the add_custom_target commands used in setting the version did not work correctly cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
set(ROOT_PROJECT_NAME "SecondLife" CACHE STRING set(ROOT_PROJECT_NAME "Alchemy" CACHE STRING
"The root project/makefile/solution name. Defaults to SecondLife.") "The root project/makefile/solution name. Defaults to Alchemy.")
project(${ROOT_PROJECT_NAME}) project(${ROOT_PROJECT_NAME} LANGUAGES CXX)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(Variables)
include(BuildVersion)
if (NOT CMAKE_BUILD_TYPE) if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
"Build type. One of: Debug Release RelWithDebInfo" FORCE) "Build type. One of: Debug Release RelWithDebInfo" FORCE)
endif (NOT CMAKE_BUILD_TYPE) endif (NOT CMAKE_BUILD_TYPE)
# For the library installation process; include(Variables)
# see cmake/Prebuild.cmake for the counterpart code. include(00-Common)
if ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${CMAKE_BINARY_DIR}/temp/sentinel_installed") include(BuildVersion)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/temp) include(CTest)
file(WRITE ${CMAKE_BINARY_DIR}/temp/sentinel_installed "0")
endif ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${CMAKE_BINARY_DIR}/temp/sentinel_installed") add_subdirectory(deps)
add_subdirectory(cmake)
add_subdirectory(cmake)
add_subdirectory(${LIBS_OPEN_PREFIX}llaudio) add_subdirectory(${LIBS_OPEN_PREFIX}llaudio)
add_subdirectory(${LIBS_OPEN_PREFIX}llappearance) add_subdirectory(${LIBS_OPEN_PREFIX}llappearance)
add_subdirectory(${LIBS_OPEN_PREFIX}llcharacter) add_subdirectory(${LIBS_OPEN_PREFIX}llcharacter)
...@@ -45,60 +41,54 @@ add_subdirectory(${LIBS_OPEN_PREFIX}llvfs) ...@@ -45,60 +41,54 @@ add_subdirectory(${LIBS_OPEN_PREFIX}llvfs)
add_subdirectory(${LIBS_OPEN_PREFIX}llwindow) add_subdirectory(${LIBS_OPEN_PREFIX}llwindow)
add_subdirectory(${LIBS_OPEN_PREFIX}llxml) add_subdirectory(${LIBS_OPEN_PREFIX}llxml)
add_subdirectory(${LIBS_OPEN_PREFIX}lscript)
if (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts) if (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
add_subdirectory(${LIBS_CLOSED_PREFIX}copy_win_scripts) add_subdirectory(${LIBS_CLOSED_PREFIX}copy_win_scripts)
endif (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts) endif (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
if (DARWIN)
add_subdirectory(${LIBS_OPEN_PREFIX}lldarwin)
endif(DARWIN)
add_custom_target(viewer) add_custom_target(viewer)
add_subdirectory(${LIBS_OPEN_PREFIX}llcrashlogger)
add_subdirectory(${LIBS_OPEN_PREFIX}llplugin) add_subdirectory(${LIBS_OPEN_PREFIX}llplugin)
add_subdirectory(${LIBS_OPEN_PREFIX}llui) add_subdirectory(${LIBS_OPEN_PREFIX}llui)
add_subdirectory(${LIBS_OPEN_PREFIX}viewer_components) add_subdirectory(${LIBS_OPEN_PREFIX}viewer_components)
# Legacy C++ tests. Build always, run if LL_TESTS is true. # Legacy C++ tests. Build and run if LL_TESTS is true.
add_subdirectory(${VIEWER_PREFIX}test) if (LL_TESTS)
add_subdirectory(${VIEWER_PREFIX}test)
endif (LL_TESTS)
# viewer media plugins # viewer media plugins
add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins) if (ENABLE_MEDIA_PLUGINS)
add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)
# llplugin testbed code (is this the right way to include it?) endif (ENABLE_MEDIA_PLUGINS)
if (LL_TESTS AND NOT LINUX)
add_subdirectory(${VIEWER_PREFIX}test_apps/llplugintest)
add_subdirectory(${VIEWER_PREFIX}test_apps/llfbconnecttest)
endif (LL_TESTS AND NOT LINUX)
if (LINUX) if (LINUX)
add_subdirectory(${VIEWER_PREFIX}linux_crash_logger)
add_subdirectory(${VIEWER_PREFIX}linux_updater)
if (INSTALL_PROPRIETARY) if (INSTALL_PROPRIETARY)
include(LLAppearanceUtility) include(LLAppearanceUtility)
add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR}) add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR})
endif (INSTALL_PROPRIETARY) endif (INSTALL_PROPRIETARY)
add_dependencies(viewer linux-crash-logger-strip-target linux-updater)
elseif (DARWIN) elseif (DARWIN)
add_subdirectory(${VIEWER_PREFIX}mac_crash_logger) # add crash logger here in the future
add_dependencies(viewer mac-crash-logger)
elseif (WINDOWS) elseif (WINDOWS)
add_subdirectory(${VIEWER_PREFIX}win_crash_logger) # add crash logger here in the future
# cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake
if (EXISTS ${VIEWER_DIR}win_setup)
add_subdirectory(${VIEWER_DIR}win_setup)
endif (EXISTS ${VIEWER_DIR}win_setup)
add_subdirectory(${VIEWER_PREFIX}win_updater)
# add_dependencies(viewer windows-updater windows-setup windows-crash-logger)
add_dependencies(viewer windows-updater windows-crash-logger)
elseif (SOLARIS)
add_subdirectory(solaris_crash_logger)
add_dependencies(viewer solaris-crash-logger)
endif (LINUX) endif (LINUX)
add_subdirectory(${VIEWER_PREFIX}newview) add_subdirectory(${VIEWER_PREFIX}newview)
add_dependencies(viewer secondlife-bin) add_dependencies(viewer ${VIEWER_BINARY_NAME})
add_subdirectory(${VIEWER_PREFIX}doxygen EXCLUDE_FROM_ALL)
if (WINDOWS)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
PROPERTY VS_STARTUP_PROJECT ${VIEWER_BINARY_NAME})
endif (WINDOWS)
if (LL_TESTS) if (LL_TESTS)
# Define after the custom targets are created so # Define after the custom targets are created so
# individual apps can add themselves as dependencies # individual apps can add themselves as dependencies
add_subdirectory(${INTEGRATION_TESTS_PREFIX}integration_tests) add_subdirectory(${INTEGRATION_TESTS_PREFIX}integration_tests)
endif (LL_TESTS) endif (LL_TESTS)
A short guide to compiling, linking, running and debugging issues
in the viewer and its packaged libraries.
Introduction
A recent pass through some third-party libraries resulted in the
collection of a lot of information about how things should and
shouldn't be built in the viewer. Some of that is presented below
with hints and rules about doing things well. What's presented is
a guideline only. Not all suggestions are hard rules and you'll
find exceptions all over. Some exceptions arise from solid
reasoning, others may be legacy that hasn't been re-examined.
Use good engineering judgement when applying this information.
Compilation
Windows Targets
Significant compilation flags and defines follow:
----------------------------------------------------------------------------
Option Release RelWithDebInfo Debug
----------------------------------------------------------------------------
wchar_t /Zc:wchar_t- " "
RTL type /MD /MD /MDd
FLoating Point /fp:fast " "
Debug Info /Zi (app/dll), /Z7 (lib) " "
Optimizer /O2 /Ob2 /GR /Od /Ob0 /GR /Od /GR
Incr. Link /INCREMENTAL:NO /INCREMENTAL /INCREMENTAL:NO
Debug /DEBUG /DEBUG /DEBUG
/OPT:REF
Ignore Libs LIBCMT LIBCMT LIBCMT;LIBCMTD;MSVCRT
Alignment Default " "
Defines WIN32 " "
_WINDOWS " "
LL_RELEASE=1 LL_RELEASE=1 n/a
LL_RELEASE_FOR_DOWNLOAD=1 n/a n/a
NDEBUG NDEBUG _DEBUG
n/a n/a LL_DEBUG=1
n/a LL_RELEASE_WITH_\ n/a
DEBUG_INFO=1
n/a n/a _SCL_SECURE_NO_WARNINGS=1
_SECURE_STL=0 _SECURE_STL=0 _SECURE_STL=0
_HAS_ITERATOR_DEBUGGING=0 n/a n/a
LL_WINDOWS=1 " "
UNICODE " "
_UNICODE " "
WINVER=0x0600 " "
_WIN32_WINNT=0x0600 " "
LL_OS_DRAGDROP_ENABLED=1 " "
LIB_NDOF=1 " "
----------------------------------------------------------------------------
Notes:
1. /Zc:wchar_t-. Not certain where this comes from. It may be
due to a default set of compilation flags in Qt 4.X that then
propagates outward. In Qt 5.X, this setting is flipped back to
default (wchar_t is a built-in). Other options for dealing with
this include:
http://msdn.microsoft.com/en-us/library/dh8che7s%28v=vs.110%29.aspx
Recommend trying to stay with /Zc:wchar_t (the default) when
adding libraries. If incompatible, you'll typically get some
missing ostream '<<' operators or something similar in the stream
headers.
2. /Z7 (VC 7.0 compatibility symbols) gives us debug information
in the static libraries we build. Otherwise builds generate
vc100.pdb files all over the place which generally aren't useful.
DLL's and .EXEs are to get /Zi or /ZI with separate .PDB files.
These .PDB files can then be packaged up in symbol tarballs for
the crash dump analyzer or used in debugging. There are issues here
for VS 2013 (see below).
Mac Targets
Fairly straightforward, optimization level is easily changed (may
be little or negative gain for -O3 and RelWithDebInfo should be
kicked up to 1 or 2. Boost debug symbols to dwarf-2 with a goal
of dwarf-2 in separate dSYM file when building .dylibs and
executables.
----------------------------------------------------------------------------
Option Release RelWithDebInfo Debug
----------------------------------------------------------------------------
Strip Debug Symbols On " "
During Copy
Generate Debug Syms On " "
Level Debug Syms -gdwarf-2 " "
Optimization -O3 -O0 -O0
PIC -fPIC -DPIC " "
Defines LL_RELEASE=1 LL_RELEASE=1 n/a
LL_RELEASE_FOR_DOWNLOAD=1 n/a n/a
NDEBUG NDEBUG _DEBUG
n/a n/a LL_DEBUG=1
n/a LL_RELEASE_WITH_\ n/a
DEBUG_INFO=1
LL_DARWIN=1 " "
LL_OS_DRAGDROP_ENABLED=1 " "
LIB_NDOF=1 " "
----------------------------------------------------------------------------
Notes:
1. We're also building dylibs in a somewhat unusual way. They're
currently being generated with a link path of
'@executable_path/../Resources/<library>'. If we were to follow
the recommendations in dyld's man page, we’d instead reference
'@loader_path/<library>', use -rpath on the executable link
(pointing to the 'Resources' subdir of the main executable), and
be able to avoid some symlinking in the .app tree.
2. Use the -headerpad_max_install_names link option on all .dylibs.
Linux Targets
Not much variety here.
----------------------------------------------------------------------------
Option Release RelWithDebInfo Debug
----------------------------------------------------------------------------
Debug Level -g (-g0/1 better?) -g -g
During Copy
Optimization -O2 -O0 -O0
PIC -fPIC " "
----------------------------------------------------------------------------
Notes:
Linking
The library update work has generally moved in the direction of
preferring static libraries over dynamic (Qt4 being the notable
exception). It also mostly eliminated the extremely bad practice
of having multiple versions of a library built into an image.
How bad was it? Very. Appalling. A nightmare. On Windows, at
least four versions of zlib (1.2.3, 1.2.5, 1.2.6, unknown), three
versions of Boost (1.45, 1.48, 1.52), two versions of OpenSSL
(0.9.8q, 1.0.0g) and three different builds of libexpat
2.0.5/1.5.2 were used. Mac was worse with five builds or versions
of zlib, two of PCRE, two of c-ares, and three of OpenSSL. Linux
topped that by adding two builds of libpng.
DO NOT ALLOW THIS TO HAPPEN AGAIN. It isn't enough to update a
library and then stuff a new triplet of S3 URLs into the viewer's
autobuild.xml. If you update a library you MUST:
* Update the autobuild.xml of ALL consumers of the library. In
the case of zlib, that meant updating freetype, libpng, openssl,
libxml2, fontconfig, curl, Boost, SDL, llqtwebkit, google-mock and
colladadom.
* Confirm by test and observation that the consumers actually use
your library rather than 'call home to mother' and find
system-supplied versions of your library. This may consist of
watching configuration scripts, probing with ldd/depends/otool,
pulling text out of binaries with 'strings'. The previously-
mentioned libraries all have a README.Linden file that gives
examples specific to the consumer library.
* DO NOT RE-EXPORT LIBRARIES. Colladadom was the worst offender
of this rule. As a shared library, it was re-exporting part, but
not all, of Boost filesystem and system, some zlib, some PCRE,
some libxml2 and minizip. This meant that depending upon link-
time and run-time symbol resolution, data constructed with one
version of a library might be processed by a method built in a
second, incompatible version of the library. Switching colladadom
to a static library ended the re-export problem.
* Preventing re-export is not sufficient. Other libraries will
still be shipped as shared and they can still have Singleton and
Fragile Base Class issues. A DLL may be built with a static
archive of a library that has global data. That same static
archive might be linked into the application proper. An object
created with a method in the DLL may pass into a method in the
application where the archive's global data has a second instance
and no knowledge of the object. This is a failure due to an
assumption of Singleton global data which leads to some kind of
failure. This is the same effect as when, in Windows, both MSVCRT
and MSVCRTD get activated in a program. If you're lucky, some
asserts fail in that case having to do with file handle global
data.
Running
Windows Debug Build. Seems to have been rendered nearly useless
by having the LL_CHECK_MEMORY define in llmemory.h calling
_CrtCheckMemory(). Viewer is almost useful disabling this in
llvoavatar code alone but not quite.
Futures
Static Versus Dynamic Libraries
One solution to the above linking problems is the use of static
libraries for everything. Single version, singleton instancing of
data, etc. But it's not the 1950's and we're not running our
applications on bare metal. Every platform comes with 100s of
libraries waiting to interfere with operations by breaking the
single-version and singleton-data assumption.
Additionally, there are libraries that simply expect to be built
into shared libraries. Qt4 is one such. The version we're using
now, 4.7.1, is actually trying to disable both Webkit and plugin
modules because we're building it statically on Mac and Linux.
It's only because of configuration bugs that we're getting the
functionality out of it that we want.
With enough libraries and a single, global namespace, eventually
there will be collisions and there may not be a warning. All it
takes is two programmers who thought that 'FILE * open_file(const
char *);' was a safe signature to use between compilation units in
their libraries and glorious debugging sessions are in your
future. Having debugged it, you will now become the proud owner
of a one-off version of one of those libraries that uses a special
symbol prefix which you will be maintaining forever.
Lastly, we have some binary blobs that we must use as delivered.
Executables can be isolated at run-time if necessary. Shared
libraries are a different problem. They may bring their own
library dependencies that affect link- and run-time symbol
resolution and they'll impose that on us according to platform
rules.
So, what to do? My natural bias for large software is to use
shared libraries for everything. It's a path to single-version
and singleton data and isolates namespaces and prevents
interactions. It also has some field serviceability benefits if
you need to debug some bizarre problem a user has.
But there's a local preference for static. Here, my
rules-of-thumb are:
* Static library used by default.
* Shared library where the library must be built shared.
* Shared library if that is the only means to enforce the
single-version and singleton-data requirements.
* Shared library *on a case-by-case basis* if the library is also
provided by the platform and some benefit is plausible. (An
example of this is freetype/fontconfig on Linux. The .so
versions we build with, and incompletely ship, are inferior in
behavior to the platform libraries. By being shared libraries,
the platform-supplied option is available to all Linux users.)
In all cases, beware of cmake which appears to collapse and move
library references in links. This can drastically affect symbol
resolution when there are multiple sources for a symbol.
General
VS 2013. The /Z7 flag is rumored to be somewhat broken in 2013.
But it also sounds like there are explicit controls to name .PDB
files associated with static archives. That would make this an
ideal time to switch to /Zi or /ZI everywhere with explicit naming
and bring all the .PDBs together.
The embedded browser technology (e.g. Qt4 with Webkit) is the
800-pound gorilla in the viewer. When starting any major work,
decide what changes you need here as those changes will propagate
outwards forcing many other decisions (cf: /Zc:wchar_t- flag).
The current package structure (./include, ./lib/release,
./lib/debug, etc.) really works against the conventions used by
configure-like programs. I wasted a lot of time getting each
library to work with our structure without having to go back to
automake/autoconf. For Linux and Mac (and even for Windows), a
structure like the following where each grouping is optional would
probably save some work:
./debug/bin
/include
/lib
./debug/shared/bin
/include
/lib
./debug/static/bin
/include
/lib
./release/bin
/include
/lib
...
In zlib and openssl and in a few of the libraries that consume
them, I experimented with packaging both static and shared
libraries and then having the consumer library move the unwanted
pieces out of the way to use the library type of choice (see
restore_dylibs() and restore_sos() functions). It was a bit fussy
and simplicity and clarity are the keys to maintaining libraries
in the future.
But it did suggest another approach. The idea is that every build
pre-stages inputs. Before anything is built, package pieces are
copied or symlinked from the 'stage/packages' area to the
'stage/input' area. Builds then proceed with a single set of
-I/-L options for the dependencies. And products are built and
installed in a similar output staging structure for the next
consumer:
stage/packages/<package>/[above structure]
stage/input/{bin,include,lib}
stage/<package>/[above structure]
Next library project. I'd recommend working on the related set of
libexpat, apr, aprutil, xmlrpc-epi. We know libexpat has some
updates that should improve stability. Libapr consumes it and it
could use some /Z7 flag work to get rid of some 1000's of PDB
warnings and improve our debug symbols.
Miscellany to be sorted out:
* The packaging of libfreetype and libfontconfig on Linux.
Determine what the right thing is, do it.
* Maybe do something with ICU4C. Qt5 will require it and a number
of our packages can consume it typically replacing iconv or some
other library. But it is a huge bolus of static data. It can be
trimmed, but still.
* Revisit openssl. Package as a shared library? Replace with
LibreSSL when available? Start using platform-supplied crypto?