diff options
108 files changed, 1461 insertions, 1511 deletions
| diff --git a/autobuild.xml b/autobuild.xml index 9c71fa4306..bf20cb788e 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -17,18 +17,6 @@          <string>SDL</string>          <key>platforms</key>          <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>459cdc8d7c19a8025f98f61db95622ff</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/sdl_3p-update-sdl/rev/297546/arch/Linux/installer/SDL-1.2.15-linux-297546.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -59,18 +47,6 @@          <string>apr_suite</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0c53148aa00e51c06fa246c4130915be</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/apr_3p-update-apr/rev/297252/arch/Darwin/installer/apr_suite-1.4.5.297252-darwin-297252.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -83,18 +59,6 @@              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1aa2e5355bb9df09f9196d14a72b6705</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-apr/rev/314241/arch/Linux/installer/apr_suite-1.4.5.314241-linux-314241.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -149,42 +113,18 @@          <string>boost</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c296845cad075250c1ae2620f175a957</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Darwin/installer/boost-1.57-darwin-297445.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>35cc090d942b85c9126ceac9912d52d6</string> +              <string>fedc8d63856f534b6098102e059dc548</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78585/744021/boost-1.72-darwin64-557045.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87776/805857/boost-1.72-darwin64-563847.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>f1fdb548fd6c09a083c86f3a23d7f041</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-boost/rev/317807/arch/Linux/installer/boost-1.57-linux-317807.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -202,9 +142,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>9aa4ce32df5f5e36124c990e2d77b885</string> +              <string>6cc9fb4ca21365c4470a3e516544ba71</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78586/743982/boost-1.72-windows-557045.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87784/805850/boost-1.72-windows-563847.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -214,9 +154,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>a79511c9d8b956767ebaa405155d4238</string> +              <string>0c526efc3f8825cd25cdf635e238fab3</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78584/743961/boost-1.72-windows64-557045.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87783/805851/boost-1.72-windows64-563847.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string> @@ -291,42 +231,18 @@          <string>colladadom</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>726bc31e562752f081e95e8fcc70e405</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Darwin/installer/colladadom-2.3.297450-darwin-297450.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>1d063cf1783e7788f17486c234adb1db</string> +              <string>4699b8389dfb754da0393ddb5d325722</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78635/744249/colladadom-2.3.557064-darwin64-557064.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95882/856117/colladadom-2.3.569219-darwin64-569219.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>78b9a6506fb7d53da166f7a65f2278f4</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-colladadom/rev/317826/arch/Linux/installer/colladadom-2.3.317826-linux-317826.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -344,9 +260,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>e78ecf919eee01567556787c3a358d15</string> +              <string>343e46ea49a08ad6596d3dc702d5b812</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78637/744269/colladadom-2.3.557064-windows-557064.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95883/856128/colladadom-2.3.569219-windows-569219.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -356,16 +272,16 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>7e63a212c8909a25236138422fe01298</string> +              <string>de5bdfb61b31db56c5fe7d0962ad11e2</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78636/744273/colladadom-2.3.557064-windows64-557064.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95884/856129/colladadom-2.3.569219-windows64-569219.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>2.3.557064</string> +        <string>2.3.569219</string>        </map>        <key>cubemaptoequirectangular</key>        <map> @@ -433,42 +349,18 @@          <string>curl</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ad0061db7188a1b9a974eb0512eeeb8d</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/312763/arch/Darwin/installer/curl-7.47.0.312763-darwin-312763.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>13f74f43a6363ec998569f731fd869c5</string> +              <string>44d801e05811269d1bed7dbc75d85843</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82637/774617/curl-7.54.1.560191-darwin64-560191.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87786/805905/curl-7.54.1.563852-darwin64-563852.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9430c08954c00736117099046694e1b1</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-curl/rev/314230/arch/Linux/installer/curl-7.47.0.314230-linux-314230.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -486,11 +378,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>0df99bd685dc3561ca8ea347b2921987</string> +              <string>676f624d4ebdc2189caa43ef6dd8266d</string>                <key>hash_algorithm</key>                <string>md5</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82639/774610/curl-7.54.1.560191-windows-560191.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87790/805917/curl-7.54.1.563852-windows-563852.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -500,46 +392,16 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>50db2a9e6b74ec4b0c38b1ea8f135735</string> +              <string>b3db5a2cdf275c1af7758fbe2d14544a</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82638/774608/curl-7.54.1.560191-windows64-560191.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87789/805918/curl-7.54.1.563852-windows64-563852.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>7.54.1.560191</string> -      </map> -      <key>db</key> -      <map> -        <key>copyright</key> -        <string>Copyright (c) 1990, 2010 Oracle and/or its affiliates.  All rights reserved.</string> -        <key>description</key> -        <string>Berkeley DB (libdb) is a programmatic toolkit that provides embedded database support for both traditional and client/server applications.</string> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/db.txt</string> -        <key>name</key> -        <string>db</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1cc7940e500858a9754e9a3cc3ba2237</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/db_3p-update-db/rev/295315/arch/Linux/installer/db-5.1.25-linux-295315.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -        <key>version</key> -        <string>5.1.25</string> +        <string>7.54.1.563852</string>        </map>        <key>dbus_glib</key>        <map> @@ -555,18 +417,6 @@          <string>dbus_glib</string>          <key>platforms</key>          <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6d676abd9ad8d2883b855dbe397d9034</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-dbus-glib/rev/314266/arch/Linux/installer/dbus_glib-0.76-linux-314266.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -667,30 +517,6 @@          <key>version</key>          <string>1.12.3.202111032221_91.1.21_g9dd45fe_chromium-91.0.4472.114</string>        </map> -      <key>elfio</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/elfio.txt</string> -        <key>name</key> -        <string>elfio</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>031e6315a5c0829c9b9a2ec18aeb7ae3</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map>        <key>expat</key>        <map>          <key>copyright</key> @@ -705,18 +531,6 @@          <string>expat</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>452d1910ef853329cd59858e6c5b2c48</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/expat_3p-update-expat/rev/297014/arch/Darwin/installer/expat-2.0.1.297014-darwin-297014.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -729,18 +543,6 @@              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>387c90b9bb5ec412587fbe7a56261dd1</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-expat/rev/314211/arch/Linux/installer/expat-2.1.1.314211-linux-314211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -800,25 +602,13 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>c36808a58384a52672d81593de61f7ff</string> +              <string>2c619c1bef969dc42b4f44a4651b314e</string>                <key>url</key> -              <string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/89681/818422/fmodstudio-2.02.03.565082-darwin64-565082.tar.bz2</string> +              <string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/98369/869141/fmodstudio-2.02.06.570913-darwin64-570913.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>24b86630ccdfb5b3221f90ca7a9704f6</string> -              <key>url</key> -              <string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/89682/818423/fmodstudio-2.02.03.565082-linux-565082.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -836,9 +626,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>96853d91ce4da14e14ea322122629551</string> +              <string>875ccd8c1feec8ff03438d453371044b</string>                <key>url</key> -              <string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/89683/818438/fmodstudio-2.02.03.565082-windows-565082.tar.bz2</string> +              <string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/98371/869153/fmodstudio-2.02.06.570913-windows-570913.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -848,16 +638,16 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>58d0cc28a1d90bacefbda48fcd8d379c</string> +              <string>5e402f4828741bce942e2ced318cd02a</string>                <key>url</key> -              <string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/89684/818439/fmodstudio-2.02.03.565082-windows64-565082.tar.bz2</string> +              <string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/98372/869154/fmodstudio-2.02.06.570913-windows64-570913.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>2.02.03.565082</string> +        <string>2.02.06.570913</string>        </map>        <key>fontconfig</key>        <map> @@ -873,18 +663,6 @@          <string>fontconfig</string>          <key>platforms</key>          <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a20a3d0ab7fc3401bc2ca81e9309f630</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-fontconfig/rev/314281/arch/Linux/installer/fontconfig-2.11.0-linux-314281.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -915,42 +693,18 @@          <string>freetype</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>83618d16d974eb0af93926a10ac13297</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freetype_3p-update-freetype/rev/297053/arch/Darwin/installer/freetype-2.4.4.297053-darwin-297053.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>3a478d6c8a10d49d9161ef864394b03c</string> +              <string>8865739d8e530199dacb3c3042c1bc01</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78592/744013/freetype-2.4.4.557047-darwin64-557047.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87777/805782/freetype-2.4.4.563848-darwin64-563848.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1b401394106cedc86926bd488f5aa45e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-freetype/rev/314215/arch/Linux/installer/freetype-2.4.4.314215-linux-314215.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -968,9 +722,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>7ee200d6b5fa282c7f973ade5615aa86</string> +              <string>c0b3601e997553931cadc7d7ee94168b</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78594/744011/freetype-2.4.4.557047-windows-557047.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87779/805814/freetype-2.4.4.563848-windows-563848.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -980,16 +734,16 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>69307aaba16ac71531c9c4d930ace993</string> +              <string>e98e1e088cdcd20442e05e9abecdadf9</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78593/744010/freetype-2.4.4.557047-windows64-557047.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87778/805815/freetype-2.4.4.563848-windows64-563848.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>2.4.4.557047</string> +        <string>2.4.4.563848</string>        </map>        <key>glext</key>        <map> @@ -1065,42 +819,18 @@          <string>googlemock</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>022649e284163b8ee23e3c9a81302fa7</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Darwin/installer/googlemock-1.7.0.297460-darwin-297460.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>19e925604bc1a91efb4b130e1edd8bf2</string> +              <string>11d0794582e91a57f6524ad345f2399d</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78620/744140/googlemock-1.7.0.557057-darwin64-557057.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87791/805924/googlemock-1.7.0.563853-darwin64-563853.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ad51f68702f25ba245fff312c50c8876</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-googlemock/rev/317828/arch/Linux/installer/googlemock-1.7.0.317828-linux-317828.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1118,9 +848,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>eed7b41d0d1f41b24f315349ef78c728</string> +              <string>7d267050970ec6e28749178597bc8af0</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78622/744148/googlemock-1.7.0.557057-windows-557057.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87793/805930/googlemock-1.7.0.563853-windows-563853.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -1130,16 +860,16 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>a6ad6fe722d2fe4e8137495af3f374c9</string> +              <string>27638c692f0ec6121e54bf75f2d45e49</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78621/744152/googlemock-1.7.0.557057-windows64-557057.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87792/805936/googlemock-1.7.0.563853-windows64-563853.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>1.7.0.557057</string> +        <string>1.7.0.563853</string>        </map>        <key>gstreamer</key>        <map> @@ -1153,18 +883,6 @@          <string>gstreamer</string>          <key>platforms</key>          <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5017b3e95d2c6f47bb111c3f9c075522</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-gstreamer/rev/314267/arch/Linux/installer/gstreamer-0.10.6.314267-linux-314267.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1193,18 +911,6 @@          <string>gtk-atk-pango-glib</string>          <key>platforms</key>          <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a6431df705526501684d9050e04bfa5b</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-gtk-atk-pango-glib/rev/314220/arch/Linux/installer/gtk_atk_pango_glib-0.1-linux-314220.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1235,18 +941,6 @@          <string>havok-source</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5c5b4820999ae9e398801d6a46f45897</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/havok-source_3p-update-havok-source/rev/297312/arch/Darwin/installer/havok_source-2012.1-darwin-297312.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -1259,18 +953,6 @@              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>03c1c5f7c3e93e905f635ca22b607494</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/p64_3p-havok-source/rev/314226/arch/Linux/installer/havok_source-2012.1-2-linux-314226.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1377,18 +1059,6 @@          <string>jpeglib</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>4d7658997fd0f93a9c55e40e40b1b0e5</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jpeglib_3p-update-jpeglib/rev/296854/arch/Darwin/installer/jpeglib-8c.296854-darwin-296854.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -1401,18 +1071,6 @@              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>32560d3200da72fea2922371fcef25f5</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-jpeglib/rev/314202/arch/Linux/installer/jpeglib-8c.314202-linux-314202.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1467,18 +1125,6 @@          <string>jsoncpp</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>b25a4f480e07c670ffef00c3da578f87</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jsoncpp_3p-update-jsoncpp/rev/297281/arch/Darwin/installer/jsoncpp-0.5.0.297281-darwin-297281.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -1491,18 +1137,6 @@              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9d5d9fec28cbbb1651b95728173f8af7</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-jsoncpp/rev/314229/arch/Linux/installer/jsoncpp-0.5.0.314229-linux-314229.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1557,18 +1191,6 @@          <string>kdu</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3855bd40f950e3c22739ae8f3ee2afc9</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/15258/98444/kdu-7.10.4.513518-darwin-513518.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -1581,18 +1203,6 @@              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>43d7a6a69a54534a736f132e9c81795b</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/15255/98451/kdu-7.10.4.513518-linux-513518.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1647,18 +1257,6 @@          <string>libhunspell</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>05eda16106df26a211f8bdd874d1fca5</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/hunspell_3p-update-hunspell/rev/296916/arch/Darwin/installer/libhunspell-1.3.2.296916-darwin-296916.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -1671,18 +1269,6 @@              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0d8009c3b6c1eb510593476dd1d821b5</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-hunspell/rev/314217/arch/Linux/installer/libhunspell-1.3.2.314217-linux-314217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1737,18 +1323,6 @@          <string>libndofdev</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a01b411433dbf8a4b481de9e76d9a652</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libndofdev_3p-update-libndofdev/rev/297264/arch/Darwin/installer/libndofdev-0.1.297264-darwin-297264.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -1803,42 +1377,18 @@          <string>libpng</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>14cb5c8686a472e9e60179e46cd196f7</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libpng_3p-update-libpng/rev/297708/arch/Darwin/installer/libpng-1.6.8.297708-darwin-297708.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>2a41acc3116ce19a443873216cb882ad</string> +              <string>c1c9e32e21f3c34d91ed045b2ca91f24</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78587/743948/libpng-1.6.8.557046-darwin64-557046.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87781/805801/libpng-1.6.8.563850-darwin64-563850.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0758f3cb4c02ebab61854b811b0894e9</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libpng/rev/314214/arch/Linux/installer/libpng-1.6.8.314214-linux-314214.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1856,9 +1406,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>b935b440947f63c69700bdcf5095a8e1</string> +              <string>642e9cf95c8ccd0eb34f6d7a40df585a</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78591/743970/libpng-1.6.8.557046-windows-557046.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87782/805831/libpng-1.6.8.563850-windows-563850.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -1868,16 +1418,16 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>d1cc8354ac4e877eefedf16b1be3aac6</string> +              <string>ce46aa0f171d97626c4a3940347cecd7</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78589/743991/libpng-1.6.8.557046-windows64-557046.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87780/805832/libpng-1.6.8.563850-windows64-563850.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>1.6.8.557046</string> +        <string>1.6.8.563850</string>        </map>        <key>libuuid</key>        <map> @@ -1893,18 +1443,6 @@          <string>libuuid</string>          <key>platforms</key>          <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a2eaf9515cd129f3e21a08e92689006b</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libuuid/rev/314269/arch/Linux/installer/libuuid-1.6.2-linux-314269.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1935,42 +1473,18 @@          <string>libxml2</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9303f0dd174129e297eca6cc2eb1ab3f</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libxml_3p-update-libxml/rev/297050/arch/Darwin/installer/libxml2-2.9.1.297050-darwin-297050.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>6677173bbbb0ea32369b5e9b6c9aa641</string> +              <string>6f37dd6c4a5174f358b6cc5d953f121b</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78631/744225/libxml2-2.9.4.557062-darwin64-557062.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87768/805766/libxml2-2.9.4.563845-darwin64-563845.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6954173a141d928f2614076577d952de</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libxml/rev/314197/arch/Linux/installer/libxml2-2.9.1.314197-linux-314197.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -1988,9 +1502,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>ad6a596fbf0e83a21d95762da78437bc</string> +              <string>fd85d3aa13fbdfd1f1ace587e95ef151</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78633/744239/libxml2-2.9.4.557062-windows-557062.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87773/805797/libxml2-2.9.4.563845-windows-563845.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -2000,16 +1514,16 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>6b5bb230684ecf28386d7c91c47bb6e1</string> +              <string>d231d36c3b8942e0259aa2d9fcaa3b7e</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78634/744240/libxml2-2.9.4.557062-windows64-557062.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87772/805795/libxml2-2.9.4.563845-windows64-563845.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>2.9.4.557062</string> +        <string>2.9.4.563845</string>        </map>        <key>llappearance_utility</key>        <map> @@ -2322,6 +1836,62 @@          <key>version</key>          <string>0.16.561408</string>        </map> +      <key>minizip-ng</key> +      <map> +        <key>canonical_repo</key> +        <string>https://bitbucket.org/lindenlab/3p-minizip-ng</string> +        <key>copyright</key> +        <string>This project uses the zlib license. Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler</string> +        <key>description</key> +        <string>minizip-ng is a zip manipulation library. Based on work of Gilles Vollant.</string> +        <key>license</key> +        <string>minizip-ng</string> +        <key>license_file</key> +        <string>LICENSES/minizip-ng.txt</string> +        <key>name</key> +        <string>minizip-ng</string> +        <key>platforms</key> +        <map> +          <key>darwin64</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>843587a078102d86d90054d03354684d</string> +              <key>url</key> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95876/856095/minizip_ng-3.0.2.569217-darwin64-569217.tar.bz2</string> +            </map> +            <key>name</key> +            <string>darwin64</string> +          </map> +          <key>windows</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>26dc254f443ca9c5509547d7fbd9d8e5</string> +              <key>url</key> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95878/856107/minizip_ng-3.0.2.569217-windows-569217.tar.bz2</string> +            </map> +            <key>name</key> +            <string>windows</string> +          </map> +          <key>windows64</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>e9241fa325f4014995b62193321e7a1c</string> +              <key>url</key> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/95877/856106/minizip_ng-3.0.2.569217-windows64-569217.tar.bz2</string> +            </map> +            <key>name</key> +            <string>windows64</string> +          </map> +        </map> +        <key>version</key> +        <string>3.0.2.569217</string> +      </map>        <key>nghttp2</key>        <map>          <key>copyright</key> @@ -2349,18 +1919,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>079c1a1bdb3ce1cda8ce3d7f75eeced3</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9258/41585/nghttp2-1.25.0.509246-linux-509246.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -2459,18 +2017,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>ogg_vorbis</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>07fca1531a27915f642a5c1d95008d54</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oggvorbis_3p-update-oggvorbis/rev/296878/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2.296878-darwin-296878.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -2483,18 +2029,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5c9d94dce4551b19790057766ff939ea</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-oggvorbis/rev/314224/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2.314224-linux-314224.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -2547,21 +2081,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>LICENSES/libndofdev.txt</string>          <key>name</key>          <string>open-libndofdev</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>b1245d467d5914a266efa16afeb55406</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libndofdev_3p-update-libndofdev/rev/297553/arch/Linux/installer/open_libndofdev-0.3-linux-297553.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map>          <key>version</key>          <string>0.3</string>        </map> @@ -2579,20 +2098,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>openal</string>          <key>platforms</key>          <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>24b91eda3831a51c7774644016c4cb09</string> -              <key>hash_algorithm</key> -              <string>md5</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openal/rev/314223/arch/Linux/installer/openal-1.12.854-1.1.0.314223-linux-314223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -2649,18 +2154,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>openjpeg</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>2adb5b8bd2493d576c5d02b992d8f819</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/Darwin/installer/openjpeg-1.4.297018-darwin-297018.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -2673,18 +2166,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e82317482647559d46a818ba48e9423a</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openjpeg/rev/314205/arch/Linux/installer/openjpeg-2.0.0.314205-linux-314205.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -2739,42 +2220,18 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>openssl</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0a77d56769e6075957f614be6575423e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openssl_3p-update-openssl/rev/297168/arch/Darwin/installer/openssl-1.0.1h.297168-darwin-297168.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>5503e4928bcdb0a29685b3242c4a409b</string> +              <string>142d0ad85d0ee4fbb673c9f9e414fbdd</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82619/774464/openssl-1.1.1l.560177-darwin64-560177.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87769/805772/openssl-1.1.1l.563846-darwin64-563846.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>f46a601d60b7dbcfde32afc0cb64453e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openssl/rev/314227/arch/Linux/installer/openssl-1.0.1h.314227-linux-314227.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -2792,9 +2249,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>d2153f20dc2d35c609b876a9f019a748</string> +              <string>55bd833166d03f1467e2c7f24fa9143e</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82623/774521/openssl-1.1.1l.560177-windows-560177.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87775/805841/openssl-1.1.1l.563846-windows-563846.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -2804,16 +2261,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>f40b8622ba38084b0962e273988d748f</string> +              <string>6fefc60f68882fc6b246521b696497ab</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/82624/774520/openssl-1.1.1l.560177-windows64-560177.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87774/805833/openssl-1.1.1l.563846-windows64-563846.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>1.1.1l.560177</string> +        <string>1.1.1l.563846</string>        </map>        <key>pcre</key>        <map> @@ -2829,18 +2286,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>pcre</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6d2b38897f1adf354b299345d5fc759b</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/pcre_3p-update-pcre/rev/297155/arch/Darwin/installer/pcre-8.35.-darwin-297155.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -2853,18 +2298,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>24a119b18e63017ad932ad54df8161bc</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-pcre/rev/314136/arch/Linux/installer/pcre-8.35.314136-linux-314136.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -2887,7 +2320,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>                <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55041/512002/pcre-8.35.538986-windows-538986.tar.bz2</string>              </map>              <key>name</key> -            <string>linux</string> +            <string>windows</string>            </map>            <key>windows64</key>            <map> @@ -2919,18 +2352,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>slvoice</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>511a9c3fd4b6c76a8a737d06bba1c291</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oz-426-slvoice/rev/330003/arch/Darwin/installer/slvoice-4.9.0002.27586.330003-darwin-330003.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -2943,18 +2364,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>785c86999b56e1838cefb430f674cba7</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oz-426-slvoice/rev/330003/arch/Linux/installer/slvoice-3.2.0002.10426.330003-linux-330003.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -3215,18 +2624,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>uriparser</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>22608adaf54e8ddc9182a719ba6e2b32</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Darwin/installer/uriparser-0.8.0.1-darwin-299435.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -3239,18 +2636,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>dddfc8dea540801f93ba0382cb1e3685</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Linux/installer/uriparser-0.8.0.1-linux-299435.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -3317,18 +2702,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>8c7f32f85850248809ae811ba8e47d81</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/3428/8686/viewer_manager-1.0-linux-503417.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>windows</key>            <map>              <key>archive</key> @@ -3373,18 +2746,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>2f410640df3f9812d1abff02a414cfa8</string> -              <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-vlc-bin/rev/315283/arch/Linux/vlc_bin-2.2.3-linux-201606011750-r10.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>windows</key>            <map>              <key>archive</key> @@ -3483,18 +2844,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <string>xmlrpc-epi</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ffd3aab8e0c0ff6dadbce49ca2809078</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/xmlrpc-emi_3p-update-xmlrpc-epi/rev/297075/arch/Darwin/installer/xmlrpc_epi-0.54.1.297075-darwin-297075.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key> @@ -3507,18 +2856,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>b63f828e798287d475991134cdcfbca3</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-xmlrpc-epi/rev/314240/arch/Linux/installer/xmlrpc_epi-0.54.1.314240-linux-314240.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -3559,58 +2896,34 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <key>version</key>          <string>0.54.1.555529</string>        </map> -      <key>zlib</key> +      <key>zlib-ng</key>        <map> +        <key>canonical_repo</key> +        <string>https://bitbucket.org/lindenlab/3p-zlib-ng</string>          <key>copyright</key>          <string>Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler</string>          <key>description</key> -        <string>Zlib Data Compression Library</string> +        <string>zlib data compression library for the next generation systems</string>          <key>license</key> -        <string>zlib</string> +        <string>zlib-ng</string>          <key>license_file</key> -        <string>LICENSES/zlib.txt</string> +        <string>LICENSES/zlib-ng.txt</string>          <key>name</key> -        <string>zlib</string> +        <string>zlib-ng</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1a79eeac199c2d94e4ae4e5d0194e25f</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/Darwin/installer/zlib-1.2.8.296881-darwin-296881.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map>            <key>darwin64</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>9181bc8229f1a8e480d2a40a2744ec28</string> +              <string>bf306e38bf81c6095e0967bdef6a2445</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78578/743913/zlib-1.2.11.557041-darwin64-557041.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87759/805718/zlib_ng-2.0.5.563838-darwin64-563838.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string>            </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>98a8c775c581ca80bb559e8b4e8eaae7</string> -              <key>hash_algorithm</key> -              <string>md5</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-zlib/rev/314131/arch/Linux/installer/zlib-1.2.8.314131-linux-314131.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map>            <key>linux64</key>            <map>              <key>archive</key> @@ -3628,9 +2941,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>8308cbd2ea0fe290541698b0f63482e2</string> +              <string>8ffce5bd00e3d5afa8cb39b855237c4a</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78579/743926/zlib-1.2.11.557041-windows-557041.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87761/805730/zlib_ng-2.0.5.563838-windows-563838.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -3640,16 +2953,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>36bdc34f67d3ad3c57125dc1b16a3129</string> +              <string>bd103a9129e57f7ea35886bc7750f8a6</string>                <key>url</key> -              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/78577/743920/zlib-1.2.11.557041-windows64-557041.tar.bz2</string> +              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87760/805729/zlib_ng-2.0.5.563838-windows64-563838.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>1.2.11.557041</string> +        <string>2.0.5.563838</string>        </map>      </map>      <key>package_description</key> @@ -3878,126 +3191,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>            <key>name</key>            <string>darwin64</string>          </map> -        <key>linux</key> -        <map> -          <key>build_directory</key> -          <string>build-linux-i686</string> -          <key>configurations</key> -          <map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j</string> -                  <string>12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>Unix Makefiles</string> -                </array> -              </map> -              <key>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j</string> -                  <string>7</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>Unix Makefiles</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j</string> -                  <string>12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>Unix Makefiles</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j</string> -                  <string>7</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>Unix Makefiles</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -            <key>default</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>name</key> -              <string>default</string> -            </map> -          </map> -          <key>name</key> -          <string>linux</string> -        </map>          <key>windows</key>          <map>            <key>build_directory</key> diff --git a/doc/contributions.txt b/doc/contributions.txt index 0acf92b189..640ffb037e 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1108,16 +1108,18 @@ Nicky Dasmijn  	STORM-1937  	OPEN-187  	SL-15234 -    STORM-2010 +	STORM-2010  	STORM-2082  	MAINT-6665  	SL-10291  	SL-10293  	SL-11061 -    SL-11072 +	SL-11072  	SL-13141  	SL-13642 +	SL-14541  	SL-16438 +	SL-17218  Nicky Perian  	OPEN-1  	STORM-1087 diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index f93a09d232..68f6e962ef 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -13,7 +13,6 @@ project(${ROOT_PROJECT_NAME})  set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")  include(Variables) -include(bugsplat)  include(BuildVersion)  set(LEGACY_STDIO_LIBS) @@ -73,6 +72,12 @@ if (LINUX)        include(LLAppearanceUtility)        add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR})    endif (INSTALL_PROPRIETARY) +  add_dependencies(viewer linux-crash-logger-strip-target) +elseif (WINDOWS) +  # cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake +  if (EXISTS ${VIEWER_DIR}win_setup) +    add_subdirectory(${VIEWER_DIR}win_setup) +  endif (EXISTS ${VIEWER_DIR}win_setup)  endif (LINUX)  if (WINDOWS) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index bb5dd8f847..572422d080 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -223,7 +223,6 @@ if (USESYSTEMLIBS)  else (USESYSTEMLIBS)    set(${ARCH}_linux_INCLUDES -      ELFIO        atk-1.0        glib-2.0        gstreamer-0.10 diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 1a01671002..9b64bc6160 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -1,4 +1,3 @@ -include(BerkeleyDB)  include(Linking)  include(Prebuilt) @@ -49,7 +48,7 @@ else (USESYSTEMLIBS)    set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1)    if (LINUX) -      list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid) -    list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} rt) +      list(APPEND APRUTIL_LIBRARIES uuid) +      list(APPEND APRUTIL_LIBRARIES rt)    endif (LINUX)  endif (USESYSTEMLIBS) diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake deleted file mode 100644 index ee670ac650..0000000000 --- a/indra/cmake/BerkeleyDB.cmake +++ /dev/null @@ -1,17 +0,0 @@ -# -*- cmake -*- -include(Prebuilt) -set(DB_FIND_QUIETLY ON) -set(DB_FIND_REQUIRED ON) - -if (USESYSTEMLIBS) -  include(FindBerkeleyDB) -else (USESYSTEMLIBS) -  if (LINUX) -    # Need to add dependency pthread explicitely to support ld.gold. -    use_prebuilt_binary(db) -    set(DB_LIBRARIES db-5.1 pthread) -  else (LINUX) -    set(DB_LIBRARIES db-4.2) -  endif (LINUX) -  set(DB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) -endif (USESYSTEMLIBS) diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake index 26604d4913..e79dc33245 100644 --- a/indra/cmake/Boost.cmake +++ b/indra/cmake/Boost.cmake @@ -24,57 +24,30 @@ else (USESYSTEMLIBS)    set(addrsfx "-x${ADDRESS_SIZE}")    if (WINDOWS) -    if(MSVC80) -      # This should be obsolete at this point -      set(BOOST_VERSION "1.55") -      set(BOOST_CONTEXT_LIBRARY  -          optimized libboost_context-vc80-mt-${BOOST_VERSION} -          debug libboost_context-vc80-mt-gd-${BOOST_VERSION}) -      set(BOOST_FILESYSTEM_LIBRARY  -          optimized libboost_filesystem-vc80-mt-${BOOST_VERSION} -          debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION}) -      set(BOOST_PROGRAM_OPTIONS_LIBRARY  -          optimized libboost_program_options-vc80-mt-${BOOST_VERSION} -          debug libboost_program_options-vc80-mt-gd-${BOOST_VERSION}) -      set(BOOST_REGEX_LIBRARY -          optimized libboost_regex-vc80-mt-${BOOST_VERSION} -          debug libboost_regex-vc80-mt-gd-${BOOST_VERSION}) -      set(BOOST_SIGNALS_LIBRARY  -          optimized libboost_signals-vc80-mt-${BOOST_VERSION} -          debug libboost_signals-vc80-mt-gd-${BOOST_VERSION}) -      set(BOOST_SYSTEM_LIBRARY  -          optimized libboost_system-vc80-mt-${BOOST_VERSION} -          debug libboost_system-vc80-mt-gd-${BOOST_VERSION}) -      set(BOOST_THREAD_LIBRARY  -          optimized libboost_thread-vc80-mt-${BOOST_VERSION} -          debug libboost_thread-vc80-mt-gd-${BOOST_VERSION}) -    else(MSVC80) -      # MSVC 10.0 config -      set(BOOST_CONTEXT_LIBRARY  -          optimized libboost_context-mt${addrsfx} -          debug libboost_context-mt${addrsfx}-gd) -      set(BOOST_FIBER_LIBRARY  -          optimized libboost_fiber-mt${addrsfx} -          debug libboost_fiber-mt${addrsfx}-gd) -      set(BOOST_FILESYSTEM_LIBRARY  -          optimized libboost_filesystem-mt${addrsfx} -          debug libboost_filesystem-mt${addrsfx}-gd) -      set(BOOST_PROGRAM_OPTIONS_LIBRARY  -          optimized libboost_program_options-mt${addrsfx} -          debug libboost_program_options-mt${addrsfx}-gd) -      set(BOOST_REGEX_LIBRARY -          optimized libboost_regex-mt${addrsfx} -          debug libboost_regex-mt${addrsfx}-gd) -      set(BOOST_SIGNALS_LIBRARY  -          optimized libboost_signals-mt${addrsfx} -          debug libboost_signals-mt${addrsfx}-gd) -      set(BOOST_SYSTEM_LIBRARY  -          optimized libboost_system-mt${addrsfx} -          debug libboost_system-mt${addrsfx}-gd) -      set(BOOST_THREAD_LIBRARY  -          optimized libboost_thread-mt${addrsfx} -          debug libboost_thread-mt${addrsfx}-gd) -    endif (MSVC80) +    set(BOOST_CONTEXT_LIBRARY +        optimized libboost_context-mt${addrsfx} +        debug libboost_context-mt${addrsfx}-gd) +    set(BOOST_FIBER_LIBRARY +        optimized libboost_fiber-mt${addrsfx} +        debug libboost_fiber-mt${addrsfx}-gd) +    set(BOOST_FILESYSTEM_LIBRARY +        optimized libboost_filesystem-mt${addrsfx} +        debug libboost_filesystem-mt${addrsfx}-gd) +    set(BOOST_PROGRAM_OPTIONS_LIBRARY +        optimized libboost_program_options-mt${addrsfx} +        debug libboost_program_options-mt${addrsfx}-gd) +    set(BOOST_REGEX_LIBRARY +        optimized libboost_regex-mt${addrsfx} +        debug libboost_regex-mt${addrsfx}-gd) +    set(BOOST_SIGNALS_LIBRARY +        optimized libboost_signals-mt${addrsfx} +        debug libboost_signals-mt${addrsfx}-gd) +    set(BOOST_SYSTEM_LIBRARY +        optimized libboost_system-mt${addrsfx} +        debug libboost_system-mt${addrsfx}-gd) +    set(BOOST_THREAD_LIBRARY +        optimized libboost_thread-mt${addrsfx} +        debug libboost_thread-mt${addrsfx}-gd)    elseif (LINUX)      set(BOOST_CONTEXT_LIBRARY          optimized boost_context-mt${addrsfx} diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 50cd42ff57..4d70089737 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -10,7 +10,6 @@ set(cmake_SOURCE_FILES      00-Common.cmake      APR.cmake      Audio.cmake -    BerkeleyDB.cmake      Boost.cmake      bugsplat.cmake      BuildVersion.cmake @@ -26,7 +25,6 @@ set(cmake_SOURCE_FILES      EXPAT.cmake      FindAPR.cmake      FindAutobuild.cmake -    FindBerkeleyDB.cmake      FindGLH.cmake      FindHUNSPELL.cmake      FindJsonCpp.cmake @@ -35,7 +33,7 @@ set(cmake_SOURCE_FILES      FindSCP.cmake      FindURIPARSER.cmake      FindXmlRpcEpi.cmake -    FindZLIB.cmake +    FindZLIBNG.cmake      FMODSTUDIO.cmake      FreeType.cmake      GLEXT.cmake @@ -93,7 +91,7 @@ set(cmake_SOURCE_FILES      VisualLeakDetector.cmake      LibVLCPlugin.cmake      XmlRpcEpi.cmake -    ZLIB.cmake +    ZLIBNG.cmake      )  source_group("Shared Rules" FILES ${cmake_SOURCE_FILES}) diff --git a/indra/cmake/FindBerkeleyDB.cmake b/indra/cmake/FindBerkeleyDB.cmake deleted file mode 100644 index 2d633c74ec..0000000000 --- a/indra/cmake/FindBerkeleyDB.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# -*- cmake -*- - -# - Find BerkeleyDB -# Find the BerkeleyDB includes and library -# This module defines -#  DB_INCLUDE_DIR, where to find db.h, etc. -#  DB_LIBRARIES, the libraries needed to use BerkeleyDB. -#  DB_FOUND, If false, do not try to use BerkeleyDB. -# also defined, but not for general use are -#  DB_LIBRARY, where to find the BerkeleyDB library. - -FIND_PATH(DB_INCLUDE_DIR db.h -/usr/local/include/db4 -/usr/local/include -/usr/include/db4 -/usr/include -) - -SET(DB_NAMES ${DB_NAMES} db) -FIND_LIBRARY(DB_LIBRARY -  NAMES ${DB_NAMES} -  PATHS /usr/lib /usr/local/lib -  ) - -IF (DB_LIBRARY AND DB_INCLUDE_DIR) -    SET(DB_LIBRARIES ${DB_LIBRARY}) -    SET(DB_FOUND "YES") -ELSE (DB_LIBRARY AND DB_INCLUDE_DIR) -  SET(DB_FOUND "NO") -ENDIF (DB_LIBRARY AND DB_INCLUDE_DIR) - - -IF (DB_FOUND) -   IF (NOT DB_FIND_QUIETLY) -      MESSAGE(STATUS "Found BerkeleyDB: ${DB_LIBRARIES}") -   ENDIF (NOT DB_FIND_QUIETLY) -ELSE (DB_FOUND) -   IF (DB_FIND_REQUIRED) -      MESSAGE(FATAL_ERROR "Could not find BerkeleyDB library") -   ENDIF (DB_FIND_REQUIRED) -ENDIF (DB_FOUND) - -# Deprecated declarations. -SET (NATIVE_DB_INCLUDE_PATH ${DB_INCLUDE_DIR} ) -GET_FILENAME_COMPONENT (NATIVE_DB_LIB_PATH ${DB_LIBRARY} PATH) - -MARK_AS_ADVANCED( -  DB_LIBRARY -  DB_INCLUDE_DIR -  ) diff --git a/indra/cmake/FindZLIB.cmake b/indra/cmake/FindZLIB.cmake deleted file mode 100644 index 03a7db9d6f..0000000000 --- a/indra/cmake/FindZLIB.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# -*- cmake -*- - -# - Find zlib -# Find the ZLIB includes and library -# This module defines -#  ZLIB_INCLUDE_DIRS, where to find zlib.h, etc. -#  ZLIB_LIBRARIES, the libraries needed to use zlib. -#  ZLIB_FOUND, If false, do not try to use zlib. -# -# This FindZLIB is about 43 times as fast the one provided with cmake (2.8.x), -# because it doesn't look up the version of zlib, resulting in a dramatic -# speed up for configure (from 4 minutes 22 seconds to 6 seconds). -# -# Note: Since this file is only used for standalone, the windows -# specific parts were left out. - -FIND_PATH(ZLIB_INCLUDE_DIR zlib.h -  NO_SYSTEM_ENVIRONMENT_PATH -  ) - -FIND_LIBRARY(ZLIB_LIBRARY z) - -if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) -  SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) -  SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) -  SET(ZLIB_FOUND "YES") -else (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) -  SET(ZLIB_FOUND "NO") -endif (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) - -if (ZLIB_FOUND) -  if (NOT ZLIB_FIND_QUIETLY) -    message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}") -    SET(ZLIB_FIND_QUIETLY TRUE) -  endif (NOT ZLIB_FIND_QUIETLY) -else (ZLIB_FOUND) -  if (ZLIB_FIND_REQUIRED) -    message(FATAL_ERROR "Could not find ZLIB library") -  endif (ZLIB_FIND_REQUIRED) -endif (ZLIB_FOUND) - -mark_as_advanced( -  ZLIB_LIBRARY -  ZLIB_INCLUDE_DIR -  ) - diff --git a/indra/cmake/FindZLIBNG.cmake b/indra/cmake/FindZLIBNG.cmake new file mode 100644 index 0000000000..6e3c8cdddb --- /dev/null +++ b/indra/cmake/FindZLIBNG.cmake @@ -0,0 +1,46 @@ +# -*- cmake -*- + +# - Find zlib-ng +# Find the ZLIB includes and library +# This module defines +#  ZLIBNG_INCLUDE_DIRS, where to find zlib.h, etc. +#  ZLIBNG_LIBRARIES, the libraries needed to use zlib. +#  ZLIBNG_FOUND, If false, do not try to use zlib. +# +# This FindZLIBNG is about 43 times as fast the one provided with cmake (2.8.x), +# because it doesn't look up the version of zlib, resulting in a dramatic +# speed up for configure (from 4 minutes 22 seconds to 6 seconds). +# +# Note: Since this file is only used for standalone, the windows +# specific parts were left out. + +FIND_PATH(ZLIBNG_INCLUDE_DIR zlib.h +  NO_SYSTEM_ENVIRONMENT_PATH +  ) + +FIND_LIBRARY(ZLIBNG_LIBRARY z) + +if (ZLIBNG_LIBRARY AND ZLIBNG_INCLUDE_DIR) +  SET(ZLIBNG_INCLUDE_DIRS ${ZLIBNG_INCLUDE_DIR}) +  SET(ZLIBNG_LIBRARIES ${ZLIBNG_LIBRARY}) +  SET(ZLIBNG_FOUND "YES") +else (ZLIBNG_LIBRARY AND ZLIBNG_INCLUDE_DIR) +  SET(ZLIBNG_FOUND "NO") +endif (ZLINGB_LIBRARY AND ZLIBNG_INCLUDE_DIR) + +if (ZLIBNG_FOUND) +  if (NOT ZLIBNG_FIND_QUIETLY) +    message(STATUS "Found ZLIBNG: ${ZLIBNG_LIBRARIES}") +    SET(ZLIBNG_FIND_QUIETLY TRUE) +  endif (NOT ZLIBNG_FIND_QUIETLY) +else (ZLIBNG_FOUND) +  if (ZLIBNG_FIND_REQUIRED) +    message(FATAL_ERROR "Could not find ZLIBNG library") +  endif (ZLIBNG_FIND_REQUIRED) +endif (ZLIBNG_FOUND) + +mark_as_advanced( +  ZLIBNG_LIBRARY +  ZLIBNG_INCLUDE_DIR +  ) + diff --git a/indra/cmake/LLAppearanceUtility.cmake b/indra/cmake/LLAppearanceUtility.cmake index 28b49bf75f..0eb3c723d5 100644 --- a/indra/cmake/LLAppearanceUtility.cmake +++ b/indra/cmake/LLAppearanceUtility.cmake @@ -10,5 +10,3 @@ if (INSTALL_PROPRIETARY)          set(LLAPPEARANCEUTILITY_BIN_DIR ${CMAKE_BINARY_DIR}/llappearanceutility)      endif (LINUX)  endif (INSTALL_PROPRIETARY) - - diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index 34499aaa36..53871791fd 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -4,7 +4,7 @@ include(APR)  include(Boost)  include(EXPAT)  include(Tracy) -include(ZLIB) +include(ZLIBNG)  set(LLCOMMON_INCLUDE_DIRS      ${LIBS_OPEN_DIR}/llcommon diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake index 93626f689f..4e34951215 100644 --- a/indra/cmake/LLPrimitive.cmake +++ b/indra/cmake/LLPrimitive.cmake @@ -5,6 +5,7 @@ include(Prebuilt)  include(Boost)  use_prebuilt_binary(colladadom) +use_prebuilt_binary(minizip-ng) # needed for colladadom  use_prebuilt_binary(pcre)  use_prebuilt_binary(libxml2) @@ -22,6 +23,8 @@ if (WINDOWS)          optimized pcrecpp          debug pcred          optimized pcre +        debug libminizip +        optimized libminizip          ${BOOST_SYSTEM_LIBRARIES}          )  elseif (DARWIN) @@ -29,7 +32,7 @@ elseif (DARWIN)          llprimitive          debug collada14dom-d          optimized collada14dom -        minizip +        minizip           # for collada libminizip.a          xml2          pcrecpp          pcre diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIBNG.cmake index 6cff0753b2..1f46a23d92 100644 --- a/indra/cmake/ZLIB.cmake +++ b/indra/cmake/ZLIBNG.cmake @@ -1,17 +1,17 @@  # -*- cmake -*- -set(ZLIB_FIND_QUIETLY ON) -set(ZLIB_FIND_REQUIRED ON) +set(ZLIBNG_FIND_QUIETLY ON) +set(ZLIBNG_FIND_REQUIRED ON)  include(Prebuilt)  if (USESYSTEMLIBS) -  include(FindZLIB) +  include(FindZLIBNG)  else (USESYSTEMLIBS) -  use_prebuilt_binary(zlib) +  use_prebuilt_binary(zlib-ng)    if (WINDOWS) -    set(ZLIB_LIBRARIES  -      debug zlibd +    set(ZLIBNG_LIBRARIES  +      debug zlib        optimized zlib)    elseif (LINUX)      # @@ -26,10 +26,10 @@ else (USESYSTEMLIBS)      # second whole-archive load of the archive.  See viewer's      # CMakeLists.txt for more information.      # -    set(ZLIB_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive) -    set(ZLIB_LIBRARIES z) +    set(ZLIBNG_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive) +    set(ZLIBNG_LIBRARIES z)    elseif (DARWIN) -    set(ZLIB_LIBRARIES z) +    set(ZLIBNG_LIBRARIES z)    endif (WINDOWS) -  set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib) +  set(ZLIBNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib-ng)  endif (USESYSTEMLIBS) diff --git a/indra/doxygen/CMakeLists.txt b/indra/doxygen/CMakeLists.txt index 84188bd32f..616b5cd09c 100644 --- a/indra/doxygen/CMakeLists.txt +++ b/indra/doxygen/CMakeLists.txt @@ -4,7 +4,7 @@  # other commands to guarantee full compatibility  # with the version specified  ## prior to 2.8, the add_custom_target commands used in setting the version did not work correctly -cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR) +cmake_minimum_required(VERSION 3.8.0 FATAL_ERROR)  set(ROOT_PROJECT_NAME "SecondLife" CACHE STRING      "The root project/makefile/solution name. Defaults to SecondLife.") diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index aedd3b7ee4..5b277846b7 100755 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -83,8 +83,7 @@ def proper_windows_path(path, current_platform = sys.platform):          return drive_letter.upper() + ':\\' + rel.replace('/', '\\')  def get_default_platform(dummy): -    return {'linux2':'linux', -            'linux1':'linux', +    return {'linux':'linux',              'cygwin':'windows',              'win32':'windows',              'darwin':'darwin' diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp index 234f5c3007..3430a25536 100644 --- a/indra/llappearance/lltexlayer.cpp +++ b/indra/llappearance/lltexlayer.cpp @@ -446,32 +446,6 @@ const std::string LLTexLayerSet::getBodyRegionName() const  	return mInfo->mBodyRegion;   } - -// virtual -void LLTexLayerSet::asLLSD(LLSD& sd) const -{ -	sd["visible"] = LLSD::Boolean(isVisible()); -	LLSD layer_list_sd; -	layer_list_t::const_iterator layer_iter = mLayerList.begin(); -	layer_list_t::const_iterator layer_end  = mLayerList.end(); -	for(; layer_iter != layer_end; ++layer_iter); -	{ -		LLSD layer_sd; -		//LLTexLayerInterface* layer = (*layer_iter); -		//if (layer) -		//{ -		//	layer->asLLSD(layer_sd); -		//} -		layer_list_sd.append(layer_sd); -	} -	LLSD mask_list_sd; -	LLSD info_sd; -	sd["layers"] = layer_list_sd; -	sd["masks"] = mask_list_sd; -	sd["info"] = info_sd; -} - -  void LLTexLayerSet::destroyComposite()  {  	if( mComposite ) diff --git a/indra/llappearance/lltexlayer.h b/indra/llappearance/lltexlayer.h index 6a5040cf0b..74b421d3ee 100644 --- a/indra/llappearance/lltexlayer.h +++ b/indra/llappearance/lltexlayer.h @@ -220,8 +220,6 @@ public:  	static BOOL					sHasCaches; -	virtual void				asLLSD(LLSD& sd) const; -  protected:  	typedef std::vector<LLTexLayerInterface *> layer_list_t;  	layer_list_t				mLayerList; diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index ca8b5e946f..59aa731af2 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -10,7 +10,7 @@ include(Boost)  include(LLSharedLibs)  include(JsonCpp)  include(Copy3rdPartyLibs) -include(ZLIB) +include(ZLIBNG)  include(URIPARSER)  include(Tracy) @@ -18,7 +18,7 @@ include_directories(      ${EXPAT_INCLUDE_DIRS}      ${LLCOMMON_INCLUDE_DIRS}      ${JSONCPP_INCLUDE_DIR} -    ${ZLIB_INCLUDE_DIRS} +    ${ZLIBNG_INCLUDE_DIRS}      ${URIPARSER_INCLUDE_DIRS}      ${TRACY_INCLUDE_DIR}      ) @@ -129,6 +129,7 @@ set(llcommon_HEADER_FILES      CMakeLists.txt      chrono.h +    classic_callback.h      ctype_workaround.h      fix_macros.h      indra_constants.h @@ -300,7 +301,7 @@ target_link_libraries(      ${APR_LIBRARIES}      ${EXPAT_LIBRARIES}      ${JSONCPP_LIBRARIES} -    ${ZLIB_LIBRARIES} +    ${ZLIBNG_LIBRARIES}      ${WINDOWS_LIBRARIES}      ${BOOST_FIBER_LIBRARY}      ${BOOST_CONTEXT_LIBRARY} @@ -336,16 +337,17 @@ if (LL_TESTS)        ${BOOST_CONTEXT_LIBRARY}         ${BOOST_THREAD_LIBRARY}         ${BOOST_SYSTEM_LIBRARY}) -  LL_ADD_INTEGRATION_TEST(commonmisc "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(bitpack "" "${test_libs}") +  LL_ADD_INTEGRATION_TEST(classic_callback "" "${test_libs}") +  LL_ADD_INTEGRATION_TEST(commonmisc "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llbase64 "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llcond "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(lldate "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(lldeadmantimer "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(lldependencies "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llerror "" "${test_libs}") -  LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs}") +  LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(lleventfilter "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llframetimer "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llheteromap "" "${test_libs}") @@ -363,8 +365,8 @@ if (LL_TESTS)    LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(lltrace "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}") -  LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llunits "" "${test_libs}") +  LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(threadsafeschedule "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(tuple "" "${test_libs}") diff --git a/indra/llcommon/classic_callback.cpp b/indra/llcommon/classic_callback.cpp new file mode 100644 index 0000000000..5674e0a44d --- /dev/null +++ b/indra/llcommon/classic_callback.cpp @@ -0,0 +1,16 @@ +/** + * @file   classic_callback.cpp + * @author Nat Goodspeed + * @date   2021-09-23 + * @brief  Implementation for classic_callback. + *  + * $LicenseInfo:firstyear=2021&license=viewerlgpl$ + * Copyright (c) 2021, Linden Research, Inc. + * $/LicenseInfo$ + */ + +namespace { + +const char dummy[] = "cpp file required to build test program"; + +} // anonymous namespace diff --git a/indra/llcommon/classic_callback.h b/indra/llcommon/classic_callback.h new file mode 100644 index 0000000000..1ad6dbc58f --- /dev/null +++ b/indra/llcommon/classic_callback.h @@ -0,0 +1,292 @@ +/** + * @file   classic_callback.h + * @author Nat Goodspeed + * @date   2016-06-21 + * @brief  ClassicCallback and HeapClassicCallback + * + * This header file addresses the problem of passing a method on a C++ object + * to an API that requires a classic-C function pointer. Typically such a + * callback API accepts a void* pointer along with the function pointer, and + * the function pointer signature accepts a void* parameter. The API passes + * the caller's pointer value into the callback function so it can find its + * data. In C++, there are a few ways to deal with this case: + * + * - Use a static method with correct signature. If you don't need access to a + *   specific instance, that works fine. + * - Store the object statically (or store a static pointer to a non-static + *   instance). As long as you only care about one instance, that works, but + *   starts to get a little icky. As soon as there's more than one pertinent + *   instance, fight valiantly against the temptation to stuff the instance + *   pointer into a static pointer variable "just for a moment." + * - Code a static trampoline callback function that accepts the void* user + *   data pointer, casts it to the appropriate class type and calls the actual + *   method on that class. + * + * ClassicCallback encapsulates the last. You need only construct a + * ClassicCallback instance somewhere that will survive until the callback is + * called, binding the target C++ callable. You then call its get_callback() + * and get_userdata() methods to pass an appropriate classic-C function + * pointer and void* user data pointer, respectively, to the old-style + * callback API. get_callback() synthesizes a static trampoline function + * that casts the user data pointer and calls the bound C++ callable. + * + * $LicenseInfo:firstyear=2016&license=viewerlgpl$ + * Copyright (c) 2016, Linden Research, Inc. + * $/LicenseInfo$ + */ + +#if ! defined(LL_CLASSIC_CALLBACK_H) +#define LL_CLASSIC_CALLBACK_H + +#include <tuple> +#include <type_traits>              // std::is_same + +/***************************************************************************** +*   Helpers +*****************************************************************************/ + +// find a type in a parameter pack: http://stackoverflow.com/q/17844867/5533635 +// usage: index_of<0, sought_t, PackName...>::value +template <int idx, typename sought, typename candidate, typename ...rest> +struct index_of +{ +  static constexpr int const value = +      std::is_same<sought, candidate>::value ? +          idx : index_of<idx + 1, sought, rest...>::value; +}; + +// recursion tail +template <int idx, typename sought, typename candidate> +struct index_of<idx, sought, candidate> +{ +  static constexpr int const value = +      std::is_same<sought, candidate>::value ? idx : -1; +}; + +/***************************************************************************** +*   ClassicCallback +*****************************************************************************/ +/** + * Instantiate ClassicCallback in whatever storage will persist long enough + * for the callback to be called. It holds a modern C++ callable, providing a + * static function pointer and a USERDATA (default void*) capable of being + * passed through a classic-C callback API. When the static function is called + * with that USERDATA pointer, ClassicCallback forwards the call to the bound + * C++ callable. + * + * Usage: + * @code + * // callback signature required by the API of interest + * typedef void (*callback_t)(int, const char*, void*, double); + * // old-style API that accepts a classic-C callback function pointer + * void oldAPI(callback_t callback, void* userdata); + * // but I want to pass a lambda that references data local to my function! + * // (We don't need to name the void* parameter in the C++ callable; + * // ClassicCallback already used it to locate the lambda instance.) + * auto ccb{ + *     makeClassicCallback<callback_t>( + *         [=](int n, const char* s, void*, double f){ ... }) }; + * oldAPI(ccb.get_callback(), ccb.get_userdata()); + * // If the passed callback is called before oldAPI() returns, we can now + * // safely destroy ccb. If the callback might be called later, consider + * // HeapClassicCallback instead. + * @endcode + * + * If you have a callable object in hand, and you want to pass that to + * ClassicCallback, you may either consume it by passing std::move(object), or + * explicitly specify a reference to that object type as the CALLABLE template + * parameter: + * @code + * CallableObject obj; + * ClassicCallback<callback_t, void*, CallableObject&> ccb{obj}; + * @endcode + */ +// CALLABLE should either be deduced, e.g. by makeClassicCallback(), or +// specified explicitly. Its default type is meaningless, coded only so we can +// provide a useful default for USERDATA. +template <typename SIGNATURE, typename USERDATA=void*, typename CALLABLE=void(*)()> +class ClassicCallback +{ +    typedef ClassicCallback<SIGNATURE, USERDATA, CALLABLE> self_t; + +public: +    /// ClassicCallback binds any modern C++ callable. +    ClassicCallback(CALLABLE&& callable): +        mCallable(std::forward<CALLABLE>(callable)) +    {} + +    /** +     * ClassicCallback must not itself be copied or moved! Once you've passed +     * get_userdata() to some API, this object MUST remain at that address. +     */ +    // However, we can't yet count on C++17 Class Template Argument Deduction, +    // which means makeClassicCallback() is still useful, which means we MUST +    // be able to return one to construct into caller's instance (move ctor). +    // Possible defense: bool 'referenced' data member set by get_userdata(), +    // with an llassert_always(! referenced) check in the move constructor. +    ClassicCallback(ClassicCallback const&) = delete; +    ClassicCallback(ClassicCallback&&) = default; // delete; +    ClassicCallback& operator=(ClassicCallback const&) = delete; +    ClassicCallback& operator=(ClassicCallback&&) = delete; + +    /// Call get_callback() to get the necessary function pointer. +    SIGNATURE get_callback() const +    { +        // This declaration is where the compiler instantiates the correct +        // signature for the call() function template. +        SIGNATURE callback = call; +        return callback; +    } + +    /// Call get_userdata() to get the opaque USERDATA pointer to pass +    /// through the classic-C callback API. +    USERDATA get_userdata() const +    { +        // The USERDATA userdata is of course a pointer to this object. +        return static_cast<USERDATA>(const_cast<self_t*>(this)); +    } + +protected: +    /** +     * This call() method accepts one or more callback arguments. It assumes +     * the first USERDATA parameter is the userdata. +     */ +    // Note that we're not literally using C++ perfect forwarding here -- it +    // doesn't work to specify (Args&&... args). But that's okay because we're +    // dealing with a classic-C callback! It's not going to pass any move-only +    // types. +    template <typename... Args> +    static auto call(Args... args) +    { +        auto userdata = extract_userdata(std::forward<Args>(args)...); +        // cast the userdata param to 'this' and call mCallable +        return static_cast<self_t*>(userdata)-> +            mCallable(std::forward<Args>(args)...); +    } + +    template <typename... Args> +    static USERDATA extract_userdata(Args... args) +    { +        // Search for the first USERDATA parameter type, then extract that pointer. +        // extract value from parameter pack: http://stackoverflow.com/a/24710433/5533635 +        return std::get<index_of<0, USERDATA, Args...>::value>(std::forward_as_tuple(args...)); +    } + +    CALLABLE mCallable; +}; + +/** + * Usage: + * @code + * auto ccb{ makeClassicCallback<classic_callback_signature>(actual_callback) }; + * @endcode + */ +template <typename SIGNATURE, typename USERDATA=void*, typename CALLABLE=void(*)()> +auto makeClassicCallback(CALLABLE&& callable) +{ +    return std::move(ClassicCallback<SIGNATURE, USERDATA, CALLABLE> +                     (std::forward<CALLABLE>(callable))); +} + +/***************************************************************************** +*   HeapClassicCallback +*****************************************************************************/ +/** + * HeapClassicCallback is like ClassicCallback, with this exception: it MUST + * be allocated on the heap because, once the callback has been called, it + * deletes itself. This addresses the problem of a callback whose lifespan + * must persist beyond the scope in which the callback API is engaged -- but + * naturally this callback must be called exactly ONCE. + * + * Usage: + * @code + * // callback signature required by the API of interest + * typedef void (*callback_t)(int, const char*, void*, double); + * // here's the old-style API + * void oldAPI(callback_t callback, void* userdata); + * // want to call someObjPtr->method() when oldAPI() fires the callback, + * // sometime in the future after the enclosing function has returned + * auto ccb{ + *     makeHeapClassicCallback<callback_t>( + *         [someObjPtr](int n, const char* s, void*, double f) + *         { someObjPtr->method(); }) }; + * oldAPI(ccb.get_callback(), ccb.get_userdata()); + * // We don't need a smart pointer for ccb, because it will be deleted once + * // oldAPI() calls the bound lambda. HeapClassicCallback is for when the + * // callback will be called exactly once. If the classic API might call the + * // passed callback more than once -- or might never call it at all -- + * // manually construct a ClassicCallback on the heap and manage its lifespan + * // explicitly. + * @endcode + */ +template <typename SIGNATURE, typename USERDATA=void*, typename CALLABLE=void(*)()> +class HeapClassicCallback: public ClassicCallback<SIGNATURE, USERDATA, CALLABLE> +{ +    typedef ClassicCallback<SIGNATURE, USERDATA, CALLABLE> super; +    typedef HeapClassicCallback<SIGNATURE, USERDATA, CALLABLE> self_t; + +    // This destructor is intentionally private to prevent allocation anywhere +    // but the heap. (The Design and Evolution of C++, section 11.4.2: Control +    // of Allocation) +    ~HeapClassicCallback() {} + +public: +    HeapClassicCallback(CALLABLE&& callable): +        super(std::forward<CALLABLE>(callable)) +    {} + +    // makeHeapClassicCallback() only needs to return a pointer -- not an +    // instance -- so we can lock down our move constructor too. +    HeapClassicCallback(HeapClassicCallback&&) = delete; + +    /// Replicate get_callback() from the base class because we must +    /// instantiate OUR call() function template. +    SIGNATURE get_callback() const +    { +        // This declaration is where the compiler instantiates the correct +        // signature for the call() function template. +        SIGNATURE callback = call; +        return callback; +    } + +    /// Replicate get_userdata() from the base class because our call() +    /// method must be able to reconstitute a pointer to this subclass. +    USERDATA get_userdata() const +    { +        // The USERDATA userdata is of course a pointer to this object. +        return static_cast<const USERDATA>(const_cast<self_t*>(this)); +    } + +private: +    // call() uses a helper class to delete the HeapClassicCallback when done, +    // for two reasons. Most importantly, this deletes even if the callback +    // throws an exception. But also, call() must directly return the callback +    // result for return-type deduction. +    struct Destroyer +    { +        Destroyer(self_t* p): mPtr(p) {} +        ~Destroyer() { delete mPtr; } + +        self_t* mPtr; +    }; + +    template <typename... Args> +    static auto call(Args... args) +    { +        // extract userdata at this level too +        USERDATA userdata = super::extract_userdata(std::forward<Args>(args)...); +        // arrange to delete it when we leave by whatever means +        Destroyer destroy(static_cast<self_t*>(userdata)); + +        return super::call(std::forward<Args>(args)...); +    } +}; + +template <typename SIGNATURE, typename USERDATA=void*, typename CALLABLE=void(*)()> +auto makeHeapClassicCallback(CALLABLE&& callable) +{ +    return new HeapClassicCallback<SIGNATURE, USERDATA, CALLABLE> +        (std::forward<CALLABLE>(callable)); +} + +#endif /* ! defined(LL_CLASSIC_CALLBACK_H) */ diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index 022a5d4659..8b4a0ee6d8 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -37,7 +37,7 @@  #ifdef LL_USESYSTEMLIBS  # include <zlib.h>  #else -# include "zlib/zlib.h"  // for davep's dirty little zip functions +# include "zlib-ng/zlib.h"  // for davep's dirty little zip functions  #endif  #if !LL_WINDOWS diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index f717b2cf34..9b6bb3826c 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -36,7 +36,7 @@  #ifdef LL_USESYSTEMLIBS  # include <zlib.h>  #else -# include "zlib/zlib.h" +# include "zlib-ng/zlib.h"  #endif  #include "llprocessor.h" @@ -456,6 +456,8 @@ LLOSInfo::LLOSInfo() :  	dotted_version_string << mMajorVer << "." << mMinorVer << "." << mBuild;  	mOSVersionString.append(dotted_version_string.str()); +	mOSBitness = is64Bit() ? 64 : 32; +	LL_INFOS("LLOSInfo") << "OS bitness: " << mOSBitness << LL_ENDL;  }  #ifndef LL_WINDOWS @@ -511,6 +513,11 @@ const std::string& LLOSInfo::getOSVersionString() const  	return mOSVersionString;  } +const S32 LLOSInfo::getOSBitness() const +{ +	return mOSBitness; +} +  //static  U32 LLOSInfo::getProcessVirtualSizeKB()  { @@ -564,6 +571,25 @@ U32 LLOSInfo::getProcessResidentSizeKB()  	return resident_size;  } +//static +bool LLOSInfo::is64Bit() +{ +#if LL_WINDOWS +#if defined(_WIN64) +    return true; +#elif defined(_WIN32) +    // 32-bit viewer may be run on both 32-bit and 64-bit Windows, need to elaborate +    BOOL f64 = FALSE; +    return IsWow64Process(GetCurrentProcess(), &f64) && f64; +#else +    return false; +#endif +#else // ! LL_WINDOWS +    // we only build a 64-bit mac viewer and currently we don't build for linux at all +    return true;  +#endif +} +  LLCPUInfo::LLCPUInfo()  {  	std::ostringstream out; diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h index 5ab97939b9..cb92cb0ac6 100644 --- a/indra/llcommon/llsys.h +++ b/indra/llcommon/llsys.h @@ -51,6 +51,8 @@ public:  	const std::string& getOSStringSimple() const;  	const std::string& getOSVersionString() const; + +	const S32 getOSBitness() const;  	S32 mMajorVer;  	S32 mMinorVer; @@ -59,6 +61,7 @@ public:  #ifndef LL_WINDOWS  	static S32 getMaxOpenFiles();  #endif +	static bool is64Bit();  	static U32 getProcessVirtualSizeKB();  	static U32 getProcessResidentSizeKB(); @@ -66,6 +69,7 @@ private:  	std::string mOSString;  	std::string mOSStringSimple;  	std::string mOSVersionString; +	S32 mOSBitness;  }; diff --git a/indra/llcommon/tests/classic_callback_test.cpp b/indra/llcommon/tests/classic_callback_test.cpp new file mode 100644 index 0000000000..c060775c24 --- /dev/null +++ b/indra/llcommon/tests/classic_callback_test.cpp @@ -0,0 +1,144 @@ +/** + * @file   classic_callback_test.cpp + * @author Nat Goodspeed + * @date   2021-09-22 + * @brief  Test ClassicCallback and HeapClassicCallback. + *  + * $LicenseInfo:firstyear=2021&license=viewerlgpl$ + * Copyright (c) 2021, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "classic_callback.h" +// STL headers +#include <iostream> +#include <string> +// std headers +// external library headers +// other Linden headers +#include "../test/lltut.h" + +/***************************************************************************** +*   example callback +*****************************************************************************/ +// callback_t is part of the specification of someAPI() +typedef void (*callback_t)(const char*, void*); +void someAPI(callback_t callback, void* userdata) +{ +    callback("called", userdata); +} + +// C++ callable I want as the actual callback +struct MyCallback +{ +    void operator()(const char* msg, void*) +    { +        mMsg = msg; +    } + +    void callback_with_extra(const std::string& extra, const char* msg) +    { +        mMsg = extra + ' ' + msg; +    } + +    std::string mMsg; +}; + +/***************************************************************************** +*   example callback accepting several params, and void* userdata isn't first +*****************************************************************************/ +typedef std::string (*complex_callback)(int, const char*, void*, double); +std::string otherAPI(complex_callback callback, void* userdata) +{ +    return callback(17, "hello world", userdata, 3.0); +} + +// struct into which we can capture complex_callback params +static struct Data +{ +    void set(int i, const char* s, double f) +    { +        mi = i; +        ms = s; +        mf = f; +    } + +    void clear() { set(0, "", 0.0); } + +    int mi; +    std::string ms; +    double mf; +} sData; + +// C++ callable I want to pass +struct OtherCallback +{ +    std::string operator()(int num, const char* str, void*, double approx) +    { +        sData.set(num, str, approx); +        return "hello back!"; +    } +}; + +/***************************************************************************** +*   TUT +*****************************************************************************/ +namespace tut +{ +    struct classic_callback_data +    { +    }; +    typedef test_group<classic_callback_data> classic_callback_group; +    typedef classic_callback_group::object object; +    classic_callback_group classic_callbackgrp("classic_callback"); + +    template<> template<> +    void object::test<1>() +    { +        set_test_name("ClassicCallback"); +        // engage someAPI(MyCallback()) +        auto ccb{ makeClassicCallback<callback_t>(MyCallback()) }; +        someAPI(ccb.get_callback(), ccb.get_userdata()); +        // Unfortunately, with the side effect confined to the bound +        // MyCallback instance, that call was invisible. Bind a reference to a +        // named instance by specifying a ref type. +        MyCallback mcb; +        ClassicCallback<callback_t, void*, MyCallback&> ccb2(mcb); +        someAPI(ccb2.get_callback(), ccb2.get_userdata()); +        ensure_equals("failed to call through ClassicCallback", mcb.mMsg, "called"); + +        // try with HeapClassicCallback +        mcb.mMsg.clear(); +        auto hcbp{ makeHeapClassicCallback<callback_t>(mcb) }; +        someAPI(hcbp->get_callback(), hcbp->get_userdata()); +        ensure_equals("failed to call through HeapClassicCallback", mcb.mMsg, "called"); + +        // lambda +        // The tricky thing here is that a lambda is an unspecified type, so +        // you can't declare a ClassicCallback<signature, void*, that type>. +        mcb.mMsg.clear(); +        auto xcb( +            makeClassicCallback<callback_t>( +                [&mcb](const char* msg, void*) +                { mcb.callback_with_extra("extra", msg); })); +        someAPI(xcb.get_callback(), xcb.get_userdata()); +        ensure_equals("failed to call lambda", mcb.mMsg, "extra called"); + +        // engage otherAPI(OtherCallback()) +        OtherCallback ocb; +        // Instead of specifying a reference type for the bound CALLBACK, as +        // with ccb2 above, you can alternatively move the callable object +        // into the ClassicCallback (of course AFTER any other reference). +        // That's why OtherCallback uses external data for its observable side +        // effect. +        auto occb{ makeClassicCallback<complex_callback>(std::move(ocb)) }; +        std::string result{ otherAPI(occb.get_callback(), occb.get_userdata()) }; +        ensure_equals("failed to return callback result", result, "hello back!"); +        ensure_equals("failed to set int", sData.mi, 17); +        ensure_equals("failed to set string", sData.ms, "hello world"); +        ensure_equals("failed to set double", sData.mf, 3.0); +    } +} // namespace tut diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt index 6a301ad50d..c591680250 100644 --- a/indra/llcorehttp/CMakeLists.txt +++ b/indra/llcorehttp/CMakeLists.txt @@ -7,7 +7,7 @@ include(GoogleMock)  include(CURL)  include(OpenSSL)  include(NGHTTP2) -include(ZLIB) +include(ZLIBNG)  include(LLCoreHttp)  include(LLAddBuildTest)  include(LLMessage) diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt index 8883317751..436b8dd1a2 100644 --- a/indra/llimage/CMakeLists.txt +++ b/indra/llimage/CMakeLists.txt @@ -9,7 +9,7 @@ include(LLMath)  include(LLFileSystem)  include(LLKDU)  include(LLImageJ2COJ) -include(ZLIB) +include(ZLIBNG)  include(LLAddBuildTest)  include(bugsplat)  include(Tut) @@ -20,7 +20,7 @@ include_directories(      ${LLMATH_INCLUDE_DIRS}      ${LLFILESYSTEM_INCLUDE_DIRS}      ${PNG_INCLUDE_DIRS} -    ${ZLIB_INCLUDE_DIRS} +    ${ZLIBNG_INCLUDE_DIRS}      )  set(llimage_SOURCE_FILES @@ -74,7 +74,7 @@ target_link_libraries(llimage      ${LLCOMMON_LIBRARIES}      ${JPEG_LIBRARIES}      ${PNG_LIBRARIES} -    ${ZLIB_LIBRARIES} +    ${ZLIBNG_LIBRARIES}      )  # Add tests diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index e2469f3c7e..e25dae8a90 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -463,13 +463,13 @@ BOOL LLParcel::importAccessEntry(std::istream& input_stream, LLAccessEntry* entr          }          else if ("time" == keyword)          { -            S32 when; +            S32 when{};              LLStringUtil::convertToS32(value, when);              entry->mTime = when;          }          else if ("flags" == keyword)          { -            U32 setting; +            U32 setting{};              LLStringUtil::convertToU32(value, setting);              entry->mFlags = setting;          } diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index adbb93f789..ba76ae4e37 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -335,7 +335,7 @@ public:  	// "init_history" message   	void initializeUrlHistory(const LLSD& url_history); -	boost::shared_ptr<LLPluginClassMedia> getSharedPrt() { return boost::dynamic_pointer_cast<LLPluginClassMedia>(shared_from_this()); } // due to enable_shared_from_this +	boost::shared_ptr<LLPluginClassMedia> getSharedPtr() { return boost::dynamic_pointer_cast<LLPluginClassMedia>(shared_from_this()); } // due to enable_shared_from_this  protected: diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 204ff63712..b1d371a399 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -36,7 +36,7 @@  #ifdef LL_USESYSTEMLIBS  # include <zlib.h>  #else -# include "zlib/zlib.h" +# include "zlib-ng/zlib.h"  #endif  std::string model_names[] = diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 7b1ed62dc9..8ebaf77eec 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -60,11 +60,11 @@  BOOL gDebugSession = FALSE; +BOOL gDebugGLSession = FALSE;  BOOL gClothRipple = FALSE;  BOOL gHeadlessClient = FALSE;  BOOL gNonInteractive = FALSE;  BOOL gGLActive = FALSE; -BOOL gGLDebugLoggingEnabled = TRUE;  static const std::string HEADLESS_VENDOR_STRING("Linden Lab");  static const std::string HEADLESS_RENDERER_STRING("Headless"); @@ -86,34 +86,30 @@ void APIENTRY gl_debug_callback(GLenum source,                                  const GLchar* message,                                  GLvoid* userParam)  { -	if (gGLDebugLoggingEnabled) -	{ - -        if (severity != GL_DEBUG_SEVERITY_HIGH_ARB // && -            //severity != GL_DEBUG_SEVERITY_MEDIUM_ARB && -            //severity != GL_DEBUG_SEVERITY_LOW_ARB -            ) -        { //suppress out-of-spec messages sent by nvidia driver (mostly vertexbuffer hints) -            return; -        } +    if (severity != GL_DEBUG_SEVERITY_HIGH_ARB // && +        //severity != GL_DEBUG_SEVERITY_MEDIUM_ARB && +        //severity != GL_DEBUG_SEVERITY_LOW_ARB +        ) +    { //suppress out-of-spec messages sent by nvidia driver (mostly vertexbuffer hints) +        return; +    } -	    if (severity == GL_DEBUG_SEVERITY_HIGH_ARB) -	    { -		    LL_WARNS() << "----- GL ERROR --------" << LL_ENDL; -	    } -	    else -	    { -		    LL_WARNS() << "----- GL WARNING -------" << LL_ENDL; -	    } -	    LL_WARNS() << "Type: " << std::hex << type << LL_ENDL; -	    LL_WARNS() << "ID: " << std::hex << id << LL_ENDL; -	    LL_WARNS() << "Severity: " << std::hex << severity << LL_ENDL; -	    LL_WARNS() << "Message: " << message << LL_ENDL; -	    LL_WARNS() << "-----------------------" << LL_ENDL; -	    if (severity == GL_DEBUG_SEVERITY_HIGH_ARB) -	    { -		    LL_ERRS() << "Halting on GL Error" << LL_ENDL; -	    } +    if (severity == GL_DEBUG_SEVERITY_HIGH_ARB) +    { +        LL_WARNS() << "----- GL ERROR --------" << LL_ENDL; +    } +    else +    { +        LL_WARNS() << "----- GL WARNING -------" << LL_ENDL; +    } +    LL_WARNS() << "Type: " << std::hex << type << LL_ENDL; +    LL_WARNS() << "ID: " << std::hex << id << LL_ENDL; +    LL_WARNS() << "Severity: " << std::hex << severity << LL_ENDL; +    LL_WARNS() << "Message: " << message << LL_ENDL; +    LL_WARNS() << "-----------------------" << LL_ENDL; +    if (severity == GL_DEBUG_SEVERITY_HIGH_ARB) +    { +        LL_ERRS() << "Halting on GL Error" << LL_ENDL;      }  }  #endif diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index cd0b247ed8..3c40f85654 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -47,6 +47,7 @@  extern BOOL gDebugGL;  extern BOOL gDebugSession; +extern BOOL gDebugGLSession;  extern llofstream gFailLog;  #define LL_GL_ERRS LL_ERRS("RenderState") diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 76fd789bec..8f00d1274e 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -1363,6 +1363,9 @@ public:  	virtual BOOL handleKeyHere(KEY key, MASK mask);  	virtual BOOL handleAcceleratorKey(KEY key, MASK mask); +     +    virtual void onFocusLost(); +    virtual void setFocus(BOOL b);  };  LLMenuItemBranchDownGL::LLMenuItemBranchDownGL( const Params& p) : @@ -1517,6 +1520,21 @@ BOOL LLMenuItemBranchDownGL::handleAcceleratorKey(KEY key, MASK mask)  	return handled;  } +void LLMenuItemBranchDownGL::onFocusLost() +{ +    // needed for tab-based selection +    LLMenuItemBranchGL::onFocusLost(); +    LLMenuGL::setKeyboardMode(FALSE); +    setHighlight(FALSE); +} + +void LLMenuItemBranchDownGL::setFocus(BOOL b) +{ +    // needed for tab-based selection +    LLMenuItemBranchGL::setFocus(b); +    LLMenuGL::setKeyboardMode(b); +    setHighlight(b); +}  BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask)  { diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 2e2e1b9833..a4e83b42b4 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -457,6 +457,8 @@ public:  	void					setSkipLinkUnderline(bool skip_link_underline) { mSkipLinkUnderline = skip_link_underline; }  	bool					getSkipLinkUnderline() { return mSkipLinkUnderline;  } +    void					setParseURLs(bool parse_urls) { mParseHTML = parse_urls; } +  	void					setPlainText(bool value) { mPlainText = value;}  	bool					getPlainText() const { return mPlainText; } diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp index 12a6baa3e6..81e938edbe 100644 --- a/indra/llwindow/lldxhardware.cpp +++ b/indra/llwindow/lldxhardware.cpp @@ -229,7 +229,7 @@ S32 LLDXHardware::getMBVideoMemoryViaWMI()  }  //Getting the version of graphics controller driver via WMI -std::string LLDXHardware::getDriverVersionWMI() +std::string LLDXHardware::getDriverVersionWMI(EGPUVendor vendor)  {  	std::string mDriverVersion;  	HRESULT hrCoInitialize = S_OK; @@ -325,15 +325,68 @@ std::string LLDXHardware::getDriverVersionWMI()  		{  			break;               // If quantity less then 1.  		} +         +        if (vendor != GPU_ANY) +        { +            VARIANT vtCaptionProp; +            // Might be preferable to check "AdapterCompatibility" here instead of caption. +            hr = pclsObj->Get(L"Caption", 0, &vtCaptionProp, 0, 0); + +            if (FAILED(hr)) +            { +                LL_WARNS("AppInit") << "Query for Caption property failed." << " Error code = 0x" << hr << LL_ENDL; +                pSvc->Release(); +                pLoc->Release(); +                CoUninitialize(); +                return std::string();               // Program has failed. +            } + +            // use characters in the returned driver version +            BSTR caption(vtCaptionProp.bstrVal); + +            //convert BSTR to std::string +            std::wstring ws(caption, SysStringLen(caption)); +            std::string caption_str(ws.begin(), ws.end()); +            LLStringUtil::toLower(caption_str); + +            bool found = false; +            switch (vendor) +            { +            case GPU_INTEL: +                found = caption_str.find("intel") != std::string::npos; +                break; +            case GPU_NVIDIA: +                found = caption_str.find("nvidia") != std::string::npos; +                break; +            case GPU_AMD: +                found = caption_str.find("amd") != std::string::npos +                        || caption_str.find("ati ") != std::string::npos +                        || caption_str.find("radeon") != std::string::npos; +                break; +            default: +                break; +            } -		VARIANT vtProp; +            if (found) +            { +                VariantClear(&vtCaptionProp); +            } +            else +            { +                VariantClear(&vtCaptionProp); +                pclsObj->Release(); +                continue; +            } +        } -		// Get the value of the Name property -		hr = pclsObj->Get(L"DriverVersion", 0, &vtProp, 0, 0); +        VARIANT vtVersionProp; + +		// Get the value of the DriverVersion property +		hr = pclsObj->Get(L"DriverVersion", 0, &vtVersionProp, 0, 0);  		if (FAILED(hr))  		{ -			LL_WARNS("AppInit") << "Query for name property failed." << " Error code = 0x" << hr << LL_ENDL; +			LL_WARNS("AppInit") << "Query for DriverVersion property failed." << " Error code = 0x" << hr << LL_ENDL;  			pSvc->Release();  			pLoc->Release();  			CoUninitialize(); @@ -341,7 +394,7 @@ std::string LLDXHardware::getDriverVersionWMI()  		}  		// use characters in the returned driver version -		BSTR driverVersion(vtProp.bstrVal); +		BSTR driverVersion(vtVersionProp.bstrVal);  		//convert BSTR to std::string  		std::wstring ws(driverVersion, SysStringLen(driverVersion)); @@ -354,10 +407,19 @@ std::string LLDXHardware::getDriverVersionWMI()  		}  		else if (mDriverVersion != str)  		{ -			LL_WARNS("DriverVersion") << "Different versions of drivers. Version of second driver : " << str << LL_ENDL; +            if (vendor == GPU_ANY) +            { +                // Expected from systems with gpus from different vendors +                LL_INFOS("DriverVersion") << "Multiple video drivers detected. Version of second driver: " << str << LL_ENDL; +            } +            else +            { +                // Not Expected! +                LL_WARNS("DriverVersion") << "Multiple video drivers detected from same vendor. Version of second driver : " << str << LL_ENDL; +            }  		} -		VariantClear(&vtProp); +		VariantClear(&vtVersionProp);  		pclsObj->Release();  	} diff --git a/indra/llwindow/lldxhardware.h b/indra/llwindow/lldxhardware.h index 1cb687e3b6..9cec3e2f1b 100644 --- a/indra/llwindow/lldxhardware.h +++ b/indra/llwindow/lldxhardware.h @@ -88,7 +88,15 @@ public:  	// vram_only TRUE does a "light" probe.  	BOOL getInfo(BOOL vram_only); -	std::string getDriverVersionWMI(); +    // WMI can return multiple GPU drivers +    // specify which one to output +    typedef enum { +        GPU_INTEL, +        GPU_NVIDIA, +        GPU_AMD, +        GPU_ANY +    } EGPUVendor; +	std::string getDriverVersionWMI(EGPUVendor vendor);  	S32 getVRAM() const { return mVRAM; } diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 67c50294e1..1f23040260 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -3058,8 +3058,20 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_                  if (raw->header.dwType == RIM_TYPEMOUSE)                  {                      LLMutexLock lock(&window_imp->mRawMouseMutex); -                    window_imp->mRawMouseDelta.mX += raw->data.mouse.lLastX; -                    window_imp->mRawMouseDelta.mY -= raw->data.mouse.lLastY; + +                    S32 speed; +                    const S32 DEFAULT_SPEED(10); +                    SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0); +                    if (speed == DEFAULT_SPEED) +                    { +                        window_imp->mRawMouseDelta.mX += raw->data.mouse.lLastX; +                        window_imp->mRawMouseDelta.mY -= raw->data.mouse.lLastY; +                    } +                    else +                    { +                        window_imp->mRawMouseDelta.mX += round((F32)raw->data.mouse.lLastX * (F32)speed / DEFAULT_SPEED); +                        window_imp->mRawMouseDelta.mY -= round((F32)raw->data.mouse.lLastY * (F32)speed / DEFAULT_SPEED); +                    }                  }              }          } diff --git a/indra/mac_crash_logger/README.txt b/indra/mac_crash_logger/README.txt deleted file mode 100644 index 6932a8d9c3..0000000000 --- a/indra/mac_crash_logger/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -This component is no longer used in Linden Lab builds. -Change requests to support continued use by open source -builds are welcome. diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 5e0d3b52b4..d4bd1c8b57 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -57,7 +57,7 @@ include(ViewerMiscLibs)  include(ViewerManager)  include(VisualLeakDetector)  include(VulkanGltf) -include(ZLIB) +include(ZLIBNG)  include(URIPARSER)  if (NOT HAVOK_TPV) @@ -1852,10 +1852,6 @@ if (WINDOWS)        winmm_shim        ) -    if (NOT USE_BUGSPLAT) -        LIST(APPEND COPY_INPUT_DEPENDENCIES windows-crash-logger) -    endif (NOT USE_BUGSPLAT) -      if (ADDRESS_SIZE EQUAL 64)          list(APPEND COPY_INPUT_DEPENDENCIES              ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/vivoxsdk_x64.dll @@ -2020,14 +2016,14 @@ endif (WINDOWS)  #  # We generally want the newest version of the library to provide all symbol  # resolution.  To that end, when using static archives, the *_PRELOAD_ARCHIVES -# variables, PNG_PRELOAD_ARCHIVES and ZLIB_PRELOAD_ARCHIVES, get the archives +# variables, PNG_PRELOAD_ARCHIVES and ZLIBNG_PRELOAD_ARCHIVES, get the archives  # dumped into the target binary and runtime lookup will find the most  # modern version.  target_link_libraries(${VIEWER_BINARY_NAME}      ${LEGACY_STDIO_LIBS}      ${PNG_PRELOAD_ARCHIVES} -    ${ZLIB_PRELOAD_ARCHIVES} +    ${ZLIBNG_PRELOAD_ARCHIVES}      ${URIPARSER_PRELOAD_ARCHIVES}      ${GOOGLE_PERFTOOLS_LIBRARIES}      ${LLAUDIO_LIBRARIES} diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 09a7391e4e..28179fc1f5 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.6.1 +6.6.2 diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml index dd2b656ce3..e16a5c7e76 100644 --- a/indra/newview/app_settings/cmd_line.xml +++ b/indra/newview/app_settings/cmd_line.xml @@ -55,7 +55,7 @@      <key>debugsession</key>      <map>        <key>desc</key> -      <string>Run as if RenderDebugGL is TRUE, but log errors until end of session.</string> +      <string>Run as if RenderDebugGLSession is TRUE, but log errors until end of session.</string>        <key>map-to</key>        <string>DebugSession</string>      </map> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1be6124a2a..87364d9ebb 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3858,7 +3858,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>http://events.secondlife.com/viewer/embed/event/</string> +      <string>http://events.[GRID]/viewer/embed/event/[EVENT_ID]</string>      </map>      <key>FastCacheFetchEnabled</key>      <map> @@ -8646,6 +8646,17 @@        <key>Value</key>        <integer>1</integer>      </map> +    <key>UpdateRememberPasswordSetting</key> +    <map> +      <key>Comment</key> +      <string>Save 'rememeber password' setting for current user.</string> +      <key>Persist</key> +      <integer>0</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>    <key>OctreeMaxNodeCapacity</key>    <map>      <key>Comment</key> @@ -9152,10 +9163,10 @@        <key>Value</key>        <real>0.5</real>      </map> -    <key>RenderDebugGL</key> +    <key>RenderDebugGLSession</key>      <map>        <key>Comment</key> -      <string>Enable strict GL debugging.</string> +      <string>Enable strict GL debugging on the start of next session.</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index b79af04c36..7f6f6e5997 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -713,6 +713,12 @@ void LLAgent::moveYaw(F32 mag, bool reset_view)  		setControlFlags(AGENT_CONTROL_YAW_NEG);  	} +    U32 mask = AGENT_CONTROL_YAW_POS | AGENT_CONTROL_YAW_NEG; +    if ((getControlFlags() & mask) == mask) +    { +        gAgentCamera.setYawKey(0); +    } +      if (reset_view)  	{          gAgentCamera.resetView(); @@ -2005,6 +2011,27 @@ void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32  	//  	gAgentCamera.updateLookAt(mouse_x, mouse_y); + +    // When agent has no parents, position updates come from setPositionAgent() +    // But when agent has a parent (ex: is seated), position remains unchanged +    // relative to parent and no parent's position update trigger +    // setPositionAgent(). +    // But EEP's sky track selection still needs an update if agent has a parent +    // and parent moves (ex: vehicles). +    if (isAgentAvatarValid() +        && gAgentAvatarp->getParent() +        && !mOnPositionChanged.empty() +        ) +    { +        LLVector3d new_position = getPositionGlobal(); +        if ((mLastTestGlobal - new_position).lengthSquared() > 1.0) +        { +            // If the position has changed by more than 1 meter since the last time we triggered. +            // filters out some noise.  +            mLastTestGlobal = new_position; +            mOnPositionChanged(mFrameAgent.getOrigin(), new_position); +        } +    }  }  // friends and operators diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 8d02bec53e..57a59d81c4 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -401,10 +401,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi  	LLQuaternion obj_rot = object->getRenderRotation();  	LLVector3 obj_pos = object->getRenderPosition(); -	BOOL is_avatar = object->isAvatar();  	// if is avatar - don't do any funk heuristics to position the focal point  	// see DEV-30589 -	if (is_avatar) +	if (object->isAvatar() || (object->isAnimatedObject() && object->getControlAvatar()))  	{  		return original_focus_point - obj_pos;  	} @@ -529,7 +528,6 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi  	// or keep the focus point in the object middle when (relatively) far  	// NOTE: leave focus point in middle of avatars, since the behavior you want when alt-zooming on avatars  	// is almost always "tumble about middle" and not "spin around surface point" -	if (!is_avatar)   	{  		LLVector3 obj_rel = original_focus_point - object->getRenderPosition(); @@ -1423,7 +1421,7 @@ void LLAgentCamera::updateCamera()  			F32 smoothing = LLSmoothInterpolation::getInterpolant(gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE, FALSE); -			if (!mFocusObject)  // we differentiate on avatar mode  +			if (mFocusOnAvatar && !mFocusObject) // we differentiate on avatar mode   			{  				// for avatar-relative focus, we smooth in avatar space -  				// the avatar moves too jerkily w/r/t global space to smooth there. diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index be168ff5dd..2e769dc737 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -37,6 +37,7 @@  #include "llgesturemgr.h"  #include "llinventorybridge.h"  #include "llinventoryfunctions.h" +#include "llinventorymodelbackgroundfetch.h"  #include "llinventoryobserver.h"  #include "llinventorypanel.h"  #include "lllocaltextureobject.h" @@ -1582,6 +1583,14 @@ void LLAgentWearables::editWearable(const LLUUID& item_id)  		return;  	} +    if (!item->isFinished()) +    { +        LL_WARNS() << "Tried to edit wearable that isn't loaded" << LL_ENDL; +        // Restart fetch or put item to the front +        LLInventoryModelBackgroundFetch::instance().start(item->getUUID(), false); +        return; +    } +  	LLViewerWearable* wearable = gAgentWearables.getWearableFromItemID(item_id);  	if (!wearable)  	{ @@ -1595,6 +1604,18 @@ void LLAgentWearables::editWearable(const LLUUID& item_id)  		return;  	} +    S32 shape_count = gAgentWearables.getWearableCount(LLWearableType::WT_SHAPE); +    S32 hair_count = gAgentWearables.getWearableCount(LLWearableType::WT_HAIR); +    S32 eye_count = gAgentWearables.getWearableCount(LLWearableType::WT_EYES); +    S32 skin_count = gAgentWearables.getWearableCount(LLWearableType::WT_SKIN); +    if (!shape_count || !hair_count || !eye_count || !skin_count) +    { +        // Don't let user edit wearables if avatar is cloud due to missing parts. +        // Let user edit wearables if avatar is cloud due to missing textures. +        LL_WARNS() << "Cannot modify wearable. Avatar is cloud and missing parts." << LL_ENDL; +        return; +    } +  	const BOOL disable_camera_switch = LLWearableType::getInstance()->getDisableCameraSwitch(wearable->getType());  	LLPanel* panel = LLFloaterSidePanelContainer::getPanel("appearance");  	LLSidepanelAppearance::editWearable(wearable, panel, disable_camera_switch); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index c60f2d0fcc..1dfd7bfc86 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -572,7 +572,7 @@ static void settings_modify()      LLRenderTarget::sUseFBO             = LLPipeline::sRenderDeferred;      LLVOSurfacePatch::sLODFactor        = gSavedSettings.getF32("RenderTerrainLODFactor");      LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor;  // square lod factor to get exponential range of [1,4] -    gDebugGL       = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession; +    gDebugGL       = gDebugGLSession || gDebugSession;      gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");  } @@ -1125,7 +1125,8 @@ bool LLAppViewer::init()  	gGLActive = FALSE;  #if LL_RELEASE_FOR_DOWNLOAD -    if (!gSavedSettings.getBOOL("CmdLineSkipUpdater")) +    // Skip updater if this is a non-interactive instance +    if (!gSavedSettings.getBOOL("CmdLineSkipUpdater") && !gNonInteractive)      {          LLProcess::Params updater;          updater.desc = "updater process"; @@ -2742,6 +2743,15 @@ bool LLAppViewer::initConfiguration()  		ll_init_fail_log(gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "test_failures.log"));  	} +    if (gSavedSettings.getBOOL("RenderDebugGLSession")) +    { +        gDebugGLSession = TRUE; +        gDebugGL = TRUE; +        // gDebugGL can cause excessive logging +        // so it's limited to a single session +        gSavedSettings.setBOOL("RenderDebugGLSession", FALSE); +    } +  	const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinCurrent");  	if(skinfolder && LLStringUtil::null != skinfolder->getValue().asString())  	{ @@ -3138,6 +3148,11 @@ bool LLAppViewer::isUpdaterMissing()      return mUpdaterNotFound;  } +bool LLAppViewer::waitForUpdater() +{ +    return !gSavedSettings.getBOOL("CmdLineSkipUpdater") && !mUpdaterNotFound && !gNonInteractive; +} +  void LLAppViewer::writeDebugInfo(bool isStatic)  {  #if LL_WINDOWS && LL_BUGSPLAT @@ -3218,7 +3233,28 @@ LLSD LLAppViewer::getViewerInfo() const  	info["GRAPHICS_CARD"] = ll_safe_string((const char*)(glGetString(GL_RENDERER)));  #if LL_WINDOWS -	std::string drvinfo = gDXHardware.getDriverVersionWMI(); +    std::string drvinfo; + +    if (gGLManager.mIsIntel) +    { +        drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_INTEL); +    } +    else if (gGLManager.mIsNVIDIA) +    { +        drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_NVIDIA); +    } +    else if (gGLManager.mIsAMD) +    { +        drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_AMD); +    } + +    if (drvinfo.empty()) +    { +        // Generic/substitute windows driver? Unknown vendor? +        LL_WARNS("DriverVersion") << "Vendor based driver search failed, searching for any driver" << LL_ENDL; +        drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_ANY); +    } +  	if (!drvinfo.empty())  	{  		info["GRAPHICS_DRIVER_VERSION"] = drvinfo; @@ -4837,13 +4873,18 @@ void LLAppViewer::idle()  		}  	} + +    // Update layonts, handle mouse events, tooltips, e t c +    // updateUI() needs to be called even in case viewer disconected +    // since related notification still needs handling and allows +    // opening chat. +    gViewerWindow->updateUI(); +  	if (gDisconnected)      {  		return;      } -    gViewerWindow->updateUI(); -  	if (gTeleportDisplay)      {  		return; diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 68c04d450b..7ab21f35cd 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -106,6 +106,7 @@ public:  	bool logoutRequestSent() { return mLogoutRequestSent; }  	bool isSecondInstance() { return mSecondInstance; }      bool isUpdaterMissing(); // In use by tests +    bool waitForUpdater();  	void writeDebugInfo(bool isStatic=true); diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp index 4b6c855bde..1846238d93 100644 --- a/indra/newview/llaudiosourcevo.cpp +++ b/indra/newview/llaudiosourcevo.cpp @@ -34,6 +34,7 @@  #include "llmutelist.h"  #include "llviewercontrol.h"  #include "llviewerparcelmgr.h" +#include "llvoavatarself.h"  LLAudioSourceVO::LLAudioSourceVO(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, LLViewerObject *objectp)  	:	LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX),  @@ -141,11 +142,36 @@ void LLAudioSourceVO::updateMute()  	LLVector3d pos_global = getPosGlobal();  	F32 cutoff = mObjectp->getSoundCutOffRadius(); -	if ((cutoff > 0.1f && !isInCutOffRadius(pos_global, cutoff)) // consider cutoff below 0.1m as off -		|| !LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) -	{ -		mute = true; -	} +    // Object can specify radius at which it turns off +    // consider cutoff below 0.1m as 'cutoff off' +    if (cutoff > 0.1f && !isInCutOffRadius(pos_global, cutoff)) +    { +        mute = true; +    } +    // check if parcel allows sounds to pass border +    else if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) +    { +        if (isAgentAvatarValid() && gAgentAvatarp->getParent()) +        { +            // Check if agent is riding this object +            // Agent can ride something out of region border and canHearSound +            // will treat object as not being part of agent's parcel. +            LLViewerObject *sound_root = (LLViewerObject*)mObjectp->getRoot(); +            LLViewerObject *agent_root = (LLViewerObject*)gAgentAvatarp->getRoot(); +            if (sound_root != agent_root) +            { +                mute = true; +            } +            else +            { +                LL_INFOS() << "roots identical" << LL_ENDL; +            } +        } +        else +        { +            mute = true; +        } +    }  	if (!mute)  	{ diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index cdf82c77c1..bdd516e1de 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -558,9 +558,15 @@ public:  		mTimeBoxTextBox = getChild<LLTextBox>("time_box");  		mInfoCtrl = LLUICtrlFactory::getInstance()->createFromFile<LLUICtrl>("inspector_info_ctrl.xml", this, LLPanel::child_registry_t::instance()); -		llassert(mInfoCtrl != NULL); -		mInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, mInfoCtrl)); -		mInfoCtrl->setVisible(FALSE); +        if (mInfoCtrl) +        { +            mInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, mInfoCtrl)); +            mInfoCtrl->setVisible(FALSE); +        } +        else +        { +            LL_ERRS() << "Failed to create an interface element due to missing or corrupted file inspector_info_ctrl.xml" << LL_ENDL; +        }  		return LLPanel::postBuild();  	} diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 071e770811..499d8d161d 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -64,7 +64,6 @@  #pragma GCC diagnostic ignored "-Wuninitialized"  #endif -extern BOOL gGLDebugLoggingEnabled;  #define LL_MAX_INDICES_COUNT 1000000  static LLStaticHashedString sTextureIndexIn("texture_index_in"); @@ -1033,12 +1032,12 @@ void LLFace::getPlanarProjectedParams(LLQuaternion* face_rot, LLVector3* face_po  {  	const LLMatrix4& vol_mat = getWorldMatrix();  	const LLVolumeFace& vf = getViewerObject()->getVolume()->getVolumeFace(mTEOffset); -	const LLVector4a& normal4a = vf.mNormals[0]; -	const LLVector4a& tangent = vf.mTangents[0]; -	if (!&tangent) +	if (! (vf.mNormals && vf.mTangents))  	{  		return;  	} +	const LLVector4a& normal4a = *vf.mNormals; +	const LLVector4a& tangent  = *vf.mTangents;  	LLVector4a binormal4a;  	binormal4a.setCross3(normal4a, tangent); @@ -1546,7 +1545,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		!rebuild_weights && //TODO: add support for weights  		!volume.isUnique()) //source volume is NOT flexi  	{ //use transform feedback to pack vertex buffer -		//gGLDebugLoggingEnabled = TRUE;          LL_PROFILE_ZONE_NAMED_CATEGORY_FACE("getGeometryVolume - transform feedback");  		LLGLEnable discard(GL_RASTERIZER_DISCARD); diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index c13b63433c..a02bb56489 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -772,6 +772,14 @@ void LLFavoritesBarCtrl::updateButtons(bool force_update)  	    }  	    LLFavoritesOrderStorage::instance().mPrevFavorites = mItems;  		mGetPrevItems = false; + +		if (LLFavoritesOrderStorage::instance().isStorageUpdateNeeded()) +		{ +			if (!mItemsChangedTimer.getStarted()) +			{ +				mItemsChangedTimer.start(); +			} +		}  	}  	const LLButton::Params& button_params = getButtonParams(); @@ -1606,7 +1614,7 @@ void LLFavoritesOrderStorage::destroyClass()  		file.close();  		LLFile::remove(filename);  	} -	if(mSaveOnExit) +	if(mSaveOnExit || gSavedSettings.getBOOL("UpdateRememberPasswordSetting"))  	{  	    LLFavoritesOrderStorage::instance().saveFavoritesRecord(true);  	} @@ -1650,7 +1658,6 @@ void LLFavoritesOrderStorage::load()  			llifstream in_file;  			in_file.open(filename.c_str());  			LLSD fav_llsd; -			LLSD user_llsd;  			if (in_file.is_open())  			{  				LLSDSerialize::fromXML(fav_llsd, in_file); @@ -1660,12 +1667,12 @@ void LLFavoritesOrderStorage::load()  				in_file.close();  				if (fav_llsd.isMap() && fav_llsd.has(gAgentUsername))  				{ -					user_llsd = fav_llsd[gAgentUsername]; +					mStorageFavorites = fav_llsd[gAgentUsername];  					S32 index = 0;  					bool needs_validation = gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin"); -					for (LLSD::array_iterator iter = user_llsd.beginArray(); -						iter != user_llsd.endArray(); ++iter) +					for (LLSD::array_iterator iter = mStorageFavorites.beginArray(); +						iter != mStorageFavorites.endArray(); ++iter)  					{  						// Validation  						LLUUID fv_id = iter->get("id").asUUID(); @@ -1967,7 +1974,7 @@ BOOL LLFavoritesOrderStorage::saveFavoritesRecord(bool pref_changed)  		}  	} -	if((items != mPrevFavorites) || name_changed || pref_changed) +	if((items != mPrevFavorites) || name_changed || pref_changed || gSavedSettings.getBOOL("UpdateRememberPasswordSetting"))  	{  	    std::string filename = getStoredFavoritesFilename();  		if (!filename.empty()) @@ -1988,6 +1995,12 @@ BOOL LLFavoritesOrderStorage::saveFavoritesRecord(bool pref_changed)  			LLSD user_llsd;  			S32 fav_iter = 0;  			mMissingSLURLs.clear(); + +            LLSD save_pass; +            save_pass["save_password"] = gSavedSettings.getBOOL("RememberPassword"); +            user_llsd[fav_iter] = save_pass; +            fav_iter++; +  			for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); it++)  			{  				LLSD value; @@ -2058,6 +2071,23 @@ void LLFavoritesOrderStorage::showFavoritesOnLoginChanged(BOOL show)  	}  } +bool LLFavoritesOrderStorage::isStorageUpdateNeeded() +{ +	if (!mRecreateFavoriteStorage) +	{ +		for (LLSD::array_iterator iter = mStorageFavorites.beginArray(); +			iter != mStorageFavorites.endArray(); ++iter) +		{ +			if (mFavoriteNames[iter->get("id").asUUID()] != iter->get("name").asString()) +			{ +				mRecreateFavoriteStorage = true; +				return true; +			} +		} +	} +	return false; +} +  void AddFavoriteLandmarkCallback::fire(const LLUUID& inv_item_id)  {  	if (mTargetLandmarkId.isNull()) return; diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 2d7ba9df67..3b439b31fd 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -226,8 +226,11 @@ public:  	BOOL saveFavoritesRecord(bool pref_changed = false);  	void showFavoritesOnLoginChanged(BOOL show); -	LLInventoryModel::item_array_t mPrevFavorites; +	bool isStorageUpdateNeeded(); +	LLInventoryModel::item_array_t mPrevFavorites; +	LLSD mStorageFavorites; +	bool mRecreateFavoriteStorage;  	const static S32 NO_INDEX;  	static bool mSaveOnExit; @@ -254,7 +257,6 @@ private:  	slurls_map_t mSLURLs;  	std::set<LLUUID> mMissingSLURLs;  	bool mIsDirty; -	bool mRecreateFavoriteStorage;  	struct IsNotInFavorites  	{ diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 4f3c2d8d34..d5115df35f 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -386,7 +386,8 @@ void LLVolumeImplFlexible::doIdleUpdate()  						U64 throttling_delay = (virtual_frame_num + id) % update_period;  						if ((throttling_delay == 0 && mLastFrameNum < virtual_frame_num) //one or more virtual frames per frame -							|| (mLastFrameNum + update_period < virtual_frame_num)) // missed virtual frame +							|| (mLastFrameNum + update_period < virtual_frame_num) // missed virtual frame +							|| mLastFrameNum > virtual_frame_num) // overflow  						{  							// We need mLastFrameNum to compensate for 'unreliable time' and to filter 'duplicate' frames  							// If happened too late, subtract throttling_delay (it is zero otherwise) @@ -787,10 +788,7 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)  	volume->updateRelativeXform(); -	if (mRenderRes > -1) -	{ -		doFlexibleUpdate(); -	} +	doFlexibleUpdate();  	// Object may have been rotated, which means it needs a rebuild.  See SL-47220  	BOOL	rotated = FALSE; diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp index a6640cc073..a3504ac6ee 100644 --- a/indra/newview/llfloaterevent.cpp +++ b/indra/newview/llfloaterevent.cpp @@ -108,11 +108,12 @@ void LLFloaterEvent::setEventID(const U32 event_id)  		LLSD subs;  		subs["EVENT_ID"] = (S32)event_id;          // get the search URL and expand all of the substitutions                                                        -        // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)                                                     -		std::ostringstream url; -		url <<  gSavedSettings.getString("EventURL") << event_id << std::endl; +        // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)               + +        std::string expanded_url = LLWeb::expandURLSubstitutions(gSavedSettings.getString("EventURL"), subs); +  		// and load the URL in the web view                                                                              -        mBrowser->navigateTo(url.str()); +        mBrowser->navigateTo(expanded_url);  	}  } diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp index 93a26f31cc..558b14bba7 100644 --- a/indra/newview/llfloaterjoystick.cpp +++ b/indra/newview/llfloaterjoystick.cpp @@ -292,7 +292,7 @@ void LLFloaterJoystick::refreshListOfDevices()          std::string desc = LLViewerJoystick::getInstance()->getDescription();          if (!desc.empty())          { -            LLSD value = LLSD::Integer(0); +            LLSD value = LLSD::Integer(1); // value for selection              addDevice(desc, value);              mHasDeviceList = true;          } @@ -392,6 +392,9 @@ void LLFloaterJoystick::onCommitJoystickEnabled(LLUICtrl*, void *joy_panel)      LLSD value = self->mJoysticksCombo->getValue();      bool joystick_enabled = true; +    // value is 0 for no device, +    // 1 for a device on Mac (single device, no list support yet) +    // binary packed guid for a device on windows (can have multiple devices)      if (value.isInteger())      {          // ndof already has a device selected, we are just setting it enabled or disabled @@ -400,7 +403,7 @@ void LLFloaterJoystick::onCommitJoystickEnabled(LLUICtrl*, void *joy_panel)      else      {          LLViewerJoystick::getInstance()->initDevice(value); -        // else joystick is enabled, because combobox holds id of device +        // else joystick is enabled, because combobox holds id of the device          joystick_enabled = true;      }      gSavedSettings.setBOOL("JoystickEnabled", joystick_enabled); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 04133f2710..d78f80ad12 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -452,7 +452,8 @@ BOOL LLPanelLandGeneral::postBuild()  	mEditDesc = getChild<LLTextEditor>("Description");  	mEditDesc->setCommitOnFocusLost(TRUE); -	mEditDesc->setCommitCallback(onCommitAny, this);	 +	mEditDesc->setCommitCallback(onCommitAny, this); +    mEditDesc->setContentTrusted(false);  	// No prevalidate function - historically the prevalidate function was broken,  	// allowing residents to put in characters like U+2661 WHITE HEART SUIT, so  	// preserve that ability. @@ -749,6 +750,7 @@ void LLPanelLandGeneral::refresh()  		BOOL can_edit_identity = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY);  		mEditName->setEnabled(can_edit_identity);  		mEditDesc->setEnabled(can_edit_identity); +        mEditDesc->setParseURLs(!can_edit_identity);  		BOOL can_edit_agent_only = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_NO_POWERS);  		mBtnSetGroup->setEnabled(can_edit_agent_only && !parcel->getIsGroupOwned()); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 19080f05c0..296e155d28 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -2108,6 +2108,8 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)  	LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");  	region_landtype->setText(region->getLocalizedSimProductName()); + +    getChild<LLButton>("reset_covenant")->setEnabled(gAgent.isGodlike() || (region && region->canManageEstate()));  	// let the parent class handle the general data collection.   	bool rv = LLPanelRegionInfo::refreshFromRegion(region); diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index f78a5cc64e..cb7031971b 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -28,16 +28,17 @@  #include "llinspectobject.h"  // Viewer +#include "llagent.h"            // To standup  #include "llfloatersidepanelcontainer.h"  #include "llinspect.h"  #include "llmediaentry.h" -#include "llnotificationsutil.h"	// *TODO: Eliminate, add LLNotificationsUtil wrapper  #include "llselectmgr.h"  #include "llslurl.h"  #include "llviewermenu.h"		// handle_object_touch(), handle_buy()  #include "llviewermedia.h"  #include "llviewermediafocus.h"  #include "llviewerobjectlist.h"	// to select the requested object +#include "llvoavatarself.h"  // Linden libraries  #include "llbutton.h"			// setLabel(), not virtual! @@ -635,7 +636,31 @@ void LLInspectObject::onClickTouch()  void LLInspectObject::onClickSit()  { -	handle_object_sit_or_stand(); +    bool is_sitting = false; +    if (mObjectSelection) +    { +        LLSelectNode* node = mObjectSelection->getFirstRootNode(); +        if (node && node->mValid) +        { +            LLViewerObject* root_object = node->getObject(); +            if (root_object +                && isAgentAvatarValid() +                && gAgentAvatarp->isSitting() +                && gAgentAvatarp->getRoot() == root_object) +            { +                is_sitting = true; +            } +        } +    } + +    if (is_sitting) +    { +        gAgent.standUp(); +    } +    else +    { +        handle_object_sit(mObjectID); +    }  	closeFloater();  } diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index a3d0eb5796..82ecfbd4dc 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -280,7 +280,7 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia  	mRequestData["options"] = requested_options;  	mRequestData["http_params"] = http_params;  #if LL_RELEASE_FOR_DOWNLOAD -    mRequestData["wait_for_updater"] = !gSavedSettings.getBOOL("CmdLineSkipUpdater") && !LLAppViewer::instance()->isUpdaterMissing(); +    mRequestData["wait_for_updater"] = LLAppViewer::instance()->waitForUpdater();  #else      mRequestData["wait_for_updater"] = false;  #endif diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 375daf60f8..04d3236bf1 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -97,6 +97,7 @@ BOOL LLPanelGroupGeneral::postBuild()  		mEditCharter->setCommitCallback(onCommitAny, this);  		mEditCharter->setFocusReceivedCallback(boost::bind(onFocusEdit, _1, this));  		mEditCharter->setFocusChangedCallback(boost::bind(onFocusEdit, _1, this)); +        mEditCharter->setContentTrusted(false);  	}  	// Options @@ -575,7 +576,8 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)  	if (mEditCharter)  	{ -		mEditCharter->setText(gdatap->mCharter); +        mEditCharter->setParseURLs(!mAllowEdit || !can_change_ident); +        mEditCharter->setText(gdatap->mCharter);  	}  	resetDirty(); diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 381b80fb66..9df3a8e31a 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -92,44 +92,6 @@ LLPointer<LLCredential> load_user_credentials(std::string &user_key)      }  } -// keys are lower case to be case insensitive so they are not always -// identical to names which retain user input, like: -// "AwEsOmE Resident" -> "awesome_resident" -std::string get_user_key_from_name(const std::string &username) -{ -    std::string key = username; -    LLStringUtil::trim(key); -    LLStringUtil::toLower(key); -    if (!LLGridManager::getInstance()->isSystemGrid()) -    { -        size_t separator_index = username.find_first_of(" "); -        if (separator_index == username.npos) -        { -            // CRED_IDENTIFIER_TYPE_ACCOUNT -            return key; -        } -    } -    // CRED_IDENTIFIER_TYPE_AGENT -    size_t separator_index = username.find_first_of(" ._"); -    std::string first = username.substr(0, separator_index); -    std::string last; -    if (separator_index != username.npos) -    { -        last = username.substr(separator_index + 1, username.npos); -        LLStringUtil::trim(last); -    } -    else -    { -        // ...on Linden grids, single username users as considered to have -        // last name "Resident" -        // *TODO: Make login.cgi support "account_name" like above -        last = "resident"; -    } - -    key = first + "_" + last; -    return key; -} -  class LLLoginLocationAutoHandler : public LLCommandHandler  {  public: @@ -361,11 +323,10 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	username_combo->setReturnCallback(boost::bind(&LLPanelLogin::onClickConnect, this));  	username_combo->setKeystrokeOnEsc(TRUE); -    if (!mFirstLoginThisInstall) -    { -        LLCheckBoxCtrl* remember_name = getChild<LLCheckBoxCtrl>("remember_name"); -        remember_name->setCommitCallback(boost::bind(&LLPanelLogin::onRememberUserCheck, this)); -    } + +    LLCheckBoxCtrl* remember_name = getChild<LLCheckBoxCtrl>("remember_name"); +    remember_name->setCommitCallback(boost::bind(&LLPanelLogin::onRememberUserCheck, this)); +    getChild<LLCheckBoxCtrl>("remember_password")->setCommitCallback(boost::bind(&LLPanelLogin::onRememberPasswordCheck, this));  }  void LLPanelLogin::addFavoritesToStartLocation() @@ -438,10 +399,22 @@ void LLPanelLogin::addFavoritesToStartLocation()  		combo->addSeparator();  		LL_DEBUGS() << "Loading favorites for " << iter->first << LL_ENDL;  		LLSD user_llsd = iter->second; +        bool update_password_setting = true;  		for (LLSD::array_const_iterator iter1 = user_llsd.beginArray();  			iter1 != user_llsd.endArray(); ++iter1)  		{ -			std::string label = (*iter1)["name"].asString(); +            if ((*iter1).has("save_password")) +            { +                bool save_password = (*iter1)["save_password"].asBoolean(); +                gSavedSettings.setBOOL("RememberPassword", save_password); +                if (!save_password) +                { +                    getChild<LLButton>("connect_btn")->setEnabled(false); +                } +                update_password_setting = false; +            } + +            std::string label = (*iter1)["name"].asString();  			std::string value = (*iter1)["slurl"].asString();  			if(label != "" && value != "")  			{ @@ -453,6 +426,10 @@ void LLPanelLogin::addFavoritesToStartLocation()  				}  			}  		} +        if (update_password_setting) +        { +            gSavedSettings.setBOOL("UpdateRememberPasswordSetting", TRUE); +        }  		break;  	}  	if (combo->getValue().asString().empty()) @@ -565,21 +542,12 @@ void LLPanelLogin::populateFields(LLPointer<LLCredential> credential, bool remem          LL_WARNS() << "Attempted fillFields with no login view shown" << LL_ENDL;          return;      } -    if (sInstance->mFirstLoginThisInstall) -    { -        LLUICtrl* remember_check = sInstance->getChild<LLUICtrl>("remember_check"); -        remember_check->setValue(remember_psswrd); -        // no list to populate -        setFields(credential); -    } -    else -    { -        sInstance->getChild<LLUICtrl>("remember_name")->setValue(remember_user); -        LLUICtrl* remember_password = sInstance->getChild<LLUICtrl>("remember_password"); -        remember_password->setValue(remember_user && remember_psswrd); -        remember_password->setEnabled(remember_user); -        sInstance->populateUserList(credential); -    } + +    sInstance->getChild<LLUICtrl>("remember_name")->setValue(remember_user); +    LLUICtrl* remember_password = sInstance->getChild<LLUICtrl>("remember_password"); +    remember_password->setValue(remember_user && remember_psswrd); +    remember_password->setEnabled(remember_user); +    sInstance->populateUserList(credential);  }  //static @@ -690,39 +658,6 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential,  	LL_INFOS("Credentials", "Authentication") << "retrieving username:" << username << LL_ENDL;  	// determine if the username is a first/last form or not.  	size_t separator_index = username.find_first_of(' '); -	if (separator_index == username.npos -		&& !LLGridManager::getInstance()->isSystemGrid()) -	{ -		LL_INFOS("Credentials", "Authentication") << "account: " << username << LL_ENDL; -		// single username, so this is a 'clear' identifier -		identifier["type"] = CRED_IDENTIFIER_TYPE_ACCOUNT; -		identifier["account_name"] = username; -		 -		if (LLPanelLogin::sInstance->mPasswordModified) -		{ -			// password is plaintext -			authenticator["type"] = CRED_AUTHENTICATOR_TYPE_CLEAR; -			authenticator["secret"] = password; -		} -        else -        { -            credential = load_user_credentials(username); -            if (credential.notNull()) -            { -                authenticator = credential->getAuthenticator(); -                if (authenticator.emptyMap()) -                { -                    // Likely caused by user trying to log in to non-system grid -                    // with unsupported name format, just retry -                    LL_WARNS() << "Authenticator failed to load for: " << username << LL_ENDL; -                    // password is plaintext -                    authenticator["type"] = CRED_AUTHENTICATOR_TYPE_CLEAR; -                    authenticator["secret"] = password; -                } -            } -        } -	} -	else  	{  		// Be lenient in terms of what separators we allow for two-word names  		// and allow legacy users to login with firstname.lastname @@ -773,16 +708,9 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential,  		}  	}  	credential = gSecAPIHandler->createCredential(LLGridManager::getInstance()->getGrid(), identifier, authenticator); -    if (!sInstance->mFirstLoginThisInstall) -    { -        remember_psswrd = sInstance->getChild<LLUICtrl>("remember_password")->getValue(); -        remember_user = sInstance->getChild<LLUICtrl>("remember_name")->getValue(); -    } -    else -    { -        remember_psswrd = sInstance->getChild<LLUICtrl>("remember_check")->getValue(); -        remember_user = remember_psswrd; // on panel_login_first "remember_check" is named as 'remember me' -    } + +    remember_psswrd = sInstance->getChild<LLUICtrl>("remember_password")->getValue(); +    remember_user = sInstance->getChild<LLUICtrl>("remember_name")->getValue();  } @@ -1145,17 +1073,18 @@ void LLPanelLogin::onUserListCommit(void*)  }  // static -// At the moment only happens if !mFirstLoginThisInstall  void LLPanelLogin::onRememberUserCheck(void*)  { -    if (sInstance && !sInstance->mFirstLoginThisInstall) +    if (sInstance)      {          LLCheckBoxCtrl* remember_name(sInstance->getChild<LLCheckBoxCtrl>("remember_name"));          LLCheckBoxCtrl* remember_psswrd(sInstance->getChild<LLCheckBoxCtrl>("remember_password"));          LLComboBox* user_combo(sInstance->getChild<LLComboBox>("username_combo"));          bool remember = remember_name->getValue().asBoolean(); -        if (user_combo->getCurrentIndex() != -1 && !remember) +        if (!sInstance->mFirstLoginThisInstall +            && user_combo->getCurrentIndex() != -1 +            && !remember)          {              remember = true;              remember_name->setValue(true); @@ -1169,6 +1098,14 @@ void LLPanelLogin::onRememberUserCheck(void*)      }  } +void LLPanelLogin::onRememberPasswordCheck(void*) +{ +    if (sInstance) +    { +        gSavedSettings.setBOOL("UpdateRememberPasswordSetting", TRUE); +    } +} +  // static  void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data)  { diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index c5e6b41def..c6254f72cf 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -107,6 +107,7 @@ private:  	static void onUserNameTextEnty(void*);  	static void onUserListCommit(void*);  	static void onRememberUserCheck(void*); +    static void onRememberPasswordCheck(void*);  	static void onPassKey(LLLineEditor* caller, void* user_data);  	static void updateServerCombo(); diff --git a/indra/newview/llpanelloginlistener.cpp b/indra/newview/llpanelloginlistener.cpp index 33efde11f3..fb3e8dc244 100644 --- a/indra/newview/llpanelloginlistener.cpp +++ b/indra/newview/llpanelloginlistener.cpp @@ -47,5 +47,5 @@ LLPanelLoginListener::LLPanelLoginListener(LLPanelLogin* instance):  void LLPanelLoginListener::onClickConnect(const LLSD&) const  { -    mPanel->onClickConnect(NULL); +    mPanel->onClickConnect(false);  } diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 831c89b005..64f1fc9b90 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -1672,8 +1672,19 @@ void LLPanelObject::sendPosition(BOOL btn_down)  	// Make sure new position is in a valid region, so the object  	// won't get dumped by the simulator.  	LLVector3d new_pos_global = regionp->getPosGlobalFromRegion(newpos); - -	if ( LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global) ) +    bool is_valid_pos = true; +    if (mObject->isAttachment()) +    { +        LLVector3 delta_pos = mObject->getPositionEdit() - newpos; +        LLVector3d attachment_pos = regionp->getPosGlobalFromRegion(mObject->getPositionRegion() + delta_pos); +        is_valid_pos = LLWorld::getInstance()->positionRegionValidGlobal(attachment_pos); +    } +    else +    { +        is_valid_pos = LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global); +    } + +	if (is_valid_pos)  	{  		// send only if the position is changed, that is, the delta vector is not zero  		LLVector3d old_pos_global = mObject->getPositionGlobal(); diff --git a/indra/newview/llpathfindingmanager.cpp b/indra/newview/llpathfindingmanager.cpp index 852b39f442..17b8ec0683 100644 --- a/indra/newview/llpathfindingmanager.cpp +++ b/indra/newview/llpathfindingmanager.cpp @@ -61,7 +61,8 @@  #define CAP_SERVICE_NAVMESH_STATUS          "NavMeshGenerationStatus" -#define CAP_SERVICE_OBJECT_LINKSETS         "RegionObjects" +#define CAP_SERVICE_GET_OBJECT_LINKSETS     "RegionObjects" +#define CAP_SERVICE_SET_OBJECT_LINKSETS     "ObjectNavMeshProperties"  #define CAP_SERVICE_TERRAIN_LINKSETS        "TerrainNavMeshProperties"  #define CAP_SERVICE_CHARACTERS              "CharacterProperties" @@ -244,7 +245,7 @@ void LLPathfindingManager::requestGetLinksets(request_id_t pRequestId, object_re  	}  	else  	{ -		std::string objectLinksetsURL = getObjectLinksetsURLForCurrentRegion(); +		std::string objectLinksetsURL = getRetrieveObjectLinksetsURLForCurrentRegion();  		std::string terrainLinksetsURL = getTerrainLinksetsURLForCurrentRegion();  		if (objectLinksetsURL.empty() || terrainLinksetsURL.empty())  		{ @@ -273,7 +274,7 @@ void LLPathfindingManager::requestSetLinksets(request_id_t pRequestId, const LLP  {  	LLPathfindingObjectListPtr emptyLinksetListPtr; -	std::string objectLinksetsURL = getObjectLinksetsURLForCurrentRegion(); +	std::string objectLinksetsURL = getChangeObjectLinksetsURLForCurrentRegion();  	std::string terrainLinksetsURL = getTerrainLinksetsURLForCurrentRegion();  	if (objectLinksetsURL.empty() || terrainLinksetsURL.empty())  	{ @@ -755,9 +756,14 @@ std::string LLPathfindingManager::getRetrieveNavMeshURLForRegion(LLViewerRegion  	return getCapabilityURLForRegion(pRegion, CAP_SERVICE_RETRIEVE_NAVMESH);  } -std::string LLPathfindingManager::getObjectLinksetsURLForCurrentRegion() const +std::string LLPathfindingManager::getRetrieveObjectLinksetsURLForCurrentRegion() const  { -	return getCapabilityURLForCurrentRegion(CAP_SERVICE_OBJECT_LINKSETS); +	return getCapabilityURLForCurrentRegion(CAP_SERVICE_GET_OBJECT_LINKSETS); +} + +std::string LLPathfindingManager::getChangeObjectLinksetsURLForCurrentRegion() const +{ +    return getCapabilityURLForCurrentRegion(CAP_SERVICE_SET_OBJECT_LINKSETS);  }  std::string LLPathfindingManager::getTerrainLinksetsURLForCurrentRegion() const diff --git a/indra/newview/llpathfindingmanager.h b/indra/newview/llpathfindingmanager.h index a44cd892da..bb44f780c8 100644 --- a/indra/newview/llpathfindingmanager.h +++ b/indra/newview/llpathfindingmanager.h @@ -122,7 +122,8 @@ private:  	std::string getNavMeshStatusURLForCurrentRegion() const;  	std::string getNavMeshStatusURLForRegion(LLViewerRegion *pRegion) const;  	std::string getRetrieveNavMeshURLForRegion(LLViewerRegion *pRegion) const; -	std::string getObjectLinksetsURLForCurrentRegion() const; +	std::string getRetrieveObjectLinksetsURLForCurrentRegion() const; +    std::string getChangeObjectLinksetsURLForCurrentRegion() const;  	std::string getTerrainLinksetsURLForCurrentRegion() const;  	std::string getCharactersURLForCurrentRegion() const;  	std::string	getAgentStateURLForRegion(LLViewerRegion *pRegion) const; diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 39cdb6fb04..759e7859f2 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -347,9 +347,6 @@ BOOL LLPreviewGesture::postBuild()  	LLTextBox* text;  	LLCheckBoxCtrl* check; -	edit = getChild<LLLineEditor>("name"); -	edit->setKeystrokeCallback(onKeystrokeCommit, this); -  	edit = getChild<LLLineEditor>("desc");  	edit->setKeystrokeCallback(onKeystrokeCommit, this); @@ -482,9 +479,6 @@ BOOL LLPreviewGesture::postBuild()  	{  		getChild<LLUICtrl>("desc")->setValue(item->getDescription());  		getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); -		 -		getChild<LLUICtrl>("name")->setValue(item->getName()); -		getChild<LLLineEditor>("name")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);  	}  	return LLPreview::postBuild(); diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index ed823fbba4..a1c703b02f 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -1027,12 +1027,39 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &n      std::set<std::string> framenames;      std::set<std::string> notfound; +    // expected and correct folder sctructure is to have +    // three folders in widnlight's root: days, water, skies       std::string base_path(gDirUtilp->getDirName(path));      std::string water_path(base_path);      std::string sky_path(base_path); +    std::string day_path(base_path);      gDirUtilp->append(water_path, "water");      gDirUtilp->append(sky_path, "skies"); +    gDirUtilp->append(day_path, "days"); + +    if (!gDirUtilp->fileExists(day_path)) +    { +        LL_WARNS("SETTINGS") << "File " << name << ".xml is not in \"days\" folder." << LL_ENDL; +    } + +    if (!gDirUtilp->fileExists(water_path)) +    { +        LL_WARNS("SETTINGS") << "Failed to find accompaniying water folder for file " << name +            << ".xml. Falling back to using default folder" << LL_ENDL; + +        water_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight"); +        gDirUtilp->append(water_path, "water"); +    } + +    if (!gDirUtilp->fileExists(sky_path)) +    { +        LL_WARNS("SETTINGS") << "Failed to find accompaniying skies folder for file " << name +            << ".xml. Falling back to using default folder" << LL_ENDL; + +        sky_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight"); +        gDirUtilp->append(sky_path, "skies"); +    }      newsettings[SETTING_NAME] = name; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 98b2bc703b..0829b1a213 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1062,7 +1062,7 @@ bool idle_startup()  	{  		// Generic failure message  		std::ostringstream emsg; -		emsg << LLTrans::getString("LoginFailed") << "\n"; +		emsg << LLTrans::getString("LoginFailedHeader") << "\n";  		if(LLLoginInstance::getInstance()->authFailure())  		{  			LL_INFOS("LLStartup") << "Login failed, LLLoginInstance::getResponse(): " @@ -1075,11 +1075,37 @@ bool idle_startup()  			std::string message_id = response["message_id"];  			std::string message; // actual string to show the user -			if(!message_id.empty() && LLTrans::findString(message, message_id, response["message_args"])) -			{ -				// message will be filled in with the template and arguments -			} -			else if(!message_response.empty()) +            bool localized_by_id = false; +            if(!message_id.empty()) +            { +                LLSD message_args = response["message_args"]; +                if (message_args.has("TIME") +                    && (message_id == "LoginFailedAcountSuspended" +                        || message_id == "LoginFailedAccountMaintenance")) +                { +                    LLDate date; +                    std::string time_string; +                    if (date.fromString(message_args["TIME"].asString())) +                    { +                        LLSD args; +                        args["datetime"] = (S32)date.secondsSinceEpoch(); +                        LLTrans::findString(time_string, "LocalTime", args); +                    } +                    else +                    { +                        time_string = message_args["TIME"].asString() + " " + LLTrans::getString("PacificTime"); +                    } + +                    message_args["TIME"] = time_string; +                } +                // message will be filled in with the template and arguments +                if (LLTrans::findString(message, message_id, message_args)) +                { +                    localized_by_id = true; +                } +            } + +            if(!localized_by_id && !message_response.empty())  			{  				// *HACK: "no_inventory_host" sent as the message itself.  				// Remove this clause when server is sending message_id as well. diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 1e8ad12b2a..09ace6d45d 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -478,13 +478,6 @@ static bool handleRenderBumpChanged(const LLSD& newval)  	return true;  } -static bool handleRenderDebugGLChanged(const LLSD& newvalue) -{ -	gDebugGL = newvalue.asBoolean() || gDebugSession; -	gGL.clearErrors(); -	return true; -} -  static bool handleRenderDebugPipelineChanged(const LLSD& newvalue)  {  	gDebugPipeline = newvalue.asBoolean(); @@ -691,7 +684,6 @@ void settings_setup_listeners()  	gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));      gSavedSettings.getControl("RenderVSyncEnable")->getSignal()->connect(boost::bind(&handleVSyncChanged, _2));  	gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); -	gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2));  	gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));  	gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));  	gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleRenderDeferredChanged, _2)); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b7f94a7e0c..34ce35ddeb 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -393,7 +393,19 @@ void set_merchant_SLM_menu()      // All other cases (new merchant, not merchant, migrated merchant): show the new Marketplace Listings menu and enable the tool      gMenuHolder->getChild<LLView>("MarketplaceListings")->setVisible(TRUE);      LLCommand* command = LLCommandManager::instance().getCommand("marketplacelistings"); -	gToolBarView->enableCommand(command->id(), true); +    gToolBarView->enableCommand(command->id(), true); + +    const LLUUID marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false); +    if (marketplacelistings_id.isNull()) +    { +        U32 mkt_status = LLMarketplaceData::instance().getSLMStatus(); +        bool is_merchant = (mkt_status == MarketplaceStatusCodes::MARKET_PLACE_MERCHANT) || (mkt_status == MarketplaceStatusCodes::MARKET_PLACE_MIGRATED_MERCHANT); +        if (is_merchant) +        { +            gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, true); +            LL_WARNS("SLM") << "Creating the marketplace listings folder for a merchant" << LL_ENDL; +        } +    }  }  void check_merchant_status(bool force) @@ -4176,23 +4188,9 @@ bool is_object_sittable()  	}  } -  // only works on pie menu -void handle_object_sit_or_stand() +void handle_object_sit(LLViewerObject *object, const LLVector3 &offset)  { -	LLPickInfo pick = LLToolPie::getInstance()->getPick(); -	LLViewerObject *object = pick.getObject();; -	if (!object || pick.mPickType == LLPickInfo::PICK_FLORA) -	{ -		return; -	} - -	if (sitting_on_selection()) -	{ -		gAgent.standUp(); -		return; -	} -  	// get object selection offset   	if (object && object->getPCode() == LL_PCODE_VOLUME) @@ -4204,12 +4202,42 @@ void handle_object_sit_or_stand()  		gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());  		gMessageSystem->nextBlockFast(_PREHASH_TargetObject);  		gMessageSystem->addUUIDFast(_PREHASH_TargetID, object->mID); -		gMessageSystem->addVector3Fast(_PREHASH_Offset, pick.mObjectOffset); +		gMessageSystem->addVector3Fast(_PREHASH_Offset, offset);  		object->getRegion()->sendReliableMessage();  	}  } +void handle_object_sit_or_stand() +{ +    LLPickInfo pick = LLToolPie::getInstance()->getPick(); +    LLViewerObject *object = pick.getObject(); +    if (!object || pick.mPickType == LLPickInfo::PICK_FLORA) +    { +        return; +    } + +    if (sitting_on_selection()) +    { +        gAgent.standUp(); +        return; +    } + +    handle_object_sit(object, pick.mObjectOffset); +} + +void handle_object_sit(const LLUUID& object_id) +{ +    LLViewerObject* obj = gObjectList.findObject(object_id); +    if (!obj) +    { +        return; +    } + +    LLVector3 offset(0, 0, 0); +    handle_object_sit(obj, offset); +} +  void near_sit_down_point(BOOL success, void *)  {  	if (success) @@ -6344,6 +6372,24 @@ class LLAvatarResetSkeletonAndAnimations : public view_listener_t  	}  }; +class LLAvatarResetSelfSkeletonAndAnimations : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); +		if (avatar) +		{ +			avatar->resetSkeleton(true); +		} +		else +		{ +			gAgentAvatarp->resetSkeleton(true); +		} +		return true; +	} +}; + +  class LLAvatarAddContact : public view_listener_t  {  	bool handleEvent(const LLSD& userdata) @@ -9473,6 +9519,7 @@ void initialize_menus()  	view_listener_t::addMenu(new LLAvatarResetSkeleton(), "Avatar.ResetSkeleton");  	view_listener_t::addMenu(new LLAvatarEnableResetSkeleton(), "Avatar.EnableResetSkeleton");  	view_listener_t::addMenu(new LLAvatarResetSkeletonAndAnimations(), "Avatar.ResetSkeletonAndAnimations"); +	view_listener_t::addMenu(new LLAvatarResetSelfSkeletonAndAnimations(), "Avatar.ResetSelfSkeletonAndAnimations");  	enable.add("Avatar.IsMyProfileOpen", boost::bind(&my_profile_visible));  	commit.add("Avatar.OpenMarketplace", boost::bind(&LLWeb::loadURLExternal, gSavedSettings.getString("MarketplaceURL"))); diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 36b6971c81..a90b32c984 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -135,6 +135,7 @@ void handle_save_snapshot(void *);  void handle_toggle_flycam();  void handle_object_sit_or_stand(); +void handle_object_sit(const LLUUID& object_id);  void handle_give_money_dialog();  bool enable_pay_object();  bool enable_buy_object(); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 975e3b97ec..148a76d93b 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -270,13 +270,13 @@ void LLFilePickerReplyThread::notify(const std::vector<std::string>& filenames)  LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple)      : LLFilePickerThread(filter, get_multiple), -    mPlugin(plugin->getSharedPrt()) +    mPlugin(plugin->getSharedPtr())  {  }  LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name)      : LLFilePickerThread(filter, proposed_name), -    mPlugin(plugin->getSharedPrt()) +    mPlugin(plugin->getSharedPtr())  {  } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 375f176b60..e959f24f1f 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3338,6 +3338,13 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)  	// trigger a control event.  	U32 control_flags = gAgent.getControlFlags(); +    // Rotation into both directions should cancel out +    U32 mask = AGENT_CONTROL_YAW_POS | AGENT_CONTROL_YAW_NEG; +    if ((control_flags & mask) == mask) +    { +        control_flags &= ~mask; +    } +  	MASK	key_mask = gKeyboard->currentMask(TRUE);  	if (key_mask & MASK_ALT || key_mask & MASK_CONTROL) @@ -5809,15 +5816,15 @@ void process_script_question(LLMessageSystem *msg, void **user_data)  				if (("ScriptTakeMoney" == script_perm.question) && has_not_only_debit)  					continue; -                if (script_perm.question == "JoinAnExperience") -                { // Some experience only permissions do not have an explicit permission bit.  Add them here. -                    script_question += "    " + LLTrans::getString("ForceSitAvatar") + "\n"; +                if (LLTrans::getString(script_perm.question).empty()) +                { +                    continue;                  }  				script_question += "    " + LLTrans::getString(script_perm.question) + "\n";  			}  		} -	 +  		args["QUESTIONS"] = script_question;  		if (known_questions != questions) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 47a996d894..389f5087e2 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -72,7 +72,7 @@  #ifdef LL_USESYSTEMLIBS  #include <zlib.h>  #else -#include "zlib/zlib.h" +#include "zlib-ng/zlib.h"  #endif  #include "object_flags.h" diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 6345323ff9..9b7f4ff30d 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -3060,6 +3060,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("ObjectAnimation");  	capabilityNames.append("ObjectMedia");  	capabilityNames.append("ObjectMediaNavigate"); +	capabilityNames.append("ObjectNavMeshProperties");  	capabilityNames.append("ParcelPropertiesUpdate");  	capabilityNames.append("ParcelVoiceInfoRequest");  	capabilityNames.append("ProductInfoRequest"); diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index 9d6cfbce7c..3385d317e6 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -507,6 +507,7 @@ void send_viewer_stats(bool include_preferences)  	system["os"] = LLOSInfo::instance().getOSStringSimple();  	system["cpu"] = gSysCPU.getCPUString();  	system["address_size"] = ADDRESS_SIZE; +	system["os_bitness"] = LLOSInfo::instance().getOSBitness();  	unsigned char MACAddress[MAC_ADDRESS_BYTES];  	LLUUID::getNodeID(MACAddress);  	std::string macAddressString = llformat("%02x-%02x-%02x-%02x-%02x-%02x", diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 208574f0a3..bbbf9ea7a3 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1269,7 +1269,7 @@ BOOL LLViewerTextureList::createUploadFile(const std::string& filename,  	LLPointer<LLImageFormatted> image = LLImageFormatted::createFromType(codec);  	if (image.isNull())  	{ -		image->setLastError("Couldn't open the image to be uploaded."); +		LL_WARNS() << "Couldn't open the image to be uploaded." << LL_ENDL;  		return FALSE;  	}	  	if (!image->load(filename)) diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 1230a6d327..0a44664f17 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2234,6 +2234,7 @@ void LLViewerWindow::initWorldUI()  	gStatusBar->setShape(status_bar_container->getLocalRect());  	// sync bg color with menu bar  	gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() ); +    // add InBack so that gStatusBar won't be drawn over menu  	status_bar_container->addChildInBack(gStatusBar);  	status_bar_container->setVisible(TRUE); @@ -3213,6 +3214,11 @@ void LLViewerWindow::handleScrollWheel(S32 clicks)  void LLViewerWindow::handleScrollHWheel(S32 clicks)  { +    if (LLAppViewer::instance()->quitRequested()) +    { +        return; +    } +          LLUI::getInstance()->resetMouseIdleTimer();      LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 01312d65cc..1aa00bc894 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -660,9 +660,7 @@ void LLVOSky::idleUpdate(LLAgent &agent, const F64 &time)  void LLVOSky::forceSkyUpdate()  {      mForceUpdate = TRUE; - -    memset(&m_lastAtmosphericsVars, 0x00, sizeof(AtmosphericsVars)); - +    m_lastAtmosphericsVars = {};      mCubeMapUpdateStage = -1;  } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 0706e26fb1..0ae13e67cd 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -105,7 +105,6 @@ S32 LLVOVolume::mRenderComplexity_current = 0;  LLPointer<LLObjectMediaDataClient> LLVOVolume::sObjectMediaClient = NULL;  LLPointer<LLObjectMediaNavigateClient> LLVOVolume::sObjectMediaNavigateClient = NULL; -extern BOOL gGLDebugLoggingEnabled;  extern BOOL gCubeSnapshot;  // Implementation class of LLMediaDataClientObject.  See llmediadataclient.h diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index db5e352ae5..88ee6ea860 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -11103,22 +11103,47 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar, bool preview_avatar)  	{  		markVisible(avatar->mDrawable, *viewer_camera); -		LLVOAvatar::attachment_map_t::iterator iter; -		for (iter = avatar->mAttachmentPoints.begin(); -			iter != avatar->mAttachmentPoints.end(); -			++iter) -		{ -			LLViewerJointAttachment *attachment = iter->second; -			for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); -				 attachment_iter != attachment->mAttachedObjects.end(); -				 ++attachment_iter) -			{ -				if (LLViewerObject* attached_object = attachment_iter->get()) -				{ -					markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera); -				} -			} -		} +        if (preview_avatar) +        { +            // Only show rigged attachments for preview +            LLVOAvatar::attachment_map_t::iterator iter; +            for (iter = avatar->mAttachmentPoints.begin(); +                iter != avatar->mAttachmentPoints.end(); +                ++iter) +            { +                LLViewerJointAttachment *attachment = iter->second; +                for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); +                    attachment_iter != attachment->mAttachedObjects.end(); +                    ++attachment_iter) +                { +                    LLViewerObject* attached_object = attachment_iter->get(); +                    if (attached_object && attached_object->isRiggedMesh()) +                    { +                        markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera); +                    } +                } +            } +        } +        else +        { +            LLVOAvatar::attachment_map_t::iterator iter; +            for (iter = avatar->mAttachmentPoints.begin(); +                iter != avatar->mAttachmentPoints.end(); +                ++iter) +            { +                LLViewerJointAttachment *attachment = iter->second; +                for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); +                    attachment_iter != attachment->mAttachedObjects.end(); +                    ++attachment_iter) +                { +                    LLViewerObject* attached_object = attachment_iter->get(); +                    if (attached_object) +                    { +                        markVisible(attached_object->mDrawable->getSpatialBridge(), *viewer_camera); +                    } +                } +            } +        }  	}  	stateSort(*LLViewerCamera::getInstance(), result); diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index b0ae5fe447..84ca634600 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -613,8 +613,7 @@ with the same filename but different name    <texture name="login_sl_logo"  file_name="windows/login_sl_logo.png" preload="true" />    <texture name="login_sl_logo_small"  file_name="windows/login_sl_logo_small.png" preload="true" /> -  <texture name="first_login_image_left"  file_name="windows/first_login_image_left.png" preload="true" /> -  <texture name="first_login_image_right"  file_name="windows/first_login_image_right.png" preload="true" /> +  <texture name="first_login_image"  file_name="windows/first_login_image.jpg" preload="true" />    <texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" />    <texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="false" /> diff --git a/indra/newview/skins/default/textures/windows/first_login_image.jpg b/indra/newview/skins/default/textures/windows/first_login_image.jpgBinary files differ new file mode 100644 index 0000000000..30f31341ed --- /dev/null +++ b/indra/newview/skins/default/textures/windows/first_login_image.jpg diff --git a/indra/newview/skins/default/textures/windows/first_login_image_left.png b/indra/newview/skins/default/textures/windows/first_login_image_left.pngBinary files differ deleted file mode 100644 index 77904d7d12..0000000000 --- a/indra/newview/skins/default/textures/windows/first_login_image_left.png +++ /dev/null diff --git a/indra/newview/skins/default/textures/windows/first_login_image_right.png b/indra/newview/skins/default/textures/windows/first_login_image_right.pngBinary files differ deleted file mode 100644 index 35ecce9c07..0000000000 --- a/indra/newview/skins/default/textures/windows/first_login_image_right.png +++ /dev/null diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index 814305c1bc..5f1bf73f26 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -106,7 +106,7 @@  	<string name="LoginFailedNoNetwork">  		Netværksfejl: Kunne ikke etablere forbindelse, check venligst din netværksforbindelse.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Login fejlede.  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index ba26f721fe..97ace4fc18 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -186,7 +186,7 @@ Voice-Server-Version: [VOICE_VERSION]  	<string name="LoginFailedNoNetwork">  		Netzwerkfehler: Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Netzwerkverbindung.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Anmeldung fehlgeschlagen  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index b2d9e53039..dee5e29a3c 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -164,6 +164,7 @@               left_pad="2"               name="Description"               spellcheck="true" +             parse_urls="true"               top_delta="0"               width="365"               word_wrap="true" /> diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 9885e37cea..842184de88 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -8,6 +8,16 @@   tab_stop="false"    name="main_view"   width="1024"> + +  <!-- At the moment layout_stack is not an LLUICtrl, +  but Tab requires focus_root to function and focus_root +  functionality is implemented in LLUICtrl --> +  <panel follows="all" +         height="768" +         name="menu_tab_wrapper" +         mouse_opaque="false" +         focus_root="true" +         top="0">    <layout_stack border_size="0"                  follows="all"                  mouse_opaque="false" @@ -18,12 +28,12 @@      <layout_panel mouse_opaque="true"                follows="left|right|top"                name="status_bar_container" -              tab_stop="false"                height="19"                left="0"                top="0"                width="1024"                auto_resize="false" +              default_tab_group="1"                visible="true">        <view mouse_opaque="false"              follows="all" @@ -31,13 +41,13 @@              left="0"              top="0"              width="1024" +            tab_group="1"              height="19"/>      </layout_panel>      <layout_panel auto_resize="false"                    height="34"                    mouse_opaque="false"                    name="nav_bar_container" -                  tab_stop="false"                    width="1024"                    visible="false"/>      <layout_panel auto_resize="true"   @@ -99,6 +109,7 @@               tab_stop="false"/>      </layout_panel>    </layout_stack> +  </panel> <!--menu_tab_wrapper-->    <panel top="0"          follows="all" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 4b3c61d7f0..d3b13bfc2a 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -471,7 +471,7 @@         layout="topleft"         name="Reset Skeleton And Animations">          <menu_item_call.on_click -         function="Avatar.ResetSkeletonAndAnimations" /> +         function="Avatar.ResetSelfSkeletonAndAnimations" />        </menu_item_call>        <menu_item_call         label="Attachment scripts..." @@ -3158,14 +3158,14 @@ function="World.EnvPreset"            <menu_item_separator />            <menu_item_check -             label="Debug GL" +             label="Start Debug GL on next run"               name="Debug GL">                  <menu_item_check.on_check                   function="CheckControl" -                 parameter="RenderDebugGL" /> +                 parameter="RenderDebugGLSession" />                  <menu_item_check.on_click                   function="ToggleControl" -                 parameter="RenderDebugGL" /> +                 parameter="RenderDebugGLSession" />              </menu_item_check>              <menu_item_check               label="Debug Pipeline" diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml index e34335a2af..5eafb5cdf1 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -95,6 +95,7 @@ Hover your mouse over the options for more help.       layout="topleft"       max_length="511"       name="charter" +     parse_urls="true"       top="105"       right="-4"      bg_readonly_color="DkGray2" diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index ade004f9d0..3aba80909a 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -145,7 +145,7 @@      follows="left|top"      font="SansSerifMedium"      text_color="EmphasisColor" -    height="16" +    height="24"      left="408"      bottom_delta="0"      label="Remember password" diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml index 5568ccb792..d36c83d292 100644 --- a/indra/newview/skins/default/xui/en/panel_login_first.xml +++ b/indra/newview/skins/default/xui/en/panel_login_first.xml @@ -98,7 +98,7 @@            auto_resize="false"            follows="left|right|top"            name="widget_container" -          width="532" +          width="730"            left="0"            top="0"            height="80"> @@ -106,7 +106,7 @@              allow_text_entry="true"              follows="left|bottom"              height="32" -            left="2" +            left="42"              label="Username"              combo_editor.font="SansSerifLarge"              max_chars="128" @@ -126,7 +126,7 @@              follows="left|top"              width="200"              height="32" -            left="220" +            left="262"              max_length_chars="16"              name="password_edit"              label="Password" @@ -145,42 +145,58 @@              label_color="White"              font="SansSerifLarge"              name="connect_btn" -            left="432" -            width="100" +  	        left_pad="15" +            width="120"              height="32"              top="0" /> +          <text +            follows="left|top" +            font="SansSerifLarge" +            font.style="BOLD" +            text_color="EmphasisColor" +            height="34" +            name="sign_up_text" +            left_pad="10" +            top="0" +            width="200" +            valign="center"> +            Sign up +          </text>            <check_box -            control_name="RememberPassword"              follows="left|top"              font="SansSerifLarge" -            left="0" +            left="42"              top="32"              height="24"              label="Remember me" +            word_wrap="down"              check_button.bottom="3" -            name="remember_check" -            width="145" /> -          <text +            name="remember_name" +            tool_tip="Already remembered user can be forgotten from Me > Preferences > Advanced > Remembered Usernames." +            width="198" /> +          <check_box +            control_name="RememberPassword"              follows="left|top"              font="SansSerifLarge"              text_color="EmphasisColor" -            height="16" -            name="forgot_password_text" -            left="219" -            top="34" -            width="200"> -            Forgotten password -          </text> +            height="24" +            left="262" +            bottom_delta="0" +            label="Remember password" +            word_wrap="down" +            check_button.bottom="3" +            name="remember_password" +            width="198" />            <text              follows="left|top"              font="SansSerifLarge"              text_color="EmphasisColor"              height="16" -            name="sign_up_text" -            left="432" +            name="forgot_password_text" +            left="492"              top="34"              width="200"> -            Sign up +            Forgotten password            </text>          </layout_panel>          <layout_panel @@ -216,24 +232,17 @@            auto_resize="false"            follows="left|right|top"            name="images_container" -          width="832" +          width="675"            left="0"            top="0"            height="500">            <icon -            height="400" -            width="400" -            image_name="first_login_image_left" +            height="450" +            width="675" +            image_name="first_login_image"              left="0"              name="image_left"              top="0" /> -          <icon -            height="400" -            width="400" -            image_name="first_login_image_right" -            left_pad="32" -            name="image_right" -            top="0" />          </layout_panel>          <layout_panel            height="100" diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 1c9aa1eb83..b44c19810b 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -4,7 +4,6 @@   background_visible="true"   bg_opaque_color="MouseGray"   follows="left|top|right" - focus_root="true"    height="34"   layout="topleft"   name="navigation_bar" diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 9023d68ea9..b711ed0e1c 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -11,7 +11,6 @@   mouse_opaque="false"   name="status"   top="19" - tab_stop="false"   width="1000">      <panel.string       name="packet_loss_tooltip"> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index e1678f418f..e89e03dafa 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -69,6 +69,7 @@ Voice Server Version: [VOICE_VERSION]  	</string>  	<string name="AboutTraffic">Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)</string>  	<string name="AboutTime">[month, datetime, slt] [day, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second,datetime,slt]</string> +  <string name="LocalTime">[month, datetime, local] [day, datetime, local] [year, datetime, local] [hour, datetime, local]:[min, datetime, local]:[second,datetime, local]</string>  	<string name="ErrorFetchingServerReleaseNotesURL">Error fetching server release notes URL.</string>  	<string name="BuildConfiguration">Build Configuration</string> @@ -111,7 +112,7 @@ Voice Server Version: [VOICE_VERSION]  	<string name="CertAllocationFailure">Failed to allocate openssl memory for certificate.</string>  	<string name="LoginFailedNoNetwork">Network error: Could not establish connection, please check your network connection.</string> -	<string name="LoginFailed">Login failed.</string> +	<string name="LoginFailedHeader">Login failed.</string>  	<string name="Quit">Quit</string>  	<string name="create_account_url">http://join.secondlife.com/?sourceid=[sourceid]</string> @@ -125,6 +126,8 @@ http://secondlife.com/download  For more information, see our FAQ below:  http://secondlife.com/viewer-access-faq</string> +	<string name="LoginFailed">Grid emergency login failure. +If you feel this is an error, please contact support@secondlife.com.</string>  	<string name="LoginIntermediateOptionalUpdateAvailable">Optional viewer update available: [VERSION]</string>  	<string name="LoginFailedRequiredUpdate">Required viewer update: [VERSION]</string>  	<string name="LoginFailedAlreadyLoggedIn">This agent is already logged in. @@ -152,15 +155,18 @@ People with free accounts will not be able to access Second Life during this tim  	<string name="LoginFailedComputerProhibited">Second Life cannot be accessed from this computer.  If you feel this is an error, please contact  support@secondlife.com.</string> +  <!--'Pacific time' placeholder for [TIME] in case time from server can't be decoded--> +  <string name="PacificTime">Pacific Time</string>  	<string name="LoginFailedAcountSuspended">Your account is not accessible until -[TIME] Pacific Time.</string> +[TIME]. +If you feel this is an error, please contact support@secondlife.com.</string>  	<string name="LoginFailedAccountDisabled">We are unable to complete your request at this time.  Please contact Second Life support for assistance at http://support.secondlife.com.</string>  	<string name="LoginFailedTransformError">Data inconsistency found during login.  Please contact support@secondlife.com.</string>  	<string name="LoginFailedAccountMaintenance">Your account is undergoing minor maintenance.  Your account is not accessible until -[TIME] Pacific Time. +[TIME].  If you feel this is an error, please contact support@secondlife.com.</string>  	<string name="LoginFailedPendingLogoutFault">Request for logout responded with a fault from simulator.</string>  	<string name="LoginFailedPendingLogout">The system is logging you out right now. diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index e5598978ce..4b7f6a0081 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -178,7 +178,7 @@ Versión del servidor de voz: [VOICE_VERSION]  	<string name="LoginFailedNoNetwork">  		Error de red: no se ha podido conectar; por favor, revisa tu conexión a internet.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Error en el inicio de sesión.  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index f7545f08d2..16423503e7 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -187,7 +187,7 @@ Voice Server Version: [VOICE_VERSION]  	<string name="LoginFailedNoNetwork">  		Erreur réseau : impossible d'établir la connexion. Veuillez vérifier votre connexion réseau.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Échec de la connexion.  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 7690e02692..ea972e5a13 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -183,7 +183,7 @@ Versione server voce: [VOICE_VERSION]  	<string name="LoginFailedNoNetwork">  		Errore di rete: Non è stato possibile stabilire un collegamento, controlla la tua connessione.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Accesso non riuscito.  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index b4bc36a800..344f9fcd94 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -186,7 +186,7 @@ LOD 係数: [LOD_FACTOR]  	<string name="LoginFailedNoNetwork">  		ネットワークエラー:接続を確立できませんでした。お使いのネットワーク接続をご確認ください。  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		ログインに失敗しました。  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index cf033df3c9..2b182dc3cc 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -143,7 +143,7 @@ Wersja serwera głosu (Voice Server): [VOICE_VERSION]  	<string name="LoginFailedNoNetwork">  		Błąd sieci: Brak połączenia z siecią, sprawdź status swojego połączenia internetowego.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Logowanie nie powiodło się.  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index c72a41fd3a..7c593ab3be 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -178,7 +178,7 @@ Versão do servidor de voz: [VOICE_VERSION]  	<string name="LoginFailedNoNetwork">  		Erro de rede: Falha de conexão: verifique sua conexão à internet.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Falha do login.  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index ee2dcfe9cc..95b1664279 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -187,7 +187,7 @@ SLURL: <nolink>[SLURL]</nolink>  	<string name="LoginFailedNoNetwork">  		Ошибка сети: не удалось установить соединение. Проверьте подключение к сети.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Ошибка входа.  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index 982de76a5b..74a6b3cac3 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -187,7 +187,7 @@ Ses Sunucusu Sürümü: [VOICE_VERSION]  	<string name="LoginFailedNoNetwork">  		Ağ hatası: Bağlantı kurulamadı, lütfen ağ bağlantınızı kontrol edin.  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		Oturum açılamadı.  	</string>  	<string name="Quit"> diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index 3221cde3b7..a8d5fd90bb 100644 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -187,7 +187,7 @@ LibVLC版本:[LIBVLC_VERSION]N]  	<string name="LoginFailedNoNetwork">  		網路錯誤:無法建立連線,請檢查網路連線是否正常。  	</string> -	<string name="LoginFailed"> +	<string name="LoginFailedHeader">  		登入失敗。  	</string>  	<string name="Quit"> diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index a52c3dcef9..696fe3536c 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -223,6 +223,7 @@ bool llHashedUniqueID(unsigned char* id)  #include "../llappviewer.h"  void LLAppViewer::forceQuit(void) {}  bool LLAppViewer::isUpdaterMissing() { return true; } +bool LLAppViewer::waitForUpdater() { return false; }  LLAppViewer * LLAppViewer::sInstance = 0;  //----------------------------------------------------------------------------- | 
