# Conflicts:
#	indra/newview/lldrawable.cpp
master
Ansariel 2023-11-15 11:33:41 +01:00
commit 198bd5cfc0
18 changed files with 334 additions and 292 deletions

View File

@ -1,5 +1,6 @@
name: Build viewer
on:
workflow_dispatch:
push:
branches:
- "Firestorm*.*.*"
@ -21,14 +22,7 @@ jobs:
matrix:
os: [macos-11,ubuntu-20.04,windows-2022]
grid: [sl,os]
addrsize: [64,32]
exclude:
- os: ubuntu-20.04
addrsize: 32
- os: macos-11
addrsize: 32
# - grid: sl
# addrsize: 32
addrsize: [64]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
@ -322,5 +316,5 @@ jobs:
rclone_config: ${{ secrets.RCLONE_CONFIG }}
- name: Copy files to remote host
run: rclone copy ${{steps.download.outputs.download-path}}/${{ env.FS_RELEASE_FOLDER }} fs_deploy:${{ env.FS_RELEASE_FOLDER }}
run: rclone copy ${{steps.download.outputs.download-path}}/${{ env.FS_RELEASE_FOLDER }} fs_r2_deploy:viewerdownloads/${{ env.FS_RELEASE_FOLDER }}

View File

@ -2,11 +2,11 @@ Before you start configuring your Windows build system, be aware of our tested c
Memory: You will need at least 2GB RAM, 4GB strongly recommended.
CPU: Multiple CPUs are strongly recommended.
A build can take over an hour.
Visual Studio 2017 Community Edition.
Visual Studio 2017/2022 Community Edition.
Ensure you can build a stock viewer-development try as described in the SL wiki. Before asking for any help
compiling Firestorm, make sure you can build the Second Life viewer first. If you try and skip this step, you may
receive much less help. http://wiki.secondlife.com/wiki/Visual_Studio_2013_Viewer_Builds
receive much less help. https://wiki.secondlife.com/wiki/Build_the_Viewer_on_Windows
If you want to use licensed FMOD or KDU build libraries (they are optional) you have to provision these yourself.
If you're licensing these with Phoenix/Firestorm, ask for the libraries for fmod and kdu. Put them into:
@ -20,11 +20,11 @@ mailing list. We've created a non-KDU build target to make this easier. Everywhe
"ReleaseFS_open" instead. This will perform the same build, using OpenJpeg instead of KDU.
To build Firestorm:
To build Firestorm - a more detailed instruction can be found at https://wiki.firestormviewer.org/fs_compiling_firestorm_windows:
Open a CMD shell and navigating to your firestorm code repo:
autobuild build -c ReleaseFS
autobuild build -A 64 -c ReleaseFS
Other build targets you may use are:
@ -33,22 +33,18 @@ Other build targets you may use are:
RelWithDebInfoFS_open (no KDU, no FMOD)
Other examples:
autobuild configure -c ReleaseFS # basic configuration step, don't build, just configure
autobuild configure -c ReleaseFS -- --clean # clean the output area first, then configure
autobuild configure -c ReleaseFS -- --chan Private-Yourname # configure with a custom channel
autobuild configure -A 64 -c ReleaseFS # basic configuration step, don't build, just configure
autobuild configure -A 64 -c ReleaseFS -- --clean # clean the output area first, then configure
autobuild configure -A 64 -c ReleaseFS -- --chan Private-Yourname # configure with a custom channel
autobuild build -c ReleaseFS --no-configure # default quick rebuild
autobuild build -A 64 -c ReleaseFS --no-configure # default quick rebuild
If you want to set custom configuration, do this in the configure step separately from build, then run "autobuild
build -c ReleaseFS --no-configure" as a secondary step.
If you want to build the 64bit version, add the parameter -A 64 to the autobuild commands, e.g.:
autobuild configure -A 64 -c ReleaseFS
autobuild build -A 64 -c ReleaseFS --no-configure
build -A 64 -c ReleaseFS --no-configure" as a secondary step.
Logs:
Look for logs in build-vc150-32/logs for 32bit builds and build-vc150-64/logs for 64bit
Look for logs in build-vc1x0-64/logs
Output:
Look for output in build-vc150-32/newview/Release for 32bit builds and build-vc150-64/newview/Release for 64bit
Look for output in build-vc1x0-32/newview/Release

View File

