diff --git a/.github/release.yaml b/.github/release.yaml new file mode 100644 index 0000000000..5af13f2ca6 --- /dev/null +++ b/.github/release.yaml @@ -0,0 +1,18 @@ +changelog: + exclude: + labels: + - ignore-for-release + authors: + - dependabot + categories: + - title: Breaking Changes 🛠 + labels: + - semver-major + - breaking-change + - title: New Features 🎉 + labels: + - semver-minor + - enhancement + - title: Other Changes + labels: + - '*' diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index a110c018ec..1cd0c2526f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -4,54 +4,93 @@ on: workflow_dispatch: pull_request: push: - branches: [main, contribute] + branches: ["*"] tags: ["*"] jobs: build: strategy: matrix: - runner: [windows-large] - configuration: [ReleaseOS] - addrsize: [64] + runner: [windows-large, macos-12-xl] + configuration: [Release, ReleaseOS] + python-version: ["3.11"] include: - - runner: windows-large + - runner: macos-12-xl + developer_dir: "/Applications/Xcode_14.0.1.app/Contents/Developer" + exclude: + - runner: macos-12-xl configuration: ReleaseOS - addrsize: 32 runs-on: ${{ matrix.runner }} + outputs: + viewer_channel: ${{ steps.build.outputs.viewer_channel }} + viewer_version: ${{ steps.build.outputs.viewer_version }} + imagename: ${{ steps.build.outputs.imagename }} env: + AUTOBUILD_ADDRSIZE: 64 + AUTOBUILD_BUILD_ID: ${{ github.run_id }} AUTOBUILD_CONFIGURATION: ${{ matrix.configuration }} - AUTOBUILD_ADDRSIZE: ${{ matrix.addrsize }} + # authorizes fetching private constituent packages + AUTOBUILD_GITHUB_TOKEN: ${{ secrets.SHARED_AUTOBUILD_GITHUB_TOKEN }} AUTOBUILD_INSTALLABLE_CACHE: ${{ github.workspace }}/.autobuild-installables AUTOBUILD_VARIABLES_FILE: ${{ github.workspace }}/.build-variables/variables - AUTOBUILD_VSVER: "170" # vs2k22 - LOGFAIL: debug # Show details when tests fail + AUTOBUILD_VSVER: "170" + DEVELOPER_DIR: ${{ matrix.developer_dir }} + # Ensure that Linden viewer builds engage Bugsplat. + BUGSPLAT_DB: ${{ matrix.configuration != 'ReleaseOS' && 'SecondLife_Viewer_2018' || '' }} + BUGSPLAT_PASS: ${{ secrets.BUGSPLAT_PASS }} + BUGSPLAT_USER: ${{ secrets.BUGSPLAT_USER }} + build_coverity: false + build_log_dir: ${{ github.workspace }}/.logs + build_viewer: true + BUILDSCRIPTS_SHARED: ${{ github.workspace }}/.shared + # extracted and committed to viewer repo + BUILDSCRIPTS_SUPPORT_FUNCTIONS: ${{ github.workspace }}/buildscripts_support_functions GIT_REF: ${{ github.head_ref || github.ref }} + LL_SKIP_REQUIRE_SYSROOT: 1 + # Setting this variable directs Linden's TUT test driver code to capture + # test-program log output at the specified level, but to display it only if + # the individual test fails. + LOGFAIL: DEBUG + master_message_template_checkout: ${{ github.workspace }}/.master-message-template + # Only set variants to the one configuration: don't let build.sh loop + # over variants, let GitHub distribute variants over multiple hosts. + variants: ${{ matrix.configuration }} steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} + - name: Setup python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Checkout build variables - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: secondlife/build-variables ref: viewer path: .build-variables + - name: Checkout master-message-template + uses: actions/checkout@v4 + with: + repository: secondlife/master-message-template + path: .master-message-template + - name: Install autobuild and python dependencies - run: pip3 install autobuild llbase + run: pip3 install autobuild llsd - name: Cache autobuild packages uses: actions/cache@v3 id: cache-installables with: path: .autobuild-installables - key: ${{ runner.os }}-${{ matrix.addrsize }}-${{ matrix.configuration }}-${{ hashFiles('autobuild.xml') }} + key: ${{ runner.os }}-64-${{ matrix.configuration }}-${{ hashFiles('autobuild.xml') }} restore-keys: | - ${{ runner.os }}-${{ matrix.addrsize }}-${{ matrix.configuration }}- - ${{ runner.os }}-${{ matrix.addrsize }}- + ${{ runner.os }}-64-${{ matrix.configuration }}- + ${{ runner.os }}-64- - name: Install windows dependencies if: runner.os == 'Windows' @@ -63,31 +102,266 @@ jobs: env: RUNNER_OS: ${{ runner.os }} run: | + # set up things the viewer's build.sh script expects + set -x + mkdir -p "$build_log_dir" + mkdir -p "$BUILDSCRIPTS_SHARED/packages/lib/python" + source "$BUILDSCRIPTS_SUPPORT_FUNCTIONS" + if [[ "$OSTYPE" =~ cygwin|msys ]] + then + native_path() { cygpath --windows "$1"; } + shell_path() { cygpath --unix "$1"; } + else + native_path() { echo "$1"; } + shell_path() { echo "$1"; } + fi + finalize() + { + case "$1" in + true|0) + record_success "Build Succeeded" + ;; + *) + record_failure "Build Failed with $1" + ;; + esac + } + initialize_build() + { + echo "initialize_build" + } + initialize_version() + { + export revision="$AUTOBUILD_BUILD_ID" + } + python_cmd() + { + if [[ "x${1:0:1}" == "x-" ]] # -m, -c, etc. + then # if $1 is a switch, don't try to twiddle paths + "$(shell_path "$PYTHON_COMMAND")" "$@" + elif [[ "$(basename "$1")" == "codeticket.py" ]] + then # ignore any attempt to contact codeticket + echo "## $@" + else # running a script at an explicit path: fix path for Python + local script="$1" + shift + "$(shell_path "$PYTHON_COMMAND")" "$(native_path "$script")" "$@" + fi + } + repo_branch() + { + git -C "$1" branch | grep '^* ' | cut -c 3- + } + record_dependencies_graph() + { + echo "TODO: generate and post dependency graph" + } + # Since we're not uploading to codeticket, DO NOT sleep for minutes. + sleep() + { + echo "Not sleeping for $1 seconds" + } + export -f native_path shell_path finalize initialize_build initialize_version + export -f python_cmd repo_branch record_dependencies_graph sleep + ## Useful for diagnosing Windows LLProcess/LLLeap test failures + ##export APR_LOG="${RUNNER_TEMP}/apr.log" + export arch=$(uname | cut -b-6) + # Surprise! GH Windows runner's MINGW6 is a $arch value we've never + # seen before, so numerous tests don't know about it. + [[ "$arch" == "MINGW6" ]] && arch=CYGWIN + export AUTOBUILD="$(which autobuild)" + # Build with a tag like "Second_Life_Project_Shiny#abcdef0" to get a + # viewer channel "Second Life Project Shiny" (ignoring "#hash", + # needed to disambiguate tags). + if [[ "$GITHUB_REF_TYPE" == "tag" && "${GITHUB_REF_NAME:0:12}" == "Second_Life_" ]] + then viewer_channel="${GITHUB_REF_NAME%#*}" + export viewer_channel="${viewer_channel//_/ }" + else export viewer_channel="Second Life Test" + fi + echo "viewer_channel=$viewer_channel" >> "$GITHUB_OUTPUT" + # On windows we need to point the build to the correct python # as neither CMake's FindPython nor our custom Python.cmake module # will resolve the correct interpreter location. if [[ "$RUNNER_OS" == "Windows" ]]; then - export PYTHON="$(cygpath -m "$(which python)")" + export PYTHON="$(native_path "$(which python)")" echo "Python location: $PYTHON" + export PYTHON_COMMAND="$PYTHON" + else + export PYTHON_COMMAND="python3" fi - - autobuild configure -- -DVIEWER_CHANNEL="Second Life Test ${GIT_REF##*/}" - autobuild build --no-configure + export PYTHON_COMMAND_NATIVE="$(native_path "$PYTHON_COMMAND")" - # Find artifacts - if [[ "$RUNNER_OS" == "Windows" ]]; then - installer_path=$(find ./build-*/newview/ | grep '_Setup\.exe') - installer_name="$(basename $installer_path)" - elif [[ "$RUNNER_OS" == "macOS" ]]; then - installer_path=$(find ./build-*/newview/ | grep '\.dmg') - installer_name="$(basename $installer_path)" + ./build.sh + + # Each artifact is downloaded as a distinct .zip file. Multiple jobs + # (per the matrix above) writing the same filepath to the same + # artifact name will *overwrite* that file. Moreover, they can + # interfere with each other, causing the upload to fail. + # https://github.com/actions/upload-artifact#uploading-to-the-same-artifact + # Given the size of our installers, and the fact that we typically + # only want to download just one instead of a single zip containing + # several, generate a distinct artifact name for each installer. + # If the matrix above can run multiple builds on the same + # platform, we must disambiguate on more than the platform name. + # e.g. if we were still running Windows 32-bit builds, we'd need to + # qualify the artifact with bit width. + if [[ "$AUTOBUILD_CONFIGURATION" == "ReleaseOS" ]] + then cfg_suffix='OS' + else cfg_suffix='' fi + echo "artifact=$RUNNER_OS$cfg_suffix" >> $GITHUB_OUTPUT - echo "installer_path=$installer_path" >> $GITHUB_OUTPUT - echo "installer_name=$installer_name" >> $GITHUB_OUTPUT - - - name: Upload installer + - name: Upload executable + if: matrix.configuration != 'ReleaseOS' && steps.build.outputs.viewer_app uses: actions/upload-artifact@v3 with: - name: ${{ steps.build.outputs.installer_name }} - path: ${{ steps.build.outputs.installer_path }} + name: "${{ steps.build.outputs.artifact }}-app" + path: | + ${{ steps.build.outputs.viewer_app }} + + # The other upload of nontrivial size is the symbol file. Use a distinct + # artifact for that too. + - name: Upload symbol file + if: matrix.configuration != 'ReleaseOS' + uses: actions/upload-artifact@v3 + with: + name: "${{ steps.build.outputs.artifact }}-symbols" + path: | + ${{ steps.build.outputs.symbolfile }} + + - name: Upload metadata + if: matrix.configuration != 'ReleaseOS' + uses: actions/upload-artifact@v3 + with: + name: "${{ steps.build.outputs.artifact }}-metadata" + # emitted by build.sh, possibly multiple lines + path: | + ${{ steps.build.outputs.metadata }} + + - name: Upload physics package + uses: actions/upload-artifact@v3 + # should only be set for viewer-private + if: matrix.configuration != 'ReleaseOS' && steps.build.outputs.physicstpv + with: + name: "${{ steps.build.outputs.artifact }}-physics" + # emitted by build.sh, zero or one lines + path: | + ${{ steps.build.outputs.physicstpv }} + + sign-and-package-windows: + needs: build + runs-on: windows + steps: + - name: Sign and package Windows viewer + uses: secondlife/viewer-build-util/sign-pkg-windows@main + with: + vault_uri: "${{ secrets.AZURE_KEY_VAULT_URI }}" + cert_name: "${{ secrets.AZURE_CERT_NAME }}" + client_id: "${{ secrets.AZURE_CLIENT_ID }}" + client_secret: "${{ secrets.AZURE_CLIENT_SECRET }}" + tenant_id: "${{ secrets.AZURE_TENANT_ID }}" + + sign-and-package-mac: + needs: build + runs-on: macos-latest + steps: + - name: Unpack Mac notarization credentials + id: note-creds + shell: bash + run: | + # In NOTARIZE_CREDS_MACOS we expect to find: + # USERNAME="..." + # PASSWORD="..." + # TEAM_ID="..." + eval "${{ secrets.NOTARIZE_CREDS_MACOS }}" + echo "::add-mask::$USERNAME" + echo "::add-mask::$PASSWORD" + echo "::add-mask::$TEAM_ID" + echo "note_user=$USERNAME" >> "$GITHUB_OUTPUT" + echo "note_pass=$PASSWORD" >> "$GITHUB_OUTPUT" + echo "note_team=$TEAM_ID" >> "$GITHUB_OUTPUT" + # If we didn't manage to retrieve all of these credentials, better + # find out sooner than later. + [[ -n "$USERNAME" && -n "$PASSWORD" && -n "$TEAM_ID" ]] + + - name: Sign and package Mac viewer + uses: secondlife/viewer-build-util/sign-pkg-mac@main + with: + channel: ${{ needs.build.outputs.viewer_channel }} + imagename: ${{ needs.build.outputs.imagename }} + cert_base64: ${{ secrets.SIGNING_CERT_MACOS }} + cert_name: ${{ secrets.SIGNING_CERT_MACOS_IDENTITY }} + cert_pass: ${{ secrets.SIGNING_CERT_MACOS_PASSWORD }} + note_user: ${{ steps.note-creds.outputs.note_user }} + note_pass: ${{ steps.note-creds.outputs.note_pass }} + note_team: ${{ steps.note-creds.outputs.note_team }} + + post-windows-symbols: + needs: build + runs-on: ubuntu-latest + steps: + - name: Post Windows symbols + uses: secondlife/viewer-build-util/post-bugsplat-windows@main + with: + username: ${{ secrets.BUGSPLAT_USER }} + password: ${{ secrets.BUGSPLAT_PASS }} + database: "SecondLife_Viewer_2018" + channel: ${{ needs.build.outputs.viewer_channel }} + version: ${{ needs.build.outputs.viewer_version }} + + post-mac-symbols: + needs: build + runs-on: ubuntu-latest + steps: + - name: Post Mac symbols + uses: secondlife/viewer-build-util/post-bugsplat-mac@main + with: + username: ${{ secrets.BUGSPLAT_USER }} + password: ${{ secrets.BUGSPLAT_PASS }} + database: "SecondLife_Viewer_2018" + channel: ${{ needs.build.outputs.viewer_channel }} + version: ${{ needs.build.outputs.viewer_version }} + + release: + needs: [sign-and-package-windows, sign-and-package-mac] + runs-on: ubuntu-latest + if: github.ref_type == 'tag' && startsWith(github.ref_name, 'Second_Life_') + steps: + - uses: actions/download-artifact@v3 + with: + path: artifacts + + - name: Reshuffle artifact files + uses: secondlife/viewer-build-util/release-artifacts@main + with: + input-path: artifacts + output-path: assets + # The *-app artifacts are for use only by the signing and + # packaging steps. Once we've generated signed installers, we no + # longer need them, and we CERTAINLY don't want to publish + # thousands of individual files as separate URLs. + exclude: |- + Windows-app + macOS-app + # Use just "Windows" or "macOS" prefix because these are the only + # artifacts in which we expect files from both platforms with + # colliding names (e.g. autobuild-package.xml). release-artifacts + # normally resolves collisions by prepending the artifact name, so + # when we anticipate collisions, it's good to keep the prefix + # short and sweet. + prefix: |- + Windows-metadata=Windows + macOS-metadata=macOS + + # forked from softprops/action-gh-release + - uses: secondlife-3p/action-gh-release@v1 + with: + # name the release page for the build number so we can find it + # easily (analogous to looking up a codeticket build page) + name: "v${{ github.run_id }}" + prerelease: true + generate_release_notes: true + # the only reason we generate a GH release is to post build products + fail_on_unmatched_files: true + files: "assets/*" diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 17c0ace02f..d626eef38d 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -11,7 +11,7 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: 3.x diff --git a/autobuild.xml b/autobuild.xml index 9003500099..70f232f47d 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1,5 +1,9 @@ + version + 1.3 + type + autobuild installables SDL2 @@ -208,18 +212,6 @@ name linux64 - windows - - archive - - hash - adb2d66a0f5cb473a36e24c4dc3cfa36 - url - http://3p.firestormviewer.org/ndPhysicsStub-1.0-windows-202121822.tar.bz2 - - name - windows - windows64 archive @@ -270,20 +262,6 @@ name linux64 - windows - - archive - - hash - e1f8da12a2b7a6c31830b4bb86d31ed6 - hash_algorithm - md5 - url - http://3p.firestormviewer.org/glod-1.0pre3.vs2017-1906061512-windows-vs2017-1906061512.tar.bz2 - - name - windows - windows64 archive @@ -336,18 +314,6 @@ name linux64 - windows - - archive - - hash - 29a573c4d27d617345030cf28860ea2e - url - http://3p.firestormviewer.org/gntp_growl-1.0-windows-vs2017-1906061512.tar.bz2 - - name - windows - windows64 archive @@ -376,18 +342,6 @@ discord-rpc platforms - windows - - archive - - hash - c97507d081f25261ec14238ea80f5163 - url - http://3p.firestormviewer.org/discord_rpc-3.4.0-windows-192581529.tar.bz2 - - name - windows - windows64 archive @@ -428,16 +382,6 @@ SDL - copyright - Copyright (C) 1997-2012 Sam Lantinga - description - Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. - license - lgpl - license_file - LICENSES/SDL.txt - name - SDL platforms linux64 @@ -453,8 +397,18 @@ linux64 + license + lgpl + license_file + LICENSES/SDL.txt + copyright + Copyright (C) 1997-2012 Sam Lantinga version 1.2.15 + name + SDL + description + Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. tracy @@ -484,20 +438,6 @@ name darwin64 - windows - - archive - - hash - 47c696cd2966c5cc3c8ba6115dd1f886 - hash_algorithm - md5 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/86973/801641/tracy-v0.7.8.563351-windows-563351.tar.bz2 - - name - windows - windows64 archive @@ -522,16 +462,6 @@ apr_suite - copyright - Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. - description - Apache portable runtime project - license - apache - license_file - LICENSES/apr_suite.txt - name - apr_suite platforms darwin64 @@ -539,9 +469,11 @@ archive hash - 178b16ee9ff67986c8c14413ee68218e + dc4a38439f90325b406ec3f7cc4fa66edf0eeec8 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/107593/938535/apr_suite-1.4.5.576669-darwin64-576669.tar.bz2 + https://github.com/secondlife/3p-apr_suite/releases/download/v1.7.2-e935465/apr_suite-1.7.2-e935465-darwin64-e935465.tar.zst name darwin64 @@ -558,46 +490,36 @@ name linux64 - windows - - archive - - hash - d2997cad03dbd0d70a060276b5671480 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/107594/938548/apr_suite-1.4.5.576669-windows-576669.tar.bz2 - - name - windows - windows64 archive hash - ec24f5945faa8f13807b83eeaeb994f8 + 8233de9a11f323a03d569db1043ba5198176457b + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/107592/938547/apr_suite-1.4.5.576669-windows64-576669.tar.bz2 + https://github.com/secondlife/3p-apr_suite/releases/download/v1.7.2-e935465/apr_suite-1.7.2-e935465-windows64-e935465.tar.zst name windows64 + license + apache + license_file + LICENSES/apr_suite.txt + copyright + Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. version - 1.4.5.576669 + 1.7.2-e935465 + name + apr_suite + description + Apache portable runtime project boost - copyright - (see individual source files) - description - Boost C++ Libraries - license - boost 1.0 - license_file - LICENSES/boost.txt - name - boost platforms darwin64 @@ -605,9 +527,11 @@ archive hash - fedc8d63856f534b6098102e059dc548 + 59c1827cab82516504a2eb31e0aa7e38035b5085 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87776/805857/boost-1.72-darwin64-563847.tar.bz2 + https://github.com/secondlife/3p-boost/releases/download/v1.81-90bb2df/boost-1.81-darwin64-90bb2df.tar.zst name darwin64 @@ -624,46 +548,36 @@ name linux64 - windows - - archive - - hash - 6cc9fb4ca21365c4470a3e516544ba71 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87784/805850/boost-1.72-windows-563847.tar.bz2 - - name - windows - windows64 archive hash - 0c526efc3f8825cd25cdf635e238fab3 + 26214a33c568929ffeeb3463ce183f2888ce4fe4 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87783/805851/boost-1.72-windows64-563847.tar.bz2 + https://github.com/secondlife/3p-boost/releases/download/v1.81-90bb2df/boost-1.81-windows64-90bb2df.tar.zst name windows64 + license + boost 1.0 + license_file + LICENSES/boost.txt + copyright + (see individual source files) version - 1.72 + 1.81 + name + boost + description + Boost C++ Libraries bugsplat - copyright - Copyright 2003-2017, BugSplat - description - Bugsplat crash reporting package - license - Proprietary - license_file - LICENSES/BUGSPLAT_LICENSE.txt - name - bugsplat platforms darwin64 @@ -671,51 +585,45 @@ archive hash - 02b569ac2bd71f201e3dd86ade7b3eeb + d152f19f4a5a9c8013f006e19b1fcd88692bccf1 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/113876/983684/bugsplat-1.0.7.579696-darwin64-579696.tar.bz2 + https://github.com/secondlife/3p-bugsplat/releases/download/v1.0.7-527603a/bugsplat-1.0.7-527603a-darwin64-527603a.tar.zst name darwin64 - windows - - archive - - hash - 5b32c47ae8e8cf0d4106f08e8db18044 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/113878/983697/bugsplat-4.0.3.0.579696-windows-579696.tar.bz2 - - name - windows - windows64 archive hash - 79c005fd8a660f8551b3c9ede64fa4ef + 1364da04333570b73c771e4f4acd1bacc7fc3f02 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/113879/983696/bugsplat-4.0.3.0.579696-windows64-579696.tar.bz2 + https://github.com/secondlife/3p-bugsplat/releases/download/v1.0.7-527603a/bugsplat-4.0.3.0-527603a-windows64-527603a.tar.zst name windows64 + license + Proprietary + license_file + LICENSES/BUGSPLAT_LICENSE.txt + copyright + Copyright 2003-2017, BugSplat version - 4.0.3.0.579696 + 4.0.3.0-527603a + name + bugsplat + description + Bugsplat crash reporting package colladadom - copyright - Copyright 2006 Sony Computer Entertainment Inc. - license - SCEA - license_file - LICENSES/collada.txt - name - colladadom platforms darwin64 @@ -723,9 +631,11 @@ archive hash - a880dfc15fcb330baf548a85324cd88a + 7f447d30d7add80270a55cf3c53000392821a1cb + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/104133/913090/colladadom-2.3.574693-darwin64-574693.tar.bz2 + https://github.com/secondlife/3p-colladadom/releases/download/v2.3.d1ef72a/colladadom-2.3.d1ef72a-darwin64-d1ef72a.tar.zst name darwin64 @@ -742,44 +652,34 @@ name linux64 - windows - - archive - - hash - 7e84441d9c7cf019a7bdc7b818b16c27 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/104112/912957/colladadom-2.3.574693-windows-574693.tar.bz2 - - name - windows - windows64 archive hash - 2eaffbb8a93b03a732d3c47055a8efcb + b32294a2f31f5b4ca49928e66832aad1bb4a88ac + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/104135/913103/colladadom-2.3.574693-windows64-574693.tar.bz2 + https://github.com/secondlife/3p-colladadom/releases/download/v2.3.d1ef72a/colladadom-2.3.d1ef72a-windows64-d1ef72a.tar.zst name windows64 + license + SCEA + license_file + LICENSES/collada.txt + copyright + Copyright 2006 Sony Computer Entertainment Inc. version - 2.3.574693 + 2.3.d1ef72a + name + colladadom cubemaptoequirectangular - copyright - Copyright (c) 2017 Jaume Sanchez Elias, http://www.clicktorelease.com - license - MIT - license_file - LICENSES/CUBEMAPTOEQUIRECTANGULAR_LICENSE.txt - name - cubemaptoequirectangular platforms darwin64 @@ -787,9 +687,11 @@ archive hash - 7e4622b497bc465b01ff6d3e7e0b4214 + d5fb3832a338bbe4891b823c64fdb4806706568e + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89303/815402/cubemaptoequirectangular-1.1.0-darwin64-564841.tar.bz2 + https://github.com/secondlife/3p-cubemap_to_eqr_js/releases/download/v1.1.0-d7afe27/cubemaptoequirectangular-1.1.0-darwin64-d7afe27.tar.zst name darwin64 @@ -799,53 +701,43 @@ archive hash - eb62a7040c7579569e06e5a61a7831d5 + 77c53daf558f51aec6e9f4bd9e930a103630ee7d + hash_algorithm + sha1 url - http://3p.firestormviewer.org/cubemaptoequirectangular-1.1.0-linux64-213500938.tar.bz2 + https://github.com/secondlife/3p-cubemap_to_eqr_js/releases/download/v1.1.0-d7afe27/cubemaptoequirectangular-1.1.0-linux64-d7afe27.tar.zst name linux64 - windows - - archive - - hash - b5ea7097ae10037024b0c2b3df9812b5 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89307/815434/cubemaptoequirectangular-1.1.0-windows-564841.tar.bz2 - - name - windows - windows64 archive hash - ac54672e0b38f52726f5c99047c913e4 + 6c51855bcf3a8628289881fdaea08c25cf7b1b90 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89306/815431/cubemaptoequirectangular-1.1.0-windows64-564841.tar.bz2 + https://github.com/secondlife/3p-cubemap_to_eqr_js/releases/download/v1.1.0-d7afe27/cubemaptoequirectangular-1.1.0-windows64-d7afe27.tar.zst name windows64 + license + MIT + license_file + LICENSES/CUBEMAPTOEQUIRECTANGULAR_LICENSE.txt + copyright + Copyright (c) 2017 Jaume Sanchez Elias, http://www.clicktorelease.com version 1.1.0 + name + cubemaptoequirectangular curl - copyright - Copyright (c) 1996 - 2014, Daniel Stenberg, (daniel@haxx.se). - description - Library for transferring data specified with URL syntax - license - curl - license_file - LICENSES/curl.txt - name - curl platforms darwin64 @@ -853,9 +745,11 @@ archive hash - 44d801e05811269d1bed7dbc75d85843 + d4d5f27008de1ff7e86ae852841c68849b02eaea + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87786/805905/curl-7.54.1.563852-darwin64-563852.tar.bz2 + https://github.com/secondlife/3p-curl/releases/download/v7.54.1-5a4a82d/curl-7.54.1-5a4a82d-darwin64-5a4a82d.tar.zst name darwin64 @@ -872,48 +766,36 @@ name linux64 - windows - - archive - - hash - 676f624d4ebdc2189caa43ef6dd8266d - hash_algorithm - md5 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87790/805917/curl-7.54.1.563852-windows-563852.tar.bz2 - - name - windows - windows64 archive hash - b3db5a2cdf275c1af7758fbe2d14544a + 07423f41d1320ea405f493869f6460cf8c45def5 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87789/805918/curl-7.54.1.563852-windows64-563852.tar.bz2 + https://github.com/secondlife/3p-curl/releases/download/v7.54.1-5a4a82d/curl-7.54.1-5a4a82d-windows64-5a4a82d.tar.zst name windows64 + license + curl + license_file + LICENSES/curl.txt + copyright + Copyright (c) 1996 - 2014, Daniel Stenberg, (daniel@haxx.se). version - 7.54.1.563852 + 7.54.1-5a4a82d + name + curl + description + Library for transferring data specified with URL syntax dictionaries - copyright - Copyright 2014 Apache OpenOffice software - description - Spell checking dictionaries to bundled into the viewer - license - various open source - license_file - LICENSES/dictionaries.txt - name - dictionaries platforms common @@ -929,21 +811,21 @@ common + license + various open source + license_file + LICENSES/dictionaries.txt + copyright + Copyright 2014 Apache OpenOffice software version - 1.538984 + None + name + dictionaries + description + Spell checking dictionaries to bundled into the viewer dullahan - copyright - Copyright (c) 2017, Linden Research, Inc. - description - A headless browser SDK that uses the Chromium Embedded Framework (CEF). It is designed to make it easier to write applications that render modern web content directly to a memory buffer, inject synthesized mouse and keyboard events as well as interact with web based features like JavaScript or cookies. - license - MPL - license_file - LICENSES/CEF_LICENSE.txt - name - dullahan platforms darwin64 @@ -951,9 +833,11 @@ archive hash - 439d92ec73f0500ba1671faad2bd8090 + e4d568c166049ce61b39d69887b56d2382781a1a + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/104637/916643/dullahan-1.12.4.202209142017_91.1.21_g9dd45fe_chromium-91.0.4472.114-darwin64-575005.tar.bz2 + https://github.com/secondlife/dullahan/releases/download/v118.0.5993.54/dullahan-1.14.0.202310131309_118.4.1_g3dd6078_chromium-118.0.5993.54-darwin64-6b02a60.tar.zst name darwin64 @@ -970,46 +854,36 @@ name linux64 - windows - - archive - - hash - 2a7c01da15de77bc1fd1863327174d5e - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/104638/916654/dullahan-1.12.4.202209142021_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows-575005.tar.bz2 - - name - windows - windows64 archive hash - d06bee9b2517fbb09ba1a65e6d675361 + a00eae7f5dc430ae48389ab723ced39739b0a144 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/104639/916659/dullahan-1.12.4.202209142021_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows64-575005.tar.bz2 + https://github.com/secondlife/dullahan/releases/download/v118.0.5993.54/dullahan-1.14.0.202310131404_118.4.1_g3dd6078_chromium-118.0.5993.54-windows64-6b02a60.tar.zst name windows64 + license + MPL + license_file + LICENSES/LICENSE.txt + copyright + Copyright (c) 2017, Linden Research, Inc. version - 1.12.4.202209142021_91.1.21_g9dd45fe_chromium-91.0.4472.114 + 1.14.0.202310131404_118.4.1_g3dd6078_chromium-118.0.5993.54 + name + dullahan + description + A headless browser SDK that uses the Chromium Embedded Framework (CEF). It is designed to make it easier to write applications that render modern web content directly to a memory buffer, inject synthesized mouse and keyboard events as well as interact with web based features like JavaScript or cookies. expat - copyright - Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper - Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. - description - Expat is an XML parser library written in C - license - expat - license_file - LICENSES/expat.txt - name - expat platforms darwin64 @@ -1017,9 +891,11 @@ archive hash - f4e80e0dfcab713a3da90cd8f7f23e7b + b85526ca80b6a7e73c7870285cf68d568f742095 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76341/727265/expat-2.1.1.555519-darwin64-555519.tar.bz2 + https://github.com/secondlife/3p-expat/releases/download/v2.1.1.1f36d02/expat-2.1.1.1f36d02-darwin64-1f36d02.tar.zst name darwin64 @@ -1036,52 +912,44 @@ name linux64 - windows - - archive - - hash - cd4fe03473076c324d80ae3bd91a85bb - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76343/727273/expat-2.1.1.555519-windows-555519.tar.bz2 - - name - windows - windows64 archive hash - d2d74d73b914150982b1883a3b96e60b + 47c01a89bc32c5740efe51be43e459ffd9b7cd34 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76344/727279/expat-2.1.1.555519-windows64-555519.tar.bz2 + https://github.com/secondlife/3p-expat/releases/download/v2.1.1.1f36d02/expat-2.1.1.1f36d02-windows64-1f36d02.tar.zst name windows64 + license + expat + license_file + LICENSES/expat.txt + copyright + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper - Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. version - 2.1.1.555519 + 2.1.1.1f36d02 + name + expat + description + Expat is an XML parser library written in C fmodstudio - copyright - FMOD Studio by Firelight Technologies Pty Ltd. - description - FMOD Studio API - license - fmod - license_file - LICENSES/fmodstudio.txt - name - fmodstudio platforms darwin64 archive + creds + github hash 8ee7c21f3f109cf4e1709e4af0b4bebf hash_algorithm @@ -1096,6 +964,8 @@ archive + creds + github hash 14846f1a55274399362db4b674fcded6 hash_algorithm @@ -1106,24 +976,12 @@ name linux64 - windows - - archive - - hash - a2bee3384b91bf962d4d68e98bf7edd3 - hash_algorithm - md5 - url - file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.18-windows-232801154.tar.bz2 - - name - windows - windows64 archive + creds + github hash 7b38bd83eb63f25df7c5a20070a05732 hash_algorithm @@ -1135,21 +993,21 @@ windows64 + license + fmod + license_file + LICENSES/fmodstudio.txt + copyright + FMOD Studio by Firelight Technologies Pty Ltd. version 2.02.18 + name + fmodstudio + description + FMOD Studio API fontconfig - copyright - Copyright (C) 2000,2001,2002,2003,2004,2006,2007 Keith Packard, 2005 Patrick Lam, 2009 Roozbeh Pournader, 2008,2009 Red Hat, Inc., 2008 Danilo Šegan, 2012 Google, Inc. - description - Fontconfig is a library for configuring and customizing font access. - license - bsd - license_file - LICENSES/fontconfig.txt - name - fontconfig platforms linux64 @@ -1165,21 +1023,21 @@ linux64 + license + bsd + license_file + LICENSES/fontconfig.txt + copyright + Copyright (C) 2000,2001,2002,2003,2004,2006,2007 Keith Packard, 2005 Patrick Lam, 2009 Roozbeh Pournader, 2008,2009 Red Hat, Inc., 2008 Danilo Šegan, 2012 Google, Inc. version 2.11.0 + name + fontconfig + description + Fontconfig is a library for configuring and customizing font access. freetype - copyright - Copyright 2006, 2007, 2008, 2009, 2010 by David Turner, Robert Wilhelm, and Werner Lemberg. - description - Font rendering library - license - FreeType - license_file - LICENSES/freetype.txt - name - freetype platforms darwin64 @@ -1187,9 +1045,11 @@ archive hash - 8865739d8e530199dacb3c3042c1bc01 + 912d122aae996483ba814fe8e569394ddca0d42e + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87777/805782/freetype-2.4.4.563848-darwin64-563848.tar.bz2 + https://github.com/secondlife/3p-freetype/releases/download/v2.4.4.4f739fa/freetype-2.4.4.4f739fa-darwin64-4f739fa.tar.zst name darwin64 @@ -1206,112 +1066,34 @@ name linux64 - windows - - archive - - hash - 90d94d031bc27bcefe3473432d6fa213 - url - http://3p.firestormviewer.org/freetype-2.3.9.220141015-windows-220141015.tar.bz2 - - name - windows - windows64 archive hash - c5d76132e28039d1785a1719594b8418 + 2c2151b439cf92e03d9573dddbbdd3b6 url - http://3p.firestormviewer.org/freetype-2.3.9.220141018-windows64-220141018.tar.bz2 + http://3p.firestormviewer.org/freetype-2.3.9.232991153-windows64-232991153.tar.bz2 name windows64 + license + FreeType + license_file + LICENSES/freetype.txt + copyright + Copyright 2006, 2007, 2008, 2009, 2010 by David Turner, Robert Wilhelm, and Werner Lemberg. version - 2.4.4.563848 + 2.4.4.4f739fa + name + freetype + description + Font rendering library glext - copyright - Copyright (c) 2007-2010 The Khronos Group Inc. - description - glext headers define function prototypes and constants for OpenGL extensions - license - Copyright (c) 2007-2010 The Khronos Group Inc. - license_file - LICENSES/glext.txt - name - glext - platforms - - darwin64 - - archive - - hash - 1bd3214ac23474ea4c869e386970a1be - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54835/510029/glext-68-darwin64-538965.tar.bz2 - - name - darwin64 - - linux64 - - archive - - hash - 12b2d643a013be8297bbbe37743abe94 - url - http://3p.firestormviewer.org/glext-68-linux64-180841554.tar.bz2 - - name - linux64 - - windows - - archive - - hash - 6a311615bce59b01cf73ee65012a9b38 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54951/511711/glext-68-windows-538965.tar.bz2 - - name - windows - - windows64 - - archive - - hash - daf619dab1cf7518af6532b18800c4b0 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54924/511490/glext-68-windows64-538965.tar.bz2 - - name - windows64 - - - version - 68 - - glh_linear - - copyright - Copyright (c) 2000 Cass Everitt - description - glh - is a platform-indepenedent C++ OpenGL helper library - license - BSD - license_file - LICENSES/glh-linear.txt - name - glh_linear platforms common @@ -1319,29 +1101,63 @@ archive hash - dce3f3c01fddb400cb143c3283fe9259 + 34af0a90a3015b7e7ec2486090bc4ce6ee5be758 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82754/775367/glh_linear-0.0.0-common-560278.tar.bz2 + https://github.com/secondlife/3p-glext/releases/download/v68-af397ee/glext-68-common-af397ee.tar.zst name common - version - 0.0.0 - - googlemock - + license + Copyright (c) 2007-2010 The Khronos Group Inc. + license_file + LICENSES/glext.txt copyright - Copyright 2008, Google Inc. + Copyright (c) 2007-2010 The Khronos Group Inc. + version + 68 + name + glext description - a library for writing and using C++ mock classes + glext headers define function prototypes and constants for OpenGL extensions + + glh_linear + + platforms + + common + + archive + + hash + 6604c1cca515d287e697997a8d5593d1cae172a9 + hash_algorithm + sha1 + url + https://github.com/secondlife/3p-glh_linear/releases/download/v1.0.1-dev2.g3253ed7-3253ed7/glh_linear-common-None.tar.zst + + name + common + + license BSD license_file - LICENSES/gmock.txt + LICENSES/glh-linear.txt + copyright + Copyright (c) 2000 Cass Everitt + version + None name - googlemock + glh_linear + description + glh - is a platform-indepenedent C++ OpenGL helper library + + googlemock + platforms darwin64 @@ -1349,9 +1165,11 @@ archive hash - 11d0794582e91a57f6524ad345f2399d + c016d7333a3ded88c060119b4e3a5847015a8711 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87791/805924/googlemock-1.7.0.563853-darwin64-563853.tar.bz2 + https://github.com/secondlife/3p-googlemock/releases/download/v1.7.0.77bba00/googlemock-1.7.0.77bba00-darwin64-77bba00.tar.zst name darwin64 @@ -1368,44 +1186,36 @@ name linux64 - windows - - archive - - hash - 7d267050970ec6e28749178597bc8af0 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87793/805930/googlemock-1.7.0.563853-windows-563853.tar.bz2 - - name - windows - windows64 archive hash - 27638c692f0ec6121e54bf75f2d45e49 + df51dff9a820fc96c18c2bc00b64467e541633a5 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87792/805936/googlemock-1.7.0.563853-windows64-563853.tar.bz2 + https://github.com/secondlife/3p-googlemock/releases/download/v1.7.0.77bba00/googlemock-1.7.0.77bba00-windows64-77bba00.tar.zst name windows64 + license + BSD + license_file + LICENSES/gmock.txt + copyright + Copyright 2008, Google Inc. version - 1.7.0.563853 + 1.7.0.77bba00 + name + googlemock + description + a library for writing and using C++ mock classes gstreamer - copyright - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - license - LGPL - license_file - LICENSES/gstreamer.txt - name - gstreamer platforms linux64 @@ -1421,31 +1231,33 @@ linux64 + license + LGPL + license_file + LICENSES/gstreamer.txt + copyright + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> version 0.10.6.314267 + name + gstreamer havok-source - copyright - Uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details. - description - Havok source code for libs and demos - license - havok - license_file - LICENSES/havok.txt - name - havok-source platforms darwin64 archive + creds + github hash - ba229348c1d9d58519cd854ff9d8ef3d + a193ff65d6db48626d65d96c6124c6efca85e8ec + hash_algorithm + sha1 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/55213/512968/havok_source-2012.1-2-darwin64-539117.tar.bz2 + https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/108912596 name darwin64 @@ -1462,44 +1274,38 @@ name linux64 - windows - - archive - - hash - 4ff2af85106907acb171bb1e38a3757e - url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/55214/512993/havok_source-2012.1-2-windows-539117.tar.bz2 - - name - windows - windows64 archive + creds + github hash - bcaf4631ea10f7d09eecb73e8f5bef6c + ebfb82b6143874e7938b9d1e8a70d0a2e28aa818 + hash_algorithm + sha1 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/55212/512962/havok_source-2012.1-2-windows64-539117.tar.bz2 + https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/108912599 name windows64 + license + havok + license_file + LICENSES/havok.txt + copyright + Uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details. version 2012.1-2 + name + havok-source + description + Havok source code for libs and demos jpegencoderbasic - copyright - Andreas Ritter, www.bytestrom.eu, 11/2009 - license - NONE - license_file - LICENSES/JPEG_ENCODER_BASIC_LICENSE.txt - name - jpegencoderbasic platforms darwin64 @@ -1507,9 +1313,11 @@ archive hash - c3c9e60bdc12b35e0e3d6b67d5635f60 + f271809c0d4244128fb52a71226a4d7674e14e0a + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89304/815407/jpegencoderbasic-1.0-darwin64-564842.tar.bz2 + https://github.com/secondlife/3p-jpeg_encoder_js/releases/download/v1.0-9165e47/jpegencoderbasic-1.0-darwin64-9165e47.tar.zst name darwin64 @@ -1526,46 +1334,34 @@ name linux64 - windows - - archive - - hash - 0a376676dbb43fdd0c81ffdfbc5e6f81 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89308/815432/jpegencoderbasic-1.0-windows-564842.tar.bz2 - - name - windows - windows64 archive hash - e70898903475d8ac2e81ff33278fc987 + 8ec22e9fc8734ba3d1826f4b88171a6017cc8676 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89309/815433/jpegencoderbasic-1.0-windows64-564842.tar.bz2 + https://github.com/secondlife/3p-jpeg_encoder_js/releases/download/v1.0-9165e47/jpegencoderbasic-1.0-windows64-9165e47.tar.zst name windows64 + license + NONE + license_file + LICENSES/JPEG_ENCODER_BASIC_LICENSE.txt + copyright + Andreas Ritter, www.bytestrom.eu, 11/2009 version 1.0 + name + jpegencoderbasic jpeglib - copyright - Copyright (C) 1991-2011, Thomas G. Lane, Guido Vollbeding. - description - JPEG encoding, decoding library - license - jpeglib - license_file - LICENSES/jpeglib.txt - name - jpeglib platforms darwin64 @@ -1573,9 +1369,11 @@ archive hash - 3f2e34e3a2dac8eea957cad143a71dc5 + 776d114aa1e3455bb13deaacd756deb07b53ecbe + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54847/510113/jpeglib-8c.538977-darwin64-538977.tar.bz2 + https://github.com/secondlife/3p-jpeglib/releases/download/v8c.7846234/jpeglib-8c.7846234-darwin64-7846234.tar.zst name darwin64 @@ -1592,46 +1390,36 @@ name linux64 - windows - - archive - - hash - c8dee00ef13af40ec68becc25830e195 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54992/511854/jpeglib-8c.538977-windows-538977.tar.bz2 - - name - windows - windows64 archive hash - 6f40620e86f3c9b91b6b5fe3c81776fc + d50fcac69eeb9404638da07db96ee3e1191ecf93 + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54991/511847/jpeglib-8c.538977-windows64-538977.tar.bz2 + https://github.com/secondlife/3p-jpeglib/releases/download/v8c.7846234/jpeglib-8c.7846234-windows64-7846234.tar.zst name windows64 + license + jpeglib + license_file + LICENSES/jpeglib.txt + copyright + Copyright (C) 1991-2011, Thomas G. Lane, Guido Vollbeding. version - 8c.538977 + 8c.7846234 + name + jpeglib + description + JPEG encoding, decoding library jsoncpp - copyright - Copyright (c) 2007-2010 Baptiste Lepilleur - description - jsoncpp is an implementation of a JSON (http://json.org) reader and writer in C++. - license - public domain - license_file - LICENSES/jsoncpp.txt - name - jsoncpp platforms darwin64 @@ -1639,9 +1427,11 @@ archive hash - 87d32aaac4183590c96edd0b6d9bf3e4 + 07761ab01e61d5d6b40d303ffafd85ec055ec9f7 + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54846/510106/jsoncpp-0.5.0.538976-darwin64-538976.tar.bz2 + https://github.com/secondlife/3p-jsoncpp/releases/download/v0.5.0.bc46e62/jsoncpp-0.5.0.bc46e62-darwin64-bc46e62.tar.zst name darwin64 @@ -1658,52 +1448,44 @@ name linux64 - windows - - archive - - hash - b73d9addab278eacc100bd312ab6ec5c - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54990/511840/jsoncpp-0.5.0.538976-windows-538976.tar.bz2 - - name - windows - windows64 archive hash - 1b9ac5708cc526d2c5358ef0a427109d + 500e455b210d6bc4985185cef2472987ed3034bf + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54989/511833/jsoncpp-0.5.0.538976-windows64-538976.tar.bz2 + https://github.com/secondlife/3p-jsoncpp/releases/download/v0.5.0.bc46e62/jsoncpp-0.5.0.bc46e62-windows64-bc46e62.tar.zst name windows64 + license + public domain + license_file + LICENSES/jsoncpp.txt + copyright + Copyright (c) 2007-2010 Baptiste Lepilleur version - 0.5.0.538976 + 0.5.0.bc46e62 + name + jsoncpp + description + jsoncpp is an implementation of a JSON (http://json.org) reader and writer in C++. kdu - copyright - Kakadu software - description - JPEG2000 library by Kakadu - license - Kakadu - license_file - LICENSES/kdu.txt - name - kdu platforms darwin64 archive + creds + github hash 3142fccbcc0e2c5a019e3177ef364290 url @@ -1716,6 +1498,8 @@ archive + creds + github hash e13d6fe708613bb3a5d630c4cdd97a3b url @@ -1724,22 +1508,12 @@ name linux64 - windows - - archive - - hash - 4aa7df19125708580055b42190d2511e - url - file:///c:/cygwin/opt/firestorm/kdu-8.3-windows-232392239.tar.bz2 - - name - windows - windows64 archive + creds + github hash 4aa7df19125708580055b42190d2511e url @@ -1749,21 +1523,21 @@ windows64 + license + Kakadu + license_file + LICENSES/kdu.txt + copyright + Kakadu software version 8.3 + name + kdu + description + JPEG2000 library by Kakadu libhunspell - copyright - See hunspell.txt - description - Spell checking library - license - LGPL - license_file - LICENSES/hunspell.txt - name - libhunspell platforms darwin64 @@ -1771,9 +1545,11 @@ archive hash - 2021ea3a19b81c82993e733709683303 + d5757ab84d934fa358f299ab91e2e297beaa3dac + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76371/727419/libhunspell-1.3.2.555528-darwin64-555528.tar.bz2 + https://github.com/secondlife/3p-libhunspell/releases/download/v1.3.2.650fb94/libhunspell-1.3.2.650fb94-darwin64-650fb94.tar.zst name darwin64 @@ -1790,46 +1566,36 @@ name linux64 - windows - - archive - - hash - 2253ec09136cc7c208481030d78d9dd7 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76369/727412/libhunspell-1.3.2.555528-windows-555528.tar.bz2 - - name - windows - windows64 archive hash - 858d1708f6b3a74738a3d57a5387e20f + c1be4a79b20435030b2e0e01b582c61b462c8376 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76370/727413/libhunspell-1.3.2.555528-windows64-555528.tar.bz2 + https://github.com/secondlife/3p-libhunspell/releases/download/v1.3.2.650fb94/libhunspell-1.3.2.650fb94-windows64-650fb94.tar.zst name windows64 + license + LGPL + license_file + LICENSES/hunspell.txt + copyright + See hunspell.txt version - 1.3.2.555528 + 1.3.2.650fb94 + name + libhunspell + description + Spell checking library libndofdev - copyright - Copyright (c) 2007, 3Dconnexion, Inc. - All rights reserved. - description - 3DConnexion SDK - license - BSD - license_file - LICENSES/libndofdev.txt - name - libndofdev platforms darwin64 @@ -1837,53 +1603,45 @@ archive hash - a487fff84208a45844602c4a1f68c974 + e3dd320c90e67e0c80caf4d4df23257b0196dfb6 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76356/727333/libndofdev-0.1.555523-darwin64-555523.tar.bz2 + https://github.com/secondlife/3p-libndofdev/releases/download/v0.1.8e9edc7/libndofdev-0.1.8e9edc7-darwin64-8e9edc7.tar.zst name darwin64 - windows - - archive - - hash - 4c839555bf0ed9ae60ffc3f8a7c96f9b - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76354/727340/libndofdev-0.1.555523-windows-555523.tar.bz2 - - name - windows - windows64 archive hash - cbc033ae3b034b992b59f6de1034247c + ae9d554e8839f42230b8ed6c850445d54654a38f + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76355/727341/libndofdev-0.1.555523-windows64-555523.tar.bz2 + https://github.com/secondlife/3p-libndofdev/releases/download/v0.1.8e9edc7/libndofdev-0.1.8e9edc7-windows64-8e9edc7.tar.zst name windows64 + license + BSD + license_file + LICENSES/libndofdev.txt + copyright + Copyright (c) 2007, 3Dconnexion, Inc. - All rights reserved. version - 0.1.555523 + 0.1.8e9edc7 + name + libndofdev + description + 3DConnexion SDK libpng - copyright - Copyright (c) 1995-2022 The PNG Reference Library Authors. - description - PNG Reference library - license - libpng - license_file - LICENSES/libpng.txt - name - libpng platforms darwin64 @@ -1891,9 +1649,11 @@ archive hash - 7a0059748d0b8733f2f9ce434cf604b8 + fea8f0684a4ed0a73343651948b13049a135a92a + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/107514/937867/libpng-1.6.38.576621-darwin64-576621.tar.bz2 + https://github.com/secondlife/3p-libpng/releases/download/v1.6.38-ca06e99/libpng-1.6.38-ca06e99-darwin64-ca06e99.tar.zst name darwin64 @@ -1910,46 +1670,36 @@ name linux64 - windows - - archive - - hash - 3112013186ad60b0fc270a398d4dd499 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/107513/937823/libpng-1.6.38.576621-windows-576621.tar.bz2 - - name - windows - windows64 archive hash - 7c6bfcdb0d6162587cdbc436f595dd02 + b91c116a1fda2377954355e56517634db0137699 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/107512/937822/libpng-1.6.38.576621-windows64-576621.tar.bz2 + https://github.com/secondlife/3p-libpng/releases/download/v1.6.38-ca06e99/libpng-1.6.38-ca06e99-windows64-ca06e99.tar.zst name windows64 + license + libpng + license_file + LICENSES/libpng.txt + copyright + Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson version - 1.6.38.576621 + 1.6.38-ca06e99 + name + libpng + description + PNG Reference library libuuid - copyright - Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/> - description - OSSP uuid is a ISO-C:1999 application programming interface (API) and corresponding command line interface (CLI) for the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique Identifier (UUID). - license - UUID - license_file - LICENSES/uuid.txt - name - libuuid platforms linux64 @@ -1965,21 +1715,21 @@ linux64 + license + UUID + license_file + LICENSES/uuid.txt + copyright + Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/> version 1.6.2 + name + libuuid + description + OSSP uuid is a ISO-C:1999 application programming interface (API) and corresponding command line interface (CLI) for the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique Identifier (UUID). libxml2 - copyright - Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. - description - Libxml2 is the XML C parser and toolkit developed for the Gnome project. - license - mit - license_file - LICENSES/libxml2.txt - name - libxml2 platforms darwin64 @@ -1987,9 +1737,11 @@ archive hash - 6f37dd6c4a5174f358b6cc5d953f121b + 2c46547d9dc83c47f41eacc7e5092affa72f3eee + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87768/805766/libxml2-2.9.4.563845-darwin64-563845.tar.bz2 + https://github.com/secondlife/3p-libxml2/releases/download/v2.9.4.7476681/libxml2-2.9.4.7476681-darwin64-7476681.tar.zst name darwin64 @@ -2006,46 +1758,36 @@ name linux64 - windows - - archive - - hash - fd85d3aa13fbdfd1f1ace587e95ef151 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87773/805797/libxml2-2.9.4.563845-windows-563845.tar.bz2 - - name - windows - windows64 archive hash - d231d36c3b8942e0259aa2d9fcaa3b7e + 7e506d26f8cb6f205146e41d74095e7e27087e84 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87772/805795/libxml2-2.9.4.563845-windows64-563845.tar.bz2 + https://github.com/secondlife/3p-libxml2/releases/download/v2.9.4.7476681/libxml2-2.9.4.7476681-windows64-7476681.tar.zst name windows64 + license + mit + license_file + LICENSES/libxml2.txt + copyright + Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. version - 2.9.4.563845 + 2.9.4.7476681 + name + libxml2 + description + Libxml2 is the XML C parser and toolkit developed for the Gnome project. llappearance_utility - copyright - Copyright (c) 2000-2012, Linden Research, Inc. - description - Linden Lab appearance utility for server-side avatar baking services. - license - Proprietary - license_file - LICENSES/llappearanceutility.txt - name - llappearance_utility platforms linux @@ -2061,20 +1803,21 @@ linux + license + Proprietary + license_file + LICENSES/llappearanceutility.txt + copyright + Copyright (c) 2000-2012, Linden Research, Inc. version 0.0.1 + name + llappearance_utility + description + Linden Lab appearance utility for server-side avatar baking services. llca - copyright - Copyright (c) 2016, Linden Research, Inc.; data provided by the Mozilla NSS Project. - - license - mit - license_file - LICENSES/ca-license.txt - name - llca platforms common @@ -2082,39 +1825,44 @@ archive hash - d6e7ab8483c348f223fd24028e27a52f + e50ea94bbaa4ff41bf53b84b7192df1a694c5337 hash_algorithm - md5 + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/93933/844890/llca-202202010217.567974-common-567974.tar.bz2 + https://github.com/secondlife/llca/releases/download/v202310121525.0-d22bd98/llca-202310121530.0-common-d22bd98.tar.zst name common + license + mit + license_file + LICENSES/ca-license.txt + copyright + Copyright (c) 2016, Linden Research, Inc.; data provided by the Mozilla NSS Project. + version - 202202010217.567974 + 202310121530.0 + name + llca llphysicsextensions_source - copyright - Copyright (c) 2010, Linden Research, Inc. - license - internal - license_file - LICENSES/llphysicsextensions.txt - name - llphysicsextensions_source platforms darwin64 archive + creds + github hash - e51c6f5dfd76eb148348a44ff57e66c2 + 48bca5d0233d1e724a59f649a2c6c7ac5f40ec3c + hash_algorithm + sha1 url - https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/104810/918016/llphysicsextensions_source-1.0.575107-darwin64-575107.tar.bz2 + https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/117009335 name darwin64 @@ -2123,40 +1871,48 @@ archive + creds + github hash - c1b43e99c5ddccc18b0e9cb288bf75e1 + 39f52d0350e130f41c5c758f7cb94e87b962c223 + hash_algorithm + sha1 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/4721/14828/llphysicsextensions_source-1.0.504710-linux64-504710.tar.bz2 + https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/117009336 name linux64 - windows + windows64 archive + creds + github hash - dbbe4cc568ac149d862e421cdda4dd48 + 7b5e645fb7eb399abbea63bd21e8063bbb32a911 + hash_algorithm + sha1 url - https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/104809/918011/llphysicsextensions_source-1.0.575107-windows-575107.tar.bz2 + https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/117009339 name - windows + windows64 - version - 1.0.565768 - - llphysicsextensions_stub - - copyright - Copyright (c) 2010, Linden Research, Inc. license internal license_file LICENSES/llphysicsextensions.txt + copyright + Copyright (c) 2010, Linden Research, Inc. + version + 1.0.565768 name - llphysicsextensions_stub + llphysicsextensions_source + + llphysicsextensions_stub + platforms darwin64 @@ -2196,19 +1952,19 @@ windows - version - 1.0.542456 - - llphysicsextensions_tpv - - copyright - Copyright (c) 2010, Linden Research, Inc. license internal license_file - LICENSES/HavokSublicense.pdf + LICENSES/llphysicsextensions.txt + copyright + Copyright (c) 2010, Linden Research, Inc. + version + 1.0.542456 name - llphysicsextensions_tpv + llphysicsextensions_stub + + llphysicsextensions_tpv + platforms darwin64 @@ -2235,18 +1991,6 @@ name linux64 - windows - - archive - - hash - 7638421f5df1fef9f98d608be8d8de14 - url - file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.577418-windows-577418.tar.bz2 - - name - windows - windows64 archive @@ -2260,17 +2004,19 @@ windows + license + internal + license_file + LICENSES/HavokSublicense.pdf + copyright + Copyright (c) 2010, Linden Research, Inc. version 1.0.577418 + name + llphysicsextensions_tpv mesa - license - mesa - license_file - LICENSES/mesa.txt - name - mesa platforms linux @@ -2286,23 +2032,17 @@ linux + license + mesa + license_file + LICENSES/mesa.txt version 7.11.1.297294 + name + mesa meshoptimizer - canonical_repo - https://bitbucket.org/lindenlab/3p-meshoptimizer - copyright - Copyright (c) 2016-2021 Arseny Kapoulkine - description - Meshoptimizer. Mesh optimization library. - license - meshoptimizer - license_file - LICENSES/meshoptimizer.txt - name - meshoptimizer platforms darwin64 @@ -2310,9 +2050,11 @@ archive hash - 30bc37db57bbd87c4b5f62634964242a + 3bf88febd23656327a4ee2a3ebe99cae4b15573e + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/84218/784918/meshoptimizer-0.16.561408-darwin64-561408.tar.bz2 + https://github.com/secondlife/3p-meshoptimizer/releases/download/v160-032f20a/meshoptimizer-160-darwin64-032f20a.tar.zst name darwin64 @@ -2329,48 +2071,38 @@ name linux64 - windows - - archive - - hash - ca3684bcf0447746cd2844e94f6d1fc7 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/84219/784924/meshoptimizer-0.16.561408-windows-561408.tar.bz2 - - name - windows - windows64 archive hash - aef28c089d20f69d13c9c3e113fb3895 + 13c0a33d9c49cc07b354527c7ef992d33f854c59 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/84220/784931/meshoptimizer-0.16.561408-windows64-561408.tar.bz2 + https://github.com/secondlife/3p-meshoptimizer/releases/download/v160-032f20a/meshoptimizer-160-windows64-032f20a.tar.zst name windows64 + license + meshoptimizer + license_file + LICENSES/meshoptimizer.txt + copyright + Copyright (c) 2016-2021 Arseny Kapoulkine version - 0.16.561408 + 160 + name + meshoptimizer + canonical_repo + https://bitbucket.org/lindenlab/3p-meshoptimizer + description + Meshoptimizer. Mesh optimization library. minizip-ng - canonical_repo - https://bitbucket.org/lindenlab/3p-minizip-ng - copyright - This project uses the zlib license. Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler - description - minizip-ng is a zip manipulation library. Based on work of Gilles Vollant. - license - minizip-ng - license_file - LICENSES/minizip-ng.txt - name - minizip-ng platforms darwin64 @@ -2378,9 +2110,11 @@ archive hash - 843587a078102d86d90054d03354684d + 303fa93a0fd6c636a65fd9d5d53beceb84752b0e + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95876/856095/minizip_ng-3.0.2.569217-darwin64-569217.tar.bz2 + https://github.com/secondlife/3p-minizip-ng/releases/download/v3.0.2.3e9876e/minizip_ng-3.0.2.3e9876e-darwin64-3e9876e.tar.zst name darwin64 @@ -2397,47 +2131,38 @@ name linux64 - windows - - archive - - hash - 26dc254f443ca9c5509547d7fbd9d8e5 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95878/856107/minizip_ng-3.0.2.569217-windows-569217.tar.bz2 - - name - windows - windows64 archive hash - e9241fa325f4014995b62193321e7a1c + 5dc469172ba4c6015d5b771e516bc88a65d769eb + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95877/856106/minizip_ng-3.0.2.569217-windows64-569217.tar.bz2 + https://github.com/secondlife/3p-minizip-ng/releases/download/v3.0.2.3e9876e/minizip_ng-3.0.2.3e9876e-windows64-3e9876e.tar.zst name windows64 + license + minizip-ng + license_file + LICENSES/minizip-ng.txt + copyright + This project uses the zlib license. Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler version - 3.0.2.569217 + 3.0.2.3e9876e + name + minizip-ng + canonical_repo + https://bitbucket.org/lindenlab/3p-minizip-ng + description + minizip-ng is a zip manipulation library. Based on work of Gilles Vollant. nghttp2 - copyright - Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa -Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors - description - Library providing HTTP 2 support for libcurl - license - MIT - license_file - LICENSES/nghttp2.txt - name - nghttp2 platforms darwin64 @@ -2445,9 +2170,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - e4f784d8a035c51921a1562ca7a1bab6 + fff611030a34e78b3a88168f64e4e33aef117bc3 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76357/727350/nghttp2-1.40.0.555524-darwin64-555524.tar.bz2 + https://github.com/secondlife/3p-nghttp2/releases/download/v1.40.0.b1526c6/nghttp2-1.40.0.b1526c6-darwin64-b1526c6.tar.zst name darwin64 @@ -2464,90 +2191,71 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - af05aa2994c9845308fecd094b7b2d25 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76359/727360/nghttp2-1.40.0.555524-windows-555524.tar.bz2 - - name - windows - windows64 archive hash - 5a55cede40eef16b9d1e47c418a2b77a + 05aad7759519719a54a6100fddd35b69e57f2386 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76358/727359/nghttp2-1.40.0.555524-windows64-555524.tar.bz2 + https://github.com/secondlife/3p-nghttp2/releases/download/v1.40.0.b1526c6/nghttp2-1.40.0.b1526c6-windows64-b1526c6.tar.zst name windows64 + license + MIT + license_file + LICENSES/nghttp2.txt + copyright + Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa +Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors + version + 1.40.0.b1526c6 + name + nghttp2 + description + Library providing HTTP 2 support for libcurl source_type hg - version - 1.40.0.555524 nvapi - copyright - Copyright © 2012 NVIDIA Corporation. All rights reserved. - description - NVAPI provides an interface to NVIDIA devices. + platforms + + windows64 + + archive + + hash + 1ebe715fc1096198e343c41d50654c11509cdbba + hash_algorithm + sha1 + url + https://github.com/secondlife/3p-nvapi/releases/download/v352.aac0e19/nvapi-352.aac0e19-windows64-aac0e19.tar.zst + + name + windows64 + + license NVIDIA Corporation Software License Agreement – NVAPI SDK license_file LICENSES/NVAPI_SDK_License_Agreement.pdf + copyright + Copyright © 2012 NVIDIA Corporation. All rights reserved. + version + 352.aac0e19 name nvapi - platforms - - windows - - archive - - hash - 4305515ad326c911a390388366a9107b - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54947/511704/nvapi-352.539058-windows-539058.tar.bz2 - - name - windows - - windows64 - - archive - - hash - 25c8ac919f24b8952653d38ec43640e5 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54945/511697/nvapi-352.539058-windows64-539058.tar.bz2 - - name - windows64 - - - version - 352.539058 + description + NVAPI provides an interface to NVIDIA devices. ogg_vorbis - copyright - Copyright (c) 2002, Xiph.org Foundation - description - Audio encoding library - license - ogg-vorbis - license_file - LICENSES/ogg-vorbis.txt - name - ogg_vorbis platforms darwin64 @@ -2555,9 +2263,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - a066f1d12caee1d87fc72f48169f9677 + ad0dd0f608b868cc44c225ee48e114239fca2807 + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54841/510071/ogg_vorbis-1.3.3-1.3.6.538971-darwin64-538971.tar.bz2 + https://github.com/secondlife/3p-ogg_vorbis/releases/download/v1.3.3-1.3.6.e4101b6/ogg_vorbis-1.3.3-1.3.6.e4101b6-darwin64-e4101b6.tar.zst name darwin64 @@ -2574,46 +2284,48 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - d4b8ed3fd679a2b484d2d1a66c063908 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54981/511789/ogg_vorbis-1.3.3-1.3.6.538971-windows-538971.tar.bz2 - - name - windows - windows64 archive hash - ec4a657fe639bb458ee5132062146a7a + 2e73a0a5659c9a09eba2f94619aa5c23c7cc3937 + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54980/511782/ogg_vorbis-1.3.3-1.3.6.538971-windows64-538971.tar.bz2 + https://github.com/secondlife/3p-ogg_vorbis/releases/download/v1.3.3-1.3.6.e4101b6/ogg_vorbis-1.3.3-1.3.6.e4101b6-windows64-e4101b6.tar.zst name windows64 + license + ogg-vorbis + license_file + LICENSES/ogg-vorbis.txt + copyright + Copyright (c) 2002, Xiph.org Foundation version - 1.3.3-1.3.6.538971 + 1.3.3-1.3.6.e4101b6 + name + ogg_vorbis + description + Audio encoding library open-libndofdev - copyright - Copyright (c) 2008, Jan Ciger (jan.ciger (at) gmail.com) - description - Open Source replacement for 3DConnection SDK license BSD license_file LICENSES/libndofdev.txt + copyright + Copyright (c) 2008, Jan Ciger (jan.ciger (at) gmail.com) + version + 0.3 name open-libndofdev + description + Open Source replacement for 3DConnection SDK platforms linux64 @@ -2634,16 +2346,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors openal - copyright - Creative Labs - description - OpenAL is a cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applications. - license - lgpl - license_file - LICENSES/openal.txt - name - openal platforms linux64 @@ -2658,48 +2360,50 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - d9c86f79a6bb56a670e2801c33fd2dd1 - hash_algorithm - md5 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openal/rev/314223/arch/CYGWIN/installer/openal-1.12.854-1.1.0.314223-windows-314223.tar.bz2 - - name - windows - windows64 archive hash - e0fdd9394a8cd8c6360b922f6f237e57 + 6ae3b5310eb1988741bc55416681ca9d64f76f85 + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openal/rev/314223/arch/CYGWIN/installer/openal-1.12.854-1.1.0.314223-windows64-314223.tar.bz2 + https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-18e315c/openal-1.23.1-windows64-18e315c.tar.zst name windows64 + darwin64 + + archive + + hash + 4edaef5f03a1122eae8467c4a04d9caccaaaf847 + hash_algorithm + sha1 + url + https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-18e315c/openal-1.23.1-darwin64-18e315c.tar.zst + + name + darwin64 + + license + LGPL2 + license_file + LICENSES/openal-soft.txt + copyright + Copyright (C) 1999-2007 by authors. version - 1.12.854-1.1.0.314223 + 1.23.1 + name + openal + description + OpenAL Soft is a software implementation of the OpenAL 3D audio API. openjpeg - copyright - Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium; Copyright (c) 2002-2007, Professor Benoit Macq; Copyright (c) 2001-2003, David Janssens; Copyright (c) 2002-2003, Yannick Verschueren; Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe; Copyright (c) 2005, Herve Drolon, FreeImage Team; Copyright (c) 2006-2007, Parvatha Elangovan; Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s.fr>; Copyright (c) 2010-2011, Kaori Hagihara; Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France; Copyright (c) 2012, CS Systemes d'Information, France; - description - The OpenJPEG library is an open-source JPEG 2000 codec written in C language. - license - BSD - license_file - LICENSES/openjpeg.txt - name - openjpeg platforms darwin64 @@ -2707,9 +2411,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 8114c6a7e499ea20d325db0de08ce30a + c16deaf773cb2a5d001732122ee3ec74db1dceeb + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/105469/923024/openjpeg-2.5.0.575496-darwin64-575496.tar.bz2 + https://github.com/secondlife/3p-openjpeg/releases/download/v2.5.0.ea12248/openjpeg-2.5.0.ea12248-darwin64-ea12248.tar.zst name darwin64 @@ -2726,46 +2432,36 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - edc9388870d951632a6d595792293e05 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/105472/923036/openjpeg-2.5.0.575496-windows-575496.tar.bz2 - - name - windows - windows64 archive hash - b95f0732f2388ebb0ddf33d4a30e0ff1 + 2abf9535adf21ebdf2295f8a680300432abe6280 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/105471/923037/openjpeg-2.5.0.575496-windows64-575496.tar.bz2 + https://github.com/secondlife/3p-openjpeg/releases/download/v2.5.0.ea12248/openjpeg-2.5.0.ea12248-windows64-ea12248.tar.zst name windows64 + license + BSD + license_file + LICENSES/openjpeg.txt + copyright + Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium; Copyright (c) 2002-2007, Professor Benoit Macq; Copyright (c) 2001-2003, David Janssens; Copyright (c) 2002-2003, Yannick Verschueren; Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe; Copyright (c) 2005, Herve Drolon, FreeImage Team; Copyright (c) 2006-2007, Parvatha Elangovan; Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s.fr>; Copyright (c) 2010-2011, Kaori Hagihara; Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France; Copyright (c) 2012, CS Systemes d'Information, France; version - 2.5.0.575496 + 2.5.0.ea12248 + name + openjpeg + description + The OpenJPEG library is an open-source JPEG 2000 codec written in C language. openssl - copyright - Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved; Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - description - Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) Library - license - openssl - license_file - LICENSES/openssl.txt - name - openssl platforms darwin64 @@ -2773,9 +2469,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 142d0ad85d0ee4fbb673c9f9e414fbdd + b286e4a10cf6b1b2710b85ff96ffc0e41fd5fde8 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87769/805772/openssl-1.1.1l.563846-darwin64-563846.tar.bz2 + https://github.com/secondlife/3p-openssl/releases/download/v1.1.1q.de53f55/openssl-1.1.1q.de53f55-darwin64-de53f55.tar.zst name darwin64 @@ -2792,46 +2490,36 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - 55bd833166d03f1467e2c7f24fa9143e - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87775/805841/openssl-1.1.1l.563846-windows-563846.tar.bz2 - - name - windows - windows64 archive hash - 6fefc60f68882fc6b246521b696497ab + 8bd3dea6d81de5e469b241a1b79e61efce6ecc05 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87774/805833/openssl-1.1.1l.563846-windows64-563846.tar.bz2 + https://github.com/secondlife/3p-openssl/releases/download/v1.1.1q.de53f55/openssl-1.1.1q.de53f55-windows64-de53f55.tar.zst name windows64 + license + openssl + license_file + LICENSES/openssl.txt + copyright + Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved; Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) version - 1.1.1l.563846 + 1.1.1q.de53f55 + name + openssl + description + Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) Library pcre - copyright - Copyright (c) 1997-2014 University of Cambridge; Copyright(c) 2009-2014 Zoltan Herczeg; Copyright (c) 2007-2012, Google Inc. - description - PCRE Perl-compatible regular expression library - license - bsd - license_file - LICENSES/pcre-license.txt - name - pcre platforms darwin64 @@ -2839,9 +2527,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - d8c0f97fe5abef43e72b6f84aba698b2 + b372d37596474043a62568e569b0ce155192f484 + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54856/510176/pcre-8.35.538986-darwin64-538986.tar.bz2 + https://github.com/secondlife/3p-pcre/releases/download/v8.35.979fd86/pcre-8.35.979fd86-darwin64-979fd86.tar.zst name darwin64 @@ -2858,46 +2548,36 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - 3660db45793df3050b63920bfb7d8479 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55041/512002/pcre-8.35.538986-windows-538986.tar.bz2 - - name - windows - windows64 archive hash - cdee8e8b48a66266550bf279c40abc22 + 166564afb60a7536a038fae80e2fc9a41d6dbccb + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55038/511992/pcre-8.35.538986-windows64-538986.tar.bz2 + https://github.com/secondlife/3p-pcre/releases/download/v8.35.979fd86/pcre-8.35.979fd86-windows64-979fd86.tar.zst name windows64 + license + bsd + license_file + LICENSES/pcre-license.txt + copyright + Copyright (c) 1997-2014 University of Cambridge; Copyright(c) 2009-2014 Zoltan Herczeg; Copyright (c) 2007-2012, Google Inc. version - 8.35.538986 + 8.35.979fd86 + name + pcre + description + PCRE Perl-compatible regular expression library slvoice - copyright - 2010 Vivox, including audio coding using Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C) - description - Vivox SDK components - license - Mixed - license_file - LICENSES/vivox_licenses.txt - name - slvoice platforms darwin64 @@ -2924,18 +2604,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - 6e0ed41653955afe8eeb8945776cf07b - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/98683/871560/slvoice-4.10.0000.32327.5fc3fe7c.571099-windows-571099.tar.bz2 - - name - windows - windows64 archive @@ -2949,19 +2617,21 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors windows64 + license + Mixed + license_file + LICENSES/vivox_licenses.txt + copyright + 2010 Vivox, including audio coding using Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C) version 4.10.0000.32327.5fc3fe7c.571099 + name + slvoice + description + Vivox SDK components threejs - copyright - Copyright © 2010-2021 three.js authors - license - MIT - license_file - LICENSES/THREEJS_LICENSE.txt - name - threejs platforms darwin64 @@ -2969,9 +2639,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 24440e8219e59d81423b68d3be381fef + cfed00d8ea7265c035c2d86a234b28efb0b23756 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89305/815412/threejs-0.132.2-darwin64-564843.tar.bz2 + https://github.com/secondlife/3p-three_js/releases/download/v0.132.2-b8f6746/threejs-0.132.2-darwin64-b8f6746.tar.zst name darwin64 @@ -2988,48 +2660,34 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - e1303fb9f2242a79aee5fd9f97726ace - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89311/815452/threejs-0.132.2-windows-564843.tar.bz2 - - name - windows - windows64 archive hash - 46edf0f55417f8ef0d33a5c007bc3644 + 4141710fccbd1ea2b3b53d00e189bdfa2ee9d441 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89310/815451/threejs-0.132.2-windows64-564843.tar.bz2 + https://github.com/secondlife/3p-three_js/releases/download/v0.132.2-b8f6746/threejs-0.132.2-windows64-b8f6746.tar.zst name windows64 + license + MIT + license_file + LICENSES/THREEJS_LICENSE.txt + copyright + Copyright © 2010-2021 three.js authors version 0.132.2 + name + threejs tracy - canonical_repo - https://bitbucket.org/lindenlab/3p-tracy - copyright - Copyright (c) 2017-2021, Bartosz Taudul (wolf@nereid.pl) - description - Tracy Profiler Library - license - bsd - license_file - LICENSES/tracy_license.txt - name - tracy platforms darwin64 @@ -3037,61 +2695,51 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - da7317e4a81609f624f84780f28b07de + b84ccb1606b3fc5b216d0123a23a4922e02b6bd8 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/86972/801630/tracy-v0.7.8.563351-darwin64-563351.tar.bz2 + https://github.com/secondlife/3p-tracy/releases/download/v0.8.1-235e98f/tracy-v0.8.1.235e98f-darwin64-235e98f.tar.zst name darwin64 - windows - - archive - - hash - 47c696cd2966c5cc3c8ba6115dd1f886 - hash_algorithm - md5 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/86973/801641/tracy-v0.7.8.563351-windows-563351.tar.bz2 - - name - windows - windows64 archive hash - b649ee6591e67d2341e886b3fc3484a7 + 54f126b85f179362cf0b6024e3cd621b53d68703 hash_algorithm - md5 + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/86974/801642/tracy-v0.7.8.563351-windows64-563351.tar.bz2 + https://github.com/secondlife/3p-tracy/releases/download/v0.8.1-235e98f/tracy-v0.8.1.235e98f-windows64-235e98f.tar.zst name windows64 + license + bsd + license_file + LICENSES/tracy_license.txt + copyright + Copyright (c) 2017-2022, Bartosz Taudul (wolf@nereid.pl) + version + v0.8.1.235e98f + name + tracy + canonical_repo + https://bitbucket.org/lindenlab/3p-tracy + description + Tracy Profiler Library source https://bitbucket.org/lindenlab/3p-tracy source_type git - version - v0.7.8.563351 tut - copyright - Copyright 2002-2006 Vladimir Dyuzhev, Copyright 2007 Denis Kononenko, Copyright 2008-2009 Michał Rzechonek - description - TUT is a small and portable unit test framework for C++. - license - bsd - license_file - LICENSES/tut.txt - name - tut platforms common @@ -3099,29 +2747,31 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 64e1c979aea2f74fe9c2d9d04573336d + 9f0bf4545f08df5381e0f39ccce3a57c6ec4b0f4 + hash_algorithm + sha1 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55001/511871/tut-2008.11.30-common-539059.tar.bz2 + https://github.com/secondlife/3p-tut/releases/download/v2008.11.30-409bce5/tut-2008.11.30-common-409bce5.tar.zst name common + license + bsd + license_file + LICENSES/tut.txt + copyright + Copyright 2002-2006 Vladimir Dyuzhev, Copyright 2007 Denis Kononenko, Copyright 2008-2009 Michał Rzechonek version 2008.11.30 + name + tut + description + TUT is a small and portable unit test framework for C++. uriparser - copyright - Copyright (C) 2007, Weijia Song <songweijia@gmail.com>, Sebastian Pipping <webmaster@hartwork.org> - description - uriparser is a strictly RFC 3986 compliant URI parsing and handling library written in C. uriparser is cross-platform, fast, supports Unicode and is licensed under the New BSD license. - license - New BSD license - license_file - LICENSES/uriparser.txt - name - uriparser platforms darwin64 @@ -3129,9 +2779,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - b97d0f6570104277de92d0d3f2d1111d + 4b6ee5113b1368ec9ff5b59e195adde370b9f585 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89474/816487/uriparser-0.9.4-darwin64-564957.tar.bz2 + https://github.com/secondlife/3p-uriparser/releases/download/v0.9.4-8fff38a/uriparser-0.9.4-darwin64-8fff38a.tar.zst name darwin64 @@ -3148,122 +2800,100 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows + windows64 archive hash - e2600c798e220cc98c1cc77341aee00d + e8b20edfc624f1d09bc83480932a9c844d47fc13 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89476/816496/uriparser-0.9.4-windows-564957.tar.bz2 + https://github.com/secondlife/3p-uriparser/releases/download/v0.9.4-8fff38a/uriparser-0.9.4-windows64-8fff38a.tar.zst name - windows + windows64 + + + license + New BSD license + license_file + LICENSES/uriparser.txt + copyright + Copyright (C) 2007, Weijia Song <songweijia@gmail.com>, Sebastian Pipping <webmaster@hartwork.org> + version + 0.9.4 + name + uriparser + description + uriparser is a strictly RFC 3986 compliant URI parsing and handling library written in C. uriparser is cross-platform, fast, supports Unicode and is licensed under the New BSD license. + + viewer-manager + + platforms + + darwin64 + + archive + + hash + d8bc8720846cfa31e23e7e1008e32ba6ad4a8322 + hash_algorithm + sha1 + url + https://github.com/secondlife/viewer-manager/releases/download/v3.0.cc7ea1e/viewer_manager-3.0.cc7ea1e-darwin64-cc7ea1e.tar.zst + + name + darwin64 + + linux64 + + archive + + hash + 228fae4ee0ce12b9d1d1b0a8ebb0bdf58ee521eb + hash_algorithm + sha1 + url + https://github.com/secondlife/viewer-manager/releases/download/v3.0.cc7ea1e/viewer_manager-3.0.cc7ea1e-linux64-cc7ea1e.tar.zst + + name + linux64 windows64 archive hash - 50d857117d31844fc8b84b07b795fd00 + ca6999b64d96d45952fe872b381db9b2abc0248c + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/89475/816497/uriparser-0.9.4-windows64-564957.tar.bz2 + https://github.com/secondlife/viewer-manager/releases/download/v3.0.cc7ea1e/viewer_manager-3.0.cc7ea1e-windows64-cc7ea1e.tar.zst name windows64 - version - 0.9.4 - - viewer-manager - - copyright - Copyright (c) 2000-2012, Linden Research, Inc. - description - Linden Lab Viewer Management Process suite. license viewerlgpl license_file LICENSE + copyright + Copyright (c) 2000-2012, Linden Research, Inc. + version + 3.0.cc7ea1e name viewer-manager - platforms - - darwin64 - - archive - - hash - a11c32c702f6df94dcdd69aabdafe40d7f25a7ae - hash_algorithm - sha1 - url - https://github.com/secondlife/viewer-manager/releases/download/v3.0.f48e635/viewer_manager-3.0-f48e635-darwin64-f48e635.tar.zst - - name - darwin64 - - linux64 - - archive - - hash - 10aa6f8a4161b32ba2de7ab37ccd693e7ee5b11d - hash_algorithm - sha1 - url - https://github.com/secondlife/viewer-manager/releases/download/v3.0.f48e635/viewer_manager-3.0-f48e635-linux64-f48e635.tar.zst - - name - linux64 - - windows - - archive - - hash - 7e086a28db17b0c086a5460e9d62f0c6584560b3 - hash_algorithm - sha1 - url - https://github.com/secondlife/viewer-manager/releases/download/v3.0-bd3aec2/viewer_manager-3.0-bd3aec2-linux64-bd3aec2.tar.zst - - name - linux64 - - windows64 - - archive - - hash - 15b7238af86d9b3a29ae4a7158ea5c1838f4252e - hash_algorithm - sha1 - url - https://github.com/secondlife/viewer-manager/releases/download/v3.0.f48e635/viewer_manager-3.0-f48e635-windows64-f48e635.tar.zst - - name - windows64 - - + description + Linden Lab Viewer Management Process suite. source https://bitbucket.org/lindenlab/vmp-standalone source_type hg - version - 3.0-f48e635 vlc-bin - copyright - Copyright (C) 1998-2016 VLC authors and VideoLAN - license - GPL2 - license_file - LICENSES/vlc.txt - name - vlc-bin platforms darwin64 @@ -3271,53 +2901,43 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 738688816ebd76958e49772712a6b972 + a26b47ab01a7e2c0add4c236886162c1135b3b79 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/90004/820701/vlc_bin-3.0.16.565299-darwin64-565299.tar.bz2 + https://github.com/secondlife/3p-vlc-bin/releases/download/v3.0.16.c219a5d/vlc_bin-3.0.16.c219a5d-darwin64-c219a5d.tar.zst name darwin64 - windows - - archive - - hash - 6801f91f3f27e626898bab90d40fc1c3 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/90005/820712/vlc_bin-3.0.16.565299-windows-565299.tar.bz2 - - name - windows - windows64 archive hash - 7f66982d6edf3c38f3493e28826d58e8 + d56002da7435bab166c88d59eeaf69fd87cd897d + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/90006/820713/vlc_bin-3.0.16.565299-windows64-565299.tar.bz2 + https://github.com/secondlife/3p-vlc-bin/releases/download/v3.0.16.c219a5d/vlc_bin-3.0.16.c219a5d-windows64-c219a5d.tar.zst name windows64 + license + GPL2 + license_file + LICENSES/vlc.txt + copyright + Copyright (C) 1998-2016 VLC authors and VideoLAN version - 3.0.16.565299 + 3.0.16.c219a5d + name + vlc-bin xmlrpc-epi - copyright - Copyright: (C) 2000 Epinions, Inc. - description - XMLRPC Library - license - xmlrpc-epi - license_file - LICENSES/xmlrpc-epi.txt - name - xmlrpc-epi platforms darwin64 @@ -3325,9 +2945,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 922a0dea32266897ed1911200438e1e1 + aa12611374876196b3ebb6bda8d419a697217b8b + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76372/727426/xmlrpc_epi-0.54.1.555529-darwin64-555529.tar.bz2 + https://github.com/secondlife/3p-xmlrpc-epi/releases/download/v0.54.1.8a05acf/xmlrpc_epi-0.54.1.8a05acf-darwin64-8a05acf.tar.zst name darwin64 @@ -3337,53 +2959,45 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 71a9c7c03a2c26cdb21fa476de485d9c + ad0c8b41ee4b4de216382bec46ee1c25962a3f12 + hash_algorithm + sha1 url - http://3p.firestormviewer.org/xmlrpc_epi-0.54.2.230940042-linux64-230940042.tar.bz2 + https://github.com/secondlife/3p-xmlrpc-epi/releases/download/v0.54.1.8a05acf/xmlrpc_epi-0.54.1.8a05acf-linux64-8a05acf.tar.zst name linux64 - windows - - archive - - hash - 34b847e6b280048465fe7c6ce67fe05c - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76374/727436/xmlrpc_epi-0.54.1.555529-windows-555529.tar.bz2 - - name - windows - windows64 archive hash - 8fbe7c4ea22bb7f23a93c73884ebb34c + e53fd38c14b8c47c7c84dead8a1b211bb8be170c + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76373/727435/xmlrpc_epi-0.54.1.555529-windows64-555529.tar.bz2 + https://github.com/secondlife/3p-xmlrpc-epi/releases/download/v0.54.1.8a05acf/xmlrpc_epi-0.54.1.8a05acf-windows64-8a05acf.tar.zst name windows64 + license + xmlrpc-epi + license_file + LICENSES/xmlrpc-epi.txt + copyright + Copyright: (C) 2000 Epinions, Inc. version - 0.54.1.555529 + 0.54.1.8a05acf + name + xmlrpc-epi + description + XMLRPC Library xxhash - copyright - Copyright 2012-2020 Yann Collet - description - xxHash Extremely fast hash algorithm - license - bsd - license_file - LICENSES/xxhash.txt - name - xxhash platforms common @@ -3398,24 +3012,64 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name common + darwin64 + + archive + + hash + fdcc803a76a3359bb426db7dac161406676d51e7 + hash_algorithm + sha1 + url + https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-darwin64-7501c90.tar.zst + + name + darwin64 + + linux64 + + archive + + hash + 7acb3f94a549fbb9bd7bc16604e34f33c5365a9b + hash_algorithm + sha1 + url + https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-linux64-7501c90.tar.zst + + name + linux64 + + windows64 + + archive + + hash + 4522d075ea4703ef4b527c3039864ef735ea7953 + hash_algorithm + sha1 + url + https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-windows64-7501c90.tar.zst + + name + windows64 + + license + xxhash + license_file + LICENSES/xxhash.txt + copyright + Copyright (c) 2012-2021 Yann Collet version - 0.8.1 + 0.8.1.7501c90 + name + xxhash + description + xxHash Library zlib-ng - canonical_repo - https://bitbucket.org/lindenlab/3p-zlib-ng - copyright - Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler - description - zlib data compression library for the next generation systems - license - zlib-ng - license_file - LICENSES/zlib-ng.txt - name - zlib-ng platforms darwin64 @@ -3423,9 +3077,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - bf306e38bf81c6095e0967bdef6a2445 + dacc5f3fb307c4d1292ed1ffb1d595d83599062d + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87759/805718/zlib_ng-2.0.5.563838-darwin64-563838.tar.bz2 + https://github.com/secondlife/3p-zlib-ng/releases/download/v1.2.11.zlib-ng.32fd361/zlib_ng-1.2.11.zlib-ng.32fd361-darwin64-32fd361.tar.zst name darwin64 @@ -3442,49 +3098,39 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors name linux64 - windows - - archive - - hash - 8ffce5bd00e3d5afa8cb39b855237c4a - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87761/805730/zlib_ng-2.0.5.563838-windows-563838.tar.bz2 - - name - windows - windows64 archive hash - bd103a9129e57f7ea35886bc7750f8a6 + ccfca9451063e2d0e95baa73b1ad2054d3e38907 + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87760/805729/zlib_ng-2.0.5.563838-windows64-563838.tar.bz2 + https://github.com/secondlife/3p-zlib-ng/releases/download/v1.2.11.zlib-ng.32fd361/zlib_ng-1.2.11.zlib-ng.32fd361-windows64-32fd361.tar.zst name windows64 + license + zlib-ng + license_file + LICENSES/zlib-ng.txt + copyright + Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler version - 2.0.5.563838 + 1.2.11.zlib-ng.32fd361 + name + zlib-ng + canonical_repo + https://bitbucket.org/lindenlab/3p-zlib-ng + description + zlib data compression library for the next generation systems package_description - canonical_repo - https://github.com/secondlife/viewer - copyright - Copyright (c) 2023, The Phoenix Firestorm Project, Inc. - description - Firestorm Viewer - license - LGPL - license_file - docs/LICENSE-source.txt - name - firestorm platforms common @@ -3493,9 +3139,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors RelWithDebInfo - build - - configure command @@ -3506,7 +3149,10 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors -DADDRESS_SIZE:STRING=$AUTOBUILD_ADDRSIZE -DROOT_PROJECT_NAME:STRING=SecondLife -DINSTALL_PROPRIETARY=TRUE - + + + build + name RelWithDebInfo @@ -3515,10 +3161,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors configure - arguments - - ../indra - command cmake options @@ -3527,16 +3169,17 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors -DADDRESS_SIZE:STRING=$AUTOBUILD_ADDRSIZE -DROOT_PROJECT_NAME:STRING=SecondLife -DINSTALL_PROPRIETARY=FALSE - + + arguments + + ../indra + name RelWithDebInfoOS Release - build - - configure command @@ -3547,7 +3190,10 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors -DADDRESS_SIZE:STRING=$AUTOBUILD_ADDRSIZE -DROOT_PROJECT_NAME:STRING=SecondLife -DINSTALL_PROPRIETARY=TRUE - + + + build + name Release @@ -3556,10 +3202,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors configure - arguments - - ../indra - command cmake options @@ -3568,7 +3210,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors -DADDRESS_SIZE:STRING=$AUTOBUILD_ADDRSIZE -DROOT_PROJECT_NAME:STRING=SecondLife -DINSTALL_PROPRIETARY=FALSE - + + arguments + + ../indra + name ReleaseOS @@ -3761,12 +3407,22 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors darwin64 - build_directory - build-darwin-x86_64 configurations RelWithDebInfo + configure + + options + + -G + Xcode + + arguments + + ../indra + + build command @@ -3777,19 +3433,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors RelWithDebInfo -project SecondLife.xcodeproj - - - configure - - arguments - - ../indra - - options - - -G - Xcode - + name RelWithDebInfoFS @@ -3949,6 +3591,8 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors --fmodstudio + default + True name ReleaseFS @@ -3972,34 +3616,34 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors ReleaseFS_open + build_directory + build-darwin-x86_64 name darwin64 linux64 - build_directory - build-linux-x86_64 configurations Release - build - - command - ninja - configure - arguments - - ../indra - options -G Ninja -DLL_TESTS=Off - + + arguments + + ../indra + + + build + + command + ninja name RelWithDebInfoFS @@ -4100,6 +3746,8 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors --platform linux + default + True name ReleaseFS @@ -4126,44 +3774,44 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors ReleaseFS_open + build_directory + build-linux-x86_64 name linux64 - windows + windows64 - build_directory - build-vc${AUTOBUILD_VSVER|170}-$AUTOBUILD_ADDRSIZE configurations RelWithDebInfo - build - - arguments - - SecondLife.sln - - command - devenv - options - - /build - RelWithDebInfo|${AUTOBUILD_WIN_VSPLATFORM|NOTWIN} - - configure - arguments - - ..\indra - options -G ${AUTOBUILD_WIN_CMAKE_GEN|NOTWIN} -A ${AUTOBUILD_WIN_VSPLATFORM|NOTWIN} - + + arguments + + ..\indra + + + build + + command + devenv + options + + /build + RelWithDebInfo|${AUTOBUILD_WIN_VSPLATFORM|NOTWIN} + + arguments + + SecondLife.sln + name RelWithDebInfoFS @@ -4358,6 +4008,8 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors --platform windows + default + True name ReleaseFS @@ -4433,15 +4085,26 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors ReleaseFS_open + build_directory + build-vc${AUTOBUILD_VSVER|170}-$AUTOBUILD_ADDRSIZE name windows + license + LGPL + license_file + docs/LICENSE-source.txt + copyright + Copyright (c) 2023, The Phoenix Firestorm Project, Inc. version_file newview/viewer_version.txt + name + firestorm + canonical_repo + https://github.com/secondlife/viewer + description + Firestorm Viewer - type - autobuild - version - 1.3 - + + diff --git a/build.sh b/build.sh index a36ae97053..bf90465f9a 100755 --- a/build.sh +++ b/build.sh @@ -16,6 +16,8 @@ # * 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 +cleanup="true" + retry_cmd() { max_attempts="$1"; shift @@ -110,6 +112,34 @@ installer_CYGWIN() fi } +[[ -n "$GITHUB_OUTPUT" ]] || fatal "Need to export GITHUB_OUTPUT" +# The following is based on the Warning for GitHub multiline output strings: +# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings +EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) + +# Build up these arrays as we go +metadata=() +symbolfile=() +physicstpv=() +# and dump them to GITHUB_OUTPUT when done +cleanup="$cleanup ; \ +arrayoutput metadata ; \ +arrayoutput symbolfile ; \ +arrayoutput physicstpv" +trap "$cleanup" EXIT + +arrayoutput() +{ + local outputname="$1" + # append "[*]" to the array name so array indirection works + local array="$1[*]" + local IFS=' +' + echo "$outputname<<$EOF +${!array} +$EOF" >> "$GITHUB_OUTPUT" +} + pre_build() { local variant="$1" @@ -121,7 +151,7 @@ pre_build() RELEASE_CRASH_REPORTING=ON HAVOK=ON SIGNING=() - if [ "$arch" == "Darwin" -a "$variant" == "Release" ] + if [[ "$arch" == "Darwin" && "$variant" == "Release" ]] then SIGNING=("-DENABLE_SIGNING:BOOL=YES" \ "-DSIGNING_IDENTITY:STRING=Developer ID Application: Linden Research, Inc.") fi @@ -145,15 +175,27 @@ pre_build() VIEWER_SYMBOL_FILE="$(native_path "$abs_build_dir/newview/$variant/secondlife-symbols-$symplat-${AUTOBUILD_ADDRSIZE}.tar.bz2")" fi - # don't spew credentials into build log - bugsplat_sh="$build_secrets_checkout/bugsplat/bugsplat.sh" - set +x - if [ -r "$bugsplat_sh" ] - then # show that we're doing this, just not the contents - echo source "$bugsplat_sh" - source "$bugsplat_sh" + # expect these variables to be set in the environment from GitHub secrets + if [[ -n "$BUGSPLAT_DB" ]] + then + # don't spew credentials into build log + set +x + if [[ -z "$BUGSPLAT_USER" || -z "$BUGSPLAT_PASS" ]] + then + # older mechanism involving build-secrets repo - + # if build_secrets_checkout isn't set, report its name + bugsplat_sh="${build_secrets_checkout:-\$build_secrets_checkout}/bugsplat/bugsplat.sh" + if [ -r "$bugsplat_sh" ] + then # show that we're doing this, just not the contents + echo source "$bugsplat_sh" + source "$bugsplat_sh" + else + fatal "BUGSPLAT_USER or BUGSPLAT_PASS missing, and no $bugsplat_sh" + fi + fi + set -x + export BUGSPLAT_USER BUGSPLAT_PASS fi - set -x # honor autobuild_configure_parameters same as sling-buildscripts eval_autobuild_configure_parameters=$(eval $(echo echo $autobuild_configure_parameters)) @@ -181,13 +223,17 @@ package_llphysicsextensions_tpv() # nat 2016-12-21: without HAVOK, can't build PhysicsExtensions_TPV. if [ "$variant" = "Release" -a "${HAVOK:-}" != "OFF" ] then - test -r "$build_dir/packages/llphysicsextensions/autobuild-tpv.xml" || fatal "No llphysicsextensions_tpv autobuild configuration found" - tpvconfig=$(native_path "$build_dir/packages/llphysicsextensions/autobuild-tpv.xml") - "$autobuild" build --quiet --config-file "$tpvconfig" -c Tpv || fatal "failed to build llphysicsextensions_tpv" + tpvconfig="$build_dir/packages/llphysicsextensions/autobuild-tpv.xml" + test -r "$tpvconfig" || fatal "No llphysicsextensions_tpv autobuild configuration found" + # SL-19942: autobuild ignores -c switch if AUTOBUILD_CONFIGURATION set + unset AUTOBUILD_CONFIGURATION + "$autobuild" build --quiet --config-file "$(native_path "$tpvconfig")" -c Tpv \ + || fatal "failed to build llphysicsextensions_tpv" # capture the package file name for use in upload later... PKGTMP=`mktemp -t pgktpv.XXXXXX` - trap "rm $PKGTMP* 2>/dev/null" 0 + cleanup="$cleanup ; rm $PKGTMP* 2>/dev/null" + trap "$cleanup" EXIT "$autobuild" package --quiet --config-file "$tpvconfig" --results-file "$(native_path $PKGTMP)" || fatal "failed to package llphysicsextensions_tpv" tpv_status=$? if [ -r "${PKGTMP}" ] @@ -313,12 +359,20 @@ begin_section "coding policy check" # this far. Running coding policy checks on one platform *should* suffice... if [[ "$arch" == "Darwin" ]] then - # install the git-hooks dependencies - pip install -r "$(native_path "$git_hooks_checkout/requirements.txt")" || \ - fatal "pip install git-hooks failed" - # validate the branch we're about to build - python_cmd "$git_hooks_checkout/coding_policy_git.py" --all_files || \ - fatal "coding policy check failed" + git_hooks_reqs="$git_hooks_checkout/requirements.txt" + if [[ -r "$(shell_path "$git_hooks_reqs")" ]] + then + # install the git-hooks dependencies + pip install -r "$(native_path "$git_hooks_reqs")" || \ + fatal "pip install git-hooks failed" + fi + git_hooks_script="$git_hooks_checkout/coding_policy_git.py" + if [[ -r "$(shell_path "$git_hooks_script")" ]] + then + # validate the branch we're about to build + python_cmd "$(native_path "$git_hooks_script")" --all_files || \ + fatal "coding policy check failed" + fi fi end_section "coding policy check" @@ -353,6 +407,7 @@ do begin_section "Autobuild metadata" python_cmd "$helpers/codeticket.py" addoutput "Autobuild Metadata" "$build_dir/autobuild-package.xml" --mimetype text/xml \ || fatal "Upload of autobuild metadata failed" + metadata+=("$build_dir/autobuild-package.xml") if [ "$arch" != "Linux" ] then record_dependencies_graph "$build_dir/autobuild-package.xml" # defined in buildscripts/hg/bin/build.sh @@ -366,8 +421,11 @@ do if [ -r "$build_dir/newview/viewer_version.txt" ] then begin_section "Viewer Version" - python_cmd "$helpers/codeticket.py" addoutput "Viewer Version" "$(<"$build_dir/newview/viewer_version.txt")" --mimetype inline-text \ + viewer_version="$(<"$build_dir/newview/viewer_version.txt")" + python_cmd "$helpers/codeticket.py" addoutput "Viewer Version" "$viewer_version" --mimetype inline-text \ || fatal "Upload of viewer version failed" + metadata+=("$build_dir/newview/viewer_version.txt") + echo "viewer_version=$viewer_version" >> "$GITHUB_OUTPUT" end_section "Viewer Version" fi ;; @@ -376,12 +434,14 @@ do then record_event "Doxygen warnings generated; see doxygen_warnings.log" python_cmd "$helpers/codeticket.py" addoutput "Doxygen Log" "$build_dir/doxygen_warnings.log" --mimetype text/plain ## TBD + metadata+=("$build_dir/doxygen_warnings.log") fi if [ -d "$build_dir/doxygen/html" ] then tar -c -f "$build_dir/viewer-doxygen.tar.bz2" --strip-components 3 "$build_dir/doxygen/html" python_cmd "$helpers/codeticket.py" addoutput "Doxygen Tarball" "$build_dir/viewer-doxygen.tar.bz2" \ || fatal "Upload of doxygen tarball failed" + metadata+=("$build_dir/viewer-doxygen.tar.bz2") fi ;; *) @@ -483,64 +543,29 @@ then if $build_viewer then begin_section "Uploads" - # Upload installer - package=$(installer_$arch) - if [ x"$package" = x ] || test -d "$package" + # nat 2016-12-22: without RELEASE_CRASH_REPORTING, we have no symbol file. + if [ "${RELEASE_CRASH_REPORTING:-}" != "OFF" ] then - fatal "No installer found from `pwd`" - succeeded=$build_coverity - else - # Upload base package. - retry_cmd 4 30 python_cmd "$helpers/codeticket.py" addoutput Installer "$package" \ - || fatal "Upload of installer failed" - wait_for_codeticket - - # Upload additional packages. - for package_id in $additional_packages - do - package=$(installer_$arch "$package_id") - if [ x"$package" != x ] + # BugSplat wants to see xcarchive.zip + # e.g. build-darwin-x86_64/newview/Release/Second Life Test.xcarchive.zip + symbol_file="${build_dir}/newview/${variant}/${viewer_channel}.xcarchive.zip" + if [[ ! -f "$symbol_file" ]] then - retry_cmd 4 30 python_cmd "$helpers/codeticket.py" addoutput "Installer $package_id" "$package" \ - || fatal "Upload of installer $package_id failed" - wait_for_codeticket - else - record_failure "Failed to find additional package for '$package_id'." + # symbol tarball we prep for (e.g.) Breakpad + symbol_file="$VIEWER_SYMBOL_FILE" fi - done + # Upload crash reporter file + symbolfile+=("$symbol_file") + fi - if [ "$last_built_variant" = "Release" ] - then - # nat 2016-12-22: without RELEASE_CRASH_REPORTING, we have no symbol file. - if [ "${RELEASE_CRASH_REPORTING:-}" != "OFF" ] - then - # Upload crash reporter file - retry_cmd 4 30 python_cmd "$helpers/codeticket.py" addoutput "Symbolfile" "$VIEWER_SYMBOL_FILE" \ - || fatal "Upload of symbolfile failed" - wait_for_codeticket - 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) - retry_cmd 4 30 python_cmd "$helpers/codeticket.py" addoutput "Physics Extensions Package" "$llphysicsextensions_package" --private \ - || fatal "Upload of physics extensions package failed" - fi - fi - - # Run upload extensions - # Ex: bugsplat - if [ -d ${build_dir}/packages/upload-extensions ]; then - for extension in ${build_dir}/packages/upload-extensions/*.sh; do - begin_section "Upload Extension $extension" - . $extension - [ $? -eq 0 ] || fatal "Upload of extension $extension failed" - wait_for_codeticket - end_section "Upload Extension $extension" - done - fi + # Upload the llphysicsextensions_tpv package, if one was produced + # Only upload this package when building the private repo so the + # artifact is private. + if [[ "x$GITHUB_REPOSITORY" == "xsecondlife/viewer-private" && \ + -r "$build_dir/llphysicsextensions_package" ]] + then + llphysicsextensions_package=$(cat $build_dir/llphysicsextensions_package) + physicstpv+=("$llphysicsextensions_package") fi end_section "Uploads" else diff --git a/buildscripts_support_functions b/buildscripts_support_functions new file mode 100644 index 0000000000..557d2f80fb --- /dev/null +++ b/buildscripts_support_functions @@ -0,0 +1,60 @@ +# standalone functions from sling-buildscripts + +set_build_number_to_revision() +{ + record_event "buildNumber $revision" +} + +record_event() +{ + echo "=== $@" +} + +begin_section() +{ + record_event "START $*" + sections+=("$*") +} + +end_section() +{ + # accommodate dumb Mac bash 3, which doesn't understand array[-1] + local last=$(( ${#sections[@]} - 1 )) + record_event "END ${*:-${sections[$last]}}" + unset "sections[$last]" +} + +record_success() +{ + record_event "SUCCESS $*" +} + +record_failure() +{ + record_event "FAILURE $*" >&2 +} + +fatal() +{ + record_failure "$@" + finalize false + exit 1 +} + +# redefined fail for backward compatibility +alias fail=fatal + +pass() +{ + exit 0 +} + +export -f set_build_number_to_revision +export -f record_event +export -f begin_section +export -f end_section +export -f record_success +export -f record_failure +export -f fatal +export -f pass +export sections diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index f32c941b18..f209220f71 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -33,6 +33,11 @@ endif (WINDOWS) # Portable compilation flags. add_compile_definitions( ADDRESS_SIZE=${ADDRESS_SIZE}) +# Because older versions of Boost.Bind dumped placeholders _1, _2 et al. into +# the global namespace, Boost now requires either BOOST_BIND_NO_PLACEHOLDERS +# to avoid that or BOOST_BIND_GLOBAL_PLACEHOLDERS to state that we require it +# -- which we do. Without one or the other, we get a ton of Boost warnings. +add_compile_definitions(BOOST_BIND_GLOBAL_PLACEHOLDERS) # Configure crash reporting set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds") @@ -71,15 +76,6 @@ if (WINDOWS) # http://www.cmake.org/pipermail/cmake/2009-September/032143.html string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - # Without PreferredToolArchitecture=x64, as of 2020-06-26 the 32-bit - # compiler on our TeamCity build hosts has started running out of virtual - # memory for the precompiled header file. - # CP changed to only append the flag for 32bit builds - on 64bit builds, - # locally at least, the build output is spammed with 1000s of 'D9002' - # warnings about this switch being ignored. - if(ADDRESS_SIZE EQUAL 32 AND DEFINED ENV{"TEAMCITY_PROJECT_NAME"}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /p:PreferredToolArchitecture=x64") - endif() # zlib has assembly-language object files incompatible with SAFESEH add_link_options(/LARGEADDRESSAWARE /SAFESEH:NO diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 94c823abe2..fae588c07d 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -16,7 +16,6 @@ if (WINDOWS) endif (LLCOMMON_LINK_SHARED) target_link_libraries( ll::apr INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apr-1.lib - ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apriconv-1.lib ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}aprutil-1.lib ) elseif (DARWIN) @@ -38,7 +37,6 @@ else (WINDOWS) target_link_libraries( ll::apr INTERFACE apr-1 aprutil-1 - # iconv # Doesn't seem to be necessary for Linux uuid rt ) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 4dae3326e7..1694ffc50c 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -57,7 +57,6 @@ if(WINDOWS) #openjp2.dll # Only copy OpenJPEG dll if needed libapr-1.dll libaprutil-1.dll - libapriconv-1.dll nghttp2.dll glod.dll # restore GLOD libhunspell.dll @@ -205,7 +204,6 @@ elseif(DARWIN) libndofdev.dylib libnghttp2.dylib libnghttp2.14.dylib - libnghttp2.14.19.0.dylib liburiparser.dylib liburiparser.1.dylib liburiparser.1.0.27.dylib diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index 4a501f420b..1ce21c11f9 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -62,6 +62,7 @@ elseif (WINDOWS) user32 ole32 dbghelp + rpcrt4.lib legacy_stdio_definitions ) else() diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index dc0d3499ab..ec186d4fe9 100644 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -173,13 +173,17 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL "${CMAKE_MATCH_1}") message(STATUS "CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL = '${CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL}'") - string(REGEX MATCHALL "[^ ]+" LL_BUILD_LIST "$ENV{LL_BUILD}") - list(FIND LL_BUILD_LIST "-iwithsysroot" sysroot_idx) - if ("${sysroot_idx}" LESS 0) - message(FATAL_ERROR "Environment variable LL_BUILD must contain '-iwithsysroot'") - endif () - math(EXPR sysroot_idx "${sysroot_idx} + 1") - list(GET LL_BUILD_LIST "${sysroot_idx}" CMAKE_OSX_SYSROOT) + # allow disabling this check by setting LL_SKIP_REQUIRE_SYSROOT either ON as cmake cache var or non-empty as environment var + set(LL_SKIP_REQUIRE_SYSROOT OFF CACHE BOOL "Skip requirement to set toolchain sysroot ahead of time. Not skipped by default for consistency, but skipping can be useful for selecting alternative xcode versions side by side") + if("$ENV{LL_SKIP_REQUIRE_SYSROOT}" STREQUAL "" AND NOT ${LL_SKIP_REQUIRE_SYSROOT}) + string(REGEX MATCHALL "[^ ]+" LL_BUILD_LIST "$ENV{LL_BUILD}") + list(FIND LL_BUILD_LIST "-iwithsysroot" sysroot_idx) + if ("${sysroot_idx}" LESS 0) + message(FATAL_ERROR "Environment variable LL_BUILD must contain '-iwithsysroot'") + endif () + math(EXPR sysroot_idx "${sysroot_idx} + 1") + list(GET LL_BUILD_LIST "${sysroot_idx}" CMAKE_OSX_SYSROOT) + endif() message(STATUS "CMAKE_OSX_SYSROOT = '${CMAKE_OSX_SYSROOT}'") set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0") diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index fa419e39c6..028342e6f4 100755 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -38,6 +38,7 @@ import itertools import operator import os import re +import shlex import shutil import subprocess import sys @@ -535,15 +536,15 @@ class LLManifest(object, metaclass=LLManifestRegistry): self.cmakedirs(path) return path - def run_command(self, command): + def run_command(self, command, **kwds): """ Runs an external command. Raises ManifestError exception if the command returns a nonzero status. """ - print("Running command:", command) + print("Running command:", shlex.join(command)) sys.stdout.flush() try: - subprocess.check_call(command) + subprocess.check_call(command, **kwds) except subprocess.CalledProcessError as err: raise ManifestError( "Command %s returned non-zero status (%s)" % (command, err.returncode) ) diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h index ba3a7f32e3..08e1d7a716 100644 --- a/indra/llaudio/llaudioengine.h +++ b/indra/llaudio/llaudioengine.h @@ -30,6 +30,7 @@ #include #include +#include #include "v3math.h" #include "v3dmath.h" diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp index f91f17c491..ca326ba6e5 100644 --- a/indra/llcommon/llcoros.cpp +++ b/indra/llcommon/llcoros.cpp @@ -122,11 +122,7 @@ LLCoros::LLCoros(): // Previously we used // boost::context::guarded_stack_allocator::default_stacksize(); // empirically this is insufficient. -#if ADDRESS_SIZE == 64 - mStackSize(512*1024), -#else - mStackSize(256*1024), -#endif + mStackSize(768*1024), // mCurrent does NOT own the current CoroData instance -- it simply // points to it. So initialize it with a no-op deleter. mCurrent{ [](CoroData*){} } diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index d0108261fc..aa6d2700c8 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -1635,5 +1635,18 @@ bool debugLoggingEnabled(const std::string& tag) return res; } +void crashdriver(void (*callback)(int*)) +{ + // The LLERROR_CRASH macro used to have inline code of the form: + //int* make_me_crash = NULL; + //*make_me_crash = 0; - + // But compilers are getting smart enough to recognize that, so we must + // assign to an address supplied by a separate source file. We could do + // the assignment here in crashdriver() -- but then BugSplat would group + // all LL_ERRS() crashes as the fault of this one function, instead of + // identifying the specific LL_ERRS() source line. So instead, do the + // assignment in a lambda in the caller's source. We just provide the + // nullptr target. + callback(nullptr); +} diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index 39cf95a837..2bc8e17643 100644 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -395,11 +395,9 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; #define LL_NEWLINE '\n' // Use this only in LL_ERRS or in a place that LL_ERRS may not be used -#define LLERROR_CRASH \ -{ \ - int* make_me_crash = NULL;\ - *make_me_crash = 0; \ - exit(*make_me_crash); \ +#define LLERROR_CRASH \ +{ \ + crashdriver([](int* ptr){ *ptr = 0; exit(*ptr); }); \ } #define LL_ENDL \ @@ -478,5 +476,7 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; // Check at run-time whether logging is enabled, without generating output bool debugLoggingEnabled(const std::string& tag); +// used by LLERROR_CRASH +void crashdriver(void (*)(int*)); #endif // LL_LLERROR_H diff --git a/indra/llcommon/llleap.cpp b/indra/llcommon/llleap.cpp index 259f5bc505..5b5bf97cef 100644 --- a/indra/llcommon/llleap.cpp +++ b/indra/llcommon/llleap.cpp @@ -389,6 +389,17 @@ public: // Read all remaining bytes and log. LL_INFOS("LLLeap") << mDesc << ": " << rest << LL_ENDL; } + /*--------------------------- diagnostic ---------------------------*/ + else if (data["eof"].asBoolean()) + { + LL_DEBUGS("LLLeap") << mDesc << " ended, no partial line" << LL_ENDL; + } + else + { + LL_DEBUGS("LLLeap") << mDesc << " (still running, " << childerr.size() + << " bytes pending)" << LL_ENDL; + } + /*------------------------- end diagnostic -------------------------*/ return false; } diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp index 5ded12cb34..ed61eed7f0 100644 --- a/indra/llcommon/llprocessor.cpp +++ b/indra/llcommon/llprocessor.cpp @@ -746,7 +746,7 @@ private: __cpuid(0x1, eax, ebx, ecx, edx); if(feature_infos[0] != (S32)edx) { - LL_ERRS() << "machdep.cpu.feature_bits doesn't match expected cpuid result!" << LL_ENDL; + LL_WARNS() << "machdep.cpu.feature_bits doesn't match expected cpuid result!" << LL_ENDL; } #endif // LL_RELEASE_FOR_DOWNLOAD diff --git a/indra/llcommon/llrand.cpp b/indra/llcommon/llrand.cpp index cb28a8f5c3..33afc50cf7 100644 --- a/indra/llcommon/llrand.cpp +++ b/indra/llcommon/llrand.cpp @@ -58,46 +58,14 @@ * to restore uniform distribution. */ -// *NOTE: The system rand implementation is probably not correct. -#define LL_USE_SYSTEM_RAND 0 - -#if LL_USE_SYSTEM_RAND -#include -#endif - -#if LL_USE_SYSTEM_RAND -class LLSeedRand -{ -public: - LLSeedRand() - { -#if LL_WINDOWS - srand(LLUUID::getRandomSeed()); -#else - srand48(LLUUID::getRandomSeed()); -#endif - } -}; -static LLSeedRand sRandomSeeder; -inline F64 ll_internal_random_double() -{ -#if LL_WINDOWS - return (F64)rand() / (F64)RAND_MAX; -#else - return drand48(); -#endif -} -inline F32 ll_internal_random_float() -{ -#if LL_WINDOWS - return (F32)rand() / (F32)RAND_MAX; -#else - return (F32)drand48(); -#endif -} -#else static LLRandLagFib2281 gRandomGenerator(LLUUID::getRandomSeed()); -inline F64 ll_internal_random_double() + +// no default implementation, only specific F64 and F32 specializations +template +inline REAL ll_internal_random(); + +template <> +inline F64 ll_internal_random() { // *HACK: Through experimentation, we have found that dual core // CPUs (or at least multi-threaded processes) seem to @@ -108,15 +76,35 @@ inline F64 ll_internal_random_double() return rv; } +template <> +inline F32 ll_internal_random() +{ + return F32(ll_internal_random()); +} + +/*------------------------------ F64 aliases -------------------------------*/ +inline F64 ll_internal_random_double() +{ + return ll_internal_random(); +} + +F64 ll_drand() +{ + return ll_internal_random_double(); +} + +/*------------------------------ F32 aliases -------------------------------*/ inline F32 ll_internal_random_float() { - // The clamping rules are described above. - F32 rv = (F32)gRandomGenerator(); - if(!((rv >= 0.0f) && (rv < 1.0f))) return fmod(rv, 1.f); - return rv; + return ll_internal_random(); } -#endif +F32 ll_frand() +{ + return ll_internal_random_float(); +} + +/*-------------------------- clamped random range --------------------------*/ S32 ll_rand() { return ll_rand(RAND_MAX); @@ -130,42 +118,28 @@ S32 ll_rand(S32 val) return rv; } -F32 ll_frand() +template +REAL ll_grand(REAL val) { - return ll_internal_random_float(); + // The clamping rules are described above. + REAL rv = ll_internal_random() * val; + if(val > 0) + { + if(rv >= val) return REAL(); + } + else + { + if(rv <= val) return REAL(); + } + return rv; } F32 ll_frand(F32 val) { - // The clamping rules are described above. - F32 rv = ll_internal_random_float() * val; - if(val > 0) - { - if(rv >= val) return 0.0f; - } - else - { - if(rv <= val) return 0.0f; - } - return rv; -} - -F64 ll_drand() -{ - return ll_internal_random_double(); + return ll_grand(val); } F64 ll_drand(F64 val) { - // The clamping rules are described above. - F64 rv = ll_internal_random_double() * val; - if(val > 0) - { - if(rv >= val) return 0.0; - } - else - { - if(rv <= val) return 0.0; - } - return rv; + return ll_grand(val); } diff --git a/indra/llcommon/tests/llleap_test.cpp b/indra/llcommon/tests/llleap_test.cpp index 3ae48a2532..7197dedfbf 100644 --- a/indra/llcommon/tests/llleap_test.cpp +++ b/indra/llcommon/tests/llleap_test.cpp @@ -17,8 +17,6 @@ // std headers #include // external library headers -#include -#include // other Linden headers #include "../test/lltut.h" #include "../test/namedtempfile.h" @@ -30,10 +28,6 @@ #include "stringize.h" #include "StringVec.h" -using boost::assign::list_of; - -StringVec sv(const StringVec& listof) { return listof; } - #if defined(LL_WINDOWS) #define sleep(secs) _sleep((secs) * 1000) @@ -104,17 +98,12 @@ namespace tut llleap_data(): reader(".py", // This logic is adapted from vita.viewerclient.receiveEvent() - boost::phoenix::placeholders::arg1 << + [](std::ostream& out){ out << "import re\n" "import os\n" "import sys\n" "\n" - "try:\n" - // new freestanding llsd package - " import llsd\n" - "except ImportError:\n" - // older llbase.llsd module - " from llbase import llsd\n" + "import llsd\n" "\n" "class ProtocolError(Exception):\n" " def __init__(self, msg, data):\n" @@ -193,7 +182,7 @@ namespace tut "def request(pump, data):\n" " # we expect 'data' is a dict\n" " data['reply'] = _reply\n" - " send(pump, data)\n"), + " send(pump, data)\n";}), // Get the actual pathname of the NamedExtTempFile and trim off // the ".py" extension. (We could cache reader.getName() in a // separate member variable, but I happen to know getName() just @@ -218,14 +207,14 @@ namespace tut void object::test<1>() { set_test_name("multiple LLLeap instances"); - NamedTempFile script("py", - "import time\n" - "time.sleep(1)\n"); + NamedExtTempFile script("py", + "import time\n" + "time.sleep(1)\n"); LLLeapVector instances; instances.push_back(LLLeap::create(get_test_name(), - sv(list_of(PYTHON)(script.getName())))->getWeak()); + StringVec{PYTHON, script.getName()})->getWeak()); instances.push_back(LLLeap::create(get_test_name(), - sv(list_of(PYTHON)(script.getName())))->getWeak()); + StringVec{PYTHON, script.getName()})->getWeak()); // In this case we're simply establishing that two LLLeap instances // can coexist without throwing exceptions or bombing in any other // way. Wait for them to terminate. @@ -236,10 +225,10 @@ namespace tut void object::test<2>() { set_test_name("stderr to log"); - NamedTempFile script("py", - "import sys\n" - "sys.stderr.write('''Hello from Python!\n" - "note partial line''')\n"); + NamedExtTempFile script("py", + "import sys\n" + "sys.stderr.write('''Hello from Python!\n" + "note partial line''')\n"); StringVec vcommand{ PYTHON, script.getName() }; CaptureLog log(LLError::LEVEL_INFO); waitfor(LLLeap::create(get_test_name(), vcommand)); @@ -251,11 +240,11 @@ namespace tut void object::test<3>() { set_test_name("bad stdout protocol"); - NamedTempFile script("py", - "print('Hello from Python!')\n"); + NamedExtTempFile script("py", + "print('Hello from Python!')\n"); CaptureLog log(LLError::LEVEL_WARN); waitfor(LLLeap::create(get_test_name(), - sv(list_of(PYTHON)(script.getName())))); + StringVec{PYTHON, script.getName()})); ensure_contains("error log line", log.messageWith("invalid protocol"), "Hello from Python!"); } @@ -264,13 +253,13 @@ namespace tut void object::test<4>() { set_test_name("leftover stdout"); - NamedTempFile script("py", - "import sys\n" - // note lack of newline - "sys.stdout.write('Hello from Python!')\n"); + NamedExtTempFile script("py", + "import sys\n" + // note lack of newline + "sys.stdout.write('Hello from Python!')\n"); CaptureLog log(LLError::LEVEL_WARN); waitfor(LLLeap::create(get_test_name(), - sv(list_of(PYTHON)(script.getName())))); + StringVec{PYTHON, script.getName()})); ensure_contains("error log line", log.messageWith("Discarding"), "Hello from Python!"); } @@ -279,12 +268,12 @@ namespace tut void object::test<5>() { set_test_name("bad stdout len prefix"); - NamedTempFile script("py", - "import sys\n" - "sys.stdout.write('5a2:something')\n"); + NamedExtTempFile script("py", + "import sys\n" + "sys.stdout.write('5a2:something')\n"); CaptureLog log(LLError::LEVEL_WARN); waitfor(LLLeap::create(get_test_name(), - sv(list_of(PYTHON)(script.getName())))); + StringVec{PYTHON, script.getName()})); ensure_contains("error log line", log.messageWith("invalid protocol"), "5a2:"); } @@ -386,17 +375,18 @@ namespace tut set_test_name("round trip"); AckAPI api; Result result; - NamedTempFile script("py", - boost::phoenix::placeholders::arg1 << - "from " << reader_module << " import *\n" - // make a request on our little API - "request(pump='" << api.getName() << "', data={})\n" - // wait for its response - "resp = get()\n" - "result = '' if resp == dict(pump=replypump(), data='ack')\\\n" - " else 'bad: ' + str(resp)\n" - "send(pump='" << result.getName() << "', data=result)\n"); - waitfor(LLLeap::create(get_test_name(), sv(list_of(PYTHON)(script.getName())))); + NamedExtTempFile script("py", + [&](std::ostream& out){ out << + "from " << reader_module << " import *\n" + // make a request on our little API + "request(pump='" << api.getName() << "', data={})\n" + // wait for its response + "resp = get()\n" + "result = '' if resp == dict(pump=replypump(), data='ack')\\\n" + " else 'bad: ' + str(resp)\n" + "send(pump='" << result.getName() << "', data=result)\n";}); + waitfor(LLLeap::create(get_test_name(), + StringVec{PYTHON, script.getName()})); result.ensure(); } @@ -424,38 +414,38 @@ namespace tut // iterations etc. in OS pipes and the LLLeap/LLProcess implementation. ReqIDAPI api; Result result; - NamedTempFile script("py", - boost::phoenix::placeholders::arg1 << - "import sys\n" - "from " << reader_module << " import *\n" - // Note that since reader imports llsd, this - // 'import *' gets us llsd too. - "sample = llsd.format_notation(dict(pump='" << - api.getName() << "', data=dict(reqid=999999, reply=replypump())))\n" - // The whole packet has length prefix too: "len:data" - "samplen = len(str(len(sample))) + 1 + len(sample)\n" - // guess how many messages it will take to - // accumulate BUFFERED_LENGTH - "count = int(" << BUFFERED_LENGTH << "/samplen)\n" - "print('Sending %s requests' % count, file=sys.stderr)\n" - "for i in range(count):\n" - " request('" << api.getName() << "', dict(reqid=i))\n" - // The assumption in this specific test that - // replies will arrive in the same order as - // requests is ONLY valid because the API we're - // invoking sends replies instantly. If the API - // had to wait for some external event before - // sending its reply, replies could arrive in - // arbitrary order, and we'd have to tick them - // off from a set. - "result = ''\n" - "for i in range(count):\n" - " resp = get()\n" - " if resp['data']['reqid'] != i:\n" - " result = 'expected reqid=%s in %s' % (i, resp)\n" - " break\n" - "send(pump='" << result.getName() << "', data=result)\n"); - waitfor(LLLeap::create(get_test_name(), sv(list_of(PYTHON)(script.getName()))), + NamedExtTempFile script("py", + [&](std::ostream& out){ out << + "import sys\n" + "from " << reader_module << " import *\n" + // Note that since reader imports llsd, this + // 'import *' gets us llsd too. + "sample = llsd.format_notation(dict(pump='" << + api.getName() << "', data=dict(reqid=999999, reply=replypump())))\n" + // The whole packet has length prefix too: "len:data" + "samplen = len(str(len(sample))) + 1 + len(sample)\n" + // guess how many messages it will take to + // accumulate BUFFERED_LENGTH + "count = int(" << BUFFERED_LENGTH << "/samplen)\n" + "print('Sending %s requests' % count, file=sys.stderr)\n" + "for i in range(count):\n" + " request('" << api.getName() << "', dict(reqid=i))\n" + // The assumption in this specific test that + // replies will arrive in the same order as + // requests is ONLY valid because the API we're + // invoking sends replies instantly. If the API + // had to wait for some external event before + // sending its reply, replies could arrive in + // arbitrary order, and we'd have to tick them + // off from a set. + "result = ''\n" + "for i in range(count):\n" + " resp = get()\n" + " if resp['data']['reqid'] != i:\n" + " result = 'expected reqid=%s in %s' % (i, resp)\n" + " break\n" + "send(pump='" << result.getName() << "', data=result)\n";}); + waitfor(LLLeap::create(get_test_name(), StringVec{PYTHON, script.getName()}), 300); // needs more realtime than most tests result.ensure(); } @@ -467,65 +457,62 @@ namespace tut { ReqIDAPI api; Result result; - NamedTempFile script("py", - boost::phoenix::placeholders::arg1 << - "import sys\n" - "from " << reader_module << " import *\n" - // Generate a very large string value. - "desired = int(sys.argv[1])\n" - // 7 chars per item: 6 digits, 1 comma - "count = int((desired - 50)/7)\n" - "large = ''.join('%06d,' % i for i in range(count))\n" - // Pass 'large' as reqid because we know the API - // will echo reqid, and we want to receive it back. - "request('" << api.getName() << "', dict(reqid=large))\n" - "try:\n" - " resp = get()\n" - "except ParseError as e:\n" - " # try to find where e.data diverges from expectation\n" - // Normally we'd expect a 'pump' key in there, - // too, with value replypump(). But Python - // serializes keys in a different order than C++, - // so incoming data start with 'data'. - // Truthfully, though, if we get as far as 'pump' - // before we find a difference, something's very - // strange. - " expect = llsd.format_notation(dict(data=dict(reqid=large)))\n" - " chunk = 40\n" - " for offset in range(0, max(len(e.data), len(expect)), chunk):\n" - " if e.data[offset:offset+chunk] != \\\n" - " expect[offset:offset+chunk]:\n" - " print('Offset %06d: expect %r,\\n'\\\n" - " ' get %r' %\\\n" - " (offset,\n" - " expect[offset:offset+chunk],\n" - " e.data[offset:offset+chunk]),\n" - " file=sys.stderr)\n" - " break\n" - " else:\n" - " print('incoming data matches expect?!', file=sys.stderr)\n" - " send('" << result.getName() << "', '%s: %s' % (e.__class__.__name__, e))\n" - " sys.exit(1)\n" - "\n" - "echoed = resp['data']['reqid']\n" - "if echoed == large:\n" - " send('" << result.getName() << "', '')\n" - " sys.exit(0)\n" - // Here we know echoed did NOT match; try to find where - "for i in range(count):\n" - " start = 7*i\n" - " end = 7*(i+1)\n" - " if end > len(echoed)\\\n" - " or echoed[start:end] != large[start:end]:\n" - " send('" << result.getName() << "',\n" - " 'at offset %s, expected %r but got %r' %\n" - " (start, large[start:end], echoed[start:end]))\n" - "sys.exit(1)\n"); + NamedExtTempFile script("py", + [&](std::ostream& out){ out << + "import sys\n" + "from " << reader_module << " import *\n" + // Generate a very large string value. + "desired = int(sys.argv[1])\n" + // 7 chars per item: 6 digits, 1 comma + "count = int((desired - 50)/7)\n" + "large = ''.join('%06d,' % i for i in range(count))\n" + // Pass 'large' as reqid because we know the API + // will echo reqid, and we want to receive it back. + "request('" << api.getName() << "', dict(reqid=large))\n" + "try:\n" + " resp = get()\n" + "except ParseError as e:\n" + " # try to find where e.data diverges from expectation\n" + // Normally we'd expect a 'pump' key in there, + // too, with value replypump(). But Python + // serializes keys in a different order than C++, + // so incoming data start with 'data'. + // Truthfully, though, if we get as far as 'pump' + // before we find a difference, something's very + // strange. + " expect = llsd.format_notation(dict(data=dict(reqid=large)))\n" + " chunk = 40\n" + " for offset in range(0, max(len(e.data), len(expect)), chunk):\n" + " if e.data[offset:offset+chunk] != \\\n" + " expect[offset:offset+chunk]:\n" + " print('Offset %06d: expect %r,\\n'\\\n" + " ' get %r' %\\\n" + " (offset,\n" + " expect[offset:offset+chunk],\n" + " e.data[offset:offset+chunk]),\n" + " file=sys.stderr)\n" + " break\n" + " else:\n" + " print('incoming data matches expect?!', file=sys.stderr)\n" + " send('" << result.getName() << "', '%s: %s' % (e.__class__.__name__, e))\n" + " sys.exit(1)\n" + "\n" + "echoed = resp['data']['reqid']\n" + "if echoed == large:\n" + " send('" << result.getName() << "', '')\n" + " sys.exit(0)\n" + // Here we know echoed did NOT match; try to find where + "for i in range(count):\n" + " start = 7*i\n" + " end = 7*(i+1)\n" + " if end > len(echoed)\\\n" + " or echoed[start:end] != large[start:end]:\n" + " send('" << result.getName() << "',\n" + " 'at offset %s, expected %r but got %r' %\n" + " (start, large[start:end], echoed[start:end]))\n" + "sys.exit(1)\n";}); waitfor(LLLeap::create(test_name, - sv(list_of - (PYTHON) - (script.getName()) - (stringize(size)))), + StringVec{PYTHON, script.getName(), stringize(size)}), 180); // try a longer timeout result.ensure(); } diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp index 81449b4a42..b6b297b8d7 100644 --- a/indra/llcommon/tests/llprocess_test.cpp +++ b/indra/llcommon/tests/llprocess_test.cpp @@ -151,8 +151,38 @@ struct PythonProcessLauncher /// Launch Python script; verify that it launched void launch() { - mPy = LLProcess::create(mParams); - tut::ensure(STRINGIZE("Couldn't launch " << mDesc << " script"), bool(mPy)); + try + { + mPy = LLProcess::create(mParams); + tut::ensure(STRINGIZE("Couldn't launch " << mDesc << " script"), bool(mPy)); + } + catch (const tut::failure&) + { + // On Windows, if APR_LOG is set, our version of APR's + // apr_create_proc() logs to the specified file. If this test + // failed, try to report that log. + const char* APR_LOG = getenv("APR_LOG"); + if (APR_LOG && *APR_LOG) + { + std::ifstream inf(APR_LOG); + if (! inf.is_open()) + { + LL_WARNS() << "Couldn't open '" << APR_LOG << "'" << LL_ENDL; + } + else + { + LL_WARNS() << "==============================" << LL_ENDL; + LL_WARNS() << "From '" << APR_LOG << "':" << LL_ENDL; + std::string line; + while (std::getline(inf, line)) + { + LL_WARNS() << line << LL_ENDL; + } + LL_WARNS() << "==============================" << LL_ENDL; + } + } + throw; + } } /// Run Python script and wait for it to complete. @@ -191,7 +221,7 @@ struct PythonProcessLauncher LLProcess::Params mParams; LLProcessPtr mPy; std::string mDesc; - NamedTempFile mScript; + NamedExtTempFile mScript; }; /// convenience function for PythonProcessLauncher::run() @@ -214,30 +244,26 @@ static std::string python_out(const std::string& desc, const CONTENT& script) class NamedTempDir: public boost::noncopyable { public: - // Use python() function to create a temp directory: I've found - // nothing in either Boost.Filesystem or APR quite like Python's - // tempfile.mkdtemp(). - // Special extra bonus: on Mac, mkdtemp() reports a pathname - // starting with /var/folders/something, whereas that's really a - // symlink to /private/var/folders/something. Have to use - // realpath() to compare properly. NamedTempDir(): - mPath(python_out("mkdtemp()", - "from __future__ import with_statement\n" - "import os.path, sys, tempfile\n" - "with open(sys.argv[1], 'w') as f:\n" - " f.write(os.path.normcase(os.path.normpath(os.path.realpath(tempfile.mkdtemp()))))\n")) - {} + mPath(NamedTempFile::temp_path()), + mCreated(boost::filesystem::create_directories(mPath)) + { + mPath = boost::filesystem::canonical(mPath); + } ~NamedTempDir() { - aprchk(apr_dir_remove(mPath.c_str(), gAPRPoolp)); + if (mCreated) + { + boost::filesystem::remove_all(mPath); + } } - std::string getName() const { return mPath; } + std::string getName() const { return mPath.string(); } private: - std::string mPath; + boost::filesystem::path mPath; + bool mCreated; }; /***************************************************************************** @@ -355,7 +381,7 @@ namespace tut set_test_name("raw APR nonblocking I/O"); // Create a script file in a temporary place. - NamedTempFile script("py", + NamedExtTempFile script("py", "from __future__ import print_function" EOL "import sys" EOL "import time" EOL @@ -565,7 +591,13 @@ namespace tut " f.write(os.path.normcase(os.path.normpath(os.getcwd())))\n"); // Before running, call setWorkingDirectory() py.mParams.cwd = tempdir.getName(); - ensure_equals("os.getcwd()", py.run_read(), tempdir.getName()); + std::string expected{ tempdir.getName() }; +#if LL_WINDOWS + // SIGH, don't get tripped up by "C:" != "c:" -- + // but on the Mac, using tolower() fails because "/users" != "/Users"! + expected = utf8str_tolower(expected); +#endif + ensure_equals("os.getcwd()", py.run_read(), expected); } template<> template<> diff --git a/indra/llcommon/tests/llrand_test.cpp b/indra/llcommon/tests/llrand_test.cpp index 383e6f9e0a..ac5a33d0ba 100644 --- a/indra/llcommon/tests/llrand_test.cpp +++ b/indra/llcommon/tests/llrand_test.cpp @@ -29,7 +29,23 @@ #include "../test/lltut.h" #include "../llrand.h" +#include "stringize.h" +// In llrand.h, every function is documented to return less than the high end +// -- specifically, because you can pass a negative extent, they're documented +// never to return a value equal to the extent. +// So that we don't need two different versions of ensure_in_range(), when +// testing extent < 0, negate the return value and the extent before passing +// into ensure_in_range(). +template +void ensure_in_range(const std::string_view& name, + NUMBER value, NUMBER low, NUMBER high) +{ + auto failmsg{ stringize(name, " >= ", low, " (", value, ')') }; + tut::ensure(failmsg, (value >= low)); + failmsg = stringize(name, " < ", high, " (", value, ')'); + tut::ensure(failmsg, (value < high)); +} namespace tut { @@ -44,84 +60,65 @@ namespace tut template<> template<> void random_object_t::test<1>() { - F32 number = 0.0f; for(S32 ii = 0; ii < 100000; ++ii) { - number = ll_frand(); - ensure("frand >= 0", (number >= 0.0f)); - ensure("frand < 1", (number < 1.0f)); + ensure_in_range("frand", ll_frand(), 0.0f, 1.0f); } } template<> template<> void random_object_t::test<2>() { - F64 number = 0.0f; for(S32 ii = 0; ii < 100000; ++ii) { - number = ll_drand(); - ensure("drand >= 0", (number >= 0.0)); - ensure("drand < 1", (number < 1.0)); + ensure_in_range("drand", ll_drand(), 0.0, 1.0); } } template<> template<> void random_object_t::test<3>() { - F32 number = 0.0f; for(S32 ii = 0; ii < 100000; ++ii) { - number = ll_frand(2.0f) - 1.0f; - ensure("frand >= 0", (number >= -1.0f)); - ensure("frand < 1", (number <= 1.0f)); + ensure_in_range("frand(2.0f)", ll_frand(2.0f) - 1.0f, -1.0f, 1.0f); } } template<> template<> void random_object_t::test<4>() { - F32 number = 0.0f; for(S32 ii = 0; ii < 100000; ++ii) { - number = ll_frand(-7.0); - ensure("drand <= 0", (number <= 0.0)); - ensure("drand > -7", (number > -7.0)); + // Negate the result so we don't have to allow a templated low-end + // comparison as well. + ensure_in_range("-frand(-7.0)", -ll_frand(-7.0), 0.0f, 7.0f); } } template<> template<> void random_object_t::test<5>() { - F64 number = 0.0f; for(S32 ii = 0; ii < 100000; ++ii) { - number = ll_drand(-2.0); - ensure("drand <= 0", (number <= 0.0)); - ensure("drand > -2", (number > -2.0)); + ensure_in_range("-drand(-2.0)", -ll_drand(-2.0), 0.0, 2.0); } } template<> template<> void random_object_t::test<6>() { - S32 number = 0; for(S32 ii = 0; ii < 100000; ++ii) { - number = ll_rand(100); - ensure("rand >= 0", (number >= 0)); - ensure("rand < 100", (number < 100)); + ensure_in_range("rand(100)", ll_rand(100), 0, 100); } } template<> template<> void random_object_t::test<7>() { - S32 number = 0; for(S32 ii = 0; ii < 100000; ++ii) { - number = ll_rand(-127); - ensure("rand <= 0", (number <= 0)); - ensure("rand > -127", (number > -127)); + ensure_in_range("-rand(-127)", -ll_rand(-127), 0, 127); } } } diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index acb2953b5b..ac40125f75 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -45,11 +45,6 @@ typedef U32 uint32_t; #endif #include "boost/range.hpp" -#include "boost/foreach.hpp" -#include "boost/bind.hpp" -#include "boost/phoenix/bind/bind_function.hpp" -#include "boost/phoenix/core/argument.hpp" -using namespace boost::phoenix; #include "llsd.h" #include "llsdserialize.h" @@ -57,9 +52,11 @@ using namespace boost::phoenix; #include "llformat.h" #include "llmemorystream.h" +#include "../test/hexdump.h" #include "../test/lltut.h" #include "../test/namedtempfile.h" #include "stringize.h" +#include "StringVec.h" #include typedef std::function FormatterFunction; @@ -1796,16 +1793,12 @@ namespace tut // helper for TestPythonCompatible static std::string import_llsd("import os.path\n" "import sys\n" - "try:\n" - // new freestanding llsd package - " import llsd\n" - "except ImportError:\n" - // older llbase.llsd module - " from llbase import llsd\n"); + "import llsd\n"); // helper for TestPythonCompatible - template - void python(const std::string& desc, const CONTENT& script, int expect=0) + template + void python_expect(const std::string& desc, const CONTENT& script, int expect=0, + ARGS&&... args) { auto PYTHON(LLStringUtil::getenv("PYTHON")); ensure("Set $PYTHON to the Python interpreter", !PYTHON.empty()); @@ -1816,7 +1809,8 @@ namespace tut std::string q("\""); std::string qPYTHON(q + PYTHON + q); std::string qscript(q + scriptfile.getName() + q); - int rc = _spawnl(_P_WAIT, PYTHON.c_str(), qPYTHON.c_str(), qscript.c_str(), NULL); + int rc = _spawnl(_P_WAIT, PYTHON.c_str(), qPYTHON.c_str(), qscript.c_str(), + std::forward(args)..., NULL); if (rc == -1) { char buffer[256]; @@ -1832,6 +1826,10 @@ namespace tut LLProcess::Params params; params.executable = PYTHON; params.args.add(scriptfile.getName()); + for (const std::string& arg : StringVec{ std::forward(args)... }) + { + params.args.add(arg); + } LLProcessPtr py(LLProcess::create(params)); ensure(STRINGIZE("Couldn't launch " << desc << " script"), bool(py)); // Implementing timeout would mean messing with alarm() and @@ -1866,6 +1864,14 @@ namespace tut #endif } + // helper for TestPythonCompatible + template + void python(const std::string& desc, const CONTENT& script, ARGS&&... args) + { + // plain python() expects rc 0 + python_expect(desc, script, 0, std::forward(args)...); + } + struct TestPythonCompatible { TestPythonCompatible() {} @@ -1880,10 +1886,10 @@ namespace tut void TestPythonCompatibleObject::test<1>() { set_test_name("verify python()"); - python("hello", - "import sys\n" - "sys.exit(17)\n", - 17); // expect nonzero rc + python_expect("hello", + "import sys\n" + "sys.exit(17)\n", + 17); // expect nonzero rc } template<> template<> @@ -1899,7 +1905,7 @@ namespace tut static void writeLLSDArray(const FormatterFunction& serialize, std::ostream& out, const LLSD& array) { - for (const LLSD& item : llsd::inArray(array)) + for (const LLSD& item: llsd::inArray(array)) { // It's important to delimit the entries in this file somehow // because, although Python's llsd.parse() can accept a file @@ -1914,7 +1920,14 @@ namespace tut auto buffstr{ buffer.str() }; int bufflen{ static_cast(buffstr.length()) }; out.write(reinterpret_cast(&bufflen), sizeof(bufflen)); + LL_DEBUGS() << "Wrote length: " + << hexdump(reinterpret_cast(&bufflen), + sizeof(bufflen)) + << LL_ENDL; out.write(buffstr.c_str(), buffstr.length()); + LL_DEBUGS() << "Wrote data: " + << hexmix(buffstr.c_str(), buffstr.length()) + << LL_ENDL; } } @@ -1943,10 +1956,10 @@ namespace tut " else:\n" " raise AssertionError('Too many data items')\n"; - // Create an llsdXXXXXX file containing 'data' serialized to - // notation. + // Create an llsdXXXXXX file containing 'data' serialized per + // FormatterFunction. NamedTempFile file("llsd", - // NamedTempFile's boost::function constructor + // NamedTempFile's function constructor // takes a callable. To this callable it passes the // std::ostream with which it's writing the // NamedTempFile. @@ -1954,34 +1967,50 @@ namespace tut (std::ostream& out) { writeLLSDArray(serialize, out, cdata); }); - python("read C++ " + desc, - placeholders::arg1 << - import_llsd << - "from functools import partial\n" - "import io\n" - "import struct\n" - "lenformat = struct.Struct('i')\n" - "def parse_each(inf):\n" - " for rawlen in iter(partial(inf.read, lenformat.size), b''):\n" - " len = lenformat.unpack(rawlen)[0]\n" - // Since llsd.parse() has no max_bytes argument, instead of - // passing the input stream directly to parse(), read the item - // into a distinct bytes object and parse that. - " data = inf.read(len)\n" - " try:\n" - " frombytes = llsd.parse(data)\n" - " except llsd.LLSDParseError as err:\n" - " print(f'*** {err}')\n" - " print(f'Bad content:\\n{data!r}')\n" - " raise\n" - // Also try parsing from a distinct stream. - " stream = io.BytesIO(data)\n" - " fromstream = llsd.parse(stream)\n" - " assert frombytes == fromstream\n" - " yield frombytes\n" - << pydata << - // Don't forget raw-string syntax for Windows pathnames. - "verify(parse_each(open(r'" << file.getName() << "', 'rb')))\n"); + // 'debug' starts empty because it's intended as an output file + NamedTempFile debug("debug", ""); + + try + { + python("read C++ " + desc, + [&](std::ostream& out){ out << + import_llsd << + "from functools import partial\n" + "import io\n" + "import struct\n" + "lenformat = struct.Struct('i')\n" + "def parse_each(inf):\n" + " for rawlen in iter(partial(inf.read, lenformat.size), b''):\n" + " print('Read length:', ''.join(('%02x' % b) for b in rawlen),\n" + " file=debug)\n" + " len = lenformat.unpack(rawlen)[0]\n" + // Since llsd.parse() has no max_bytes argument, instead of + // passing the input stream directly to parse(), read the item + // into a distinct bytes object and parse that. + " data = inf.read(len)\n" + " print('Read data: ', repr(data), file=debug)\n" + " try:\n" + " frombytes = llsd.parse(data)\n" + " except llsd.LLSDParseError as err:\n" + " print(f'*** {err}')\n" + " print(f'Bad content:\\n{data!r}')\n" + " raise\n" + // Also try parsing from a distinct stream. + " stream = io.BytesIO(data)\n" + " fromstream = llsd.parse(stream)\n" + " assert frombytes == fromstream\n" + " yield frombytes\n" + << pydata << + // Don't forget raw-string syntax for Windows pathnames. + "debug = open(r'" << debug.getName() << "', 'w')\n" + "verify(parse_each(open(r'" << file.getName() << "', 'rb')))\n";}); + } + catch (const failure&) + { + LL_DEBUGS() << "Script debug output:" << LL_ENDL; + debug.peep_log(); + throw; + } } template<> template<> @@ -2068,7 +2097,7 @@ namespace tut NamedTempFile file("llsd", ""); python("Python " + pyformatter, - placeholders::arg1 << + [&](std::ostream& out){ out << import_llsd << "import struct\n" "lenformat = struct.Struct('i')\n" @@ -2086,7 +2115,7 @@ namespace tut " for item in DATA:\n" " serialized = llsd." << pyformatter << "(item)\n" " f.write(lenformat.pack(len(serialized)))\n" - " f.write(serialized)\n"); + " f.write(serialized)\n";}); std::ifstream inf(file.getName().c_str()); LLSD item; diff --git a/indra/llcommon/tests/workqueue_test.cpp b/indra/llcommon/tests/workqueue_test.cpp index 1d73f7aa0d..7655a7aa1f 100644 --- a/indra/llcommon/tests/workqueue_test.cpp +++ b/indra/llcommon/tests/workqueue_test.cpp @@ -83,7 +83,11 @@ namespace tut // signal the work item that it can quit; consider LLOneShotCond. LLCond data; auto start = WorkQueue::TimePoint::clock::now(); - auto interval = 100ms; + // 2s seems like a long time to wait, since it directly impacts the + // duration of this test program. Unfortunately GitHub's Mac runners + // are pretty wimpy, and we're getting spurious "too late" errors just + // because the thread doesn't wake up as soon as we want. + auto interval = 2s; queue.postEvery( interval, [&data, count = 0] diff --git a/indra/llinventory/llsettingsbase.cpp b/indra/llinventory/llsettingsbase.cpp index 936b166409..6ea93e045d 100644 --- a/indra/llinventory/llsettingsbase.cpp +++ b/indra/llinventory/llsettingsbase.cpp @@ -31,6 +31,7 @@ #include #include "llsdserialize.h" +#include //========================================================================= namespace diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index c4e13a7f85..c064567ecf 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -31,6 +31,7 @@ #include "lltrace.h" #include "llfasttimer.h" #include "v3colorutil.h" +#include //========================================================================= namespace diff --git a/indra/llinventory/llsettingswater.cpp b/indra/llinventory/llsettingswater.cpp index d732032a6c..89156000b0 100644 --- a/indra/llinventory/llsettingswater.cpp +++ b/indra/llinventory/llsettingswater.cpp @@ -32,6 +32,7 @@ #include "llfasttimer.h" #include "v3colorutil.h" #include "indra_constants.h" +#include const std::string LLSettingsWater::SETTING_BLUR_MULTIPLIER("blur_multiplier"); const std::string LLSettingsWater::SETTING_FOG_COLOR("water_fog_color"); diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py index 8e9b6c09e7..ff8f40a144 100755 --- a/indra/llmessage/tests/test_llsdmessage_peer.py +++ b/indra/llmessage/tests/test_llsdmessage_peer.py @@ -33,7 +33,6 @@ import os import sys from http.server import HTTPServer, BaseHTTPRequestHandler -from llsd.fastest_elementtree import parse as xml_parse import llsd from testrunner import freeport, run, debug, VERBOSE import time diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 5235a3e6f4..93409ff0c2 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.6.16 +6.6.17 diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index c4ac221e5b..16e5103edd 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -13878,7 +13878,7 @@ Change of this parameter will affect the layout of buttons in notification toast Type String Value - https://jira.firestormviewer.org/secure/CreateIssueDetails!init.jspa?pid=10003&issuetype=8&priority=3&environment=[ENVIRONMENT] + https://phoenixviewer.com/app/file-a-jira/?environment=[ENVIRONMENT] RevokePermsOnStopAnimation diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 2f165fff6d..0e4b16b328 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3800,8 +3800,10 @@ LLSD LLAppViewer::getViewerInfo() const // LLFloaterAbout. LLSD info; auto& versionInfo(LLVersionInfo::instance()); + // With GitHub builds, the build number is too big to fit in a 32-bit int, + // and LLSD doesn't deal with integers wider than int. Use string. info["VIEWER_VERSION"] = llsd::array(versionInfo.getMajor(), versionInfo.getMinor(), - versionInfo.getPatch(), versionInfo.getBuild()); + versionInfo.getPatch(), stringize(versionInfo.getBuild())); info["VIEWER_VERSION_STR"] = versionInfo.getVersion(); info["BUILD_DATE"] = __DATE__; info["BUILD_TIME"] = __TIME__; @@ -4328,7 +4330,7 @@ void LLAppViewer::writeSystemInfo() gDebugInfo["ClientInfo"]["MajorVersion"] = LLVersionInfo::instance().getMajor(); gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::instance().getMinor(); gDebugInfo["ClientInfo"]["PatchVersion"] = LLVersionInfo::instance().getPatch(); - gDebugInfo["ClientInfo"]["BuildVersion"] = LLVersionInfo::instance().getBuild(); + gDebugInfo["ClientInfo"]["BuildVersion"] = std::to_string(LLVersionInfo::instance().getBuild()); gDebugInfo["ClientInfo"]["AddressSize"] = LLVersionInfo::instance().getAddressSize(); // Add which flavor of FS generated an error @@ -6469,7 +6471,7 @@ void LLAppViewer::handleLoginComplete() gDebugInfo["ClientInfo"]["MajorVersion"] = LLVersionInfo::instance().getMajor(); gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::instance().getMinor(); gDebugInfo["ClientInfo"]["PatchVersion"] = LLVersionInfo::instance().getPatch(); - gDebugInfo["ClientInfo"]["BuildVersion"] = LLVersionInfo::instance().getBuild(); + gDebugInfo["ClientInfo"]["BuildVersion"] = std::to_string(LLVersionInfo::instance().getBuild()); // Add which flavor of FS generated an error #ifdef OPENSIM diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index c9378ea67f..b5fb1716da 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -45,6 +45,7 @@ #include "llxmlrpctransaction.h" #include "llviewernetwork.h" #include "llpanel.h" +#include "stringize.h" const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0; @@ -158,7 +159,7 @@ void LLCurrencyUIManager::Impl::updateCurrencyInfo() mLocalCurrencyEstimated = true; return; } - + LLXMLRPCValue keywordArgs = LLXMLRPCValue::createStruct(); keywordArgs.appendString("agentId", gAgent.getID().asString()); keywordArgs.appendString( @@ -170,8 +171,10 @@ void LLCurrencyUIManager::Impl::updateCurrencyInfo() keywordArgs.appendInt("viewerMajorVersion", LLVersionInfo::instance().getMajor()); keywordArgs.appendInt("viewerMinorVersion", LLVersionInfo::instance().getMinor()); keywordArgs.appendInt("viewerPatchVersion", LLVersionInfo::instance().getPatch()); - keywordArgs.appendInt("viewerBuildVersion", LLVersionInfo::instance().getBuild()); - + // With GitHub builds, the build number is too big to fit in a 32-bit int, + // and XMLRPC_VALUE doesn't deal with integers wider than int. Use string. + keywordArgs.appendString("viewerBuildVersion", stringize(LLVersionInfo::instance().getBuild())); + LLXMLRPCValue params = LLXMLRPCValue::createArray(); params.append(keywordArgs); @@ -245,7 +248,9 @@ void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password) keywordArgs.appendInt("viewerMajorVersion", LLVersionInfo::instance().getMajor()); keywordArgs.appendInt("viewerMinorVersion", LLVersionInfo::instance().getMinor()); keywordArgs.appendInt("viewerPatchVersion", LLVersionInfo::instance().getPatch()); - keywordArgs.appendInt("viewerBuildVersion", LLVersionInfo::instance().getBuild()); + // With GitHub builds, the build number is too big to fit in a 32-bit int, + // and XMLRPC_VALUE doesn't deal with integers wider than int. Use string. + keywordArgs.appendString("viewerBuildVersion", stringize(LLVersionInfo::instance().getBuild())); LLXMLRPCValue params = LLXMLRPCValue::createArray(); params.append(keywordArgs); diff --git a/indra/newview/llenvironment.h b/indra/newview/llenvironment.h index 0ae2bcdd90..65af3ab57f 100644 --- a/indra/newview/llenvironment.h +++ b/indra/newview/llenvironment.h @@ -42,6 +42,8 @@ #include +#include + //------------------------------------------------------------------------- class LLViewerCamera; class LLParcel; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index e12390a2fa..d90bf4f71c 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -93,6 +93,8 @@ #include "llgiveinventory.h" #include "llinventoryfunctions.h" +#include + const static std::string ADHOC_NAME_SUFFIX(" Conference"); const static std::string NEARBY_P2P_BY_OTHER("nearby_P2P_by_other"); diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index 6206d9b73d..aea139d273 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -2426,6 +2426,8 @@ void LLInventoryGallery::startDrag() ids.push_back(selected_id); } } + // We must have set this for some reason, but it's causing compile errors + (void)src; LLToolDragAndDrop::getInstance()->beginMultiDrag(types, ids, LLToolDragAndDrop::SOURCE_AGENT); } diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index f8c92c86f8..f5eca8687b 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1037,10 +1037,12 @@ LLFolderViewFolder * LLInventoryPanel::createFolderViewFolder(LLInvFVBridge * br // params.tool_tip = params.name; // Don't bother with tooltips in inventory params.allow_drop = allow_drop; - params.font_color = (bridge->isLibraryItem() ? sLibraryColor : sDefaultColor); - params.font_highlight_color = (bridge->isLibraryItem() ? sLibraryColor : sDefaultHighlightColor); - // Inventory specials + //params.font_color = (bridge->isLibraryItem() ? sLibraryColor : sDefaultColor); + //params.font_highlight_color = (bridge->isLibraryItem() ? sLibraryColor : sDefaultHighlightColor); + params.font_color = (bridge->isLibraryItem() ? sLibraryColor : (bridge->isLink() ? sLinkColor : sDefaultColor)); + params.font_highlight_color = (bridge->isLibraryItem() ? sLibraryColor : (bridge->isLink() ? sLinkColor : sDefaultHighlightColor)); + params.for_inventory = true; static LLCachedControl fsFolderViewItemHeight(*LLUI::getInstance()->mSettingGroups["config"], "FSFolderViewItemHeight"); @@ -1063,10 +1065,12 @@ LLFolderViewItem * LLInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge params.rect = LLRect (0, 0, 0, 0); // params.tool_tip = params.name; // Don't bother with tooltips in inventory - params.font_color = (bridge->isLibraryItem() ? sLibraryColor : sDefaultColor); - params.font_highlight_color = (bridge->isLibraryItem() ? sLibraryColor : sDefaultHighlightColor); - // Inventory specials + //params.font_color = (bridge->isLibraryItem() ? sLibraryColor : sDefaultColor); + //params.font_highlight_color = (bridge->isLibraryItem() ? sLibraryColor : sDefaultHighlightColor); + params.font_color = (bridge->isLibraryItem() ? sLibraryColor : (bridge->isLink() ? sLinkColor : sDefaultColor)); + params.font_highlight_color = (bridge->isLibraryItem() ? sLibraryColor : (bridge->isLink() ? sLinkColor : sDefaultHighlightColor)); + params.for_inventory = true; static LLCachedControl fsFolderViewItemHeight(*LLUI::getInstance()->mSettingGroups["config"], "FSFolderViewItemHeight"); diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index dcd30f40f5..c4fbd33855 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -44,7 +44,7 @@ #include #include -#include +#include #include #if LL_MSVC diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 626d9cc3c0..f66b9a27c3 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -67,6 +67,7 @@ #include "lltrans.h" #include "llglheaders.h" #include "llpanelloginlistener.h" +#include "stringize.h" #if LL_WINDOWS #pragma warning(disable: 4355) // 'this' used in initializer list @@ -302,10 +303,9 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, setDefaultBtn(def_btn); std::string channel = LLVersionInfo::instance().getChannel(); - std::string version = llformat("%s (%d)", - LLVersionInfo::instance().getShortVersion().c_str(), - LLVersionInfo::instance().getBuild()); - + std::string version = stringize(LLVersionInfo::instance().getShortVersion(), " (", + LLVersionInfo::instance().getBuild(), ')'); + LLTextBox* forgot_password_text = getChild("forgot_password_text"); forgot_password_text->setClickedCallback(onClickForgotPassword, NULL); @@ -896,9 +896,8 @@ void LLPanelLogin::loadLoginPage() } // Channel and Version - params["version"] = llformat("%s (%d)", - LLVersionInfo::instance().getShortVersion().c_str(), - LLVersionInfo::instance().getBuild()); + params["version"] = stringize(LLVersionInfo::instance().getShortVersion(), " (", + LLVersionInfo::instance().getBuild(), ')'); params["channel"] = LLVersionInfo::instance().getChannel(); // Grid diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index d9abdfeb77..e114d8d7d5 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -260,7 +260,10 @@ BOOL LLSidepanelInventory::postBuild() //gSavedSettings.getControl("InventoryDisplayInbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayInboxChanged)); LLFloater *floater = dynamic_cast(getParent()); - if (floater && floater->getKey().isUndefined() && !sLoginCompleted) + // Secondary inventory window + //if (floater && floater->getKey().isUndefined() && !sLoginCompleted) + if (floater && ((floater->getKey().isUndefined() && !sLoginCompleted) || (floater->getKey().has("is_secondary") && floater->getKey()["is_secondary"].asBoolean()))) + // { // Prefill inventory for primary inventory floater // Other floaters should fill on visibility change @@ -702,3 +705,11 @@ void LLSidepanelInventory::onReloadInboxClicked() } } // + +// Secondary inventory window +//static +LLFloater* LLSidepanelInventory::createSecondaryInventoryWindow(const LLSD& key) +{ + return LLFloaterReg::build(LLSD().with("is_secondary", true)); +} +// diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h index 2214f3a052..43ad980a25 100644 --- a/indra/newview/llsidepanelinventory.h +++ b/indra/newview/llsidepanelinventory.h @@ -39,6 +39,7 @@ class LLLayoutPanel; class LLPanelMainInventory; class LLSidepanelItemInfo; class LLSidepanelTaskInfo; +class LLFloater; // Secondary inventory window class LLSidepanelInventory : public LLPanel { @@ -87,6 +88,9 @@ public: static void cleanup(); + // Secondary inventory window + static LLFloater* createSecondaryInventoryWindow(const LLSD& key); + protected: // Tracks highlighted (selected) item in inventory panel. LLInventoryItem *getSelectedItem(); diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index 9f5d3dcd8b..9b8db4a7d6 100644 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -39,6 +39,7 @@ #include "json/reader.h" #include "llcorehttputil.h" #include "llurlregistry.h" +#include "stringize.h" static const std::string AZURE_NOTRANSLATE_OPENING_TAG("
"); @@ -160,12 +161,12 @@ void LLTranslationAPIHandler::verifyKeyCoro(LLTranslate::EService service, LLSD LLCore::HttpHeaders::ptr_t httpHeaders(new LLCore::HttpHeaders); - std::string user_agent = llformat("%s %d.%d.%d (%d)", - LLVersionInfo::instance().getChannel().c_str(), - LLVersionInfo::instance().getMajor(), - LLVersionInfo::instance().getMinor(), - LLVersionInfo::instance().getPatch(), - LLVersionInfo::instance().getBuild()); + std::string user_agent = stringize( + LLVersionInfo::instance().getChannel(), ' ', + LLVersionInfo::instance().getMajor(), '.', + LLVersionInfo::instance().getMinor(), '.', + LLVersionInfo::instance().getPatch(), " (", + LLVersionInfo::instance().getBuild(), ')'); initHttpHeader(httpHeaders, user_agent, key); @@ -215,12 +216,12 @@ void LLTranslationAPIHandler::translateMessageCoro(LanguagePair_t fromTo, std::s LLCore::HttpHeaders::ptr_t httpHeaders(new LLCore::HttpHeaders); - std::string user_agent = llformat("%s %d.%d.%d (%d)", - LLVersionInfo::instance().getChannel().c_str(), - LLVersionInfo::instance().getMajor(), - LLVersionInfo::instance().getMinor(), - LLVersionInfo::instance().getPatch(), - LLVersionInfo::instance().getBuild()); + std::string user_agent = stringize( + LLVersionInfo::instance().getChannel(), ' ', + LLVersionInfo::instance().getMajor(), '.', + LLVersionInfo::instance().getMinor(), '.', + LLVersionInfo::instance().getPatch(), " (", + LLVersionInfo::instance().getBuild(), ')'); initHttpHeader(httpHeaders, user_agent); httpOpts->setSSLVerifyPeer(false); diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp index adc7d8f960..bb1e0e26a9 100644 --- a/indra/newview/llversioninfo.cpp +++ b/indra/newview/llversioninfo.cpp @@ -73,7 +73,7 @@ void LLVersionInfo::initSingleton() // fully constructed; such calls don't really belong in the constructor. // cache the version string - version = STRINGIZE(getShortVersion() << "." << getBuild()); + version = stringize(getShortVersion(), ".", getBuild()); } LLVersionInfo::~LLVersionInfo() @@ -95,7 +95,7 @@ S32 LLVersionInfo::getPatch() return LL_VIEWER_VERSION_PATCH; } -S32 LLVersionInfo::getBuild() +U64 LLVersionInfo::getBuild() { return LL_VIEWER_VERSION_BUILD; } diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h index a67577b020..6a42649851 100644 --- a/indra/newview/llversioninfo.h +++ b/indra/newview/llversioninfo.h @@ -61,7 +61,7 @@ public: S32 getPatch(); /// return the build number as an integer - S32 getBuild(); + U64 getBuild(); /// return the full viewer version as a string like "2.0.0.200030" std::string getVersion(); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index ca5fa49ef6..3b1a1025b8 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -221,6 +221,7 @@ #include "llfloaterscriptrecover.h" #include "llfloatersearchreplace.h" #include "llpanelgroup.h" +#include "llsidepanelinventory.h" #include "NACLfloaterexploresounds.h" #include "particleeditor.h" #include "quickprefs.h" @@ -633,10 +634,10 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("quickprefs", "floater_quickprefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("region_tracker", "floater_region_tracker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("search_replace", "floater_search_replace.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); - LLFloaterReg::add("secondary_inventory", "floater_my_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("secondary_inventory", "floater_my_inventory.xml", (LLFloaterBuildFunc)&LLSidepanelInventory::createSecondaryInventoryWindow); LLFloaterReg::add("script_recover", "floater_script_recover.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("sound_explorer", "floater_NACL_explore_sounds.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); - LLFloaterReg::add("vram_usage", "floater_fs_vram_usage.xml", static_cast( &LLFloaterReg::build< FSFloaterVRAMUsage >) ); + LLFloaterReg::add("vram_usage", "floater_fs_vram_usage.xml", static_cast(&LLFloaterReg::build)); LLFloaterReg::add("local_mesh_floater", "floater_vj_local_mesh.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); // local mesh LLFloaterReg::registerControlVariables(); // Make sure visibility and rect controls get preserved when saving diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index de2527e497..0e295a4b3f 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -160,7 +160,7 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url, substitution["VERSION_MAJOR"] = LLVersionInfo::instance().getMajor(); substitution["VERSION_MINOR"] = LLVersionInfo::instance().getMinor(); substitution["VERSION_PATCH"] = LLVersionInfo::instance().getPatch(); - substitution["VERSION_BUILD"] = LLVersionInfo::instance().getBuild(); + substitution["VERSION_BUILD"] = std::to_string(LLVersionInfo::instance().getBuild()); substitution["CHANNEL"] = LLVersionInfo::instance().getChannel(); substitution["GRID"] = LLGridManager::getInstance()->getGridId(); substitution["GRID_LOWERCASE"] = utf8str_tolower(LLGridManager::getInstance()->getGridId()); diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index f65447f830..57ba768aa0 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -42,6 +42,7 @@ #include "bufferarray.h" #include "llversioninfo.h" #include "llviewercontrol.h" +#include "stringize.h" // Have to include these last to avoid queue redefinition! @@ -399,14 +400,14 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip, const httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_TEXT_XML); - std::string user_agent = llformat("%s %d.%d.%d (%d)", - LLVersionInfo::instance().getChannel().c_str(), - LLVersionInfo::instance().getMajor(), - LLVersionInfo::instance().getMinor(), - LLVersionInfo::instance().getPatch(), - LLVersionInfo::instance().getBuild()); + std::string user_agent = stringize( + LLVersionInfo::instance().getChannel(), ' ', + LLVersionInfo::instance().getMajor(), '.', + LLVersionInfo::instance().getMinor(), '.', + LLVersionInfo::instance().getPatch(), " (", + LLVersionInfo::instance().getBuild(), ')'); - httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent); + httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent); ///* Setting the DNS cache timeout to -1 disables it completely. //This might help with bug #503 */ diff --git a/indra/newview/skins/starlight/xui/en/panel_main_inventory.xml b/indra/newview/skins/starlight/xui/en/panel_main_inventory.xml index 2520428234..425d93a530 100644 --- a/indra/newview/skins/starlight/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/starlight/xui/en/panel_main_inventory.xml @@ -1,14 +1,12 @@ + name="main inventory panel"> @@ -24,150 +22,336 @@ name="ItemcountUnknown"> Fetched [ITEM_COUNT] Elements [FILTER] - - Elements: - - - - - - - - - - - - - - - - - - - - - - - - Inventory + Multi_Folder_Mode + Single_Folder_Mode + + + +