@ -28,7 +28,7 @@
<key>hash</key>
<string>535006965531b4a92e4951ee8dbe2745</string>
<key>url</key>
<string>http://3p.firestormviewer.org/SDL2-2.28.4-linux64-232750919.tar.bz2</string>
<string>https://3p.firestormviewer.org/SDL2-2.28.4-linux64-232750919.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -56,7 +56,7 @@
<key>hash</key>
<string>01f39ecf80dae64e30402ac384035b3e</string>
<key>url</key>
<string>http://downloads.phoenixviewer.com/gstreamer10-1.6.3.201605191852-linux-201605191852.tar.bz2</string>
<string>https://3p.firestormviewer.org/gstreamer10-1.6.3.201605191852-linux-201605191852.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -84,7 +84,7 @@
<key>hash</key>
<string>482c2b25bbfd25edc058a02f82da39b2</string>
<key>url</key>
<string>http://3p.firestormviewer.org/breakpad-4708e6fb-linux64_bionic-220392253.tar.bz2</string>
<string>https://3p.firestormviewer.org/breakpad-4708e6fb-linux64_bionic-220392253.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -112,7 +112,7 @@
<key>hash</key>
<string>80d157facdba399b3a59c400e29cb625</string>
<key>url</key>
<string>http://3p.firestormviewer.org/glib-2.64.6.230870115-linux64-230870115.tar.bz2</string>
<string>https://3p.firestormviewer.org/glib-2.64.6.230870115-linux64-230870115.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -140,7 +140,7 @@
<key>hash</key>
<string>81fe1e927e4fe3c5e5f15ce6219ca883</string>
<key>url</key>
<string>http://3p.firestormviewer.org/fltk-1.3.5.202282121-linux64-202282121.tar.bz2</string>
<string>https://3p.firestormviewer.org/fltk-1.3.5.202282121-linux64-202282121.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@ -170,7 +170,7 @@
<key>hash</key>
<string>0008a7b291fa1863ba41424b4e3ac302</string>
<key>url</key>
<string>http://3p.firestormviewer.org/jemalloc-5.3.0-linux64-222631217.tar.bz2</string>
<string>https://3p.firestormviewer.org/jemalloc-5.3.0-linux64-222631217.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -196,7 +196,7 @@
<key>hash</key>
<string>7d375112b162e32e37262da4a6c0a702</string>
<key>url</key>
<string>http://3p.firestormviewer.org/ndPhysicsStub-1.0-darwin-202330107.tar.bz2</string>
<string>https://3p.firestormviewer.org/ndPhysicsStub-1.0-darwin-202330107.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@ -208,7 +208,7 @@
<key>hash</key>
<string>c266a8d6124fc11e41a82c288f2bf8e4</string>
<key>url</key>
<string>http://3p.firestormviewer.org/ndPhysicsStub-1.202321033-linux64-202321033.tar.bz2</string>
<string>https://3p.firestormviewer.org/ndPhysicsStub-1.202321033-linux64-202321033.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -220,7 +220,7 @@
<key>hash</key>
<string>02f70159e14c7b7213b22a0225508c46</string>
<key>url</key>
<string>http://3p.firestormviewer.org/ndPhysicsStub-1.0-windows64-202121823.tar.bz2</string>
<string>https://3p.firestormviewer.org/ndPhysicsStub-1.0-windows64-202121823.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
@ -246,7 +246,7 @@
<key>hash</key>
<string>94fc457c46e1fb94b31251bd4747d10f</string>
<key>url</key>
<string>http://3p.firestormviewer.org/glod-1.0pre3.171101143-darwin64-171101143.tar.bz2</string>
<string>https://3p.firestormviewer.org/glod-1.0pre3.171101143-darwin64-171101143.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -258,7 +258,7 @@
<key>hash</key>
<string>acc1181cd31ef32c3724eda84ae4b580</string>
<key>url</key>
<string>http://3p.firestormviewer.org/glod-1.0pre3.180990827-linux64-180990827.tar.bz2</string>
<string>https://3p.firestormviewer.org/glod-1.0pre3.180990827-linux64-180990827.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -270,7 +270,7 @@
<key>hash</key>
<string>e906cf08bfbfbd9d4fc78557e021e7d0</string>
<key>url</key>
<string>http://3p.firestormviewer.org/glod-1.0pre3.vs2017-1906061512-windows64-vs2017-1906061512.tar.bz2</string>
<string>https://3p.firestormviewer.org/glod-1.0pre3.vs2017-1906061512-windows64-vs2017-1906061512.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
@ -298,7 +298,7 @@
<key>hash</key>
<string>33300134846d0f00ac4f31c1a190e3e6</string>
<key>url</key>
<uri>http://3p.firestormviewer.org/gntp_growl-1.0-darwin-201505101047-r12.tar.bz2</uri>
<uri>https://3p.firestormviewer.org/gntp_growl-1.0-darwin-201505101047-r12.tar.bz2</uri>
</map>
<key>name</key>
<string>darwin</string>
@ -310,7 +310,7 @@
<key>hash</key>
<string>af06208ec80b1f170cc560141602e2dc</string>
<key>url</key>
<uri>http://3p.firestormviewer.org/libnotify-0.4.4-linux-20101003.tar.bz2</uri>
<uri>https://3p.firestormviewer.org/libnotify-0.4.4-linux-20101003.tar.bz2</uri>
</map>
<key>name</key>
<string>linux64</string>
@ -322,7 +322,7 @@
<key>hash</key>
<string>a333b335104b3d0df14b9be005ef1571</string>
<key>url</key>
<string>http://3p.firestormviewer.org/gntp_growl-1.0-windows64-vs2017-1906061512.tar.bz2</string>
<string>https://3p.firestormviewer.org/gntp_growl-1.0-windows64-vs2017-1906061512.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
@ -350,7 +350,7 @@
<key>hash</key>
<string>f63f07d4c87fbbb698b9039583f08b76</string>
<key>url</key>
<uri>http://3p.firestormviewer.org/discord_rpc-3.4.0-windows64-192581529.tar.bz2</uri>
<uri>https://3p.firestormviewer.org/discord_rpc-3.4.0-windows64-192581529.tar.bz2</uri>
</map>
<key>name</key>
<string>windows64</string>
@ -362,7 +362,7 @@
<key>hash</key>
<string>cefa1cdb50a85e36114ca89df66c0b5a</string>
<key>url</key>
<uri>http://3p.firestormviewer.org/discord_rpc-3.4.0-linux64-192540843.tar.bz2</uri>
<uri>https://3p.firestormviewer.org/discord_rpc-3.4.0-linux64-192540843.tar.bz2</uri>
</map>
<key>name</key>
<string>linux64</string>
@ -374,7 +374,7 @@
<key>hash</key>
<string>3bc297a0fa47094bb52d361f80186387</string>
<key>url</key>
<uri>http://3p.firestormviewer.org/discord_rpc-3.4.0-darwin64-192522358.tar.bz2</uri>
<uri>https://3p.firestormviewer.org/discord_rpc-3.4.0-darwin64-192522358.tar.bz2</uri>
</map>
<key>name</key>
<string>darwin64</string>
@ -392,7 +392,7 @@
<key>hash</key>
<string>64c1dff0e19792acec7fd32556bf4d7b</string>
<key>url</key>
<string>http://3p.firestormviewer.org/SDL-1.2.15-linux64-181411635.tar.bz2</string>
<string>https://3p.firestormviewer.org/SDL-1.2.15-linux64-181411635.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -486,7 +486,7 @@
<key>hash</key>
<string>1c341bdbb5fd0c8a8930f76e6c1647d4</string>
<key>url</key>
<string>http://3p.firestormviewer.org/apr_suite-1.4.5.230921251-linux64-230921251.tar.bz2</string>
<string>https://3p.firestormviewer.org/apr_suite-1.4.5.230921251-linux64-230921251.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -544,7 +544,7 @@
<key>hash</key>
<string>8d96a9d1a9a208b1f48ac677edb7ca4d</string>
<key>url</key>
<string>http://3p.firestormviewer.org/boost-1.72-linux64-222121224.tar.bz2</string>
<string>https://3p.firestormviewer.org/boost-1.72-linux64-222121224.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -762,7 +762,7 @@
<key>hash</key>
<string>8e92fc9ec2b3be6d2a5387fc283f954f</string>
<key>url</key>
<string>http://3p.firestormviewer.org/curl-8.3.0.232750741-linux64-232750741.tar.bz2</string>
<string>https://3p.firestormviewer.org/curl-8.3.0.232750741-linux64-232750741.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -806,7 +806,7 @@
<key>hash</key>
<string>2d59bb6f4bd38a18d9250ff010a13b59</string>
<key>url</key>
<string>http://3p.firestormviewer.org/dictionaries-2.46203-common-46203.tar.bz2</string>
<string>https://3p.firestormviewer.org/dictionaries-2.46203-common-46203.tar.bz2</string>
</map>
<key>name</key>
<string>common</string>
@ -848,9 +848,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>ad7b9fc10184e8145731f45ae400bfd1</string>
<string>c539c58aee1d010928ae29ad344656a5</string>
<key>url</key>
<string>http://3p.firestormviewer.org/dullahan-1.12.2.202210012157_92.0.27_g274abcf_chromium-92.0.4515.159-linux64-222741156.tar.bz2</string>
<string>https://3p.firestormviewer.org/dullahan-1.14.0.202311061750_118.6.8_ge44bee1_chromium-118.0.5993.117-linux64-233100650.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -908,7 +908,7 @@
<key>hash</key>
<string>39702f98867a319b090ee04f22d82762</string>
<key>url</key>
<string>http://3p.firestormviewer.org/expat-2.5.0.230021327-linux64-230021327.tar.bz2</string>
<string>https://3p.firestormviewer.org/expat-2.5.0.230021327-linux64-230021327.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -949,14 +949,12 @@
<map>
<key>archive</key>
<map>
<key>creds</key>
<string>github</string>
<key>hash</key>
<string>8ee7c21f3f109cf4e1709e4af0b4bebf</string>
<string>bfcc4acbe6b8dddaf10f0f7a47e4aad8</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///opt/firestorm/fmodstudio-2.02.17-darwin64-232401806.tar.bz2</string>
<string>file:///opt/firestorm/fmodstudio-2.02.18-darwin64-232960129.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -965,8 +963,6 @@
<map>
<key>archive</key>
<map>
<key>creds</key>
<string>github</string>
<key>hash</key>
<string>14846f1a55274399362db4b674fcded6</string>
<key>hash_algorithm</key>
@ -981,8 +977,6 @@
<map>
<key>archive</key>
<map>
<key>creds</key>
<string>github</string>
<key>hash</key>
<string>7b38bd83eb63f25df7c5a20070a05732</string>
<key>hash_algorithm</key>
@ -1018,7 +1012,7 @@
<key>hash</key>
<string>6fdcfcc9aa1d01164c0f7ca5590859bb</string>
<key>url</key>
<string>http://3p.firestormviewer.org/fontconfig-2.12.6-linux64-223020909.tar.bz2</string>
<string>https://3p.firestormviewer.org/fontconfig-2.12.6-linux64-223020909.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1062,7 +1056,7 @@
<key>hash</key>
<string>41db760508e6b48ae3a291ad2d1aef3d</string>
<key>url</key>
<string>http://3p.firestormviewer.org/freetype-2.8.1.223020901-linux64-223020901.tar.bz2</string>
<string>https://3p.firestormviewer.org/freetype-2.8.1.223020901-linux64-223020901.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1074,7 +1068,7 @@
<key>hash</key>
<string>2c2151b439cf92e03d9573dddbbdd3b6</string>
<key>url</key>
<string>http://3p.firestormviewer.org/freetype-2.3.9.232991153-windows64-232991153.tar.bz2</string>
<string>https://3p.firestormviewer.org/freetype-2.3.9.232991153-windows64-232991153.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
@ -1182,7 +1176,7 @@
<key>hash</key>
<string>ff459b58695c76838782847a0b792104</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9697/45717/googlemock-1.7.0.509686-linux64-509686.tar.bz2</string>
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9697/45717/googlemock-1.7.0.509686-linux64-509686.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1226,7 +1220,7 @@
<key>hash</key>
<string>86a358f1b5a2c2baf68444b2bfc5bb32</string>
<key>url</key>
<string>http://3p.firestormviewer.org/gstreamer-0.10.6.180841551-linux64-180841551.tar.bz2</string>
<string>https://3p.firestormviewer.org/gstreamer-0.10.6.180841551-linux64-180841551.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1330,7 +1324,7 @@
<key>hash</key>
<string>fd8060aa3c920e0fc63e7ecbea67bc5e</string>
<key>url</key>
<string>http://3p.firestormviewer.org/jpegencoderbasic-1.0-linux64-213500937.tar.bz2</string>
<string>https://3p.firestormviewer.org/jpegencoderbasic-1.0-linux64-213500937.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1386,7 +1380,7 @@
<key>hash</key>
<string>324bb9deb00d256a12f8cbf686f413f0</string>
<key>url</key>
<string>http://3p.firestormviewer.org/jpeglib-8c.180841548-linux64-180841548.tar.bz2</string>
<string>https://3p.firestormviewer.org/jpeglib-8c.180841548-linux64-180841548.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1444,7 +1438,7 @@
<key>hash</key>
<string>352ab340f2091c93eb313cf80ac0c8cc</string>
<key>url</key>
<string>http://3p.firestormviewer.org/jsoncpp-0.5.0.202052209-linux64-202052209.tar.bz2</string>
<string>https://3p.firestormviewer.org/jsoncpp-0.5.0.202052209-linux64-202052209.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1485,8 +1479,6 @@
<map>
<key>archive</key>
<map>
<key>creds</key>
<string>github</string>
<key>hash</key>
<string>3142fccbcc0e2c5a019e3177ef364290</string>
<key>url</key>
@ -1499,8 +1491,6 @@
<map>
<key>archive</key>
<map>
<key>creds</key>
<string>github</string>
<key>hash</key>
<string>e13d6fe708613bb3a5d630c4cdd97a3b</string>
<key>url</key>
@ -1513,8 +1503,6 @@
<map>
<key>archive</key>
<map>
<key>creds</key>
<string>github</string>
<key>hash</key>
<string>4aa7df19125708580055b42190d2511e</string>
<key>url</key>
@ -1562,7 +1550,7 @@
<key>hash</key>
<string>6555f040c686d8c1dec8e6264c2d3672</string>
<key>url</key>
<string>http://3p.firestormviewer.org/libhunspell-1.3.2.180841552-linux64-180841552.tar.bz2</string>
<string>https://3p.firestormviewer.org/libhunspell-1.3.2.180841552-linux64-180841552.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1666,7 +1654,7 @@
<key>hash</key>
<string>134089ec8c1eead9436b69c326790fc0</string>
<key>url</key>
<string>http://3p.firestormviewer.org/libpng-1.6.38.222890126-linux64-222890126.tar.bz2</string>
<string>https://3p.firestormviewer.org/libpng-1.6.38.222890126-linux64-222890126.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1710,7 +1698,7 @@
<key>hash</key>
<string>f3cc32c84b99f1277370ce88a0faf40e</string>
<key>url</key>
<string>http://3p.firestormviewer.org/libuuid-1.6.2-linux64-180841554.tar.bz2</string>
<string>https://3p.firestormviewer.org/libuuid-1.6.2-linux64-180841554.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1754,7 +1742,7 @@
<key>hash</key>
<string>d72c6d8db827ce3d83c5703f519a2ac9</string>
<key>url</key>
<string>http://3p.firestormviewer.org/libxml2-2.10.3.230940019-linux64-230940019.tar.bz2</string>
<string>https://3p.firestormviewer.org/libxml2-2.10.3.230940019-linux64-230940019.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1923,7 +1911,7 @@
<key>hash</key>
<string>f290b000b31f9e36f2489946cbc99f5e</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/59995/563653/llphysicsextensions_stub-1.0.542456-darwin64-542456.tar.bz2</string>
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/59995/563653/llphysicsextensions_stub-1.0.542456-darwin64-542456.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -1935,7 +1923,7 @@
<key>hash</key>
<string>711f4ec769e4b5f59ba25ee43c11bcbc</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/4724/14846/llphysicsextensions_stub-1.0.504712-linux64-504712.tar.bz2</string>
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/4724/14846/llphysicsextensions_stub-1.0.504712-linux64-504712.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1947,7 +1935,7 @@
<key>hash</key>
<string>2e5f1f7046a49d8b0bc295aa878116bc</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/60043/564063/llphysicsextensions_stub-1.0.542456-windows-542456.tar.bz2</string>
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/60043/564063/llphysicsextensions_stub-1.0.542456-windows-542456.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@ -1987,7 +1975,7 @@
<key>hash</key>
<string>711f4ec769e4b5f59ba25ee43c11bcbc</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/4724/14846/llphysicsextensions_stub-1.0.504712-linux64-504712.tar.bz2</string>
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/4724/14846/llphysicsextensions_stub-1.0.504712-linux64-504712.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2027,7 +2015,7 @@
<key>hash</key>
<string>22c50a5d362cad311b4f413cfcffbba2</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/mesa_3p-update-mesa/rev/297294/arch/Linux/installer/mesa-7.11.1.297294-linux-297294.tar.bz2</string>
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/mesa_3p-update-mesa/rev/297294/arch/Linux/installer/mesa-7.11.1.297294-linux-297294.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@ -2067,7 +2055,7 @@
<key>hash</key>
<string>50d647afc4e510af72f09dcd7a77e920</string>
<key>url</key>
<string>http://3p.firestormviewer.org/meshoptimizer-0.16.222121104-linux64-222121104.tar.bz2</string>
<string>https://3p.firestormviewer.org/meshoptimizer-0.16.222121104-linux64-222121104.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2127,7 +2115,7 @@
<key>hash</key>
<string>ee4e3a02ad4669a4d84e9c32e509530e</string>
<key>url</key>
<string>http://3p.firestormviewer.org/minizip_ng-3.0.2.222121607-linux64-222121607.tar.bz2</string>
<string>https://3p.firestormviewer.org/minizip_ng-3.0.2.222121607-linux64-222121607.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2187,7 +2175,7 @@
<key>hash</key>
<string>57670eaa6333d9127b8ba88f120e56dd</string>
<key>url</key>
<string>http://3p.firestormviewer.org/nghttp2-1.56.0.232750738-linux64-232750738.tar.bz2</string>
<string>https://3p.firestormviewer.org/nghttp2-1.56.0.232750738-linux64-232750738.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2280,7 +2268,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>03b7df0406d7588c4fb49c2ddf0d8264</string>
<key>url</key>
<string>http://3p.firestormviewer.org/ogg_vorbis-1.3.3-1.3.6.202241500-linux64-202241500.tar.bz2</string>
<string>https://3p.firestormviewer.org/ogg_vorbis-1.3.3-1.3.6.202241500-linux64-202241500.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2336,7 +2324,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>b329ed955ac63da45957d39f601e85af</string>
<key>url</key>
<string>http://3p.firestormviewer.org/open_libndofdev-0.13.232750923-linux64-232750923.tar.bz2</string>
<string>https://3p.firestormviewer.org/open_libndofdev-0.13.232750923-linux64-232750923.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2356,7 +2344,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>4f36ae378593240701fd4453bd6074c8</string>
<key>url</key>
<string>http://3p.firestormviewer.org/openal-1.12.854-1.1.0.180841552-linux64-180841552.tar.bz2</string>
<string>https://3p.firestormviewer.org/openal-1.12.854-1.1.0.180841552-linux64-180841552.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2428,7 +2416,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>b1dad7c841118a3b6e03a01722d1846a</string>
<key>url</key>
<string>http://3p.firestormviewer.org/openjpeg-2.5.0.230362345-linux64-230362345.tar.bz2</string>
<string>https://3p.firestormviewer.org/openjpeg-2.5.0.230362345-linux64-230362345.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2486,7 +2474,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>a3b2dbffa28a2b2a63c5d3ce2c12bc85</string>
<key>url</key>
<string>http://3p.firestormviewer.org/openssl-1.1.1w.232750656-linux64-232750656.tar.bz2</string>
<string>https://3p.firestormviewer.org/openssl-1.1.1w.232750656-linux64-232750656.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2544,7 +2532,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>742a145c1518b9dc195ae0862828e6ae</string>
<key>url</key>
<string>http://3p.firestormviewer.org/pcre-8.35.202021522-linux64-202021522.tar.bz2</string>
<string>https://3p.firestormviewer.org/pcre-8.35.202021522-linux64-202021522.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2600,7 +2588,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>db89d5ce9695457cc1e94cf657678f1a</string>
<key>url</key>
<string>http://3p.firestormviewer.org/slvoice-3.2-linux64-222532329.tar.bz2</string>
<string>https://3p.firestormviewer.org/slvoice-3.2-linux64-222532329.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2656,7 +2644,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>d37be064bd851276dab423d723cb9b7d</string>
<key>url</key>
<string>http://3p.firestormviewer.org/threejs-0.132.2-linux64-213500940.tar.bz2</string>
<string>https://3p.firestormviewer.org/threejs-0.132.2-linux64-213500940.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2796,7 +2784,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>0d6832fd958ec127f089e683c9b67169</string>
<key>url</key>
<string>http://3p.firestormviewer.org/uriparser-0.9.4-linux64-211210958.tar.bz2</string>
<string>https://3p.firestormviewer.org/uriparser-0.9.4-linux64-211210958.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2960,11 +2948,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>ad0c8b41ee4b4de216382bec46ee1c25962a3f12</string>
<string>71a9c7c03a2c26cdb21fa476de485d9c</string>
<key>hash_algorithm</key>
<string>sha1</string>
<string>md5</string>
<key>url</key>
<string>https://github.com/secondlife/3p-xmlrpc-epi/releases/download/v0.54.1.8a05acf/xmlrpc_epi-0.54.1.8a05acf-linux64-8a05acf.tar.zst</string>
<string>https://3p.firestormviewer.org/xmlrpc_epi-0.54.2.230940042-linux64-230940042.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -3094,7 +3082,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>hash</key>
<string>5ee7cda65cede06190c811e59b3880b0</string>
<key>url</key>
<string>http://3p.firestormviewer.org/zlib_ng-2.0.5.222121000-linux64-222121000.tar.bz2</string>
<string>https://3p.firestormviewer.org/zlib_ng-2.0.5.222121000-linux64-222121000.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>

View File

@ -226,10 +226,7 @@ DOWNLOADS - {build_type}
full_file = os.path.join(build_type_dir, dir, file)
md5 = get_md5(full_file)
base_name = os.path.basename(file)
if "x64" in base_name:
wordsize = "64"
else:
wordsize = "32"
wordsize = "64"
if "FirestormOS-" in base_name:
grid = "OS"
@ -258,15 +255,6 @@ DOWNLOADS - {build_type}
output += "\n"
output += f"MD5: {md5_dict[f'{grid}{dir}{wordsize}']}\n"
output += "\n"
if dir == "windows":
# Need to do 32 bit as well
wordsize = "32"
output += f"{platform} for {grid_printable} ({wordsize}-bit)\n"
output += f"{download_root}/{dir}/{os.path.basename(file_dict[f'{grid}{dir}{wordsize}'])}\n"
output += "\n"
output += f"MD5: {md5_dict[f'{grid}{dir}{wordsize}']}\n"
output += "\n"
wordsize = "64"
except KeyError:
output += f"{platform} for {grid_printable} ({wordsize}-bit) - NOT AVAILABLE\n"
output += "\n"

View File

@ -1081,8 +1081,7 @@ void MediaPluginCEF::keyEvent(dullahan::EKeyEvent key_event, LLSD native_key_dat
keypad = true;
}
// yes, we send native_virtual_key_win twice because native_virtual_key breaks it
mCEFLib->nativeKeyboardEventSDL2(key_event, native_virtual_key_win, native_virtual_key_win, native_modifiers, keypad);
mCEFLib->nativeKeyboardEventSDL2(key_event, native_virtual_key_win, native_modifiers, keypad);
}
#else

View File

@ -105,9 +105,9 @@ void FloaterAO::updateAnimationList()
return;
}
for (U32 index = 0; index < mSelectedSet->mStateNames.size(); ++index)
for (auto index = 0; index < mSelectedSet->mStateNames.size(); ++index)
{
std::string stateName = mSelectedSet->mStateNames[index];
const std::string& stateName = mSelectedSet->mStateNames[index];
AOSet::AOState* state = mSelectedSet->getStateByName(stateName);
mStateSelector->add(stateName, state, ADD_BOTTOM, TRUE);
}
@ -178,8 +178,8 @@ void FloaterAO::updateList()
}
}
U32 selected_index = 0;
for (U32 index = 0; index < mSetList.size(); ++index)
size_t selected_index = 0;
for (auto index = 0; index < mSetList.size(); ++index)
{
std::string setName = mSetList[index]->getName();
mSetSelector->add(setName, &mSetList[index], ADD_BOTTOM, TRUE);
@ -280,7 +280,7 @@ BOOL FloaterAO::postBuild()
onChangeAnimationSelection();
mMainInterfacePanel->setVisible(TRUE);
mSmallInterfacePanel->setVisible(FALSE);
reloading(TRUE);
reloading(true);
updateList();
@ -464,7 +464,7 @@ void FloaterAO::onSelectState()
mSelectedState = (AOSet::AOState*)mStateSelector->getCurrentUserdata();
if (mSelectedState->mAnimations.size())
{
for (U32 index = 0; index < mSelectedState->mAnimations.size(); ++index)
for (auto index = 0; index < mSelectedState->mAnimations.size(); ++index)
{
LLScrollListItem* item = addAnimation(mSelectedState->mAnimations[index].mName);
if (item)
@ -558,7 +558,7 @@ bool FloaterAO::removeSetCallback(const LLSD& notification, const LLSD& response
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (option ==0 )
if (option ==0)
{
if (AOEngine::instance().removeSet(mSelectedSet))
{
@ -638,7 +638,7 @@ void FloaterAO::onChangeAnimationSelection()
mAnimationList->deselectAllItems();
LL_DEBUGS("AOEngine") << "Selection count now: " << list.size() << LL_ENDL;
}
else if (list.size() > 0)
else if (!list.empty())
{
if (list.size() == 1)
{
@ -715,7 +715,7 @@ void FloaterAO::onClickTrash()
return;
}
for (S32 index = list.size() - 1; index != -1; --index)
for (auto index = list.size() - 1; index != -1; --index)
{
AOEngine::instance().removeAnimation(mSelectedSet, mSelectedState, mAnimationList->getItemIndex(list[index]));
}
@ -833,11 +833,8 @@ void FloaterAO::onAnimationChanged(const LLUUID& animation)
}
// why do we have no LLScrollListCtrl::getItemByUserdata() ? -Zi
std::vector<LLScrollListItem*> item_list = mAnimationList->getAllData();
std::vector<LLScrollListItem*>::const_iterator iter;
for (iter = item_list.begin(); iter != item_list.end(); ++iter)
for (auto item : mAnimationList->getAllData())
{
LLScrollListItem* item = *iter;
LLUUID* id = (LLUUID*)item->getUserdata();
if (id == &animation)

View File

@ -44,7 +44,7 @@
#define ROOT_AO_FOLDER "#AO"
#include <boost/graph/graph_concepts.hpp>
const F32 INVENTORY_POLLING_INTERVAL = 5.0f;
constexpr F32 INVENTORY_POLLING_INTERVAL = 5.0f;
AOEngine::AOEngine() :
LLSingleton<AOEngine>(),
@ -128,7 +128,7 @@ void AOEngine::onPauseAO()
void AOEngine::clear(bool from_timer)
{
mOldSets.insert(mOldSets.end(), mSets.begin(), mSets.end());
std::move(mSets.begin(), mSets.end(), std::back_inserter(mOldSets));
mSets.clear();
mCurrentSet = nullptr;
@ -213,7 +213,7 @@ bool AOEngine::foreignAnimations()
return false;
}
LLUUID seat = agentRoot->getID();
const LLUUID& seat = agentRoot->getID();
if (seat == gAgentID)
{
LL_DEBUGS("AOEngine") << "Not checking for foreign animation when not sitting." << LL_ENDL;
@ -222,7 +222,7 @@ bool AOEngine::foreignAnimations()
LL_DEBUGS("AOEngine") << "Checking for foreign animation on seat " << seat << LL_ENDL;
for (const auto&[source_id, animation_id] : gAgentAvatarp->mAnimationSources)
for (const auto& [source_id, animation_id] : gAgentAvatarp->mAnimationSources)
{
// skip animations run by the avatar itself
if (source_id != gAgentID)
@ -584,7 +584,7 @@ const LLUUID AOEngine::override(const LLUUID& motion, bool start)
// case, as it plays at the same time as other motions
if (motion != ANIM_AGENT_TYPE)
{
const S32 cleanupStates[]=
constexpr S32 cleanupStates[]=
{
AOSet::Standing,
AOSet::Walking,
@ -806,8 +806,7 @@ void AOEngine::checkSitCancel()
{
if (foreignAnimations())
{
AOSet::AOState* aoState = mCurrentSet->getStateByRemapID(ANIM_AGENT_SIT);
if (aoState)
if (AOSet::AOState* aoState = mCurrentSet->getStateByRemapID(ANIM_AGENT_SIT); aoState)
{
LLUUID animation = aoState->mCurrentAnimationID;
if (animation.notNull())
@ -1020,7 +1019,7 @@ bool AOEngine::createAnimationLink(const AOSet* set, AOSet::AOState* state, cons
if (cats)
{
for (auto cat : *cats)
for (const auto& cat : *cats)
{
if (cat->getName().compare(state->mName) == 0)
{
@ -1039,8 +1038,7 @@ bool AOEngine::createAnimationLink(const AOSet* set, AOSet::AOState* state, cons
return false;
}
LLInventoryObject::const_object_list_t obj_array;
obj_array.push_back(LLConstPointer<LLInventoryObject>(item));
LLInventoryObject::const_object_list_t obj_array{ LLConstPointer<LLInventoryObject>(item) };
link_inventory_array(state->mInventoryUUID,
obj_array,
LLPointer<LLInventoryCallback>(nullptr));
@ -1055,7 +1053,7 @@ bool AOEngine::addAnimation(const AOSet* set, AOSet::AOState* state, const LLInv
anim.mInventoryUUID = item->getUUID();
anim.mName = item->getName();
anim.mSortOrder = state->mAnimations.size() + 1;
state->mAnimations.push_back(anim);
state->mAnimations.emplace_back(std::move(anim));
BOOL wasProtected = gSavedPerAccountSettings.getBOOL("LockAOFolders");
gSavedPerAccountSettings.setBOOL("LockAOFolders", FALSE);
@ -1175,7 +1173,7 @@ bool AOEngine::removeAnimation(const AOSet* set, AOSet::AOState* state, S32 inde
return false;
}
S32 numOfAnimations = state->mAnimations.size();
auto numOfAnimations = state->mAnimations.size();
if (numOfAnimations == 0)
{
return false;
@ -1220,7 +1218,7 @@ bool AOEngine::removeAnimation(const AOSet* set, AOSet::AOState* state, S32 inde
if (cats)
{
for (auto cat : *cats)
for (const auto& cat : *cats)
{
std::vector<std::string> params;
LLStringUtil::getTokens(cat->getName(), params, ":");
@ -1254,7 +1252,7 @@ bool AOEngine::removeAnimation(const AOSet* set, AOSet::AOState* state, S32 inde
bool AOEngine::swapWithPrevious(AOSet::AOState* state, S32 index)
{
S32 numOfAnimations = state->mAnimations.size();
auto numOfAnimations = state->mAnimations.size();
if (numOfAnimations < 2 || index == 0)
{
return false;
@ -1271,7 +1269,7 @@ bool AOEngine::swapWithPrevious(AOSet::AOState* state, S32 index)
bool AOEngine::swapWithNext(AOSet::AOState* state, S32 index)
{
S32 numOfAnimations = state->mAnimations.size();
auto numOfAnimations = state->mAnimations.size();
if (numOfAnimations < 2 || index == (numOfAnimations - 1))
{
return false;
@ -1297,7 +1295,7 @@ void AOEngine::reloadStateAnimations(AOSet::AOState* state)
if (items)
{
for (auto item : *items)
for (const auto& item : *items)
{
LL_DEBUGS("AOEngine") << "Found animation link " << item->LLInventoryItem::getName()
<< " desc " << item->LLInventoryItem::getDescription()
@ -1326,12 +1324,12 @@ void AOEngine::reloadStateAnimations(AOSet::AOState* state)
if (sortOrder == -1)
{
LL_WARNS("AOEngine") << "sort order was unknown so append to the end of the list" << LL_ENDL;
state->mAnimations.push_back(anim);
state->mAnimations.emplace_back(std::move(anim));
}
else
{
bool inserted = false;
for (U32 index = 0; index < state->mAnimations.size(); ++index)
for (auto index = 0; index < state->mAnimations.size(); ++index)
{
if (state->mAnimations[index].mSortOrder > sortOrder)
{
@ -1344,7 +1342,7 @@ void AOEngine::reloadStateAnimations(AOSet::AOState* state)
if (!inserted)
{
LL_DEBUGS("AOEngine") << "not inserted yet, appending to the list instead" << LL_ENDL;
state->mAnimations.push_back(anim);
state->mAnimations.emplace_back(std::move(anim));
}
}
LL_DEBUGS("AOEngine") << "Animation count now: " << state->mAnimations.size() << LL_ENDL;
@ -1377,7 +1375,7 @@ void AOEngine::update()
if (categories)
{
for (auto currentCategory : *categories)
for (const auto& currentCategory : *categories)
{
const std::string& setFolderName = currentCategory->getName();
@ -1401,7 +1399,7 @@ void AOEngine::update()
LL_DEBUGS("AOEngine") << "Adding set " << setFolderName << " to AO." << LL_ENDL;
newSet = new AOSet(currentCategory->getUUID());
newSet->setName(params[0]);
mSets.push_back(newSet);
mSets.emplace_back(newSet);
}
else
{
@ -1414,7 +1412,7 @@ void AOEngine::update()
}
allComplete = false;
for (U32 num = 1; num < params.size(); ++num)
for (auto num = 1; num < params.size(); ++num)
{
if (params[num].size() != 2)
{
@ -1451,7 +1449,7 @@ void AOEngine::update()
gInventory.getDirectDescendentsOf(currentCategory->getUUID(), stateCategories, items);
newSet->setComplete(true);
for (auto stateCategory : *stateCategories)
for (const auto& stateCategory : *stateCategories)
{
std::vector<std::string> state_params;
LLStringUtil::getTokens(stateCategory->getName(), state_params, ":");
@ -1471,7 +1469,7 @@ void AOEngine::update()
LL_DEBUGS("AOEngine") << "Reading state " << stateName << LL_ENDL;
state->mInventoryUUID = stateCategory->getUUID();
for (U32 num = 1; num < state_params.size(); ++num)
for (auto num = 1; num < state_params.size(); ++num)
{
if (state_params[num] == "CY")
{
@ -1925,7 +1923,7 @@ void AOEngine::tick()
gInventory.getDirectDescendentsOf(categoryID, categories, items);
LL_DEBUGS("AOEngine") << "cat " << categories->size() << " items " << items->size() << LL_ENDL;
for (auto cat : *categories)
for (const auto& cat : *categories)
{
const std::string& catName = cat->getName();
if (catName.compare(ROOT_AO_FOLDER) == 0)
@ -1975,8 +1973,8 @@ bool AOEngine::importNotecard(const LLInventoryItem* item)
gAssetStorage->getInvItemAsset(
sourceSim,
gAgent.getID(),
gAgent.getSessionID(),
gAgentID,
gAgentSessionID,
item->getPermissions().getOwner(),
LLUUID::null,
item->getUUID(),
@ -2013,8 +2011,8 @@ void AOEngine::onNotecardLoadComplete(const LLUUID& assetUUID, LLAssetType::ETyp
char* buffer = new char[notecardSize + 1];
buffer[notecardSize] = 0;
S32 ret = file.read((U8*)buffer, notecardSize);
if (ret > 0)
BOOL ret = file.read((U8*)buffer, notecardSize);
if (ret)
{
AOEngine::instance().parseNotecard(buffer);
}
@ -2046,17 +2044,17 @@ void AOEngine::parseNotecard(const char* buffer)
std::vector<std::string> lines;
LLStringUtil::getTokens(text, lines, "\n");
S32 found = -1;
for (U32 index = 0; index < lines.size(); ++index)
bool found{ false };
for (const auto& line : lines)
{
if (lines[index].find("Text length ") == 0)
if (line.find("Text length ") == 0)
{
found = index;
found = true;
break;
}
}
if (found == -1)
if (!found)
{
LLNotificationsUtil::add("AOImportNoText", LLSD());
delete mImportSet;
@ -2080,7 +2078,7 @@ void AOEngine::parseNotecard(const char* buffer)
LLInventoryModel::item_array_t* items;
gInventory.getDirectDescendentsOf(mImportSet->getInventoryUUID(), dummy, items);
for (U32 index = 0; index < items->size(); ++index)
for (auto index = 0; index < items->size(); ++index)
{
animationMap[items->at(index)->getName()] = items->at(index)->getUUID();
LL_DEBUGS("AOEngine") << "animation " << items->at(index)->getName() <<
@ -2088,7 +2086,7 @@ void AOEngine::parseNotecard(const char* buffer)
}
// [ State ]Anim1|Anim2|Anim3
for (U32 index = found + 1; index < lines.size(); ++index)
for (auto index = found + 1; index < lines.size(); ++index)
{
std::string line = lines[index];
@ -2125,7 +2123,7 @@ void AOEngine::parseNotecard(const char* buffer)
LLNotificationsUtil::add("AOImportNoValidDelimiter", args);
continue;
}
U32 endTag = line.find("]");
auto endTag = line.find("]");
std::string stateName = line.substr(1, endTag - 1);
LLStringUtil::trim(stateName);
@ -2143,7 +2141,7 @@ void AOEngine::parseNotecard(const char* buffer)
std::vector<std::string> animationList;
LLStringUtil::getTokens(animationLine, animationList, "|,");
for (U32 animIndex = 0; animIndex < animationList.size(); ++animIndex)
for (auto animIndex = 0; animIndex < animationList.size(); ++animIndex)
{
AOSet::AOAnimation animation;
animation.mName = animationList[animIndex];
@ -2182,46 +2180,46 @@ void AOEngine::processImport(bool from_timer)
{
bool success = addSet(mImportSet->getName(), [this, from_timer](const LLUUID& new_cat_id)
{
mImportCategory = new_cat_id;
mImportSet->setInventoryUUID(mImportCategory);
mImportCategory = new_cat_id;
mImportSet->setInventoryUUID(mImportCategory);
bool allComplete = true;
for (S32 index = 0; index < AOSet::AOSTATES_MAX; ++index)
bool allComplete = true;
for (S32 index = 0; index < AOSet::AOSTATES_MAX; ++index)
{
AOSet::AOState* state = mImportSet->getState(index);
if (!state->mAnimations.empty())
{
AOSet::AOState* state = mImportSet->getState(index);
if (state->mAnimations.size())
{
allComplete = false;
LL_DEBUGS("AOEngine") << "state " << state->mName << " still has animations to link." << LL_ENDL;
allComplete = false;
LL_DEBUGS("AOEngine") << "state " << state->mName << " still has animations to link." << LL_ENDL;
for (S32 animationIndex = state->mAnimations.size() - 1; animationIndex >= 0; --animationIndex)
for (auto animationIndex = state->mAnimations.size() - 1; animationIndex >= 0; --animationIndex)
{
LL_DEBUGS("AOEngine") << "linking animation " << state->mAnimations[animationIndex].mName << LL_ENDL;
if (createAnimationLink(mImportSet, state, gInventory.getItem(state->mAnimations[animationIndex].mInventoryUUID)))
{
LL_DEBUGS("AOEngine") << "linking animation " << state->mAnimations[animationIndex].mName << LL_ENDL;
if (createAnimationLink(mImportSet, state, gInventory.getItem(state->mAnimations[animationIndex].mInventoryUUID)))
{
LL_DEBUGS("AOEngine") << "link success, size " << state->mAnimations.size() << ", removing animation "
<< (*(state->mAnimations.begin() + animationIndex)).mName << " from import state" << LL_ENDL;
state->mAnimations.erase(state->mAnimations.begin() + animationIndex);
LL_DEBUGS("AOEngine") << "deleted, size now: " << state->mAnimations.size() << LL_ENDL;
}
else
{
LLSD args;
args["NAME"] = state->mAnimations[animationIndex].mName;
LLNotificationsUtil::add("AOImportLinkFailed", args);
}
LL_DEBUGS("AOEngine") << "link success, size " << state->mAnimations.size() << ", removing animation "
<< (*(state->mAnimations.begin() + animationIndex)).mName << " from import state" << LL_ENDL;
state->mAnimations.erase(state->mAnimations.begin() + animationIndex);
LL_DEBUGS("AOEngine") << "deleted, size now: " << state->mAnimations.size() << LL_ENDL;
}
else
{
LLSD args;
args["NAME"] = state->mAnimations[animationIndex].mName;
LLNotificationsUtil::add("AOImportLinkFailed", args);
}
}
}
}
if (allComplete)
{
mTimerCollection.enableImportTimer(false);
mOldImportSets.push_back(mImportSet); //<ND/> FIRE-3801; Cannot delete here, or LLInstanceTracker gets upset. Just remember and delete mOldImportSets once we can.
mImportSet = nullptr;
mImportCategory.setNull();
reload(from_timer);
}
if (allComplete)
{
mTimerCollection.enableImportTimer(false);
mOldImportSets.push_back(mImportSet); //<ND/> FIRE-3801; Cannot delete here, or LLInstanceTracker gets upset. Just remember and delete mOldImportSets once we can.
mImportSet = nullptr;
mImportCategory.setNull();
reload(from_timer);
}
}, false);
if (!success)
@ -2293,8 +2291,7 @@ void AOEngine::onRegionChange()
}
// do nothing if no AO animation is playing (e.g. smart sit cancel)
LLUUID animation = state->mCurrentAnimationID;
if (animation.isNull())
if (LLUUID animation = state->mCurrentAnimationID; animation.isNull())
{
return;
}

View File

@ -117,7 +117,7 @@ AOSet::AOSet(const LLUUID inventoryID)
mStates[index].mRandom = false;
mStates[index].mCycleTime = 0.0f;
mStates[index].mDirty = false;
mStateNames.push_back(stateNameList[0]);
mStateNames.emplace_back(stateNameList[0]);
}
stopTimer();
}
@ -137,7 +137,7 @@ AOSet::AOState* AOSet::getStateByName(const std::string& name)
for (S32 index = 0; index < AOSTATES_MAX; ++index)
{
AOState* state = &mStates[index];
for (U32 names = 0; names < state->mAlternateNames.size(); ++names)
for (auto names = 0; names < state->mAlternateNames.size(); ++names)
{
if (state->mAlternateNames[names].compare(name) == 0)
{
@ -170,7 +170,7 @@ const LLUUID& AOSet::getAnimationForState(AOState* state) const
{
if (state)
{
S32 numOfAnimations = state->mAnimations.size();
auto numOfAnimations = state->mAnimations.size();
if (numOfAnimations)
{
if (state->mCycle)

View File

@ -177,7 +177,7 @@ bool FSLSLBridge::lslToViewer(std::string_view message, const LLUUID& fromID, co
return false;
}
std::string_view tag = message.substr(0, tagend + 1);
std::string ourBridge = getBridgeFolder().asString();
std::string ourBridge = findFSCategory().asString();
//</FS:TS> FIRE-962
bool bridgeIsEnabled = gSavedSettings.getBOOL("UseLSLBridge");
@ -214,7 +214,7 @@ bool FSLSLBridge::lslToViewer(std::string_view message, const LLUUID& fromID, co
// If something that looks like our current bridge is attached but failed auth, detach and recreate.
const LLUUID catID = getBridgeFolder();
const LLUUID catID = findFSCategory();
LLViewerInventoryItem* fsBridge = findInvObject(mCurrentFullName, catID);
if (fsBridge && get_is_item_worn(fsBridge->getUUID()))
{
@ -252,7 +252,7 @@ bool FSLSLBridge::lslToViewer(std::string_view message, const LLUUID& fromID, co
if (!mpBridge)
{
LLUUID catID = getBridgeFolder();
LLUUID catID = findFSCategory();
LLViewerInventoryItem* fsBridge = findInvObject(mCurrentFullName, catID);
mpBridge = fsBridge;
}
@ -643,18 +643,19 @@ void FSLSLBridge::recreateBridge()
//announce yourself
report_to_nearby_chat(LLTrans::getString("fsbridge_creating"));
LLUUID catID = getBridgeFolder();
FSLSLBridgeInventoryPreCreationCleanupObserver* bridgeInventoryObserver = new FSLSLBridgeInventoryPreCreationCleanupObserver(catID);
bridgeInventoryObserver->startFetch();
if (bridgeInventoryObserver->isFinished())
{
bridgeInventoryObserver->done();
}
else
{
gInventory.addObserver(bridgeInventoryObserver);
}
setupFSCategory([](const LLUUID& bridge_folder_id)
{
FSLSLBridgeInventoryPreCreationCleanupObserver* bridgeInventoryObserver = new FSLSLBridgeInventoryPreCreationCleanupObserver(bridge_folder_id);
bridgeInventoryObserver->startFetch();
if (bridgeInventoryObserver->isFinished())
{
bridgeInventoryObserver->done();
}
else
{
gInventory.addObserver(bridgeInventoryObserver);
}
});
}
void FSLSLBridge::cleanUpPreCreation()
@ -787,51 +788,53 @@ void FSLSLBridge::startCreation()
LL_INFOS("FSLSLBridge") << "startCreation called. gInventory.isInventoryUsable = " << (gInventory.isInventoryUsable() ? "true" : "false") << LL_ENDL;
//if bridge object doesn't exist - create and attach it, update script.
const LLUUID catID = getBridgeFolder();
LLViewerInventoryItem* fsBridge = findInvObject(mCurrentFullName, catID);
//detach everything else
LL_INFOS("FSLSLBridge") << "Detaching other bridges..." << LL_ENDL;
detachOtherBridges();
if (!fsBridge)
{
LL_INFOS("FSLSLBridge") << "Bridge not found in inventory, creating new one..." << LL_ENDL;
// Don't create on OpenSim. We need to fallback to another creation process there, unfortunately.
// There is no way to ensure a rock object will ever be in a grid's Library.
#if OPENSIM
if (LLGridManager::getInstance()->isInOpenSim())
setupFSCategory([this](const LLUUID& bridge_folder_id)
{
return;
}
#endif
setBridgeCreating(true);
mFinishCreation = false;
//announce yourself
report_to_nearby_chat(LLTrans::getString("fsbridge_creating"));
LLViewerInventoryItem* fsBridge = findInvObject(mCurrentFullName, bridge_folder_id);
createNewBridge();
}
else
{
//TODO need versioning - see isOldBridgeVersion()
mpBridge = fsBridge;
if (!isItemAttached(mpBridge->getUUID()))
{
if (!LLAppearanceMgr::instance().getIsInCOF(mpBridge->getUUID()))
//detach everything else
LL_INFOS("FSLSLBridge") << "Detaching other bridges..." << LL_ENDL;
detachOtherBridges();
if (!fsBridge)
{
LL_INFOS("FSLSLBridge") << "Bridge not attached but found in inventory, reattaching..." << LL_ENDL;
LL_INFOS("FSLSLBridge") << "Bridge not found in inventory, creating new one..." << LL_ENDL;
// Don't create on OpenSim. We need to fallback to another creation process there, unfortunately.
// There is no way to ensure a rock object will ever be in a grid's Library.
#if OPENSIM
if (LLGridManager::getInstance()->isInOpenSim())
{
return;
}
#endif
setBridgeCreating(true);
mFinishCreation = false;
//announce yourself
report_to_nearby_chat(LLTrans::getString("fsbridge_creating"));
//Is this a valid bridge - wear it.
LLAttachmentsMgr::instance().addAttachmentRequest(mpBridge->getUUID(), FS_BRIDGE_POINT, TRUE, TRUE);
//from here, the attach should report to ProcessAttach and make sure bridge is valid.
createNewBridge();
}
else
{
LL_INFOS("FSLSLBridge") << "Bridge not found but in CoF. Waiting for automatic attach..." << LL_ENDL;
//TODO need versioning - see isOldBridgeVersion()
mpBridge = fsBridge;
if (!isItemAttached(mpBridge->getUUID()))
{
if (!LLAppearanceMgr::instance().getIsInCOF(mpBridge->getUUID()))
{
LL_INFOS("FSLSLBridge") << "Bridge not attached but found in inventory, reattaching..." << LL_ENDL;
//Is this a valid bridge - wear it.
LLAttachmentsMgr::instance().addAttachmentRequest(mpBridge->getUUID(), FS_BRIDGE_POINT, TRUE, TRUE);
//from here, the attach should report to ProcessAttach and make sure bridge is valid.
}
else
{
LL_INFOS("FSLSLBridge") << "Bridge not found but in CoF. Waiting for automatic attach..." << LL_ENDL;
}
}
}
}
}
});
}
void FSLSLBridge::createNewBridge()

View File

@ -1423,7 +1423,7 @@ void LLInventoryGallery::onFocusReceived()
LLInventoryGalleryItem* focus_item = NULL;
for (const LLUUID& id : mSelectedItemIDs)
{
if (mItemMap[id])
if (mItemMap[id] && !mItemMap[id]->isHidden())
{
focus_item = mItemMap[id];
focus_item->setSelected(true);

View File

@ -876,7 +876,8 @@ void LLSpatialGroup::rebound()
LLControlAvatar* controlAvatar = bridge->mDrawable->getVObj()->getControlAvatar();
if (controlAvatar &&
controlAvatar->mDrawable &&
controlAvatar->mControlAVBridge)
controlAvatar->mControlAVBridge &&
controlAvatar->mControlAVBridge->mOctree)// <FS:Beq> FIRE-33367 toggling animesh state off causes a crash
{
llassert(controlAvatar->mControlAVBridge->mOctree);

View File

@ -43,7 +43,7 @@
#include "permissionstracker.h"
#define PERMISSION_ENTRY_EXPIRY_TIME 3600.0
constexpr F64 PERMISSION_ENTRY_EXPIRY_TIME{ 3600.0 };
PermissionsTracker::PermissionsTracker()
: LLSingleton<PermissionsTracker>()
@ -63,18 +63,13 @@ void PermissionsTracker::addPermissionsEntry(const LLUUID& source_id, Permission
mPermissionsList[source_id].objectName = LLTrans::getString("LoadingData");
// find out if the object is still in reach
LLViewerObject* vo = gObjectList.findObject(source_id);
if (!vo)
{
mPermissionsList[source_id].objectName = LLTrans::getString("ObjectOutOfRange");
}
else
if (LLViewerObject* vo = gObjectList.findObject(source_id); vo && isAgentAvatarValid() && gAgentAvatarp->getRegion())
{
mPermissionsList[source_id].attachmentID = vo->getAttachmentItemID();
LL_DEBUGS("PermissionsTracker") << "Requesting ObjectProperties for source " << source_id << LL_ENDL;
// remember which object names we already requested
mRequestedIDs.push_back(source_id);
mRequestedIDs.emplace_back(source_id);
// send a request out to get this object's details
LLMessageSystem* msg = gMessageSystem;
@ -95,6 +90,10 @@ void PermissionsTracker::addPermissionsEntry(const LLUUID& source_id, Permission
msg->addU32Fast(_PREHASH_ObjectLocalID, vo->getLocalID());
msg->sendReliable(gAgentAvatarp->getRegion()->getHost());
}
else
{
mPermissionsList[source_id].objectName = LLTrans::getString("ObjectOutOfRange");
}
}
LL_DEBUGS("PermissionsTracker") << "Adding permission type " << permission_type << " to source " << source_id << LL_ENDL;
@ -141,7 +140,7 @@ void PermissionsTracker::purgePermissionsEntries()
void PermissionsTracker::warnFollowcam()
{
std::string followcamList;
for (auto entry : mPermissionsList)
for (const auto& entry : mPermissionsList)
{
if (entry.second.type & PermissionsTracker::PERM_FOLLOWCAM)
{
@ -167,8 +166,7 @@ void PermissionsTracker::warnFollowcam()
std::string slurl = args["slurl"].asString();
if (slurl.empty())
{
LLViewerRegion* region = LLWorld::instance().getRegionFromPosAgent(gAgentAvatarp->getPositionAgent());
if(region)
if (LLViewerRegion* region = LLWorld::instance().getRegionFromPosAgent(gAgentAvatarp->getPositionAgent()); region)
{
LLSLURL region_slurl(region->getName(), gAgentAvatarp->getPositionAgent());
slurl = region_slurl.getLocationString();
@ -208,9 +206,8 @@ void PermissionsTracker::objectPropertiesCallback(LLMessageSystem* msg)
LLUUID source_id;
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, source_id, index);
auto iter = std::find(mRequestedIDs.begin(), mRequestedIDs.end(), source_id);
// if this is one of the objects we were looking for, process the data
if (iter != mRequestedIDs.end())
if (auto iter = std::find(mRequestedIDs.begin(), mRequestedIDs.end(), source_id); iter != mRequestedIDs.end())
{
// get the name of the object
std::string object_name;
@ -235,15 +232,12 @@ void PermissionsTracker::objectPropertiesCallback(LLMessageSystem* msg)
<< ": " << avatar_name.getCompleteName() << LL_ENDL;
mPermissionsList[source_id].ownerName = avatar_name.getCompleteName();
}
else
else if (mAvatarNameCacheConnections.find(object_owner) != mAvatarNameCacheConnections.end())
{
if (mAvatarNameCacheConnections.find(object_owner) != mAvatarNameCacheConnections.end())
{
boost::signals2::connection cb_connection = LLAvatarNameCache::get(object_owner, boost::bind(&PermissionsTracker::avatarNameCallback, this, _1, _2));
mAvatarNameCacheConnections.insert(std::make_pair(object_owner, cb_connection));
boost::signals2::connection cb_connection = LLAvatarNameCache::get(object_owner, boost::bind(&PermissionsTracker::avatarNameCallback, this, _1, _2));
mAvatarNameCacheConnections.insert(std::make_pair(object_owner, cb_connection));
LL_DEBUGS("PermissionsTracker") << "Requesting avatar name for owner " << object_owner.asString() << LL_ENDL;
}
LL_DEBUGS("PermissionsTracker") << "Requesting avatar name for owner " << object_owner.asString() << LL_ENDL;
}
}
}
@ -253,8 +247,7 @@ void PermissionsTracker::avatarNameCallback(const LLUUID& avatar_id, const LLAva
{
LL_DEBUGS("PermissionsTracker") << "Received avatar name " << avatar_name.getCompleteName() << LL_ENDL;
auto iter = mAvatarNameCacheConnections.find(avatar_id);
if (iter != mAvatarNameCacheConnections.end())
if (auto iter = mAvatarNameCacheConnections.find(avatar_id); iter != mAvatarNameCacheConnections.end())
{
if (iter->second.connected())
{
@ -263,7 +256,7 @@ void PermissionsTracker::avatarNameCallback(const LLUUID& avatar_id, const LLAva
mAvatarNameCacheConnections.erase(iter);
}
for (auto entry : mPermissionsList)
for (auto& entry : mPermissionsList)
{
if (entry.second.ownerID == avatar_id)
{

View File

@ -3,6 +3,7 @@
can_resize="false"
height="366"
layout="topleft"
save_rect="true"
name="change_item_thumbnail"
help_topic="change_item_thumbnail"
title="Change Item Image"

View File

@ -81,6 +81,63 @@
function="Floater.Toggle"
parameter="fs_protectedfolders" />
</menu_item_check>
<menu_item_check
label="Inventory settings..."
name="inv_settings">
<menu_item_check.on_check
function="Floater.Visible"
parameter="inventory_settings" />
<menu_item_check.on_click
function="Floater.Toggle"
parameter="inventory_settings" />
</menu_item_check>
<menu_item_separator>
<menu_item_separator.on_visible
function="Inventory.GearDefault.Visible"
parameter="single_folder_view" />
</menu_item_separator>
<menu_item_check
label="List view"
layout="topleft"
name="list_view">
<on_click
function="Inventory.GearDefault.Custom.Action"
parameter="list_view" />
<on_check
function="Inventory.GearDefault.Check"
parameter="list_view" />
<on_visible
function="Inventory.GearDefault.Visible"
parameter="single_folder_view" />
</menu_item_check>
<menu_item_check
label="Gallery view"
layout="topleft"
name="gallery_view">
<on_click
function="Inventory.GearDefault.Custom.Action"
parameter="gallery_view" />
<on_check
function="Inventory.GearDefault.Check"
parameter="gallery_view" />
<on_visible
function="Inventory.GearDefault.Visible"
parameter="single_folder_view" />
</menu_item_check>
<menu_item_check
label="Combination view"
layout="topleft"
name="combination_view">
<on_click
function="Inventory.GearDefault.Custom.Action"
parameter="combination_view" />
<on_check
function="Inventory.GearDefault.Check"
parameter="combination_view" />
<on_visible
function="Inventory.GearDefault.Visible"
parameter="single_folder_view" />
</menu_item_check>
<menu_item_separator />
<menu_item_check
label="Add objects on double click"

View File

@ -9,6 +9,9 @@
<panel.string name="ItemcountUnknown">
Pobrano [ITEM_COUNT] elementów [FILTER]
</panel.string>
<panel.string name="inventory_title">
Szafa
</panel.string>
<menu_bar name="inventory_menu_bar">
<menu label="Szafa" name="inventory_inventory_menu">
<menu_item_call name="inventory_open" label="Otwórz" />
@ -16,6 +19,10 @@
<menu_item_call name="replace_links" label="Zastąp linki" />
<menu_item_call name="inventory_new_window" label="Nowe okno" />
<menu_item_check name="Protected Folders" label="Foldery chronione" />
<menu_item_check label="Ustawienia..." name="inv_settings" />
<menu_item_check label="Widok listy" name="list_view" />
<menu_item_check label="Widok galerii" name="gallery_view" />
<menu_item_check label="Widok kombinowany" name="combination_view" />
<menu_item_check name="add_inv_toggle" label="Dodawaj obiekty po dwukliku" />
<menu_item_check name="add_invclothing_toggle" label="Dodawaj ubrania po dwukliku" />
<menu_item_call name="inventory_show_filters" label="Pokaż filtry" />
@ -62,6 +69,9 @@
<menu_item_check name="inventory_sort_system_on_top" label="Foldery systemowe na górze" />
</menu>
<menu label="Szukanie" name="inventory_search_menu">
<menu_item_check label="W strojach" name="search_outfits" />
<menu_item_check label="W koszu" name="search_trash" />
<menu_item_check label="W Bibliotece" name="search_library" />
<menu_item_check name="inventory_search_by_name" label="Po nazwie" />
<menu_item_check name="inventory_search_by_creator" label="Po twórcy" />
<menu_item_check name="inventory_search_by_description" label="Po opisie" />
@ -77,7 +87,17 @@
<menu_item_check name="inventory_show_partial_results" label="Pokaż częściowe wyniki wyszukiwania" />
</menu>
</menu_bar>
<filter_editor label="Filtruj Szafę" name="inventory search editor" tool_tip="Wpisz jedno lub więcej słów które chcesz wyszukać, oddzielonych za pomocą '+' "/>
<layout_stack name="nav_stack">
<layout_panel name="nav_buttons">
<button name="back_btn" tool_tip="Wstecz" />
<button name="forward_btn" tool_tip="Naprzód" />
<button name="up_btn" tool_tip="Przejdź o jeden poziom wyżej" />
</layout_panel>
<layout_panel name="filter_panel">
<filter_editor label="Filtruj Szafę" name="inventory search editor" tool_tip="Wpisz jedno lub więcej słów które chcesz wyszukać, oddzielonych za pomocą '+' "/>
<button name="view_mode_btn" tool_tip="Przełącz między widokami" />
</layout_panel>
</layout_stack>
<button name="collapse_btn" label="Zwiń"/>
<button name="expand_btn" label="Rozwiń" />
<text name="filter_label" value="Filtruj:"/>
@ -98,12 +118,14 @@
<combo_box.item value="filter_type_settings" label="Otoczenia" />
<combo_box.item value="filter_type_custom" label="Własny filtr..." />
</combo_box>
<menu_button tool_tip="Pokaż opcje widoczności wyszukiwania" name="options_visibility_btn" />
<tab_container name="inventory filter tabs">
<inventory_panel label="Wszystkie" name="All Items"/>
<recent_inventory_panel label="Ostatnie" name="Recent Items"/>
<worn_inventory_panel label="Założone" name="Worn Items"/>
</tab_container>
<!-- <menu_button tool_tip="Pokaż opcje widoczności wyszukiwania" name="options_visibility_btn" /> -->
<panel name="default_inventory_panel">
<tab_container name="inventory filter tabs">
<inventory_panel label="Wszystkie" name="All Items"/>
<recent_inventory_panel label="Ostatnie" name="Recent Items"/>
<worn_inventory_panel label="Założone" name="Worn Items"/>
</tab_container>
</panel>
<text name="ItemcountText" tool_tip="[ITEMS] przedmiotów, [CATEGORIES] folderów">
Elementy
</text>

View File

@ -43,6 +43,14 @@
#include "message.h"
#include <functional>
StreamTitleDisplay::~StreamTitleDisplay()
{
if (mMetadataUpdateConnection.connected())
{
mMetadataUpdateConnection.disconnect();
}
}
void StreamTitleDisplay::initSingleton()
{
if (!gAudiop || !gAudiop->getStreamingAudioImpl())

View File

@ -37,14 +37,14 @@ class StreamTitleDisplay : public LLSingleton<StreamTitleDisplay>
LLSINGLETON_EMPTY_CTOR(StreamTitleDisplay);
public:
~StreamTitleDisplay() { }
~StreamTitleDisplay();
protected:
void initSingleton() /*override*/;
void checkMetadata(const LLSD& metadata);
void sendStreamTitleToChat(std::string_view Title);
boost::signals2::connection mMetadataUpdateConnection;
boost::signals2::connection mMetadataUpdateConnection{};
};
#endif // STREAMTITLEDISPLAY_H

View File

@ -1972,12 +1972,10 @@ class LinuxManifest(ViewerManifest):
# CEF files
with self.prefix(src=os.path.join(pkgdir, 'lib', 'release'), dst="lib"):
self.path( "libcef.so" )
self.path( "libEGL.so" )
self.path( "libGLESv2.so" )
self.path( "libvk_swiftshader.so" )
self.path_optional( "libminigbm.so" )
with self.prefix(src=os.path.join(pkgdir, 'lib', 'release', 'swiftshader'), dst=os.path.join("bin", "swiftshader") ):
self.path( "*.so" )
with self.prefix(src=os.path.join(pkgdir, 'lib', 'release', 'swiftshader'), dst=os.path.join("lib", "swiftshader") ):
self.path( "*.so" )
with self.prefix(src=os.path.join(pkgdir, 'bin', 'release'), dst="bin"):
self.path( "chrome-sandbox" )
@ -1999,7 +1997,7 @@ class LinuxManifest(ViewerManifest):
self.path( "resources.pak" )
self.path( "icudtl.dat" )
with self.prefix(src=os.path.join(pkgdir, 'resources', 'locales'), dst=os.path.join('bin', 'locales')):
with self.prefix(src=os.path.join(pkgdir, 'resources', 'locales'), dst=os.path.join('lib', 'locales')):
self.path("am.pak")
self.path("ar.pak")
self.path("bg.pak")