diff options
391 files changed, 3574 insertions, 4925 deletions
@@ -17,6 +17,7 @@ build-linux-*  build-darwin-*  build-vc80/  build-vc100/ +build-vc120/  indra/build-vc[0-9]*  indra/CMakeFiles  indra/lib/mono/1.0/*.dll @@ -500,3 +500,4 @@ d3d0101e980ec95043e0af9b7903045d3bc447e4 3.7.24-release  9978a8c3a2ffce4a5e1c186256581c2ac139c9dc 3.7.25-release  000e9dda4162cbf0a83ba88558b19473654a09a9 3.7.26-release  afd8d4756e8eda3c8f760625d1c17a2ad40ad6c8 3.7.27-release +566874eb5ab26c003ef7fb0e22ce40c5fa0013f4 3.7.28-release diff --git a/BuildParams b/BuildParams index c2fadf5943..74bd2b4923 100755 --- a/BuildParams +++ b/BuildParams @@ -11,9 +11,14 @@ Linux.symbolfiles = "newview/secondlife-symbols-linux.tar.bz2"  # Use Public Upload Locations  public_build = true +build_docs = true -# skip windows debug build until we can get a fix in. +# disable all Debug builds (RelWithDebInfo is sufficient)  build_CYGWIN_Debug = false +build_Linux_Debug = false +build_Darwin_Debug = false +build_Debug = false +  # Update Public Inworld Build Status Indicators (setting should mirror "public_build")  email_status_this_is_os = true @@ -47,13 +52,24 @@ Linux.cxx_version = /usr/bin/g++-4.6  ################################################################  viewer_channel = "Second Life Test" -# Setup default packaging parameters. +################################################################ +# Special packaging parameters. +# These parameters can be used to create additional packages +# which identify themselves in a distinct way with either +# a sourceid (sent to web services) or a channel name (sent to login) +# the default sourceid should always be a null string:  sourceid = "" -additional_packages = "Amazon Desura" -Amazon_sourceid = "1207v_Amazon" -Amazon_viewer_channel_suffix = "Amazon" -Desura_sourceid = "1208_desura" -Desura_viewer_channel_suffix = "Desura" +# the additional_packages variable is a blank separated list of package prefixes: +additional_packages = "" +# to set the special values for a package, create variables using each prefix: +#   additional_packages = "Foo Bar" +#   Foo_sourceid = "bingo" +#   Foo_viewer_channel_suffix = "Foo" +#   Bar_sourceid = "bongo" +#   Bar_viewer_channel_suffix = "Bar" +# the viewer_channel_suffix is prefixed by a blank and then appended to the viewer_channel +# for the package in a setting that overrides the compiled-in value +################################################################  # Notifications - to configure email notices, add a setting like this:  # <username>_<reponame>.email = <email-address> diff --git a/autobuild.xml b/autobuild.xml index 5bc45604b8..52d750f64d 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -3,56 +3,12 @@  <map>      <key>installables</key>      <map> -      <key>GLOD</key> -      <map> -        <key>license</key> -        <string>GLOD</string> -        <key>license_file</key> -        <string>LICENSES/glod.txt</string> -        <key>name</key> -        <string>GLOD</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e6071abd822c0688390382a26f8a782c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/267984/arch/Darwin/installer/glod-1.0pre4-darwin-20121211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>176736c52b3cde6ca8e7d9e173d91731</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/268002/arch/Linux/installer/glod-1.0pre4-linux-20121212.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>842208365f5b108dac4c7c733b99da9c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/CYGWIN/installer/glod-1.0pre4-windows-20110610.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map>        <key>SDL</key>        <map> +        <key>copyright</key> +        <string>Copyright (C) 1997-2012 Sam Lantinga</string> +        <key>description</key> +        <string>Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.</string>          <key>license</key>          <string>lgpl</string>          <key>license_file</key> @@ -66,17 +22,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>8da309d24fb0bad8eaaa667fb04c6dc7</string> +              <string>459cdc8d7c19a8025f98f61db95622ff</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-sdl-update/rev/290561/arch/Linux/installer/SDL-1.2.15-linux-20140602.tar.bz2</string> +              <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>          </map> +        <key>version</key> +        <string>1.2.15</string>        </map>        <key>apr_suite</key>        <map> +        <key>copyright</key> +        <string>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</string> +        <key>description</key> +        <string>Apache portable runtime project</string>          <key>license</key>          <string>apache</string>          <key>license_file</key> @@ -90,9 +52,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>2dfcd809e747f714b3fe0bf82a175812</string> +              <string>0c53148aa00e51c06fa246c4130915be</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/Darwin/installer/apr_suite-1.4.5-darwin-20120618.tar.bz2</string> +              <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> @@ -102,9 +64,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>f38c966a430012dc157fdc104f23a59b</string> +              <string>402552cf158e2fe953b7224f4615a957</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/Linux/installer/apr_suite-1.4.5-linux-20120618.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/apr_3p-update-apr/rev/297252/arch/Linux/installer/apr_suite-1.4.5.297252-linux-297252.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -114,17 +76,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>4a9d040582342699c58c886c5ccd2caf</string> +              <string>8f865b509bb5011caf3dd95a22a4589d</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/CYGWIN/installer/apr_suite-1.4.5-windows-20120618.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/apr_3p-update-apr/rev/297252/arch/CYGWIN/installer/apr_suite-1.4.5.297252-windows-297252.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.4.5.297252</string>        </map>        <key>ares</key>        <map> +        <key>copyright</key> +        <string>Copyright 1998 by the Massachusetts Institute of Technology.</string> +        <key>description</key> +        <string>C-ares, an asynchronous resolver library.</string>          <key>license</key>          <string>c-ares</string>          <key>license_file</key> @@ -138,9 +106,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>127c6c37726b11a0750cd4d3b920beff</string> +              <string>637b4996f703f3e5bf835d847fc4cb81</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/Darwin/installer/ares-1.10.0-darwin-20140529.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/ares_3p-update-ares/rev/295506/arch/Darwin/installer/ares-1.10.0.295506-darwin-295506.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -150,9 +118,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>92f6a454d90b5740a38fb68e369cc13e</string> +              <string>7771d3653a0daf22d35bf96055d02d9a</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/Linux/installer/ares-1.10.0-linux-20140529.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/ares_3p-update-ares/rev/295506/arch/Linux/installer/ares-1.10.0.295506-linux-295506.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -162,19 +130,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>887c93c4075beefefa44b69fb2c0461e</string> +              <string>f044de05e704d3f3fb6934adf42447c2</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/CYGWIN/installer/ares-1.10.0-windows-20140529.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/ares_3p-update-ares/rev/295506/arch/CYGWIN/installer/ares-1.10.0.295506-windows-295506.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.10.0.295506</string>        </map>        <key>boost</key>        <map> +        <key>copyright</key> +        <string>(see individual source files)</string> +        <key>description</key> +        <string>Boost C++ Libraries</string>          <key>license</key> -        <string>boost</string> +        <string>boost 1.0</string>          <key>license_file</key>          <string>LICENSES/boost.txt</string>          <key>name</key> @@ -186,9 +160,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>b57789bd22dd166aade4a35ec5d36fbb</string> +              <string>c296845cad075250c1ae2620f175a957</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/Darwin/installer/boost-1.55.0-darwin-20140602.tar.bz2</string> +              <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> @@ -198,9 +172,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>2f076eae296600a1b810ce375dc4b42d</string> +              <string>fb1537f7ad0b490fcb4f096c15dce9cd</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/Linux/installer/boost-1.55.0-linux-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Linux/installer/boost-1.57-linux-297445.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -210,19 +184,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>8af0500013739866a41cfc2ce90e4f4b</string> +              <string>76a607d8a625062b9a63a88b62819894</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/CYGWIN/installer/boost-1.55.0-windows-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/CYGWIN/installer/boost-1.57-windows-297445.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.57</string>        </map>        <key>colladadom</key>        <map> +        <key>copyright</key> +        <string>Copyright 2006 Sony Computer Entertainment Inc.</string>          <key>license</key> -        <string>scea</string> +        <string>SCEA</string>          <key>license_file</key>          <string>LICENSES/collada.txt</string>          <key>name</key> @@ -234,9 +212,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>68dc13f49a686331df6f0128c5483da3</string> +              <string>66849777a83cb69cec3c06b07da7cd3d</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/Darwin/installer/colladadom-2.3-darwin-20140602.tar.bz2</string> +              <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> @@ -246,9 +224,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>bdec5fe5fd008da4328f84115128ee61</string> +              <string>d627c2a679f3afb8d3e090d42f53cd2e</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/Linux/installer/colladadom-2.3-linux-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Linux/installer/colladadom-2.3.297450-linux-297450.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -258,17 +236,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>ae103c9481be20cd6c035940832b2650</string> +              <string>220897a1893a188aa9d31efb48909878</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/CYGWIN/installer/colladadom-2.3-windows-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/CYGWIN/installer/colladadom-2.3.297450-windows-297450.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>2.3.297450</string>        </map>        <key>curl</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 1996 - 2014, Daniel Stenberg, (daniel@haxx.se).</string> +        <key>description</key> +        <string>Library for transferring data specified with URL syntax</string>          <key>license</key>          <string>curl</string>          <key>license_file</key> @@ -282,9 +266,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>40b1c6b3727ebedafc2f1a172797ccd1</string> +              <string>d1c5125650a339a5209f429c70f4d395</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/Darwin/installer/curl-7.38.0-darwin-20141010.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/curl_3p-update-curl/rev/297172/arch/Darwin/installer/curl-7.38.0.297172-darwin-297172.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -294,9 +278,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>06149da3d7a34adf40853f813ae55328</string> +              <string>ee6c089ee193e551040d610befc5d1c1</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/Linux/installer/curl-7.38.0-linux-20141010.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/curl_3p-update-curl/rev/297172/arch/Linux/installer/curl-7.38.0.297172-linux-297172.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -306,17 +290,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>e4280eae792a5f13bc9d01d8cfb7c557</string> +              <string>fdeca7cbc074a88d2701d74a31d21bd8</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/CYGWIN/installer/curl-7.38.0-windows-20141010.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/curl_3p-update-curl/rev/297172/arch/CYGWIN/installer/curl-7.38.0.297172-windows-297172.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>7.38.0.297172</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> @@ -330,23 +320,29 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>8f57c413e0786681cbcb9ed2fb8a6d37</string> +              <string>1cc7940e500858a9754e9a3cc3ba2237</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string> +              <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>        </map> -      <key>dbusglib</key> +      <key>dbus_glib</key>        <map> +        <key>copyright</key> +        <string>Copyright (C) Red Hat Inc.</string> +        <key>description</key> +        <string>D-Bus bindings for glib</string>          <key>license</key> -        <string>AFL2.1</string> +        <string>Academic Free License v. 2.1</string>          <key>license_file</key>          <string>LICENSES/dbus-glib.txt</string>          <key>name</key> -        <string>dbusglib</string> +        <string>dbus_glib</string>          <key>platforms</key>          <map>            <key>linux</key> @@ -354,62 +350,46 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>94b058b9a81114dc4567bd78e4335425</string> +              <string>c11ff7e2e0bd59e6e59628f24902bbcd</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/dbus-glib_3p-update-dbus-glib/rev/297768/arch/Linux/installer/dbus_glib-0.76-linux-297768.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string>            </map>          </map> +        <key>version</key> +        <string>0.76</string>        </map>        <key>dictionaries</key>        <map> +        <key>copyright</key> +        <string>Copyright 2014 Apache OpenOffice software</string> +        <key>description</key> +        <string>Spell checking dictionaries to bundled into the viewer</string>          <key>license</key> -        <string>various open</string> +        <string>various open source</string>          <key>license_file</key>          <string>LICENSES/dictionaries.txt</string>          <key>name</key>          <string>dictionaries</string>          <key>platforms</key>          <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>06a6c49eb1873e95623d3d2d07aee903</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/Darwin/installer/dictionaries-1-darwin-20120616.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>4f0ca21d27e0cd0b002149062b0a4b25</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/Linux/installer/dictionaries-1-linux-20120616.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> +          <key>common</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>7520d75f6af325328322201c888191d4</string> +              <string>a62723a6deea8187702a2f926e98a35f</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/CYGWIN/installer/dictionaries-1-windows-20120616.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/dictionaries_3p-update-dictionaries/rev/297347/arch/Linux/installer/dictionaries-1.297347-common-297347.tar.bz2</string>              </map>              <key>name</key> -            <string>windows</string> +            <string>common</string>            </map>          </map> +        <key>version</key> +        <string>1.297347</string>        </map>        <key>elfio</key>        <map> @@ -437,8 +417,12 @@        </map>        <key>expat</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper - Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.</string> +        <key>description</key> +        <string>Expat is an XML parser library written in C</string>          <key>license</key> -        <string>mit</string> +        <string>expat</string>          <key>license_file</key>          <string>LICENSES/expat.txt</string>          <key>name</key> @@ -450,9 +434,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>180e03d0be1f1acfc3244e78742d7bef</string> +              <string>452d1910ef853329cd59858e6c5b2c48</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Darwin/installer/expat-2.0.1-darwin-20110218.tar.bz2</string> +              <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> @@ -462,9 +446,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>9bd79781b58e556ab1c36084ec4a1c0c</string> +              <string>f546615d76bc0f9e8bc2b9ef89f0ca86</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Linux/installer/expat-2.0.1-linux-20110219.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/expat_3p-update-expat/rev/297014/arch/Linux/installer/expat-2.0.1.297014-linux-297014.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -474,17 +458,21 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>e72db1bda49b205ebdf4945d4ed2b8f8</string> +              <string>c70c72a8a0a1e508691a9b35739b373f</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/expat_3p-update-expat/rev/297014/arch/CYGWIN/installer/expat-2.0.1.297014-windows-297014.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>2.0.1.297014</string>        </map>        <key>fmodex</key>        <map> +        <key>copyright</key> +        <string>COPYRIGHT 2014 FIRELIGHT TECHNOLOGIES PTY LTD. ALL RIGHTS RESERVED</string>          <key>license</key>          <string>fmodex</string>          <key>license_file</key> @@ -498,9 +486,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>862b9244ed8a27bec16b62883fe3580a</string> +              <string>ed0d8767652aecd65a7fef3e28645bad</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/Darwin/installer/fmodex-4.44.31-darwin-20140314.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/fmodex_3p-update-fmodex/rev/297261/arch/Darwin/installer/fmodex-4.44.31.297261-darwin-297261.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -510,9 +498,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>180f4d703deec104469e6a9044243110</string> +              <string>dd0135d53706a4040d65974f7e804d6f</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/Linux/installer/fmodex-4.44.31-linux-20140315.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/fmodex_3p-update-fmodex/rev/297261/arch/Linux/installer/fmodex-4.44.31.297261-linux-297261.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -522,19 +510,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>6c859cd17fb8c9cdd96b188c2a2c2838</string> +              <string>5aa7b826e7c1cf95e9cd3ef77e314f35</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/CYGWIN/installer/fmodex-4.44.31-windows-20140314.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/fmodex_3p-update-fmodex/rev/297261/arch/CYGWIN/installer/fmodex-4.44.31.297261-windows-297261.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>4.44.31.297261</string>        </map>        <key>fontconfig</key>        <map> +        <key>copyright</key> +        <string>Copyright (C) 2000,2001,2002,2003,2004,2006,2007 Keith Packard, 2005 Patrick Lam, 2009 Roozbeh Pournader, 2008,2009 Red Hat, Inc., 2008 Danilo Å egan, 2012 Google, Inc.</string> +        <key>description</key> +        <string>Fontconfig is a library for configuring and customizing font access.</string>          <key>license</key> -        <string>mit</string> +        <string>bsd</string>          <key>license_file</key>          <string>LICENSES/fontconfig.txt</string>          <key>name</key> @@ -546,19 +540,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>2843c48e6c84a51e3d6aa05dace4c8c0</string> +              <string>864f9361661748ecf0e2cec7110d70b3</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-fontconfig-update/rev/290569/arch/Linux/installer/fontconfig-2.11.0-linux-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/fontconfig_3p-update-fontconfig/rev/297551/arch/Linux/installer/fontconfig-2.11.0-linux-297551.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string>            </map>          </map> +        <key>version</key> +        <string>2.11.0</string>        </map>        <key>freeglut</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.</string> +        <key>description</key> +        <string>freeglut is a completely OpenSourced alternative to the OpenGL Utility Toolkit (GLUT) library.</string>          <key>license</key> -        <string>mit</string> +        <string>freeglut</string>          <key>license_file</key>          <string>LICENSES/freeglut.txt</string>          <key>name</key> @@ -570,19 +570,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>825d5a9bafcc5bfe28dc4c1c4f87c576</string> +              <string>58e328a8b2f3788f932c57ad77e3e117</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freeglut/rev/221064/arch/CYGWIN/installer/freeglut-2.6.0-windows-20110214.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freeglut_3p-update-freeglut/rev/295926/arch/CYGWIN/installer/freeglut-2.6.0.295926-windows-295926.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>2.6.0.295926</string>        </map>        <key>freetype</key>        <map> +        <key>copyright</key> +        <string>Copyright 2006, 2007, 2008, 2009, 2010 by David Turner, Robert Wilhelm, and Werner Lemberg.</string> +        <key>description</key> +        <string>Font rendering library</string>          <key>license</key> -        <string>freetype</string> +        <string>FreeType</string>          <key>license_file</key>          <string>LICENSES/freetype.txt</string>          <key>name</key> @@ -594,9 +600,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>71c8d80de052f0c2a49e4c7ddf1a56a0</string> +              <string>83618d16d974eb0af93926a10ac13297</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Darwin/installer/freetype-2.4.4-darwin-20140602.tar.bz2</string> +              <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> @@ -606,9 +612,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>52f87a65cc61ec4b05721c079d015b19</string> +              <string>1ac3152b440287c58509d8af0a50326d</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Linux/installer/freetype-2.4.4-linux-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freetype_3p-update-freetype/rev/297053/arch/Linux/installer/freetype-2.4.4.297053-linux-297053.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -618,19 +624,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>6e9fc0fe628a7c88f6f614bf3b0450ae</string> +              <string>207aa1a29bfe4ba63edbca38170970a1</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/CYGWIN/installer/freetype-2.4.4-windows-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freetype_3p-update-freetype/rev/297053/arch/CYGWIN/installer/freetype-2.4.4.297053-windows-297053.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>2.4.4.297053</string>        </map>        <key>glext</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2007-2010 The Khronos Group Inc.</string> +        <key>description</key> +        <string>glext headers define function prototypes and constants for OpenGL extensions</string>          <key>license</key> -        <string>glext</string> +        <string>Copyright (c) 2007-2010 The Khronos Group Inc.</string>          <key>license_file</key>          <string>LICENSES/glext.txt</string>          <key>name</key> @@ -642,9 +654,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>5de58ca0fe19abf68b25956762ee0d29</string> +              <string>4bf4f9e65168138eebbc769e9e12230b</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glext_3p-update-glext/rev/296893/arch/Linux/installer/glext-68-linux-296893.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -654,23 +666,57 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>5de58ca0fe19abf68b25956762ee0d29</string> +              <string>6eb51c6f17e717a5617b112858d41c80</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glext_3p-update-glext/rev/296893/arch/CYGWIN/installer/glext-68-windows-296893.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>68</string> +      </map> +      <key>glh-linear</key> +      <map> +        <key>copyright</key> +        <string>Copyright (c) 2000 Cass Everitt</string> +        <key>description</key> +        <string>glh - is a platform-indepenedent C++ OpenGL helper library</string> +        <key>license</key> +        <string>BSD</string> +        <key>license_file</key> +        <string>LICENSES/glh-linear.txt</string> +        <key>name</key> +        <string>glh-linear</string> +        <key>platforms</key> +        <map> +          <key>common</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>f577144536fd7c9d26d9f989acf17857</string> +              <key>url</key> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glh-linear_3p-update-glh-linear/rev/297692/arch/Linux/installer/glh_linear-0.0.0-common-297692.tar.bz2</string> +            </map> +            <key>name</key> +            <string>common</string> +          </map> +        </map> +        <key>version</key> +        <string>0.0.0</string>        </map> -      <key>glh_linear</key> +      <key>glod</key>        <map> +        <key>copyright</key> +        <string>Copyright 2003 Jonathan Cohen, Nat Duca, David Luebke, Brenden Schubert - Johns Hopkins University and University of Virginia</string>          <key>license</key> -        <string>glh_linear</string> +        <string>GLOD Open-Source License   Version 1.0</string>          <key>license_file</key> -        <string>LICENSES/glh_linear.txt</string> +        <string>LICENSES/GLOD.txt</string>          <key>name</key> -        <string>glh_linear</string> +        <string>glod</string>          <key>platforms</key>          <map>            <key>darwin</key> @@ -678,9 +724,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>366f940f2634b0e05954646927620bfd</string> +              <string>71e678d70e276fc42a56926fc28a7abd</string> +              <key>hash_algorithm</key> +              <string>md5</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glod_3p-update-glod/rev/296895/arch/Darwin/installer/glod-1.0pre4.296895-darwin-296895.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -690,9 +738,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>1b1f1e9975e3a671c9faf32fcf4b6d43</string> +              <string>fffd130f17cbbe2b93cc241b27262647</string> +              <key>hash_algorithm</key> +              <string>md5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glh_linear/rev/263308/arch/Linux/installer/glh_linear-0.0.0-linux-20120810.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glod_3p-update-glod/rev/296895/arch/Linux/installer/glod-1.0pre4.296895-linux-296895.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -702,19 +752,27 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>57f8be28bbaa2505ae3b59deb2c77cdf</string> +              <string>b0b32155319c6441997c034bdae28a22</string> +              <key>hash_algorithm</key> +              <string>md5</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glod_3p-update-glod/rev/296895/arch/CYGWIN/installer/glod-1.0pre4.296895-windows-296895.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.0pre4.296895</string>        </map>        <key>glui</key>        <map> +        <key>copyright</key> +        <string>Copyright 2006 Paul Rademacher</string> +        <key>description</key> +        <string>GLUI is a GLUT-based C++ user interface library which provides controls such as buttons, checkboxes, radio buttons, and spinners to OpenGL applications.</string>          <key>license</key> -        <string>lgpl</string> +        <string>ZLIB</string>          <key>license_file</key>          <string>LICENSES/glui.txt</string>          <key>name</key> @@ -726,35 +784,53 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>bd2f84ef8bd308570e2e532a371dc2ef</string> +              <string>9b7e2ab9b208b3001803294f83d2b610</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glui_3p-update-glui/rev/297273/arch/Darwin/installer/glui-2.36.297273-darwin-297273.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string>            </map> +          <key>linux</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>f330b3acd03526d827030eefeeb06240</string> +              <key>url</key> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glui_3p-update-glui/rev/297273/arch/Linux/installer/glui-2.36.297273-linux-297273.tar.bz2</string> +            </map> +            <key>name</key> +            <string>linux</string> +          </map>            <key>windows</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>e006635a741420a15f40bbdac13bd8d7</string> +              <string>75b16a5a606c78aaeb2f8e6046310a58</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glui_3p-update-glui/rev/297273/arch/CYGWIN/installer/glui-2.36.297273-windows-297273.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>2.36.297273</string>        </map> -      <key>gmock</key> +      <key>google_breakpad</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2006, Google Inc.</string> +        <key>description</key> +        <string>Breakpad is a crossplatform library for capturing crash callstacks and runtime data.</string>          <key>license</key>          <string>bsd</string>          <key>license_file</key> -        <string>LICENSES/gmock.txt</string> +        <string>LICENSES/google_breakpad.txt</string>          <key>name</key> -        <string>gmock</string> +        <string>google_breakpad</string>          <key>platforms</key>          <map>            <key>darwin</key> @@ -762,9 +838,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>36b0ea1a8be38f5749a7b13536b871ab</string> +              <string>171b39db6d0702535b41fad5b476e39d</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/Darwin/installer/gmock-1.7.0-darwin-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-breakpad_3p-update-google-breakpad/rev/298033/arch/Darwin/installer/google_breakpad-1413.298033-darwin-298033.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -774,9 +850,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>3de99704847b34c7acccf5ab87222f6c</string> +              <string>0bf69fbc829d964820b798a0494278c9</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/Linux/installer/gmock-1.7.0-linux-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-breakpad_3p-update-google-breakpad/rev/298033/arch/Linux/installer/google_breakpad-1413.298033-linux-298033.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -786,23 +862,29 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>5d91c1d03780aa26bcd5481145ee9e86</string> +              <string>c73a7c9aa53a4e266df2d5230a650fbf</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/CYGWIN/installer/gmock-1.7.0-windows-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-breakpad_3p-update-google-breakpad/rev/298127/arch/CYGWIN/installer/google_breakpad-1413.298127-windows-298127.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1413.298127</string>        </map> -      <key>google_breakpad</key> +      <key>googlemock</key>        <map> +        <key>copyright</key> +        <string>Copyright 2008, Google Inc.</string> +        <key>description</key> +        <string>a library for writing and using C++ mock classes</string>          <key>license</key> -        <string>bsd</string> +        <string>BSD</string>          <key>license_file</key> -        <string>LICENSES/google_breakpad.txt</string> +        <string>LICENSES/gmock.txt</string>          <key>name</key> -        <string>google_breakpad</string> +        <string>googlemock</string>          <key>platforms</key>          <map>            <key>darwin</key> @@ -810,9 +892,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>aff5566e04003de0383941981198e04e</string> +              <string>022649e284163b8ee23e3c9a81302fa7</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273073/arch/Darwin/installer/google_breakpad-0.0.0-rev1099-darwin-20130329.tar.bz2</string> +              <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> @@ -822,9 +904,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>52257e5eb166a0b69c9c0c38f6e1920e</string> +              <string>e08b0e9e269b80b549f6044c4e608fb5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273079/arch/Linux/installer/google_breakpad-0.0.0-rev1099-linux-20130329.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Linux/installer/googlemock-1.7.0.297460-linux-297460.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -834,33 +916,51 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>a1e519d08c507c12f9d412b2ae8328c8</string> +              <string>f30de5bf36e8ca8681883fe8fd8e0092</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/279804/arch/CYGWIN/installer/google_breakpad-0.0.0-rev1099-windows-20130813.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/CYGWIN/installer/googlemock-1.7.0.297460-windows-297460.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.7.0.297460</string>        </map>        <key>gperftools</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2005, Google Inc.</string> +        <key>description</key> +        <string>Fast, multi-threaded malloc() and nifty performance analysis tools</string>          <key>license</key> -        <string>bsd</string> +        <string>BSD</string>          <key>license_file</key>          <string>LICENSES/gperftools.txt</string>          <key>name</key>          <string>gperftools</string>          <key>platforms</key>          <map> +          <key>darwin</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>0137e450bf24cff7e78634bb9a1c85e4</string> +              <key>url</key> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-perftools_3p-update-google-perftools/rev/297263/arch/Darwin/installer/gperftools-2.0.297263-darwin-297263.tar.bz2</string> +            </map> +            <key>name</key> +            <string>darwin</string> +          </map>            <key>linux</key>            <map>              <key>archive</key>              <map>                <key>hash</key> -              <string>8aedfdcf670348c18a9991ae1b384a61</string> +              <string>0c252bcaa1cb852f5c4e46a13ed459c5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/Linux/installer/gperftools-2.0-linux-20120727.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-perftools_3p-update-google-perftools/rev/297263/arch/Linux/installer/gperftools-2.0.297263-linux-297263.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -870,19 +970,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>f62841804acb91e1309603a84f3f0ce8</string> +              <string>2946f9bbf227dee8881af43856ebb3a1</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/CYGWIN/installer/gperftools-2.0-windows-20120727.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-perftools_3p-update-google-perftools/rev/297263/arch/CYGWIN/installer/gperftools-2.0.297263-windows-297263.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>2.0.297263</string>        </map>        <key>gstreamer</key>        <map> +        <key>copyright</key> +        <string>Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/></string>          <key>license</key> -        <string>lgpl</string> +        <string>LGPL</string>          <key>license_file</key>          <string>LICENSES/gstreamer.txt</string>          <key>name</key> @@ -894,17 +998,21 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>ddbc0a64ad788107877fee777403592c</string> +              <string>fb1479533a7699b44d34e3a550037eb7</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/gstreamer_3p-update-gstreamer/rev/294903/arch/Linux/installer/gstreamer-0.10.6.294903-linux-294903.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string>            </map>          </map> +        <key>version</key> +        <string>0.10.6.294903</string>        </map>        <key>gtk-atk-pango-glib</key>        <map> +        <key>copyright</key> +        <string>Copyright (various, see sources)</string>          <key>license</key>          <string>lgpl</string>          <key>license_file</key> @@ -918,31 +1026,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>03694ade27f53199229c03cbbda89214</string> +              <string>15af375116f5c943ea6f4190bc764224</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/gtk_3p-gtk-atk-pango-glib/rev/294804/arch/Linux/installer/gtk_atk_pango_glib-0.1-linux-294804.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string>            </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c257d718abdde8cfe8a0af26175161a7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20101001a.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map>          </map> +        <key>version</key> +        <string>0.0</string>        </map>        <key>havok-source</key>        <map> +        <key>copyright</key> +        <string>Uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details.</string> +        <key>description</key> +        <string>Havok source code for libs and demos</string>          <key>license</key> -        <string>havok-ares</string> +        <string>havok</string>          <key>license_file</key>          <string>LICENSES/havok.txt</string>          <key>name</key> @@ -954,9 +1056,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>e6feee3b452c2f70ce8558e30d6bc10a</string> +              <string>5c5b4820999ae9e398801d6a46f45897</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Darwin/installer/havok_source-2012.1-darwin-20121219.tar.bz2</string> +              <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> @@ -966,9 +1068,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>0c0d2058ba48446e274d6595d1d8063e</string> +              <string>6b0f41ddddfa60d8424d8a2e0bc2077d</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Linux/installer/havok_source-2012.1-linux-20121219.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/havok-source_3p-update-havok-source/rev/296959/arch/Linux/installer/havok_source-2012.1-linux-296959.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -978,17 +1080,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>88391b6e08d473506d406ca6f3e88cfb</string> +              <string>ab30ae74a665950d73ea559f019ff358</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/CYGWIN/installer/havok_source-2012.1-windows-20121219.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/havok-source_3p-update-havok-source/rev/297566/arch/CYGWIN/installer/havok_source-2012.1-windows-297566.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>2012.1</string>        </map>        <key>jpeglib</key>        <map> +        <key>copyright</key> +        <string>Copyright (C) 1991-2011, Thomas G. Lane, Guido Vollbeding.</string> +        <key>description</key> +        <string>JPEG encoding, decoding library</string>          <key>license</key>          <string>jpeglib</string>          <key>license_file</key> @@ -1002,9 +1110,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>71bd6efbf508e1f2e7d98a6195a93e9e</string> +              <string>4d7658997fd0f93a9c55e40e40b1b0e5</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string> +              <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> @@ -1014,9 +1122,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>dcca1db348831cdb7c6b26dc4076c597</string> +              <string>0a6641f030e173a7bc0dc8a3087b6c7d</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-jpeglib/rev/224895/arch/Linux/installer/jpeglib-8c-linux-20110323.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jpeglib_3p-update-jpeglib/rev/296854/arch/Linux/installer/jpeglib-8c.296854-linux-296854.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1026,19 +1134,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>a202ec58cef9097c94acfa958ed6da8d</string> +              <string>98d3dc8d107d04b572fe47bd43a56e74</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jpeglib_3p-update-jpeglib/rev/296854/arch/CYGWIN/installer/jpeglib-8c.296854-windows-296854.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>8c.296854</string>        </map>        <key>jsoncpp</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2007-2010 Baptiste Lepilleur</string> +        <key>description</key> +        <string>jsoncpp is an implementation of a JSON (http://json.org) reader and writer in C++.</string>          <key>license</key> -        <string>jsoncpp</string> +        <string>public domain</string>          <key>license_file</key>          <string>LICENSES/jsoncpp.txt</string>          <key>name</key> @@ -1050,9 +1164,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>de8b96120c274e052abb4f692861be46</string> +              <string>b25a4f480e07c670ffef00c3da578f87</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string> +              <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> @@ -1062,9 +1176,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>840cd9455638c0ea52c613cfddd07d5b</string> +              <string>5b3b5dbf0c82c1046482a74ce9e11c38</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jsoncpp_3p-update-jsoncpp/rev/297281/arch/Linux/installer/jsoncpp-0.5.0.297281-linux-297281.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1074,19 +1188,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>afff2018e6a887c281b072eecdd9343e</string> +              <string>e5a832cffe307a1e814ca0664be30b10</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jsoncpp_3p-update-jsoncpp/rev/297580/arch/CYGWIN/installer/jsoncpp-0.5.0.297580-windows-297580.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>0.5.0.297580</string>        </map>        <key>kdu</key>        <map> +        <key>copyright</key> +        <string>Kakadu software</string> +        <key>description</key> +        <string>JPEG2000 library by Kakadu</string>          <key>license</key> -        <string>kdu</string> +        <string>Kakadu</string>          <key>license_file</key>          <string>LICENSES/kdu.txt</string>          <key>name</key> @@ -1098,9 +1218,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>a5b2dff0d97b643227a58473e5c57906</string> +              <string>e62f2fc1ee9ab791d603c5b717b46119</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/Darwin/installer/kdu-7.0.0-darwin-20120515.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/kdu_3p-update-kdu/rev/296932/arch/Darwin/installer/kdu-7.2.296932-darwin-296932.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -1110,9 +1230,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>fbf8a4f78dff986d7c16b3a0437e033e</string> +              <string>ed952c0cb86329e63a8db190953962d8</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/223538/arch/Linux/installer/kdu-6.4.1-linux-20110311.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/kdu_3p-update-kdu/rev/296932/arch/Linux/installer/kdu-7.2.296932-linux-296932.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1122,19 +1242,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>6d80d35524e1c0c32d3385014d02d48c</string> +              <string>a0e5c050a4975c81611d9f1862ac57fb</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/CYGWIN/installer/kdu-7.0.0-windows-20120515.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/kdu_3p-update-kdu/rev/296932/arch/CYGWIN/installer/kdu-7.2.296932-windows-296932.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>7.2.296932</string>        </map>        <key>libhunspell</key>        <map> +        <key>copyright</key> +        <string>See hunspell.txt</string> +        <key>description</key> +        <string>Spell checking library</string>          <key>license</key> -        <string>libhunspell</string> +        <string>LGPL</string>          <key>license_file</key>          <string>LICENSES/hunspell.txt</string>          <key>name</key> @@ -1146,9 +1272,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>6f5db0ef258df6e5c93c843ec559db6d</string> +              <string>05eda16106df26a211f8bdd874d1fca5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/Darwin/installer/libhunspell-1.3.2-darwin-20120616.tar.bz2</string> +              <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> @@ -1158,9 +1284,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>0c432d2626aea2e91a56335879c92965</string> +              <string>988deae5c63ec638ad222b400a431f5b</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/Linux/installer/libhunspell-1.3.2-linux-20120616.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/hunspell_3p-update-hunspell/rev/296916/arch/Linux/installer/libhunspell-1.3.2.296916-linux-296916.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1170,17 +1296,65 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>6a140e5620826aa5e587b4157f57b389</string> +              <string>ada0ad726842d902c09ab20a7ad5ac8f</string> +              <key>url</key> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/hunspell_3p-update-hunspell/rev/296916/arch/CYGWIN/installer/libhunspell-1.3.2.296916-windows-296916.tar.bz2</string> +            </map> +            <key>name</key> +            <string>windows</string> +          </map> +        </map> +        <key>version</key> +        <string>1.3.2.296916</string> +      </map> +      <key>libndofdev</key> +      <map> +        <key>copyright</key> +        <string>Copyright (c) 2007, 3Dconnexion, Inc. - All rights reserved.</string> +        <key>description</key> +        <string>3DConnexion SDK</string> +        <key>license</key> +        <string>BSD</string> +        <key>license_file</key> +        <string>LICENSES/libndofdev.txt</string> +        <key>name</key> +        <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>windows</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>1c40c22fb7b84ccccefbf797e2478ec4</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/CYGWIN/installer/libhunspell-1.3.2-windows-20120616.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libndofdev_3p-update-libndofdev/rev/297264/arch/CYGWIN/installer/libndofdev-0.1.297264-windows-297264.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>0.1.297264</string>        </map>        <key>libpng</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson</string> +        <key>description</key> +        <string>PNG Reference library</string>          <key>license</key>          <string>libpng</string>          <key>license_file</key> @@ -1194,9 +1368,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>80a84bbbb363e1a38f39bb6be8a3f166</string> +              <string>14cb5c8686a472e9e60179e46cd196f7</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/Darwin/installer/libpng-1.6.8-darwin-20140602.tar.bz2</string> +              <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> @@ -1206,9 +1380,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>3368a25b361c22a03f7ec7e0f8d5ff9d</string> +              <string>6dec32fc2527f8cafd616f9271ff3478</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/Linux/installer/libpng-1.6.8-linux-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libpng_3p-update-libpng/rev/297051/arch/Linux/installer/libpng-1.6.8.297051-linux-297051.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1218,21 +1392,27 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>596f4798f90941817b1ca5009c24d16a</string> +              <string>09eb65e66e0230ab01e57e643647a4f1</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/CYGWIN/installer/libpng-1.6.8-windows-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libpng_3p-update-libpng/rev/297708/arch/CYGWIN/installer/libpng-1.6.8.297708-windows-297708.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.6.8.297708</string>        </map>        <key>libuuid</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/></string> +        <key>description</key> +        <string>OSSP uuid is a ISO-C:1999 application programming interface (API) and corresponding command line interface (CLI) for the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique Identifier (UUID). </string>          <key>license</key> -        <string>lgpl</string> +        <string>UUID</string>          <key>license_file</key> -        <string>LICENSES/libuuid.txt</string> +        <string>LICENSES/uuid.txt</string>          <key>name</key>          <string>libuuid</string>          <key>platforms</key> @@ -1242,17 +1422,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>873e8e99d29711df2efa30646dca1795</string> +              <string>f231b6ec8bc2f050cfb1ee20bd83190d</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libuuid_3p-update-libuuid/rev/295209/arch/Linux/installer/libuuid-1.6.2-linux-295209.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string>            </map>          </map> +        <key>version</key> +        <string>1.6.2</string>        </map>        <key>libxml2</key>        <map> +        <key>copyright</key> +        <string>Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.</string> +        <key>description</key> +        <string>Libxml2 is the XML C parser and toolkit developed for the Gnome project.</string>          <key>license</key>          <string>mit</string>          <key>license_file</key> @@ -1266,9 +1452,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>4a5880b8235beb5ca21f1e252a46e342</string> +              <string>9303f0dd174129e297eca6cc2eb1ab3f</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/Darwin/installer/libxml2-2.9.1-darwin-20140602.tar.bz2</string> +              <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> @@ -1278,9 +1464,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>7eb90f075730f8d7d176f8fb7bad5ef5</string> +              <string>b8b584853dc1344bb3571c13b06ec39e</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/Linux/installer/libxml2-2.9.1-linux-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libxml_3p-update-libxml/rev/297050/arch/Linux/installer/libxml2-2.9.1.297050-linux-297050.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1290,23 +1476,29 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>ba20e2634b4c249a7064620d135f7972</string> +              <string>37fa0e86e54f5f283aa653d770fc8ed5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/CYGWIN/installer/libxml2-2.9.1-windows-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libxml_3p-update-libxml/rev/297050/arch/CYGWIN/installer/libxml2-2.9.1.297050-windows-297050.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>2.9.1.297050</string>        </map> -      <key>llappearanceutility-source</key> +      <key>llappearance_utility</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2000-2012, Linden Research, Inc.</string> +        <key>description</key> +        <string>Linden Lab appearance utility for server-side avatar baking services.</string>          <key>license</key> -        <string>TEMPORARY</string> +        <string>Proprietary</string>          <key>license_file</key>          <string>LICENSES/llappearanceutility.txt</string>          <key>name</key> -        <string>llappearanceutility-source</string> +        <string>llappearance_utility</string>          <key>platforms</key>          <map>            <key>linux</key> @@ -1314,21 +1506,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>0e15751836ac0492250001b80aea379f</string> +              <string>ce1261a54d877ab5530ae6a9134a77a3</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearanceutility-source/rev/293888/arch/Linux/installer/llappearanceutility_source-0.1-linux-20140908.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearance_viewer-update-llappearance-utility/rev/294906/arch/Linux/installer/llappearance_utility-0.0.1-linux-294906.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string>            </map>          </map>          <key>version</key> -        <string>0.1</string> +        <string>0.0.1</string>        </map>        <key>llphysicsextensions_source</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2010, Linden Research, Inc.</string>          <key>license</key> -        <string>TEMPORARY</string> +        <string>internal</string>          <key>license_file</key>          <string>LICENSES/llphysicsextensions.txt</string>          <key>name</key> @@ -1340,11 +1534,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>0578fa67ef9906c6aaa326f51db2669f</string> +              <string>468e88a527e610804c3eecf07f4ed70b</string>                <key>hash_algorithm</key>                <string>md5</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120814.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/Darwin/installer/llphysicsextensions_source-1.0.298369-darwin-298369.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -1354,9 +1548,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>a6856b4d58a3b71321acad7e1fa9c8d4</string> +              <string>793964e49c935b414c4bdbb8a0d14ad1</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/265749/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20121011.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/Linux/installer/llphysicsextensions_source-1.0.298369-linux-298369.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1366,21 +1560,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>0cebd359ea732a7db363d88f9886a1ef</string> +              <string>922aad5261aac150e5ce3c094e57f373</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120814.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/CYGWIN/installer/llphysicsextensions_source-1.0.298369-windows-298369.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map>          <key>version</key> -        <string>0.2</string> +        <string>1.0.298369</string>        </map>        <key>llphysicsextensions_stub</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2010, Linden Research, Inc.</string>          <key>license</key> -        <string>TEMPORARY</string> +        <string>internal</string>          <key>license_file</key>          <string>LICENSES/llphysicsextensions.txt</string>          <key>name</key> @@ -1392,11 +1588,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>3ae798d4dfb54a1d806ee5f8b31f7626</string> +              <string>1175977a191ffc936fd0ccca433c8278</string>                <key>hash_algorithm</key>                <string>md5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120814.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/Darwin/installer/llphysicsextensions_stub-1.0.298370-darwin-298370.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -1406,9 +1602,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>aa8a2f25e8629cf5e6a96cc0eb93de8e</string> +              <string>d13d7927692eab2d6a63e36166b72a8a</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120814.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/Linux/installer/llphysicsextensions_stub-1.0.298370-linux-298370.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1418,21 +1614,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>3ea4cee6a8dd4c89fbfd3ad6abd703c2</string> +              <string>9594f6fd79ee924fe675a4a23e30516e</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120814.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/CYGWIN/installer/llphysicsextensions_stub-1.0.298370-windows-298370.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map>          <key>version</key> -        <string>0.2</string> +        <string>1.0.298370</string>        </map>        <key>llqtwebkit</key>        <map> +        <key>copyright</key> +        <string>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</string> +        <key>description</key> +        <string>QT cross-platform application and UI framework.</string>          <key>license</key> -        <string>lgpl</string> +        <string>LGPL</string>          <key>license_file</key>          <string>LICENSES/llqtwebkit.txt</string>          <key>name</key> @@ -1445,6 +1645,8 @@              <map>                <key>hash</key>                <string>3c2b6be4c78b2479c3fae612e1053d37</string> +              <key>hash_algorithm</key> +              <string>md5</string>                <key>url</key>                <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20141015.tar.bz2</string>              </map> @@ -1457,6 +1659,8 @@              <map>                <key>hash</key>                <string>d31358176b9ba8c676458cc061767c0b</string> +              <key>hash_algorithm</key> +              <string>md5</string>                <key>url</key>                <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/Linux/installer/llqtwebkit-4.7.1-linux-20141015.tar.bz2</string>              </map> @@ -1469,6 +1673,8 @@              <map>                <key>hash</key>                <string>bb4e8c8006c8a7aef6d3e3c36a8cebbf</string> +              <key>hash_algorithm</key> +              <string>md5</string>                <key>url</key>                <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20141015.tar.bz2</string>              </map> @@ -1476,6 +1682,8 @@              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>4.7.1</string>        </map>        <key>mesa</key>        <map> @@ -1492,67 +1700,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>1f600840463c7327ea17486821425750</string> +              <string>22c50a5d362cad311b4f413cfcffbba2</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/mesa_3p-update-mesa/rev/297294/arch/Linux/installer/mesa-7.11.1.297294-linux-297294.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string>            </map>          </map> -      </map> -      <key>ndofdev</key> -      <map> -        <key>license</key> -        <string>linden</string> -        <key>license_file</key> -        <string>LICENSES/libndofdev.txt</string> -        <key>name</key> -        <string>ndofdev</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>674d37d2ba76a2df7f18c47bf50b5d03</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-darwin-20110308.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9bf7a96c1d2fadb180fda91740c945c6</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libndofdev-linux/rev/233137/arch/Linux/installer/libndofdev-0.3-linux-20110617.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3a4bec9562ed6ac53e85abcb1afc5fc0</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-windows-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> +        <key>version</key> +        <string>7.11.1.297294</string>        </map>        <key>nvapi</key>        <map> +        <key>copyright</key> +        <string>Copyright © 2012 NVIDIA Corporation.  All rights reserved.</string> +        <key>description</key> +        <string>NVAPI provides an interface to NVIDIA devices.</string>          <key>license</key> -        <string>NVAPI</string> +        <string>NVIDIA Corporation Software License Agreement – NVAPI SDK</string>          <key>license_file</key>          <string>LICENSES/NVAPI_SDK_License_Agreement.pdf</string>          <key>name</key> @@ -1564,23 +1730,29 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>baf519d36dffe4e4a59471450e391d01</string> +              <string>9e30c9e228d6a825b6774b97ff052973</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-nvapi/rev/267102/arch/CYGWIN/installer/nvapi-304-windows-20121116.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/nvapi_3p-update-nvapi/rev/295118/arch/CYGWIN/installer/nvapi-304-windows-295118.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>304</string>        </map> -      <key>ogg-vorbis</key> +      <key>ogg_vorbis</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2002, Xiph.org Foundation</string> +        <key>description</key> +        <string>Audio encoding library</string>          <key>license</key>          <string>ogg-vorbis</string>          <key>license_file</key>          <string>LICENSES/ogg-vorbis.txt</string>          <key>name</key> -        <string>ogg-vorbis</string> +        <string>ogg_vorbis</string>          <key>platforms</key>          <map>            <key>darwin</key> @@ -1588,9 +1760,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>e849bc2b779fb7cc5e81aeb021a542c0</string> +              <string>07fca1531a27915f642a5c1d95008d54</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2-darwin-20110510.tar.bz2</string> +              <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> @@ -1600,9 +1772,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>71eaa462eb0bf8842277a3436483a354</string> +              <string>b0cd31d5b07a9fc25c4d69ba2f95eace</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2-linux-20110511.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oggvorbis_3p-update-oggvorbis/rev/296878/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2.296878-linux-296878.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1612,23 +1784,59 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>291dbba89dd8162b76f2c2d82e908c6f</string> +              <string>f358717739c288ec7401d6d1936ef878</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2-windows-20110510.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oggvorbis_3p-update-oggvorbis/rev/296878/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2.296878-windows-296878.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.2.2-1.3.2.296878</string>        </map> -      <key>openal_soft</key> +      <key>open-libndofdev</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2008, Jan Ciger (jan.ciger (at) gmail.com)</string> +        <key>description</key> +        <string>Open Source replacement for 3DConnection SDK</string> +        <key>license</key> +        <string>BSD</string> +        <key>license_file</key> +        <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> +      <key>openal</key> +      <map> +        <key>copyright</key> +        <string>Creative Labs</string> +        <key>description</key> +        <string>OpenAL is a cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applications.</string>          <key>license</key>          <string>lgpl</string>          <key>license_file</key> -        <string>LICENSES/OPENAL.txt</string> +        <string>LICENSES/openal.txt</string>          <key>name</key> -        <string>openal_soft</string> +        <string>openal</string>          <key>platforms</key>          <map>            <key>linux</key> @@ -1636,11 +1844,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>fccdca18a950ac9363c6fb39118b80e1</string> +              <string>15ebe611213c9577691ffbade081549d</string>                <key>hash_algorithm</key>                <string>md5</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openal_3p-update-openal/rev/297677/arch/Linux/installer/openal-1.12.854-1.1.0.297677-linux-297677.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1650,21 +1858,27 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>04df406f3e5d04cf176660bdac66c3a1</string> +              <string>3bf6e26aeec71f36c8b6e20c6b883fe9</string> +              <key>hash_algorithm</key> +              <string>md5</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openal_3p-update-openal/rev/297677/arch/CYGWIN/installer/openal-1.12.854-1.1.0.297677-windows-297677.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map>          <key>version</key> -        <string>3ad86a1c</string> +        <string>1.12.854-1.1.0.297677</string>        </map>        <key>openjpeg</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium, Copyright (c) 2002-2007, Professor Benoit Macq, Copyright (c) 2001-2003, David Janssens, Copyright (c) 2002-2003, Yannick Verschueren, Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe, Copyright (c) 2005, Herve Drolon, FreeImage Team</string> +        <key>description</key> +        <string>The OpenJPEG library is an open-source JPEG 2000 codec written in C language.</string>          <key>license</key> -        <string>openjpeg</string> +        <string>BSD</string>          <key>license_file</key>          <string>LICENSES/openjpeg.txt</string>          <key>name</key> @@ -1676,9 +1890,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>4be51c7cca7d84831e30b63279df7ae5</string> +              <string>2adb5b8bd2493d576c5d02b992d8f819</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string> +              <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> @@ -1688,9 +1902,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>fb2382014c79e0049746e4e29bd834f9</string> +              <string>675c283030879d3d9c49082bfa2192eb</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/Linux/installer/openjpeg-1.4.297018-linux-297018.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1700,17 +1914,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>ca5765af55f798724d601720afdf6953</string> +              <string>b35adcf74d22c128045aa87aade74736</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/CYGWIN/installer/openjpeg-1.4.297018-windows-297018.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.4.297018</string>        </map>        <key>openssl</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved; Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)</string> +        <key>description</key> +        <string>Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) Library</string>          <key>license</key>          <string>openssl</string>          <key>license_file</key> @@ -1724,9 +1944,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>4db126327bbb125ea2490c79c73103bf</string> +              <string>0a77d56769e6075957f614be6575423e</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/Darwin/installer/openssl-1.0.1h-darwin-20140605.tar.bz2</string> +              <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> @@ -1736,9 +1956,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>0665c18f8cdbe2f90cb0a2f088cfe1a6</string> +              <string>c310ba9971cbd796b303c3be67fb11c6</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/Linux/installer/openssl-1.0.1h-linux-20140605.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openssl_3p-update-openssl/rev/297168/arch/Linux/installer/openssl-1.0.1h.297168-linux-297168.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1748,17 +1968,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>138997e1a73c65525d45c00f43f08010</string> +              <string>398743f47578cbb44f5504128780369f</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/CYGWIN/installer/openssl-1.0.1h-windows-20140605.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openssl_3p-update-openssl/rev/297168/arch/CYGWIN/installer/openssl-1.0.1h.297168-windows-297168.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.0.1h.297168</string>        </map>        <key>pcre</key>        <map> +        <key>copyright</key> +        <string>Copyright (c) 1997-2014 University of Cambridge; Copyright(c) 2009-2014 Zoltan Herczeg; Copyright (c) 2007-2012, Google Inc.</string> +        <key>description</key> +        <string>PCRE Perl-compatible regular expression library</string>          <key>license</key>          <string>bsd</string>          <key>license_file</key> @@ -1772,9 +1998,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>af0d38a4c56b52c4df40a4ff0d51efef</string> +              <string>6d2b38897f1adf354b299345d5fc759b</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/Darwin/installer/pcre-8.35-darwin-20140529.tar.bz2</string> +              <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> @@ -1784,9 +2010,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>5e6368d39b95f2c0d5162dac2c17c67f</string> +              <string>b82817bcc2f63094d9c915d018d0b036</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/Linux/installer/pcre-8.35-linux-20140530.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/pcre_3p-update-pcre/rev/297155/arch/Linux/installer/pcre-8.35.-linux-297155.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1796,19 +2022,25 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>9250f74fed826ad1b8700229e964519d</string> +              <string>96ed836c89a99dfc22f9c16a0d7272d3</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/CYGWIN/installer/pcre-8.35-windows-20140529.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/pcre_3p-update-pcre/rev/297155/arch/CYGWIN/installer/pcre-8.35.-windows-297155.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string>            </map>          </map> +        <key>version</key> +        <string>8.35.</string>        </map>        <key>quicktime</key>        <map> +        <key>copyright</key> +        <string>2010 Apple</string> +        <key>description</key> +        <string>QuickTime 7.3 SDK for Windows</string>          <key>license</key> -        <string>quicktime</string> +        <string>unknown</string>          <key>license_file</key>          <string>LICENSES/quicktime.txt</string>          <key>name</key> @@ -1820,19 +2052,81 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>52e49ab6937b09882389da0dbaec17f5</string> +              <string>3f8b52280cb1eff2d1acd0214bce1b16</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/quicktime_3p-update-quicktime/rev/296445/arch/CYGWIN/installer/quicktime-7.3-windows-296445.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>7.3</string> +      </map> +      <key>slplugins</key> +      <map> +        <key>copyright</key> +        <string>Second Life Viewer Source Code - Copyright (C) 2010, Linden Research, Inc.</string> +        <key>description</key> +        <string>Second Life Viewer Plugins and launcher</string> +        <key>license</key> +        <string>LGPL</string> +        <key>license_file</key> +        <string>LICENSES/slplugins-license.txt</string> +        <key>name</key> +        <string>slplugins</string> +        <key>platforms</key> +        <map> +          <key>darwin</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>f6bfb026572f03a4c8ac6b2b7d7eb0ae</string> +              <key>url</key> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slplugins_3p-update-slplugins/rev/298079/arch/Darwin/installer/slplugins-3.7.24.297623.298079-darwin-298079.tar.bz2</string> +            </map> +            <key>name</key> +            <string>darwin</string> +          </map> +          <key>linux</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>64b8a3bac95b5888a7ede3d7661a18b8</string> +              <key>url</key> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slplugins_3p-update-slplugins/rev/298079/arch/Linux/installer/slplugins-3.7.24.297623.298079-linux-298079.tar.bz2</string> +            </map> +            <key>name</key> +            <string>linux</string> +          </map> +          <key>windows</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>3a1ea3385303b78b0327c8cea929ef27</string> +              <key>hash_algorithm</key> +              <string>md5</string> +              <key>url</key> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slplugins_3p-update-slplugins/rev/298079/arch/CYGWIN/installer/slplugins-3.7.24.297623.298079-windows-298079.tar.bz2</string> +            </map> +            <key>name</key> +            <string>windows</string> +          </map> +        </map> +        <key>version</key> +        <string>3.7.24.297623.298079</string>        </map>        <key>slvoice</key>        <map> +        <key>copyright</key> +        <string>2010 Vivox, including audio coding using Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C)</string> +        <key>description</key> +        <string>Vivox SDK components</string>          <key>license</key> -        <string>vivox</string> +        <string>Mixed</string>          <key>license_file</key>          <string>LICENSES/slvoice.txt</string>          <key>name</key> @@ -1844,9 +2138,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>88181b9f66b7db650e0d571bbb632bdc</string> +              <string>68a8fab5ad3a180487598d3a3e0d57b1</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/287264/arch/Darwin/installer/slvoice-4.6.0009.20030-darwin-20140226.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/Darwin/installer/slvoice-4.6.0017.21209.298329-darwin-298329.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -1856,9 +2150,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>957773fff7148ffaca42b1ea4a18d192</string> +              <string>48ed7ddcf93fa3c751d677f5eb5f9367</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/270512/arch/Linux/installer/slvoice-4.5.0009.17865-linux-20130216.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/Linux/installer/slvoice-3.2.0002.10426.298329-linux-298329.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1868,17 +2162,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>ce89b881ee24977641d1ecbf8aff6dc7</string> +              <string>399afab7047e6fa62e7b2fb1768059ea</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/287264/arch/CYGWIN/installer/slvoice-4.6.0009.20030-windows-20140227.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/CYGWIN/installer/slvoice-4.6.0017.21209.298329-windows-298329.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>4.6.0017.21209.2988329</string>        </map>        <key>tut</key>        <map> +        <key>copyright</key> +        <string>Copyright 2002-2006 Vladimir Dyuzhev, Copyright 2007 Denis Kononenko, Copyright 2008-2009 MichaÅ‚ Rzechonek</string> +        <key>description</key> +        <string>TUT is a small and portable unit test framework for C++.</string>          <key>license</key>          <string>bsd</string>          <key>license_file</key> @@ -1892,65 +2192,77 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>5c6d3e606f027e78f056cb77b20f228e</string> +              <string>2f32faa00e600911f838a7d82da5a8db</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/tut_3p-update-tut/rev/297257/arch/Linux/installer/tut-2008.11.30-common-297257.tar.bz2</string>              </map>              <key>name</key>              <string>common</string>            </map>          </map> +        <key>version</key> +        <string>2008.11.30</string>        </map>        <key>uriparser</key>        <map> -          <key>license</key> -          <string>uriparser</string> -          <key>license_file</key> -          <string>LICENSES/uriparser.txt</string> -          <key>name</key> -          <string>uriparser</string> -          <key>platforms</key> +        <key>copyright</key> +        <string>Copyright (C) 2007, Weijia Song <songweijia@gmail.com>, Sebastian Pipping <webmaster@hartwork.org></string> +        <key>description</key> +        <string>uriparser is a strictly RFC 3986 compliant URI parsing and handling library written in C. uriparser is cross-platform, fast, supports Unicode and is licensed under the New BSD license.</string> +        <key>license</key> +        <string>New BSD license</string> +        <key>license_file</key> +        <string>LICENSES/uriparser.txt</string> +        <key>name</key> +        <string>uriparser</string> +        <key>platforms</key> +        <map> +          <key>darwin</key>            <map> -              <key>darwin</key> -              <map> -                  <key>archive</key> -                  <map> -                      <key>hash</key> -                      <string>99c5a966ac74eea5a505317396152168</string> -                      <key>url</key> -                      <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-uriparser/rev/294299/arch/Darwin/installer/uriparser-0.8.0.1-darwin-20140917.tar.bz2</string> -                  </map> -                  <key>name</key> -                  <string>darwin</string> -              </map> -              <key>linux</key> -              <map> -                  <key>archive</key> -                  <map> -                      <key>hash</key> -                      <string>34306fb90364b182dc770375140d8557</string> -                      <key>url</key> -                      <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-uriparser/rev/294298/arch/Linux/installer/uriparser-0.8.0.1-linux-20140918.tar.bz2</string> -                  </map> -                  <key>name</key> -                  <string>linux</string> -              </map> -              <key>windows</key> -              <map> -                  <key>archive</key> -                  <map> -                      <key>hash</key> -                      <string>73817db47bc0f87269861b7887319414</string> -                      <key>url</key> -                      <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-uriparser/rev/294274/arch/CYGWIN/installer/uriparser-0.8.0.1-windows-20140917.tar.bz2</string> -                  </map> -                  <key>name</key> -                  <string>windows</string> -              </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>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>windows</key> +          <map> +            <key>archive</key> +            <map> +              <key>hash</key> +              <string>e4520158dda88453e46942eab6f9c0a8</string> +              <key>url</key> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/CYGWIN/installer/uriparser-0.8.0.1-windows-299435.tar.bz2</string> +            </map> +            <key>name</key> +            <string>windows</string> +          </map> +        </map> +        <key>version</key> +        <string>0.8.0.1</string>        </map>        <key>xmlrpc-epi</key>        <map> +        <key>copyright</key> +        <string>Copyright: (C) 2000 Epinions, Inc.</string> +        <key>description</key> +        <string>XMLRPC Library</string>          <key>license</key>          <string>xmlrpc-epi</string>          <key>license_file</key> @@ -1964,9 +2276,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>a3e0fb4b4a51b01690a99747a1cca531</string> +              <string>ffd3aab8e0c0ff6dadbce49ca2809078</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string> +              <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> @@ -1976,9 +2288,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>174ab797440157956eda7061dae37564</string> +              <string>30bb26d6cc78c16047fc85a63f48fcdb</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/xmlrpc-emi_3p-update-xmlrpc-epi/rev/297075/arch/Linux/installer/xmlrpc_epi-0.54.1.297075-linux-297075.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1988,17 +2300,23 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>5181d1a8f2516928ac064d72acf164a4</string> +              <string>a7e1a8369a5afd52e1b6fc1f14155033</string>                <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/xmlrpc-emi_3p-update-xmlrpc-epi/rev/297075/arch/CYGWIN/installer/xmlrpc_epi-0.54.1.297075-windows-297075.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>0.54.1.297075</string>        </map>        <key>zlib</key>        <map> +        <key>copyright</key> +        <string>Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler</string> +        <key>description</key> +        <string>Zlib Data Compression Library</string>          <key>license</key>          <string>zlib</string>          <key>license_file</key> @@ -2012,9 +2330,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>6658071e3b54b1dd5f5279227aff402a</string> +              <string>1a79eeac199c2d94e4ae4e5d0194e25f</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/Darwin/installer/zlib-1.2.8-darwin-20140602.tar.bz2</string> +              <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> @@ -2024,9 +2342,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>63a62bb3cbef2aad3cca49cb6f2d0aeb</string> +              <string>2eb8e59b6464222dcf4435016ad5f618</string> +              <key>hash_algorithm</key> +              <string>md5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/Linux/installer/zlib-1.2.8-linux-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/Linux/installer/zlib-1.2.8.296881-linux-296881.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -2036,22 +2356,28 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>ab45a628e22a495814e806ce46081806</string> +              <string>ae420ec6d30411c07aac2502d7bbc0f3</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/CYGWIN/installer/zlib-1.2.8-windows-20140602.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/CYGWIN/installer/zlib-1.2.8.296881-windows-296881.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string>            </map>          </map> +        <key>version</key> +        <string>1.2.8.296881</string>        </map>      </map>      <key>package_description</key>      <map> +      <key>copyright</key> +      <string>Copyright (c) 2014, Linden Research, Inc.</string>        <key>description</key>        <string>Second Life Viewer</string>        <key>license</key>        <string>LGPL</string> +      <key>license_file</key> +      <string>docs/LICENSE-source.txt</string>        <key>name</key>        <string>Second Life Viewer</string>        <key>platforms</key> @@ -2060,47 +2386,6 @@          <map>            <key>configurations</key>            <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>configure</key> -              <map> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=TRUE</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map>              <key>RelWithDebInfo</key>              <map>                <key>build</key> @@ -2193,60 +2478,6 @@            <string>build-darwin-i386</string>            <key>configurations</key>            <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>filters</key> -                <array> -                  <string>setenv</string> -                </array> -                <key>options</key> -                <array> -                  <string>-configuration Debug</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Debug</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map>              <key>RelWithDebInfo</key>              <map>                <key>build</key> @@ -2371,54 +2602,6 @@            <string>build-linux-i686</string>            <key>configurations</key>            <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 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>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 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>DebugOS</string> -            </map>              <key>RelWithDebInfo</key>              <map>                <key>build</key> @@ -2532,94 +2715,9 @@          <key>windows</key>          <map>            <key>build_directory</key> -          <string>build-vc100</string> +          <string>build-vc120</string>            <key>configurations</key>            <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>BuildConsole</string> -                <key>options</key> -                <array> -                  <string>/build</string> -                  <string>"/cfg=Debug|Win32"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>Debug</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>msbuild.exe</string> -                <key>options</key> -                <array> -                  <string>/p:Configuration=Debug</string> -                  <string>/p:Platform=Win32</string> -                  <string>/t:Build</string> -                  <string>/p:useenv=true</string> -                  <string>/verbosity:minimal</string> -                  <string>/toolsversion:4.0</string> -                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>Debug</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DUSE_KDU=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map>              <key>RelWithDebInfo</key>              <map>                <key>build</key> @@ -2629,11 +2727,11 @@                    <string>SecondLife.sln</string>                  </array>                  <key>command</key> -                <string>BuildConsole</string> +                <string>devenv</string>                  <key>options</key>                  <array>                    <string>/build</string> -                  <string>"/cfg=RelWithDebInfo|Win32"</string> +                  <string>"RelWithDebInfo|Win32"</string>                  </array>                </map>                <key>configure</key> @@ -2653,7 +2751,7 @@                  <key>options</key>                  <array>                    <string>-G</string> -                  <string>"Visual Studio 10"</string> +                  <string>"Visual Studio 12"</string>                  </array>                </map>                <key>default</key> @@ -2699,7 +2797,7 @@                  <key>options</key>                  <array>                    <string>-G</string> -                  <string>"Visual Studio 10"</string> +                  <string>"Visual Studio 12"</string>                    <string>-DUNATTENDED:BOOL=ON</string>                    <string>-DINSTALL_PROPRIETARY=FALSE</string>                    <string>-DUSE_KDU=FALSE</string> @@ -2717,11 +2815,11 @@                    <string>SecondLife.sln</string>                  </array>                  <key>command</key> -                <string>BuildConsole</string> +                <string>devenv</string>                  <key>options</key>                  <array>                    <string>/build</string> -                  <string>"/cfg=Release|Win32"</string> +                  <string>"Release|Win32"</string>                  </array>                </map>                <key>configure</key> @@ -2741,7 +2839,7 @@                  <key>options</key>                  <array>                    <string>-G</string> -                  <string>"Visual Studio 10"</string> +                  <string>"Visual Studio 12"</string>                  </array>                </map>                <key>name</key> @@ -2785,7 +2883,7 @@                  <key>options</key>                  <array>                    <string>-G</string> -                  <string>"Visual Studio 10"</string> +                  <string>"Visual Studio 12"</string>                    <string>-DUNATTENDED:BOOL=ON</string>                    <string>-DINSTALL_PROPRIETARY=FALSE</string>                    <string>-DUSE_KDU=FALSE</string> @@ -2799,12 +2897,12 @@            <string>windows</string>          </map>        </map> -      <key>version</key> -      <string>1.0</string> +      <key>version_file</key> +      <string>newview/viewer_version.txt</string>      </map>      <key>type</key>      <string>autobuild</string>      <key>version</key> -    <string>1.2</string> +    <string>1.3</string>    </map>  </llsd> @@ -1,6 +1,7 @@  #!/bin/sh -# This is a the master build script - it is intended to be run by parabuild +# This is a the master build script - it is intended to be run by the Linden +# Lab build farm  # It is called by a wrapper script in the shared repository which sets up  # the environment from the various BuildParams files and does all the build   # result post-processing. @@ -12,8 +13,6 @@  # * The special style in which python is invoked is intentional to permit  #   use of a native python install on windows - which requires paths in DOS form  # * This script relies heavily on parameters defined in BuildParams -# * The basic convention is that the build name can be mapped onto a mercurial URL, -#   which is also used as the "branch" name.  check_for()  { @@ -33,7 +32,7 @@ build_dir_Linux()  build_dir_CYGWIN()  { -  echo build-vc100 +  echo build-vc120  }  viewer_channel_suffix() @@ -102,7 +101,7 @@ pre_build()      check_for "Confirm dictionaries are installed before 'autobuild configure'" ${build_dir}/packages/dictionaries -    "$AUTOBUILD" configure -c $variant -- \ +    "$autobuild" configure -c $variant -- \       -DPACKAGE:BOOL=ON \       -DRELEASE_CRASH_REPORTING:BOOL=ON \       -DVIEWER_CHANNEL:STRING="\"$viewer_channel\"" \ @@ -120,14 +119,20 @@ package_llphysicsextensions_tpv()    if [ "$variant" = "Release" ]    then         llpetpvcfg=$build_dir/packages/llphysicsextensions/autobuild-tpv.xml -      "$AUTOBUILD" build --verbose --config-file $llpetpvcfg -c Tpv +      "$autobuild" build --verbose --config-file $llpetpvcfg -c Tpv        # capture the package file name for use in upload later...        PKGTMP=`mktemp -t pgktpv.XXXXXX`        trap "rm $PKGTMP* 2>/dev/null" 0 -      "$AUTOBUILD" package --verbose --config-file $llpetpvcfg > $PKGTMP +      "$autobuild" package --verbose --config-file $llpetpvcfg --results-file "$(native_path $PKGTMP)"        tpv_status=$? -      sed -n -e 's/^wrote *//p' $PKGTMP > $build_dir/llphysicsextensions_package +      if [ -r "${PKGTMP}" ] +      then +          cat "${PKGTMP}" >> "$build_log" +          eval $(cat "${PKGTMP}") # sets autobuild_package_{name,filename,md5} +          autobuild_package_filename="$(shell_path "${autobuild_package_filename}")" +          echo "${autobuild_package_filename}" > $build_dir/llphysicsextensions_package +      fi    else        echo "Do not provide llphysicsextensions_tpv for $variant"        llphysicsextensions_package="" @@ -143,7 +148,7 @@ build()    then      begin_section "Viewer$variant" -    "$AUTOBUILD" build --no-configure -c $variant +    "$autobuild" build --no-configure -c $variant      build_ok=$?      end_section "Viewer$variant" @@ -172,11 +177,22 @@ build()  # This is called from the branch independent script upon completion of all platform builds.  build_docs()  { -  begin_section Docs -  # Stub code to generate docs -  echo Hello world  > documentation.txt -  upload_item docs documentation.txt text/plain -  end_section Docs +  begin_section "Building Documentation" +  begin_section "Autobuild metadata" +  if [ -r "$build_dir/autobuild-package.xml" ] +  then +      upload_item docs "$build_dir/autobuild-package.xml" text/xml +  else +      record_event "no metadata at '$build_dir/autobuild-package.xml'" +  fi +  end_section "Autobuild metadata" +  if [ "$arch" != "Linux" ] +  then +      record_dependencies_graph # defined in build.sh +  else +      echo "TBD - skipping linux graph (probable python version dependency)" 1>&2 +  fi +  end_section "Building Documentation"  } @@ -200,33 +216,23 @@ fi  # Check to see if we're skipping the platform  eval '$build_'"$arch" || pass -if [ -z "$AUTOBUILD" ] +# ensure AUTOBUILD is in native path form for child processes +AUTOBUILD="$(native_path "$AUTOBUILD")" +# set "$autobuild" to cygwin path form for use locally in this script +autobuild="$(shell_path "$AUTOBUILD")" +if [ ! -x "$autobuild" ]  then -  export autobuild_dir="$here/../../../autobuild/bin/" -  if [ -d "$autobuild_dir" ] -  then -    export AUTOBUILD="$autobuild_dir"autobuild -    if [ -x "$AUTOBUILD" ] -    then -      # *HACK - bash doesn't know how to pass real pathnames to native windows python -      case "$arch" in -      CYGWIN) AUTOBUILD=$(cygpath -u $AUTOBUILD.cmd) ;; -      esac -    else -      record_failure "Not executable: $AUTOBUILD" -      exit 1 -    fi -  else -    record_failure "Not found: $autobuild_dir" -    exit 1 -  fi +  record_failure "AUTOBUILD not executable: '$autobuild'" +  exit 1  fi -# load autbuild provided shell functions and variables -eval "$("$AUTOBUILD" source_environment)" +# load autobuild provided shell functions and variables +eval "$("$autobuild" source_environment)"  # dump environment variables for debugging +begin_section "Environment"  env|sort +end_section "Environment"  # Now run the build  succeeded=true @@ -276,6 +282,8 @@ do    end_section "Do$variant"  done +build_docs +  # If we are building variants in parallel, wait, then collect results.  # This requires that the build dirs are variant specific  if $build_link_parallel && [ x"$build_processes" != x ] @@ -375,7 +383,6 @@ then    fi  fi -  # check status and upload results to S3  if $succeeded  then diff --git a/doc/contributions.txt b/doc/contributions.txt index 3720774c59..211d4fcf08 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -313,7 +313,9 @@ Ciaran Laval  Cinder Roxley      BUG-2326      BUG-3863 +    BUG-8786      OPEN-185 +    OPEN-282      STORM-1703      STORM-1948      STORM-1831 @@ -325,6 +327,7 @@ Cinder Roxley      STORM-2036      STORM-2037      STORM-2053 +    STORM-2113  Clara Young  Coaldust Numbers      VWR-1095 @@ -1229,8 +1232,10 @@ Sovereign Engineer      MAINT-2334      OPEN-189      STORM-1972 +    STORM-2113      OPEN-195      OPEN-217 +    OPEN-295  SpacedOut Frye  	VWR-34  	VWR-45 @@ -1272,6 +1277,7 @@ TankMaster Finesmith  	OPEN-140  	OPEN-142  	OPEN-154 +	OPEN-295  	STORM-1100  	STORM-1258  	STORM-1602 diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index 24ea59ca49..10692402a5 100755 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -20,12 +20,6 @@ if (NOT CMAKE_BUILD_TYPE)        "Build type.  One of: Debug Release RelWithDebInfo" FORCE)  endif (NOT CMAKE_BUILD_TYPE) -# For the library installation process; -# see cmake/Prebuild.cmake for the counterpart code. -if ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${CMAKE_BINARY_DIR}/temp/sentinel_installed") -  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/temp) -  file(WRITE ${CMAKE_BINARY_DIR}/temp/sentinel_installed "0") -endif ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${CMAKE_BINARY_DIR}/temp/sentinel_installed")  add_subdirectory(cmake)  add_subdirectory(${LIBS_OPEN_PREFIX}llaudio) @@ -60,6 +54,7 @@ add_subdirectory(${LIBS_OPEN_PREFIX}viewer_components)  # Legacy C++ tests. Build always, run if LL_TESTS is true.  add_subdirectory(${VIEWER_PREFIX}test) +if (ENABLE_MEDIA_PLUGINS)  # viewer media plugins  add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins) @@ -68,6 +63,7 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)      add_subdirectory(${VIEWER_PREFIX}test_apps/llplugintest)      add_subdirectory(${VIEWER_PREFIX}test_apps/llfbconnecttest)    endif (LL_TESTS AND NOT LINUX) +endif (ENABLE_MEDIA_PLUGINS)  if (LINUX)    add_subdirectory(${VIEWER_PREFIX}linux_crash_logger) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 52b0f4e8b4..7a320ffc59 100755 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -49,12 +49,13 @@ if (WINDOWS)    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP -D_SCL_SECURE_NO_WARNINGS=1"        CACHE STRING "C++ compiler debug options" FORCE)    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO  -      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob0 -D_SECURE_STL=0" +      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /Zo /MD /MP /Ob0 -D_SECURE_STL=0"        CACHE STRING "C++ compiler release-with-debug options" FORCE)    set(CMAKE_CXX_FLAGS_RELEASE -      "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" +      "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /Zo /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"        CACHE STRING "C++ compiler release options" FORCE) -  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE") +  # zlib has assembly-language object files incompatible with SAFESEH +  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE /SAFESEH:NO /NODEFAULTLIB:LIBCMT")    set(CMAKE_CXX_STANDARD_LIBRARIES "")    set(CMAKE_C_STANDARD_LIBRARIES "") @@ -190,22 +191,28 @@ if (DARWIN)    add_definitions(-DLL_DARWIN=1)    set(CMAKE_CXX_LINK_FLAGS "-Wl,-no_compact_unwind -Wl,-headerpad_max_install_names,-search_paths_first")    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}") -  set(DARWIN_extra_cstar_flags "-mlong-branch -g") +  set(DARWIN_extra_cstar_flags "-g")    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags}")    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  ${DARWIN_extra_cstar_flags}")    # NOTE: it's critical that the optimization flag is put in front.    # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")    set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}") -  if (XCODE_VERSION GREATER 4.2) -    set(ENABLE_SIGNING TRUE) -    set(SIGNING_IDENTITY "Developer ID Application: Linden Research, Inc.") -  endif (XCODE_VERSION GREATER 4.2) +  set(ENABLE_SIGNING TRUE) +  set(SIGNING_IDENTITY "Developer ID Application: Linden Research, Inc.")  endif (DARWIN)  if (LINUX OR DARWIN) -  set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs") +  if (CMAKE_CXX_COMPILER MATCHES ".*clang") +    set(CMAKE_COMPILER_IS_CLANGXX 1) +  endif (CMAKE_CXX_COMPILER MATCHES ".*clang") + +  if (CMAKE_COMPILER_IS_GNUCXX) +    set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs") +  elseif (CMAKE_COMPILER_IS_CLANGXX) +    set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs") +  endif()    if (NOT GCC_DISABLE_FATAL_WARNINGS)      set(GCC_WARNINGS "${GCC_WARNINGS} -Werror") diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake index 876b7f82a8..f95439245a 100755 --- a/indra/cmake/Audio.cmake +++ b/indra/cmake/Audio.cmake @@ -8,7 +8,7 @@ if (USESYSTEMLIBS)    pkg_check_modules(VORBISENC REQUIRED vorbisenc)    pkg_check_modules(VORBISFILE REQUIRED vorbisfile)  else (USESYSTEMLIBS) -  use_prebuilt_binary(ogg-vorbis) +  use_prebuilt_binary(ogg_vorbis)    set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)    set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})    set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS}) diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake index 5f6b644a15..ee670ac650 100755 --- a/indra/cmake/BerkeleyDB.cmake +++ b/indra/cmake/BerkeleyDB.cmake @@ -1,5 +1,5 @@  # -*- cmake -*- - +include(Prebuilt)  set(DB_FIND_QUIETLY ON)  set(DB_FIND_REQUIRED ON) diff --git a/indra/cmake/BuildPackagesInfo.cmake b/indra/cmake/BuildPackagesInfo.cmake new file mode 100644 index 0000000000..0f574ee39a --- /dev/null +++ b/indra/cmake/BuildPackagesInfo.cmake @@ -0,0 +1,10 @@ +# -*- cmake -*- +# Construct the version and copyright information based on package data. +include(Python) + +add_custom_command(OUTPUT packages-info.txt +  COMMENT Generating packages-info.txt for the about box +  MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/../autobuild.xml +  DEPENDS ${CMAKE_SOURCE_DIR}/../scripts/packages-formatter.py +  COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/../scripts/packages-formatter.py > packages-info.txt +  ) diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 9abdb4b146..cd7da5d6c1 100755 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -23,7 +23,7 @@ set(cmake_SOURCE_FILES      DirectX.cmake      DragDrop.cmake      EXPAT.cmake -    ExamplePlugin.cmake +##  ExamplePlugin.cmake      FindAPR.cmake      FindAutobuild.cmake      FindBerkeleyDB.cmake @@ -45,9 +45,9 @@ set(cmake_SOURCE_FILES      GLEXT.cmake      GLH.cmake      GLOD.cmake -    GStreamer010Plugin.cmake +##  GStreamer010Plugin.cmake      GetPrerequisites_2_8.cmake -    Glui.cmake +##  Glui.cmake      Glut.cmake      GoogleBreakpad.cmake      GoogleMock.cmake @@ -82,18 +82,18 @@ set(cmake_SOURCE_FILES      LLXML.cmake      LScript.cmake      Linking.cmake -    MediaPluginBase.cmake +##  MediaPluginBase.cmake      NDOF.cmake      OPENAL.cmake      OpenGL.cmake      OpenJPEG.cmake      OpenSSL.cmake      PNG.cmake -    PluginAPI.cmake +##  PluginAPI.cmake      Prebuilt.cmake      PulseAudio.cmake      Python.cmake -    QuickTimePlugin.cmake +##  QuickTimePlugin.cmake      TemplateCheck.cmake      Tut.cmake      UI.cmake @@ -102,7 +102,7 @@ set(cmake_SOURCE_FILES      Variables.cmake      ViewerMiscLibs.cmake      VisualLeakDetector.cmake -    WebKitLibPlugin.cmake +##  WebKitLibPlugin.cmake      XmlRpcEpi.cmake      ZLIB.cmake      ) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 28202f85d6..84947adaae 100755 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -66,126 +66,80 @@ if(WINDOWS)        set(release_files ${release_files} fmodex.dll)      endif (FMODEX) -#******************************* -# Copy MS C runtime dlls, required for packaging. -# *TODO - Adapt this to support VC9 -if (MSVC80) -    FIND_PATH(debug_msvc8_redist_path msvcr80d.dll -        PATHS -        ${MSVC_DEBUG_REDIST_PATH} -         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT -        NO_DEFAULT_PATH -        NO_DEFAULT_PATH -        ) - -    if(EXISTS ${debug_msvc8_redist_path}) -        set(debug_msvc8_files -            msvcr80d.dll -            msvcp80d.dll -            Microsoft.VC80.DebugCRT.manifest -            ) - -        copy_if_different( -            ${debug_msvc8_redist_path} -            "${SHARED_LIB_STAGING_DIR_DEBUG}" -            out_targets -            ${debug_msvc8_files} -            ) -        set(third_party_targets ${third_party_targets} ${out_targets}) - -    endif (EXISTS ${debug_msvc8_redist_path}) - -    FIND_PATH(release_msvc8_redist_path msvcr80.dll -        PATHS -        ${MSVC_REDIST_PATH} -         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT -        NO_DEFAULT_PATH -        NO_DEFAULT_PATH -        ) - -    if(EXISTS ${release_msvc8_redist_path}) -        set(release_msvc8_files -            msvcr80.dll -            msvcp80.dll -            Microsoft.VC80.CRT.manifest -            ) - -        copy_if_different( -            ${release_msvc8_redist_path} -            "${SHARED_LIB_STAGING_DIR_RELEASE}" -            out_targets -            ${release_msvc8_files} -            ) -        set(third_party_targets ${third_party_targets} ${out_targets}) - -        copy_if_different( -            ${release_msvc8_redist_path} -            "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" -            out_targets -            ${release_msvc8_files} -            ) -        set(third_party_targets ${third_party_targets} ${out_targets}) -           -    endif (EXISTS ${release_msvc8_redist_path}) -elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010 -    FIND_PATH(debug_msvc10_redist_path msvcr100d.dll +    #******************************* +    # Copy MS C runtime dlls, required for packaging. +    # *TODO - Adapt this to support VC9 +    if (MSVC80) +        set(MSVC_VER 80) +        set(MSVC_VERDOT 8.0) +    elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010 +        set(MSVC_VER 100) +        set(MSVC_VERDOT 10.0) +    elseif (MSVC_VERSION EQUAL 1800) # VisualStudio 2013, which is (sigh) VS 12 +        set(MSVC_VER 120) +        set(MSVC_VERDOT 12.0) +    else (MSVC80) +        MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake") +    endif (MSVC80) + +    FIND_PATH(debug_msvc_redist_path msvcr${MSVC_VER}d.dll          PATHS          ${MSVC_DEBUG_REDIST_PATH} -         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC100.DebugCRT +         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC${MSVC_VER}.DebugCRT          [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64          [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32          NO_DEFAULT_PATH          ) -    if(EXISTS ${debug_msvc10_redist_path}) -        set(debug_msvc10_files -            msvcr100d.dll -            msvcp100d.dll +    if(EXISTS ${debug_msvc_redist_path}) +        set(debug_msvc_files +            msvcr${MSVC_VER}d.dll +            msvcp${MSVC_VER}d.dll              )          copy_if_different( -            ${debug_msvc10_redist_path} +            ${debug_msvc_redist_path}              "${SHARED_LIB_STAGING_DIR_DEBUG}"              out_targets -            ${debug_msvc10_files} +            ${debug_msvc_files}              )          set(third_party_targets ${third_party_targets} ${out_targets})      endif () -    FIND_PATH(release_msvc10_redist_path msvcr100.dll +    FIND_PATH(release_msvc_redist_path msvcr${MSVC_VER}.dll          PATHS          ${MSVC_REDIST_PATH} -         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC100.CRT +         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC${MSVC_VER}.CRT          [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64          [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32          NO_DEFAULT_PATH          ) -    if(EXISTS ${release_msvc10_redist_path}) -        set(release_msvc10_files -            msvcr100.dll -            msvcp100.dll +    if(EXISTS ${release_msvc_redist_path}) +        set(release_msvc_files +            msvcr${MSVC_VER}.dll +            msvcp${MSVC_VER}.dll              )          copy_if_different( -            ${release_msvc10_redist_path} +            ${release_msvc_redist_path}              "${SHARED_LIB_STAGING_DIR_RELEASE}"              out_targets -            ${release_msvc10_files} +            ${release_msvc_files}              )          set(third_party_targets ${third_party_targets} ${out_targets})          copy_if_different( -            ${release_msvc10_redist_path} +            ${release_msvc_redist_path}              "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"              out_targets -            ${release_msvc10_files} +            ${release_msvc_files}              )          set(third_party_targets ${third_party_targets} ${out_targets})      endif () -endif (MSVC80) +  elseif(DARWIN)      set(SHARED_LIB_STAGING_DIR_DEBUG            "${SHARED_LIB_STAGING_DIR}/Debug/Resources") diff --git a/indra/cmake/DBusGlib.cmake b/indra/cmake/DBusGlib.cmake index d148a35a5b..5e46b6711a 100755 --- a/indra/cmake/DBusGlib.cmake +++ b/indra/cmake/DBusGlib.cmake @@ -7,7 +7,7 @@ if (USESYSTEMLIBS)    pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)  elseif (LINUX) -  use_prebuilt_binary(dbusglib) +  use_prebuilt_binary(dbus_glib)    set(DBUSGLIB_FOUND ON FORCE BOOL)    set(DBUSGLIB_INCLUDE_DIRS        ${LIBS_PREBUILT_DIR}/include/dbus diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake index 4b5fd484ae..ea5ad6d108 100755 --- a/indra/cmake/FindAutobuild.cmake +++ b/indra/cmake/FindAutobuild.cmake @@ -4,14 +4,18 @@  #  # Output variables:  # -#   AUTOBUILD_EXECUTABLE - path to autobuild or pautobuild executable +#   AUTOBUILD_EXECUTABLE - path to autobuild executable + -# *TODO - if cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var -# update this to check for that case  IF (NOT AUTOBUILD_EXECUTABLE) + +  # If cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var +  IF (DEFINED ENV{AUTOBUILD}) +    SET(AUTOBUILD_EXECUTABLE $ENV{AUTOBUILD}) +  ELSE (DEFINED ENV{AUTOBUILD})      IF(WIN32) -      SET(AUTOBUILD_EXE_NAMES autobuild.cmd autobuild.exe) +      SET(AUTOBUILD_EXE_NAMES autobuild.exe autobuild.cmd)      ELSE(WIN32)        SET(AUTOBUILD_EXE_NAMES autobuild)      ENDIF(WIN32) @@ -21,21 +25,19 @@ IF (NOT AUTOBUILD_EXECUTABLE)        AUTOBUILD_EXECUTABLE         NAMES ${AUTOBUILD_EXE_NAMES}        PATHS  -    ENV PATH -    ${CMAKE_SOURCE_DIR}/..  -    ${CMAKE_SOURCE_DIR}/../.. -    ${CMAKE_SOURCE_DIR}/../../.. +        ENV PATH +        ${CMAKE_SOURCE_DIR}/..  +        ${CMAKE_SOURCE_DIR}/../.. +        ${CMAKE_SOURCE_DIR}/../../..        PATH_SUFFIXES "/autobuild/bin/"      ) +  ENDIF (DEFINED ENV{AUTOBUILD}) -    IF (AUTOBUILD_EXECUTABLE) -      GET_FILENAME_COMPONENT(_autobuild_name ${AUTOBUILD_EXECUTABLE} NAME_WE) -      MESSAGE(STATUS "Using autobuild at: ${AUTOBUILD_EXECUTABLE}") -    ELSE (AUTOBUILD_EXECUTABLE) -      IF (AUTOBUILD_FIND_REQUIRED) -    MESSAGE(FATAL_ERROR "Could not find autobuild executable") -      ENDIF (AUTOBUILD_FIND_REQUIRED) -    ENDIF (AUTOBUILD_EXECUTABLE) +  IF (NOT AUTOBUILD_EXECUTABLE) +    IF (AUTOBUILD_FIND_REQUIRED) +      MESSAGE(FATAL_ERROR "Could not find autobuild executable") +    ENDIF (AUTOBUILD_FIND_REQUIRED) +  ENDIF (NOT AUTOBUILD_EXECUTABLE) -    MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE) +  MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE)  ENDIF (NOT AUTOBUILD_EXECUTABLE) diff --git a/indra/cmake/GLEXT.cmake b/indra/cmake/GLEXT.cmake index a749644202..2a08c8fbae 100644 --- a/indra/cmake/GLEXT.cmake +++ b/indra/cmake/GLEXT.cmake @@ -2,7 +2,9 @@  include(Prebuilt)  if (NOT USESYSTEMLIBS) -  use_prebuilt_binary(glext) -  use_prebuilt_binary(glh_linear) +  if (WINDOWS OR LINUX) +    use_prebuilt_binary(glext) +  endif (WINDOWS OR LINUX) +  use_prebuilt_binary(glh-linear)    set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)  endif (NOT USESYSTEMLIBS) diff --git a/indra/cmake/GLH.cmake b/indra/cmake/GLH.cmake index d5262f2efa..d0992f57b8 100755 --- a/indra/cmake/GLH.cmake +++ b/indra/cmake/GLH.cmake @@ -7,5 +7,5 @@ set(GLH_FIND_QUIETLY TRUE)  if (USESYSTEMLIBS)    include(FindGLH)  else (USESYSTEMLIBS) -  use_prebuilt_binary(glh_linear) +  use_prebuilt_binary(glh-linear)  endif (USESYSTEMLIBS) diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake index 3683768af9..a347eb6fee 100755 --- a/indra/cmake/GLOD.cmake +++ b/indra/cmake/GLOD.cmake @@ -2,7 +2,7 @@  include(Prebuilt)  if (NOT USESYSTEMLIBS) -  use_prebuilt_binary(GLOD) +  use_prebuilt_binary(glod)  endif (NOT USESYSTEMLIBS)  set(GLOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake index cac072988e..5a00546927 100755 --- a/indra/cmake/GoogleMock.cmake +++ b/indra/cmake/GoogleMock.cmake @@ -2,20 +2,20 @@  include(Prebuilt)  include(Linking) -use_prebuilt_binary(gmock) +use_prebuilt_binary(googlemock) -set(GOOGLEMOCK_INCLUDE_DIRS  +set(GOOGLEMOCK_INCLUDE_DIRS      ${LIBS_PREBUILT_DIR}/include)  if (LINUX)      # VWR-24366: gmock is underlinked, it needs gtest. -    set(GOOGLEMOCK_LIBRARIES  +    set(GOOGLEMOCK_LIBRARIES          gmock -Wl,--no-as-needed          gtest -Wl,--as-needed)  elseif(WINDOWS) -    set(GOOGLEMOCK_LIBRARIES  +    set(GOOGLEMOCK_LIBRARIES          gmock) -    set(GOOGLEMOCK_INCLUDE_DIRS  +    set(GOOGLEMOCK_INCLUDE_DIRS          ${LIBS_PREBUILT_DIR}/include          ${LIBS_PREBUILT_DIR}/include/gmock          ${LIBS_PREBUILT_DIR}/include/gmock/boost/tr1/tr1) diff --git a/indra/cmake/Havok.cmake b/indra/cmake/Havok.cmake index 8b7f01d20b..99e7334118 100755 --- a/indra/cmake/Havok.cmake +++ b/indra/cmake/Havok.cmake @@ -1,5 +1,5 @@  # -*- cmake -*- - +include(Prebuilt)  if(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)  set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES") @@ -61,14 +61,14 @@ foreach(HAVOK_LIB ${HAVOK_LIBS})              set(relwithdebinfo_dir "${HAVOK_RELWITHDEBINFO_LIBRARY_PATH}/${HAVOK_LIB}")      # Try to avoid extracting havok library each time we run cmake. -    if("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted") -      file(READ ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted "havok_${HAVOK_LIB}_extracted") +    if("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted") +      file(READ ${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted "havok_${HAVOK_LIB}_extracted")        if(DEBUG_PREBUILT)          message(STATUS "havok_${HAVOK_LIB}_extracted: \"${havok_${HAVOK_LIB}_extracted}\"")        endif(DEBUG_PREBUILT) -    endif("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted") +    endif("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted") -    if(${CMAKE_BINARY_DIR}/temp/havok-source_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0) +    if(${PREBUILD_TRACKING_DIR}/havok_source_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)        if(DEBUG_PREBUILT)          MESSAGE(STATUS "Extracting ${HAVOK_LIB}...")        endif(DEBUG_PREBUILT) @@ -109,9 +109,9 @@ foreach(HAVOK_LIB ${HAVOK_LIBS})        # Just assume success for now.        set(havok_${HAVOK_LIB}_extracted 0) -      file(WRITE ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted "${havok_${HAVOK_LIB}_extracted}") +      file(WRITE ${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted "${havok_${HAVOK_LIB}_extracted}") -    endif(${CMAKE_BINARY_DIR}/temp/havok-source_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0) +    endif(${PREBUILD_TRACKING_DIR}/havok_source_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)              file(GLOB extracted_debug "${debug_dir}/*.o")              file(GLOB extracted_release "${release_dir}/*.o") diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake index 0aab2d6634..079619adf8 100755 --- a/indra/cmake/JsonCpp.cmake +++ b/indra/cmake/JsonCpp.cmake @@ -11,10 +11,10 @@ else (USESYSTEMLIBS)    use_prebuilt_binary(jsoncpp)    if (WINDOWS)      set(JSONCPP_LIBRARIES  -      debug json_vc100debug_libmt.lib -      optimized json_vc100_libmt) +      debug json_libmdd.lib +      optimized json_libmd.lib)    elseif (DARWIN) -    set(JSONCPP_LIBRARIES libjson_linux-gcc-4.0.1_libmt.a) +    set(JSONCPP_LIBRARIES libjson_darwin_libmt.a)    elseif (LINUX)      set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)    endif (WINDOWS) diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index 804624f5ec..ac5c5c6a2a 100644 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -137,7 +137,7 @@ INCLUDE(GoogleMock)      #      # Setup test targets      # -    GET_TARGET_PROPERTY(TEST_EXE PROJECT_${project}_TEST_${name} LOCATION) +    SET(TEST_EXE $<TARGET_FILE:PROJECT_${project}_TEST_${name}>)      SET(TEST_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/PROJECT_${project}_TEST_${name}_ok.txt)      SET(TEST_CMD ${TEST_EXE} --touch=${TEST_OUTPUT} --sourcedir=${CMAKE_CURRENT_SOURCE_DIR}) @@ -225,7 +225,7 @@ FUNCTION(LL_ADD_INTEGRATION_TEST    # Create the test running command    SET(test_command ${ARGN}) -  GET_TARGET_PROPERTY(TEST_EXE INTEGRATION_TEST_${testname} LOCATION) +  SET(TEST_EXE $<TARGET_FILE:INTEGRATION_TEST_${testname}>)    LIST(FIND test_command "{}" test_exe_pos)    IF(test_exe_pos LESS 0)      # The {} marker means "the full pathname of the test executable." diff --git a/indra/cmake/LLAppearanceUtility.cmake b/indra/cmake/LLAppearanceUtility.cmake index bea45543de..709b91c134 100644 --- a/indra/cmake/LLAppearanceUtility.cmake +++ b/indra/cmake/LLAppearanceUtility.cmake @@ -4,7 +4,7 @@ include(Prebuilt)  # Linux proprietary build only  if (INSTALL_PROPRIETARY)      if(LINUX) -        use_prebuilt_binary(llappearanceutility-source) +        use_prebuilt_binary(llappearance_utility)          set(LLAPPEARANCEUTILITY_SRC_DIR ${LIBS_PREBUILT_DIR}/llappearanceutility/src)          set(LLAPPEARANCEUTILITY_BIN_DIR ${CMAKE_BINARY_DIR}/llappearanceutility)      endif (LINUX) diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake index 14dd67f32f..a3c1c871aa 100755 --- a/indra/cmake/LLSharedLibs.cmake +++ b/indra/cmake/LLSharedLibs.cmake @@ -1,7 +1,7 @@  # ll_deploy_sharedlibs_command  # target_exe: the cmake target of the executable for which the shared libs will be deployed.  macro(ll_deploy_sharedlibs_command target_exe)  -  get_target_property(TARGET_LOCATION ${target_exe} LOCATION) +  set(TARGET_LOCATION $<TARGET_FILE:${target_exe}>)    get_filename_component(OUTPUT_PATH ${TARGET_LOCATION} PATH)    if(DARWIN) diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index 74fe3f1137..c95f0c3702 100755 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -6,7 +6,7 @@ set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")  include(Variables)  set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib) -set(ARCH_PREBUILT_DIRS_PLUGINS ${AUTOBUILD_INSTALL_DIR}/plugins) +##set(ARCH_PREBUILT_DIRS_PLUGINS ${AUTOBUILD_INSTALL_DIR}/plugins)  set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release)  set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug)  if (WINDOWS) diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake index e72845db53..388df16a52 100755 --- a/indra/cmake/NDOF.cmake +++ b/indra/cmake/NDOF.cmake @@ -8,7 +8,11 @@ if (NDOF)      set(NDOF_FIND_REQUIRED ON)      include(FindNDOF)    else (USESYSTEMLIBS) -    use_prebuilt_binary(ndofdev) +    if (WINDOWS OR DARWIN) +      use_prebuilt_binary(libndofdev) +    elseif (LINUX) +      use_prebuilt_binary(open-libndofdev) +    endif (WINDOWS OR DARWIN)      if (WINDOWS)        set(NDOF_LIBRARY libndofdev) diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake index c084d68de7..1bbfff6f98 100755 --- a/indra/cmake/OPENAL.cmake +++ b/indra/cmake/OPENAL.cmake @@ -16,7 +16,7 @@ if (OPENAL)      pkg_check_modules(OPENAL_LIB REQUIRED openal)      pkg_check_modules(FREEALUT_LIB REQUIRED freealut)    else (USESYSTEMLIBS) -    use_prebuilt_binary(openal_soft) +    use_prebuilt_binary(openal)    endif (USESYSTEMLIBS)    if(WINDOWS)      set(OPENAL_LIBRARIES  @@ -30,7 +30,3 @@ if (OPENAL)      )    endif()  endif (OPENAL) - -if (OPENAL) -  message(STATUS "Building with OpenAL audio support") -endif (OPENAL) diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake index e548805148..98013da2f2 100755 --- a/indra/cmake/Prebuilt.cmake +++ b/indra/cmake/Prebuilt.cmake @@ -8,44 +8,50 @@ if(INSTALL_PROPRIETARY)    include(FindSCP)  endif(INSTALL_PROPRIETARY) +set(PREBUILD_TRACKING_DIR ${AUTOBUILD_INSTALL_DIR}/cmake_tracking) +# For the library installation process; +# see cmake/Prebuild.cmake for the counterpart code. +if ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${PREBUILD_TRACKING_DIR}/sentinel_installed") +  file(MAKE_DIRECTORY ${PREBUILD_TRACKING_DIR}) +  file(WRITE ${PREBUILD_TRACKING_DIR}/sentinel_installed "0") +endif ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${PREBUILD_TRACKING_DIR}/sentinel_installed") +  # The use_prebuilt_binary macro handles automated installation of package  # dependencies using autobuild.  The goal is that 'autobuild install' should  # only be run when we know we need to install a new package.  This should be  # the case in a clean checkout, or if autobuild.xml has been updated since the -# last run (encapsulated by the file ${CMAKE_BINARY_DIR}/temp/sentinel_installed), +# last run (encapsulated by the file ${PREBUILD_TRACKING_DIR}/sentinel_installed),  # or if a previous attempt to install the package has failed (the exit status  # of previous attempts is serialized in the file -# ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) +# ${PREBUILD_TRACKING_DIR}/${_binary}_installed)  macro (use_prebuilt_binary _binary)    if (NOT DEFINED USESYSTEMLIBS_${_binary})      set(USESYSTEMLIBS_${_binary} ${USESYSTEMLIBS})    endif (NOT DEFINED USESYSTEMLIBS_${_binary})    if (NOT USESYSTEMLIBS_${_binary}) -    if("${${_binary}_installed}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/${_binary}_installed") -      file(READ ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${_binary}_installed") +    if("${${_binary}_installed}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/${_binary}_installed") +      file(READ ${PREBUILD_TRACKING_DIR}/${_binary}_installed "${_binary}_installed")        if(DEBUG_PREBUILT)          message(STATUS "${_binary}_installed: \"${${_binary}_installed}\"")        endif(DEBUG_PREBUILT) -    endif("${${_binary}_installed}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/${_binary}_installed") +    endif("${${_binary}_installed}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/${_binary}_installed") -    if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0) +    if(${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)        if(DEBUG_PREBUILT)          message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install          --install-dir=${AUTOBUILD_INSTALL_DIR} -        --skip-license-check          ${_binary} ")        endif(DEBUG_PREBUILT)        execute_process(COMMAND "${AUTOBUILD_EXECUTABLE}"          install          --install-dir=${AUTOBUILD_INSTALL_DIR} -        --skip-license-check          ${_binary}          WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"          RESULT_VARIABLE ${_binary}_installed          ) -      file(WRITE ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${${_binary}_installed}") -    endif(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0) +      file(WRITE ${PREBUILD_TRACKING_DIR}/${_binary}_installed "${${_binary}_installed}") +    endif(${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)      if(NOT ${_binary}_installed EQUAL 0)        message(FATAL_ERROR diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake index 012f4e20d8..c08e153ee3 100755 --- a/indra/cmake/QuickTimePlugin.cmake +++ b/indra/cmake/QuickTimePlugin.cmake @@ -2,7 +2,9 @@  if(INSTALL_PROPRIETARY)    include(Prebuilt) -  use_prebuilt_binary(quicktime) +  if (WINDOWS) +    use_prebuilt_binary(quicktime) +  endif (WINDOWS)  endif(INSTALL_PROPRIETARY)  if (DARWIN) diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake index 58acdc22bd..31174209a3 100755 --- a/indra/cmake/UI.cmake +++ b/indra/cmake/UI.cmake @@ -32,7 +32,10 @@ if (USESYSTEMLIBS)      add_definitions(${${pkg}_CFLAGS_OTHERS})    endforeach(pkg)  else (USESYSTEMLIBS) -  use_prebuilt_binary(gtk-atk-pango-glib) +  if (LINUX OR WINDOWS) +    use_prebuilt_binary(gtk-atk-pango-glib) +  endif (LINUX OR WINDOWS) +    if (LINUX)      set(UI_LIBRARIES          atk-1.0 diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index 963b1bd386..76d92d7a48 100755 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -26,6 +26,7 @@ set(VIEWER_PREFIX)  set(INTEGRATION_TESTS_PREFIX)  set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation")  set(INCREMENTAL_LINK OFF CACHE BOOL "Use incremental linking on win32 builds (enable for faster links on some machines)") +set(ENABLE_MEDIA_PLUGINS OFF CACHE BOOL "Turn off building media plugins if they are imported by third-party library mechanism")  if(LIBS_CLOSED_DIR)    file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR) @@ -129,44 +130,25 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")  if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")    set(DARWIN 1) -  execute_process( -    COMMAND sh -c "xcodebuild -version | grep Xcode  | cut -d ' ' -f2 | cut -d'.' -f1-2" -    OUTPUT_VARIABLE XCODE_VERSION ) - -  # To support a different SDK update these Xcode settings: -  if (XCODE_VERSION GREATER 4.5) -    set(CMAKE_OSX_DEPLOYMENT_TARGET 10.8) -    set(CMAKE_OSX_SYSROOT macosx10.8) -  else (XCODE_VERSION GREATER 4.5) -  if (XCODE_VERSION GREATER 4.2) -    set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6) -    set(CMAKE_OSX_SYSROOT macosx10.7) -  else (XCODE_VERSION GREATER 4.2) -    set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6) -    set(CMAKE_OSX_SYSROOT macosx10.7) -  endif (XCODE_VERSION GREATER 4.2) -  endif (XCODE_VERSION GREATER 4.5) - -  set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42") +  # now we only support Xcode 6.0 using 10.9 (Mavericks), minimum OS 10.7 (Lion) +  set(XCODE_VERSION 6.0) +  set(CMAKE_OSX_DEPLOYMENT_TARGET 10.7) +  set(CMAKE_OSX_SYSROOT macosx10.9) + +  set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0") +  set(CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL 3) +  set(CMAKE_XCODE_ATTRIBUTE_GCC_STRICT_ALIASING NO) +  set(CMAKE_XCODE_ATTRIBUTE_GCC_FAST_MATH NO) +  set(CMAKE_XCODE_ATTRIBUTE_CLANG_X86_VECTOR_INSTRUCTIONS ssse3) +  set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")    set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym) -  # NOTE: To attempt an i386/PPC Universal build, add this on the configure line: -  # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc' -  # Build only for i386 by default, system default on MacOSX 10.6 is x86_64 +  # Build only for i386 by default, system default on MacOSX 10.6+ is x86_64    if (NOT CMAKE_OSX_ARCHITECTURES) -    set(CMAKE_OSX_ARCHITECTURES i386) +    set(CMAKE_OSX_ARCHITECTURES "i386")    endif (NOT CMAKE_OSX_ARCHITECTURES) -  if (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") -    set(ARCH universal) -  else (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") -    if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") -      set(ARCH ppc) -    else (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") -      set(ARCH i386) -    endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") -  endif (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") - +  set(ARCH ${CMAKE_OSX_ARCHITECTURES})    set(LL_ARCH ${ARCH}_darwin)    set(LL_ARCH_DIR universal-darwin)    set(WORD_SIZE 32) @@ -177,10 +159,8 @@ set(GRID agni CACHE STRING "Target Grid")  set(VIEWER_CHANNEL "Second Life Test" CACHE STRING "Viewer Channel Name") -if (XCODE_VERSION GREATER 4.2) -  set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer") -  set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.") -endif (XCODE_VERSION GREATER 4.2) +set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer") +set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.")  set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")  set(USESYSTEMLIBS OFF CACHE BOOL "Use libraries from your system rather than Linden-supplied prebuilt libraries.") diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index d4be24799f..fc5bdedb5a 100755 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -2,9 +2,11 @@  include(Prebuilt)  if (NOT USESYSTEMLIBS) +  if (LINUX) +    use_prebuilt_binary(libuuid) +    use_prebuilt_binary(fontconfig) +  endif (LINUX)    use_prebuilt_binary(libhunspell) -  use_prebuilt_binary(libuuid)    use_prebuilt_binary(slvoice) -  use_prebuilt_binary(fontconfig)  endif(NOT USESYSTEMLIBS) diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake index 3a0caa0a06..8c3790ea89 100755 --- a/indra/cmake/XmlRpcEpi.cmake +++ b/indra/cmake/XmlRpcEpi.cmake @@ -9,7 +9,7 @@ if (USESYSTEMLIBS)  else (USESYSTEMLIBS)      use_prebuilt_binary(xmlrpc-epi)      if (WINDOWS) -        set(XMLRPCEPI_LIBRARIES  +        set(XMLRPCEPI_LIBRARIES              debug xmlrpc-epid              optimized xmlrpc-epi          ) diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py index a2ef61c8fd..582185e5ab 100755 --- a/indra/cmake/run_build_test.py +++ b/indra/cmake/run_build_test.py @@ -46,6 +46,7 @@ $/LicenseInfo$  import os  import sys +import errno  import signal  import subprocess @@ -112,7 +113,23 @@ def main(command, libpath=[], vars={}):      print "Running: %s" % " ".join(command)      # Make sure we see all relevant output *before* child-process output.      sys.stdout.flush() -    return subprocess.call(command) +    try: +        return subprocess.call(command) +    except OSError as err: +        # If the caller is trying to execute a test program that doesn't +        # exist, we want to produce a reasonable error message rather than a +        # traceback. This happens when the build is halted by errors, but +        # CMake tries to proceed with testing anyway <eyeroll/>. However, do +        # NOT attempt to handle any error but "doesn't exist." +        if err.errno != errno.ENOENT: +            raise +        # In practice, the pathnames into CMake's build tree are so long as to +        # obscure the name of the test program. Just print its basename. +        print "No such program %s; check for preceding build errors" % \ +              os.path.basename(command[0]) +        # What rc should we simulate for missing executable? Windows produces +        # 9009. +        return 9009  # swiped from vita, sigh, seems like a Bad Idea to introduce dependency  def translate_rc(rc): diff --git a/indra/llappearance/llpolymorph.h b/indra/llappearance/llpolymorph.h index 7e712f9e94..3c2c68079c 100644 --- a/indra/llappearance/llpolymorph.h +++ b/indra/llappearance/llpolymorph.h @@ -182,6 +182,16 @@ public:  	void	applyMask(U8 *maskData, S32 width, S32 height, S32 num_components, BOOL invert);  	void	addPendingMorphMask() { mNumMorphMasksPending++; } +	void* operator new(size_t size) +	{ +		return ll_aligned_malloc_16(size); +	} + +	void operator delete(void* ptr) +	{ +		ll_aligned_free_16(ptr); +	} +  protected:  	LLPolyMorphTarget(const LLPolyMorphTarget& pOther); diff --git a/indra/llappearance/llpolyskeletaldistortion.h b/indra/llappearance/llpolyskeletaldistortion.h index ea2adb8a87..ab1a132d19 100644 --- a/indra/llappearance/llpolyskeletaldistortion.h +++ b/indra/llappearance/llpolyskeletaldistortion.h @@ -73,6 +73,19 @@ public:  	/*virtual*/ BOOL parseXml(LLXmlTreeNode* node); + + +	void* operator new(size_t size) +	{ +		return ll_aligned_malloc_16(size); +	} + +	void operator delete(void* ptr) +	{ +		ll_aligned_free_16(ptr); +	} + +  protected:  	typedef std::vector<LLPolySkeletalBoneInfo> bone_info_list_t;  	bone_info_list_t mBoneInfoList; diff --git a/indra/llappearance/lltexturemanagerbridge.h b/indra/llappearance/lltexturemanagerbridge.h index 4b814b522d..101704b162 100644 --- a/indra/llappearance/lltexturemanagerbridge.h +++ b/indra/llappearance/lltexturemanagerbridge.h @@ -35,6 +35,8 @@  class LLTextureManagerBridge  {  public: +    virtual ~LLTextureManagerBridge() {} +  	virtual LLPointer<LLGLTexture> getLocalTexture(BOOL usemipmaps = TRUE, BOOL generate_gl_tex = TRUE) = 0;  	virtual LLPointer<LLGLTexture> getLocalTexture(const U32 width, const U32 height, const U8 components, BOOL usemipmaps, BOOL generate_gl_tex = TRUE) = 0;  	virtual LLGLTexture* getFetchedTexture(const LLUUID &image_id) = 0; diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp index 4bce3f99ed..5ca9f55ac8 100755 --- a/indra/llappearance/llwearable.cpp +++ b/indra/llappearance/llwearable.cpp @@ -86,10 +86,10 @@ LLAssetType::EType LLWearable::getAssetType() const  	return LLWearableType::getAssetType(mType);  } -BOOL LLWearable::exportFile(LLFILE* fp) const +BOOL LLWearable::exportFile(const std::string& filename) const  { -	llofstream ofs(fp); -	return exportStream(ofs); +	llofstream ofs(filename.c_str(), std::ios_base::out | std::ios_base::trunc | std::ios_base::binary); +	return ofs.is_open() && exportStream(ofs);  }  // virtual @@ -201,10 +201,11 @@ void LLWearable::createLayers(S32 te, LLAvatarAppearance *avatarp)  	}  } -LLWearable::EImportResult LLWearable::importFile(LLFILE* fp, LLAvatarAppearance* avatarp ) +LLWearable::EImportResult LLWearable::importFile(const std::string& filename, +												 LLAvatarAppearance* avatarp )  { -	llifstream ifs(fp); -	return importStream(ifs, avatarp); +	llifstream ifs(filename.c_str(), std::ios_base::in | std::ios_base::binary); +	return (! ifs.is_open())? FAILURE : importStream(ifs, avatarp);  }  // virtual diff --git a/indra/llappearance/llwearable.h b/indra/llappearance/llwearable.h index 406fc7e883..875c2932f1 100755 --- a/indra/llappearance/llwearable.h +++ b/indra/llappearance/llwearable.h @@ -81,8 +81,8 @@ public:  		SUCCESS,  		BAD_HEADER  	}; -	BOOL				exportFile(LLFILE* file) const; -	EImportResult		importFile(LLFILE* file, LLAvatarAppearance* avatarp ); +	BOOL				exportFile(const std::string& filename) const; +	EImportResult		importFile(const std::string& filename, LLAvatarAppearance* avatarp );  	virtual BOOL				exportStream( std::ostream& output_stream ) const;  	virtual EImportResult		importStream( std::istream& input_stream, LLAvatarAppearance* avatarp ); @@ -113,6 +113,9 @@ public:  	// Update the baked texture hash.  	virtual void		addToBakedTextureHash(LLMD5& hash) const = 0; +	typedef std::map<S32, LLVisualParam *>    visual_param_index_map_t; +	visual_param_index_map_t mVisualParamIndexMap; +  protected:  	typedef std::map<S32, LLLocalTextureObject*> te_map_t;  	void				syncImages(te_map_t &src, te_map_t &dst); @@ -132,9 +135,6 @@ protected:  	typedef std::map<S32, F32> param_map_t;  	param_map_t mSavedVisualParamMap; // last saved version of visual params -	typedef std::map<S32, LLVisualParam *>    visual_param_index_map_t; -	visual_param_index_map_t mVisualParamIndexMap; -  	te_map_t mTEMap;				// maps TE to LocalTextureObject  	te_map_t mSavedTEMap;			// last saved version of TEMap  }; diff --git a/indra/llappearance/llwearabledata.cpp b/indra/llappearance/llwearabledata.cpp index cf1ee435a8..5dfb201fc4 100755 --- a/indra/llappearance/llwearabledata.cpp +++ b/indra/llappearance/llwearabledata.cpp @@ -173,8 +173,9 @@ bool LLWearableData::swapWearables(const LLWearableType::EType type, U32 index_a  	}  	wearableentry_vec_t& wearable_vec = wearable_iter->second; -	if (0 > index_a || index_a >= wearable_vec.size()) return false; -	if (0 > index_b || index_b >= wearable_vec.size()) return false; +	// removed 0 > index_a and index_b comparisions - can never be true +	if (index_a >= wearable_vec.size()) return false; +	if (index_b >= wearable_vec.size()) return false;  	LLWearable* wearable = wearable_vec[index_a];  	wearable_vec[index_a] = wearable_vec[index_b]; diff --git a/indra/llappearance/llwearabletype.h b/indra/llappearance/llwearabletype.h index e51e6731d3..7c9594644d 100644 --- a/indra/llappearance/llwearabletype.h +++ b/indra/llappearance/llwearabletype.h @@ -35,6 +35,9 @@  class LLTranslationBridge  {  public: +	// clang needs this to be happy +	virtual ~LLTranslationBridge() {} +  	virtual std::string getString(const std::string &xml_desc) = 0;  }; diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt index 1b2bdb9888..e943dd5d5c 100755 --- a/indra/llaudio/CMakeLists.txt +++ b/indra/llaudio/CMakeLists.txt @@ -3,7 +3,6 @@  project(llaudio)  include(00-Common) -include(Audio)  include(LLAudio)  include(FMODEX)  include(OPENAL) diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 20a7afc748..77e57b14f5 100755 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -247,8 +247,7 @@ BOOL LLVorbisDecodeState::initDecode()  		LL_WARNS("AudioEngine") << "Illegal sample count: " << sample_count << LL_ENDL;  	} -	if( size_guess > LLVORBIS_CLIP_REJECT_SIZE || -	    size_guess < 0) +	if( size_guess > LLVORBIS_CLIP_REJECT_SIZE )  	{  		abort_decode = true;  		LL_WARNS("AudioEngine") << "Illegal sample size: " << size_guess << LL_ENDL; @@ -697,11 +696,3 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)  	LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " no file available" << LL_ENDL;  	return FALSE;  } - -#if LL_DARWIN || LL_LINUX -// HACK: to fool the compiler into not emitting unused warnings. -namespace { -	const ov_callbacks callback_array[4] = {OV_CALLBACKS_DEFAULT, OV_CALLBACKS_NOCLOSE, OV_CALLBACKS_STREAMONLY,  -		OV_CALLBACKS_STREAMONLY_NOCLOSE}; -} -#endif diff --git a/indra/llcharacter/lleditingmotion.cpp b/indra/llcharacter/lleditingmotion.cpp index 36341065ae..f4a37a139a 100755 --- a/indra/llcharacter/lleditingmotion.cpp +++ b/indra/llcharacter/lleditingmotion.cpp @@ -39,8 +39,6 @@  //-----------------------------------------------------------------------------  const LLQuaternion EDIT_MOTION_WRIST_ROTATION(F_PI_BY_TWO * 0.7f, LLVector3(1.0f, 0.0f, 0.0f));  const F32 TARGET_LAG_HALF_LIFE	= 0.1f;		// half-life of IK targeting -const F32 TORSO_LAG_HALF_LIFE = 0.2f; -const F32 MAX_TIME_DELTA = 2.f; //max two seconds a frame for calculating interpolation  S32 LLEditingMotion::sHandPose = LLHandMotion::HAND_POSE_RELAXED_R;  S32 LLEditingMotion::sHandPosePriority = 3; diff --git a/indra/llcharacter/llheadrotmotion.cpp b/indra/llcharacter/llheadrotmotion.cpp index d045bca22e..812c4201af 100755 --- a/indra/llcharacter/llheadrotmotion.cpp +++ b/indra/llcharacter/llheadrotmotion.cpp @@ -43,11 +43,8 @@ const F32 TORSO_LAG	= 0.35f;	// torso rotation factor  const F32 NECK_LAG = 0.5f;		// neck rotation factor  const F32 HEAD_LOOKAT_LAG_HALF_LIFE	= 0.15f;		// half-life of lookat targeting for head  const F32 TORSO_LOOKAT_LAG_HALF_LIFE	= 0.27f;		// half-life of lookat targeting for torso -const F32 EYE_LOOKAT_LAG_HALF_LIFE = 0.06f;		// half-life of lookat targeting for eye  const F32 HEAD_ROTATION_CONSTRAINT = F_PI_BY_TWO * 0.8f;	// limit angle for head rotation -  const F32 MIN_HEAD_LOOKAT_DISTANCE = 0.3f;	// minimum distance from head before we turn to look at it -const F32 MAX_TIME_DELTA = 2.f; //max two seconds a frame for calculating interpolation  const F32 EYE_JITTER_MIN_TIME = 0.3f; // min amount of time between eye "jitter" motions  const F32 EYE_JITTER_MAX_TIME = 2.5f; // max amount of time between eye "jitter" motions  const F32 EYE_JITTER_MAX_YAW = 0.08f; // max yaw of eye jitter motion diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index 22aa4f1d2f..cd201a65b4 100755 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -902,7 +902,7 @@ void LLKeyframeMotion::deactivateConstraint(JointConstraint *constraintp)  		constraintp->mSourceVolume->mUpdateXform = FALSE;  	} -	if (!constraintp->mSharedData->mConstraintTargetType == CONSTRAINT_TARGET_TYPE_GROUND) +	if (constraintp->mSharedData->mConstraintTargetType != CONSTRAINT_TARGET_TYPE_GROUND)  	{  		if (constraintp->mTargetVolume)  		{ @@ -1048,7 +1048,7 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8  	LLVector3 source_to_target = target_pos - keyframe_source_pos; -	S32 max_iteration_count = llround(clamp_rescale( +	S32 max_iteration_count = ll_round(clamp_rescale(  										  mCharacter->getPixelArea(),  										  MAX_PIXEL_AREA_CONSTRAINTS,  										  MIN_PIXEL_AREA_CONSTRAINTS, diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp index 7c1fcacf8a..f180702385 100755 --- a/indra/llcharacter/llkeyframewalkmotion.cpp +++ b/indra/llcharacter/llkeyframewalkmotion.cpp @@ -45,10 +45,7 @@ const F32 TIME_EPSILON = 0.001f;				// minumum frame time  const F32 MAX_TIME_DELTA = 2.f;					// max two seconds a frame for calculating interpolation  F32 SPEED_ADJUST_MAX_SEC = 2.f;					// maximum adjustment to walk animation playback speed for a second  F32 ANIM_SPEED_MAX = 1.5f;						// absolute upper limit on animation speed -const F32 DRIFT_COMP_MAX_TOTAL = 0.1f;			// maximum drift compensation overall, in any direction  -const F32 DRIFT_COMP_MAX_SPEED = 4.f;			// speed at which drift compensation total maxes out  const F32 MAX_ROLL = 0.6f; -const F32 PELVIS_COMPENSATION_WIEGHT = 0.7f; 	// proportion of foot drift that is compensated by moving the avatar directly  const F32 SPEED_ADJUST_TIME_CONSTANT = 0.1f; 	// time constant for speed adjustment interpolation  //----------------------------------------------------------------------------- diff --git a/indra/llcharacter/lltargetingmotion.cpp b/indra/llcharacter/lltargetingmotion.cpp index 007834b178..69681e4197 100755 --- a/indra/llcharacter/lltargetingmotion.cpp +++ b/indra/llcharacter/lltargetingmotion.cpp @@ -38,9 +38,6 @@  // Constants  //-----------------------------------------------------------------------------  const F32 TORSO_TARGET_HALF_LIFE = 0.25f; -const F32 MAX_TIME_DELTA = 2.f; //max two seconds a frame for calculating interpolation -const F32 TARGET_PLANE_THRESHOLD_DOT = 0.6f; -const F32 TORSO_ROT_FRACTION = 0.5f;  //-----------------------------------------------------------------------------  // LLTargetingMotion() diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index debb42fb5f..1459b9ada2 100755 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -306,7 +306,7 @@ if (LL_TESTS)    LL_ADD_INTEGRATION_TEST(llunits "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}") -  LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}") +  LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY};${BOOST_THREAD_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}")    LL_ADD_INTEGRATION_TEST(llprocess "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llleap "" "${test_libs}")    LL_ADD_INTEGRATION_TEST(llstreamqueue "" "${test_libs}") diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index bf57e47756..5ed348e13c 100755 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -113,7 +113,7 @@ namespace {  	public:  		RecordToFile(const std::string& filename)  		{ -			mFile.open(filename, llofstream::out | llofstream::app); +			mFile.open(filename.c_str(), std::ios_base::out | std::ios_base::app);  			if (!mFile)  			{  				LL_INFOS() << "Error setting log file to " << filename << LL_ENDL; @@ -127,7 +127,7 @@ namespace {  			mFile.close();  		} -		bool okay() { return mFile; } +		bool okay() { return mFile.good(); }  		virtual void recordMessage(LLError::ELevel level,  									const std::string& message) @@ -336,7 +336,7 @@ namespace  		LLSD configuration;  		{ -			llifstream file(filename()); +			llifstream file(filename().c_str());  			if (file.is_open())  			{  				LLSDSerialize::fromXML(configuration, file); diff --git a/indra/llcommon/lleventcoro.h b/indra/llcommon/lleventcoro.h index a42af63b65..abbeeaa373 100755 --- a/indra/llcommon/lleventcoro.h +++ b/indra/llcommon/lleventcoro.h @@ -67,7 +67,7 @@ public:      LLEventPumpOrPumpName() {}      operator LLEventPump& () const { return *mPump; }      LLEventPump& getPump() const { return *mPump; } -    operator bool() const { return mPump; } +    operator bool() const { return bool(mPump); }      bool operator!() const { return ! mPump; }  private: @@ -102,6 +102,9 @@ LLVoidListener<LISTENER> voidlistener(const LISTENER& listener)  namespace LLEventDetail  { +    /// Implementation for listenerNameForCoro(), see below +    LL_COMMON_API std::string listenerNameForCoroImpl(const void* self_id); +      /**       * waitForEventOn() permits a coroutine to temporarily listen on an       * LLEventPump any number of times. We don't really want to have to ask @@ -129,9 +132,6 @@ namespace LLEventDetail          return listenerNameForCoroImpl(self.get_id());      } -    /// Implementation for listenerNameForCoro() -    LL_COMMON_API std::string listenerNameForCoroImpl(const void* self_id); -      /**       * Implement behavior described for postAndWait()'s @a replyPumpNamePath       * parameter: diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp index 259187c52f..295c97eac8 100755 --- a/indra/llcommon/llfile.cpp +++ b/indra/llcommon/llfile.cpp @@ -424,26 +424,6 @@ LLFILE *	LLFile::_Fiopen(const std::string& filename,  /************** llstdio file buffer ********************************/ -//llstdio_filebuf* llstdio_filebuf::open(const char *_Filename, -//	ios_base::openmode _Mode) -//{ -//#if LL_WINDOWS -//	_Filet *_File; -//	if (is_open() || (_File = LLFILE::_Fiopen(_Filename, _Mode)) == 0) -//		return (0);	// open failed -// -//	_Init(_File, _Openfl); -//	_Initcvt(&_USE(_Mysb::getloc(), _Cvt)); -//	return (this);	// open succeeded -//#else -//	std::filebuf* _file = std::filebuf::open(_Filename, _Mode); -//	if (NULL == _file) return NULL; -//	return this; -//#endif -//} - - -// *TODO: Seek the underlying c stream for better cross-platform compatibility?  #if !LL_WINDOWS  llstdio_filebuf::int_type llstdio_filebuf::overflow(llstdio_filebuf::int_type __c)  { @@ -807,7 +787,7 @@ std::streamsize llstdio_filebuf::xsgetn(char_type* __s, std::streamsize __n)  	return __ret;  } -std::streamsize llstdio_filebuf::xsputn(char_type* __s, std::streamsize __n) +std::streamsize llstdio_filebuf::xsputn(const char_type* __s, std::streamsize __n)  {  	// Optimization in the always_noconv() case, to be generalized in the  	// future: when __n is sufficiently large we write directly instead of @@ -865,23 +845,19 @@ int llstdio_filebuf::sync()  }  #endif +#if LL_WINDOWS  /************** input file stream ********************************/ - -llifstream::llifstream() : _M_filebuf(), -#if LL_WINDOWS -	std::istream(&_M_filebuf) {} -#else -	std::istream() +llifstream::llifstream() : +    _M_filebuf(), +	std::istream(&_M_filebuf)  { -	this->init(&_M_filebuf);  } -#endif  // explicit  llifstream::llifstream(const std::string& _Filename,  -		ios_base::openmode _Mode) : _M_filebuf(), -#if LL_WINDOWS +                       ios_base::openmode _Mode) : +    _M_filebuf(),  	std::istream(&_M_filebuf)  {  	llutf16string wideName = utf8str_to_utf16str( _Filename ); @@ -890,18 +866,11 @@ llifstream::llifstream(const std::string& _Filename,  		_Myios::setstate(ios_base::failbit);  	}  } -#else -	std::istream() -{ -	this->init(&_M_filebuf); -	this->open(_Filename.c_str(), _Mode | ios_base::in); -} -#endif  // explicit  llifstream::llifstream(const char* _Filename,  -		ios_base::openmode _Mode) : _M_filebuf(), -#if LL_WINDOWS +                       ios_base::openmode _Mode) : +    _M_filebuf(),  	std::istream(&_M_filebuf)  {  	llutf16string wideName = utf8str_to_utf16str( _Filename ); @@ -910,38 +879,6 @@ llifstream::llifstream(const char* _Filename,  		_Myios::setstate(ios_base::failbit);  	}  } -#else -	std::istream() -{ -	this->init(&_M_filebuf); -	this->open(_Filename, _Mode | ios_base::in); -} -#endif - - -// explicit -llifstream::llifstream(_Filet *_File, -		ios_base::openmode _Mode, size_t _Size) : -	_M_filebuf(_File, _Mode, _Size), -#if LL_WINDOWS -	std::istream(&_M_filebuf) {} -#else -	std::istream() -{ -	this->init(&_M_filebuf); -} -#endif - -#if !LL_WINDOWS -// explicit -llifstream::llifstream(int __fd, -		ios_base::openmode _Mode, size_t _Size) : -	_M_filebuf(__fd, _Mode, _Size), -	std::istream() -{ -	this->init(&_M_filebuf); -} -#endif  bool llifstream::is_open() const  {	// test if C stream has been opened @@ -950,8 +887,6 @@ bool llifstream::is_open() const  void llifstream::open(const char* _Filename, ios_base::openmode _Mode)  {	// open a C stream with specified mode - -#if LL_WINDOWS  	llutf16string wideName = utf8str_to_utf16str( _Filename );  	if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::in) == 0)  	{ @@ -961,27 +896,13 @@ void llifstream::open(const char* _Filename, ios_base::openmode _Mode)  	{  		_Myios::clear();  	} -#else -	if (_M_filebuf.open(_Filename, _Mode | ios_base::in) == 0) -	{ -		this->setstate(ios_base::failbit); -	} -	else -	{ -		this->clear(); -	} -#endif  }  void llifstream::close()  {	// close the C stream  	if (_M_filebuf.close() == 0)  	{ -#if LL_WINDOWS  		_Myios::setstate(ios_base::failbit); -#else -		this->setstate(ios_base::failbit); -#endif  	}  } @@ -989,20 +910,16 @@ void llifstream::close()  /************** output file stream ********************************/ -llofstream::llofstream() : _M_filebuf(), -#if LL_WINDOWS -	std::ostream(&_M_filebuf) {} -#else -	std::ostream() +llofstream::llofstream() : +    _M_filebuf(), +	std::ostream(&_M_filebuf)  { -	this->init(&_M_filebuf);  } -#endif  // explicit  llofstream::llofstream(const std::string& _Filename, -		ios_base::openmode _Mode) : _M_filebuf(), -#if LL_WINDOWS +                       ios_base::openmode _Mode) : +    _M_filebuf(),  	std::ostream(&_M_filebuf)  {  	llutf16string wideName = utf8str_to_utf16str( _Filename ); @@ -1011,18 +928,11 @@ llofstream::llofstream(const std::string& _Filename,  		_Myios::setstate(ios_base::failbit);  	}  } -#else -	std::ostream() -{ -	this->init(&_M_filebuf); -	this->open(_Filename.c_str(), _Mode | ios_base::out); -} -#endif  // explicit  llofstream::llofstream(const char* _Filename, -		ios_base::openmode _Mode) : _M_filebuf(), -#if LL_WINDOWS +                       ios_base::openmode _Mode) : +    _M_filebuf(),  	std::ostream(&_M_filebuf)  {  	llutf16string wideName = utf8str_to_utf16str( _Filename ); @@ -1031,37 +941,6 @@ llofstream::llofstream(const char* _Filename,  		_Myios::setstate(ios_base::failbit);  	}  } -#else -	std::ostream() -{ -	this->init(&_M_filebuf); -	this->open(_Filename, _Mode | ios_base::out); -} -#endif - -// explicit -llofstream::llofstream(_Filet *_File, -			ios_base::openmode _Mode, size_t _Size) : -	_M_filebuf(_File, _Mode, _Size), -#if LL_WINDOWS -	std::ostream(&_M_filebuf) {} -#else -	std::ostream() -{ -	this->init(&_M_filebuf); -} -#endif - -#if !LL_WINDOWS -// explicit -llofstream::llofstream(int __fd, -			ios_base::openmode _Mode, size_t _Size) : -	_M_filebuf(__fd, _Mode, _Size), -	std::ostream() -{ -	this->init(&_M_filebuf); -} -#endif  bool llofstream::is_open() const  {	// test if C stream has been opened @@ -1070,7 +949,6 @@ bool llofstream::is_open() const  void llofstream::open(const char* _Filename, ios_base::openmode _Mode)  {	// open a C stream with specified mode -#if LL_WINDOWS  	llutf16string wideName = utf8str_to_utf16str( _Filename );  	if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::out) == 0)  	{ @@ -1080,27 +958,13 @@ void llofstream::open(const char* _Filename, ios_base::openmode _Mode)  	{  		_Myios::clear();  	} -#else -	if (_M_filebuf.open(_Filename, _Mode | ios_base::out) == 0) -	{ -		this->setstate(ios_base::failbit); -	} -	else -	{ -		this->clear(); -	} -#endif  }  void llofstream::close()  {	// close the C stream  	if (_M_filebuf.close() == 0)  	{ -#if LL_WINDOWS  		_Myios::setstate(ios_base::failbit); -#else -		this->setstate(ios_base::failbit); -#endif  	}  } @@ -1130,4 +994,4 @@ std::streamsize llofstream_size(llofstream& ofstr)  	return pos_end - pos_beg;  } - +#endif  // LL_WINDOWS diff --git a/indra/llcommon/llfile.h b/indra/llcommon/llfile.h index f56b22bf9a..347c9867aa 100755 --- a/indra/llcommon/llfile.h +++ b/indra/llcommon/llfile.h @@ -188,11 +188,11 @@ protected:  	/*virtual*/ int sync();  	std::streamsize xsgetn(char_type*, std::streamsize); -	std::streamsize xsputn(char_type*, std::streamsize); +	std::streamsize xsputn(const char_type*, std::streamsize);  #endif  }; - +#if LL_WINDOWS  /**   *  @brief  Controlling input for files.   * @@ -201,11 +201,11 @@ protected:   *  sequence, an instance of std::basic_filebuf (or a platform-specific derivative)   *  which allows construction using a pre-exisintg file stream buffer.    *  We refer to this std::basic_filebuf (or derivative) as @c sb. -*/ + */  class LL_COMMON_API llifstream	:	public	std::istream  {  	// input stream associated with a C stream -public: +  public:  	// Constructors:  	/**  	 *  @brief  Default constructor. @@ -213,7 +213,7 @@ public:  	 *  Initializes @c sb using its default constructor, and passes  	 *  @c &sb to the base class initializer.  Does not open any files  	 *  (you haven't given it a filename to open). -	*/ +     */  	llifstream();  	/** @@ -222,44 +222,18 @@ public:  	 *  @param  Mode  Open file in specified mode (see std::ios_base).  	 *       *  @c ios_base::in is automatically included in @a mode. -	*/ +     */  	explicit llifstream(const std::string& _Filename, -			ios_base::openmode _Mode = ios_base::in); +                        ios_base::openmode _Mode = ios_base::in);  	explicit llifstream(const char* _Filename, -			ios_base::openmode _Mode = ios_base::in); - -	/** -	 *  @brief  Create a stream using an open c file stream. -	 *  @param  File  An open @c FILE*. -        @param  Mode  Same meaning as in a standard filebuf. -        @param  Size  Optimal or preferred size of internal buffer, in chars. -                      Defaults to system's @c BUFSIZ. -	*/ -	explicit llifstream(_Filet *_File, -			ios_base::openmode _Mode = ios_base::in, -			//size_t _Size = static_cast<size_t>(BUFSIZ)); -			size_t _Size = static_cast<size_t>(1)); -	 -	/** -	 *  @brief  Create a stream using an open file descriptor. -	 *  @param  fd    An open file descriptor. -        @param  Mode  Same meaning as in a standard filebuf. -        @param  Size  Optimal or preferred size of internal buffer, in chars. -                      Defaults to system's @c BUFSIZ. -	*/ -#if !LL_WINDOWS -	explicit llifstream(int __fd, -			ios_base::openmode _Mode = ios_base::in, -			//size_t _Size = static_cast<size_t>(BUFSIZ)); -			size_t _Size = static_cast<size_t>(1)); -#endif +                        ios_base::openmode _Mode = ios_base::in);  	/**  	 *  @brief  The destructor does nothing.  	 *  	 *  The file is closed by the filebuf object, not the formatting  	 *  stream. -	*/ +     */  	virtual ~llifstream() {}  	// Members: @@ -275,7 +249,7 @@ public:  	/**  	 *  @brief  Wrapper to test for an open file.  	 *  @return  @c rdbuf()->is_open() -	*/ +     */  	bool is_open() const;  	/** @@ -285,22 +259,22 @@ public:  	 *  	 *  Calls @c llstdio_filebuf::open(s,mode|in).  If that function  	 *  fails, @c failbit is set in the stream's error state. -	*/ +     */  	void open(const std::string& _Filename, -			ios_base::openmode _Mode = ios_base::in) +              ios_base::openmode _Mode = ios_base::in)  	{ open(_Filename.c_str(), _Mode); }  	void open(const char* _Filename, -			ios_base::openmode _Mode = ios_base::in); +              ios_base::openmode _Mode = ios_base::in);  	/**  	 *  @brief  Close the file.  	 *  	 *  Calls @c llstdio_filebuf::close().  If that function  	 *  fails, @c failbit is set in the stream's error state. -	*/ +     */  	void close(); -private: +  private:  	llstdio_filebuf _M_filebuf;  }; @@ -316,7 +290,7 @@ private:  */  class LL_COMMON_API llofstream	:	public	std::ostream  { -public: +  public:  	// Constructors:  	/**  	 *  @brief  Default constructor. @@ -324,7 +298,7 @@ public:  	 *  Initializes @c sb using its default constructor, and passes  	 *  @c &sb to the base class initializer.  Does not open any files  	 *  (you haven't given it a filename to open). -	*/ +     */  	llofstream();  	/** @@ -334,37 +308,11 @@ public:  	 *  	 *  @c ios_base::out|ios_base::trunc is automatically included in  	 *  @a mode. -	*/ +     */  	explicit llofstream(const std::string& _Filename, -			ios_base::openmode _Mode = ios_base::out|ios_base::trunc); +                        ios_base::openmode _Mode = ios_base::out|ios_base::trunc);  	explicit llofstream(const char* _Filename, -			ios_base::openmode _Mode = ios_base::out|ios_base::trunc); - -	/** -	 *  @brief  Create a stream using an open c file stream. -	 *  @param  File  An open @c FILE*. -        @param  Mode  Same meaning as in a standard filebuf. -        @param  Size  Optimal or preferred size of internal buffer, in chars. -                      Defaults to system's @c BUFSIZ. -	*/ -	explicit llofstream(_Filet *_File, -			ios_base::openmode _Mode = ios_base::out, -			//size_t _Size = static_cast<size_t>(BUFSIZ)); -			size_t _Size = static_cast<size_t>(1)); - -	/** -	 *  @brief  Create a stream using an open file descriptor. -	 *  @param  fd    An open file descriptor. -        @param  Mode  Same meaning as in a standard filebuf. -        @param  Size  Optimal or preferred size of internal buffer, in chars. -                      Defaults to system's @c BUFSIZ. -	*/ -#if !LL_WINDOWS -	explicit llofstream(int __fd, -			ios_base::openmode _Mode = ios_base::out, -			//size_t _Size = static_cast<size_t>(BUFSIZ)); -			size_t _Size = static_cast<size_t>(1)); -#endif +                        ios_base::openmode _Mode = ios_base::out|ios_base::trunc);  	/**  	 *  @brief  The destructor does nothing. @@ -397,22 +345,22 @@ public:  	 *  	 *  Calls @c llstdio_filebuf::open(s,mode|out).  If that function  	 *  fails, @c failbit is set in the stream's error state. -	*/ +     */  	void open(const std::string& _Filename, -			ios_base::openmode _Mode = ios_base::out|ios_base::trunc) +              ios_base::openmode _Mode = ios_base::out|ios_base::trunc)  	{ open(_Filename.c_str(), _Mode); }  	void open(const char* _Filename, -			ios_base::openmode _Mode = ios_base::out|ios_base::trunc); +              ios_base::openmode _Mode = ios_base::out|ios_base::trunc);  	/**  	 *  @brief  Close the file.  	 *  	 *  Calls @c llstdio_filebuf::close().  If that function  	 *  fails, @c failbit is set in the stream's error state. -	*/ +     */  	void close(); -private: +  private:  	llstdio_filebuf _M_filebuf;  }; @@ -427,4 +375,12 @@ private:  std::streamsize LL_COMMON_API llifstream_size(llifstream& fstr);  std::streamsize LL_COMMON_API llofstream_size(llofstream& fstr); +#else // ! LL_WINDOWS + +// on non-windows, llifstream and llofstream are just mapped directly to the std:: equivalents +typedef std::ifstream llifstream; +typedef std::ofstream llofstream; + +#endif // LL_WINDOWS or ! LL_WINDOWS +  #endif // not LL_LLFILE_H diff --git a/indra/llcommon/llframetimer.cpp b/indra/llcommon/llframetimer.cpp index 1af2cb8afd..1e9920746b 100755 --- a/indra/llcommon/llframetimer.cpp +++ b/indra/llcommon/llframetimer.cpp @@ -37,7 +37,6 @@ U64 LLFrameTimer::sTotalTime = 0;  F64 LLFrameTimer::sTotalSeconds = 0.0;  S32 LLFrameTimer::sFrameCount = 0;  U64 LLFrameTimer::sFrameDeltaTime = 0; -const F64 USEC_PER_SECOND = 1000000.0;  const F64 USEC_TO_SEC_F64 = 0.000001;  // static diff --git a/indra/llcommon/llhash.h b/indra/llcommon/llhash.h index c077ebe93f..4b58e81565 100755 --- a/indra/llcommon/llhash.h +++ b/indra/llcommon/llhash.h @@ -27,26 +27,7 @@  #ifndef LL_LLHASH_H  #define LL_LLHASH_H -#include "llpreprocessor.h" // for GCC_VERSION - -#if (LL_WINDOWS) -#include <hash_map> -#include <algorithm> -#elif LL_DARWIN || LL_LINUX -#  if GCC_VERSION >= 40300 // gcc 4.3 and up -#    include <backward/hashtable.h> -#  elif GCC_VERSION >= 30400 // gcc 3.4 and up -#    include <ext/hashtable.h> -#  elif __GNUC__ >= 3 -#    include <ext/stl_hashtable.h> -#  else -#    include <hashtable.h> -#  endif -#elif LL_SOLARIS -#include <ext/hashtable.h> -#else -#error Please define your platform. -#endif +#include <boost/functional/hash.hpp>  // Warning - an earlier template-based version of this routine did not do  // the correct thing on Windows.   Since this is only used to get @@ -55,17 +36,17 @@  inline size_t llhash( const char * value )  { -#if LL_WINDOWS -	return stdext::hash_value(value); -#elif ( (defined _STLPORT_VERSION) || ((LL_LINUX) && (__GNUC__ <= 2)) ) -	std::hash<const char *> H; -	return H(value); -#elif LL_DARWIN || LL_LINUX || LL_SOLARIS -	__gnu_cxx::hash<const char *> H; -	return H(value); -#else -#error Please define your platform. -#endif +	// boost::hash is defined for std::string and for char, but there's no +	// special overload for const char*. The lazy approach would be to +	// instantiate a std::string and take its hash, but that might be more +	// overhead than our callers want. Or we could use boost::hash_range() -- +	// but that would require a preliminary pass over the value to determine +	// the end iterator. Instead, use boost::hash_combine() to hash individual +	// characters. +	std::size_t seed = 0; +	for ( ; *value; ++value) +		boost::hash_combine(seed, *value); +	return seed;  }  #endif diff --git a/indra/llcommon/llinitparam.h b/indra/llcommon/llinitparam.h index 7aa87fcd0e..c65b05f610 100755 --- a/indra/llcommon/llinitparam.h +++ b/indra/llcommon/llinitparam.h @@ -435,7 +435,7 @@ namespace LLInitParam  		typedef self_t type_value_t;  		TypeValuesHelper(const std::string& val) -		:	TypeValuesHelper(val) +		:	base_t(val)  		{}  		void operator ()(const std::string& name) @@ -1123,7 +1123,7 @@ namespace LLInitParam  		void set(const value_t& val, bool flag_as_provided = true)  		{  			named_value_t::clearValueName(); -			setValue(val); +			named_value_t::setValue(val);  			setProvided(flag_as_provided);  		} @@ -1287,7 +1287,7 @@ namespace LLInitParam  		// assign block contents to this param-that-is-a-block  		void set(const value_t& val, bool flag_as_provided = true)  		{ -			setValue(val); +			named_value_t::setValue(val);  			named_value_t::clearValueName();  			setProvided(flag_as_provided);  		} @@ -2054,7 +2054,7 @@ namespace LLInitParam  			Optional& operator =(const value_t& val)  			{ -				set(val); +				super_t::set(val);  				return *this;  			} @@ -2084,7 +2084,7 @@ namespace LLInitParam  			Mandatory& operator =(const value_t& val)  			{ -				set(val); +				super_t::set(val);  				return *this;  			} @@ -2120,7 +2120,7 @@ namespace LLInitParam  			Multiple& operator =(const container_t& val)  			{ -				set(val); +				super_t::set(val);  				return *this;  			} diff --git a/indra/llcommon/llliveappconfig.cpp b/indra/llcommon/llliveappconfig.cpp index 7c87c5a1a0..a9b1cdf4f6 100755 --- a/indra/llcommon/llliveappconfig.cpp +++ b/indra/llcommon/llliveappconfig.cpp @@ -49,7 +49,7 @@ bool LLLiveAppConfig::loadFile()  {  	LL_INFOS() << "LLLiveAppConfig::loadFile(): reading from "  		<< filename() << LL_ENDL; -    llifstream file(filename()); +    llifstream file(filename().c_str());  	LLSD config;      if (file.is_open())      { diff --git a/indra/llcommon/lllivefile.cpp b/indra/llcommon/lllivefile.cpp index c1987baf55..ea485c2d86 100755 --- a/indra/llcommon/lllivefile.cpp +++ b/indra/llcommon/lllivefile.cpp @@ -51,6 +51,8 @@ public:  	bool mLastExists;  	LLEventTimer* mEventTimer; +private: +    LOG_CLASS(LLLiveFile);  };  LLLiveFile::Impl::Impl(const std::string& filename, const F32 refresh_period) @@ -83,46 +85,51 @@ LLLiveFile::~LLLiveFile()  bool LLLiveFile::Impl::check()  { -	if (!mForceCheck && mRefreshTimer.getElapsedTimeF32() < mRefreshPeriod) +    bool detected_change = false; +    // Skip the check if not enough time has elapsed and we're not +    // forcing a check of the file +	if (mForceCheck || mRefreshTimer.getElapsedTimeF32() >= mRefreshPeriod)  	{ -		// Skip the check if not enough time has elapsed and we're not -		// forcing a check of the file -		return false; -	} -	mForceCheck = false; -	mRefreshTimer.reset(); - -	// Stat the file to see if it exists and when it was last modified. -	llstat stat_data; -	int res = LLFile::stat(mFilename, &stat_data); - -	if (res) -	{ -		// Couldn't stat the file, that means it doesn't exist or is -		// broken somehow.  Clear flags and return. -		if (mLastExists) -		{ -			mLastExists = false; -			return true;	// no longer existing is a change! -		} -		return false; -	} - -	// The file exists, decide if we want to load it. -	if (mLastExists) -	{ -		// The file existed last time, don't read it if it hasn't changed since -		// last time. -		if (stat_data.st_mtime <= mLastModTime) -		{ -			return false; -		} -	} - -	// We want to read the file.  Update status info for the file. -	mLastExists = true; -	mLastStatTime = stat_data.st_mtime; -	return true; +        mForceCheck = false;   // force only forces one check +        mRefreshTimer.reset(); // don't check again until mRefreshPeriod has passed + +        // Stat the file to see if it exists and when it was last modified. +        llstat stat_data; +        if (LLFile::stat(mFilename, &stat_data)) +        { +            // Couldn't stat the file, that means it doesn't exist or is +            // broken somehow.   +            if (mLastExists) +            { +                mLastExists = false; +                detected_change = true;	// no longer existing is a change! +                LL_DEBUGS() << "detected deleted file '" << mFilename << "'" << LL_ENDL; +            } +        } +        else +        { +            // The file exists +            if ( ! mLastExists ) +            { +                // last check, it did not exist - that counts as a change +                LL_DEBUGS() << "detected created file '" << mFilename << "'" << LL_ENDL; +                detected_change = true; +            } +            else if ( stat_data.st_mtime > mLastModTime ) +            { +                // file modification time is newer than last check +                LL_DEBUGS() << "detected updated file '" << mFilename << "'" << LL_ENDL; +                detected_change = true; +            } +            mLastExists = true; +            mLastStatTime = stat_data.st_mtime; +        } +    } +    if (detected_change) +    { +        LL_INFOS() << "detected file change '" << mFilename << "'" << LL_ENDL; +    } +    return detected_change;  }  void LLLiveFile::Impl::changed() diff --git a/indra/llcommon/llpredicate.h b/indra/llcommon/llpredicate.h index a0e970a799..e6c56a5711 100644 --- a/indra/llcommon/llpredicate.h +++ b/indra/llcommon/llpredicate.h @@ -139,9 +139,9 @@ namespace LLPredicate  		Rule()  		{} -		void require(ENUM e) +		void require(ENUM e, bool match)  		{ -			mRule.set(e, require); +			mRule.set(e, match);  		}  		void allow(ENUM e) diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h index 309165da7f..2c4bcc91f6 100755 --- a/indra/llcommon/llpreprocessor.h +++ b/indra/llcommon/llpreprocessor.h @@ -101,6 +101,11 @@  #endif +#if LL_WINDOWS +# define LL_THREAD_LOCAL __declspec(thread) +#else +# define LL_THREAD_LOCAL __thread +#endif  // Static linking with apr on windows needs to be declared.  #if LL_WINDOWS && !LL_COMMON_LINK_SHARED diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp index 69043dc173..e3e1d0c391 100755 --- a/indra/llcommon/llprocessor.cpp +++ b/indra/llcommon/llprocessor.cpp @@ -204,21 +204,6 @@ namespace     		return "Unknown";  	} -	std::string compute_CPUFamilyName(const char* cpu_vendor, int composed_family)  -	{ -		const char* intel_string = "GenuineIntel"; -		const char* amd_string = "AuthenticAMD"; -		if(!strncmp(cpu_vendor, intel_string, strlen(intel_string))) -		{ -			return intel_CPUFamilyName(composed_family); -		} -		else if(!strncmp(cpu_vendor, amd_string, strlen(amd_string))) -		{ -			return amd_CPUFamilyName(composed_family); -		} -		return "Unknown"; -	} -  	std::string compute_CPUFamilyName(const char* cpu_vendor, int family, int ext_family)   	{  		const char* intel_string = "GenuineIntel"; @@ -793,7 +778,7 @@ private:  			setInfo(eFamily, family);  		} -		setInfo(eFamilyName, compute_CPUFamilyName(cpuinfo["vendor_id"].c_str(), family)); +		setInfo(eFamilyName, compute_CPUFamilyName(cpuinfo["vendor_id"].c_str(), family, 0));  		// setInfo(eExtendedModel, getSysctlInt("machdep.cpu.extmodel"));  		// setInfo(eBrandID, getSysctlInt("machdep.cpu.brand")); diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h index 72011d04a0..3836a9b5fb 100755 --- a/indra/llcommon/llrefcount.h +++ b/indra/llcommon/llrefcount.h @@ -151,29 +151,25 @@ private:   * intrusive pointer support for LLThreadSafeRefCount   * this allows you to use boost::intrusive_ptr with any LLThreadSafeRefCount-derived type   */ -namespace boost -{ -	inline void intrusive_ptr_add_ref(LLThreadSafeRefCount* p)  -	{ -		p->ref(); -	} - -	inline void intrusive_ptr_release(LLThreadSafeRefCount* p)  -	{ -		p->unref();  -	} -	inline void intrusive_ptr_add_ref(LLRefCount* p)  -	{ -		p->ref(); -	} +inline void intrusive_ptr_add_ref(LLThreadSafeRefCount* p)  +{ +	p->ref(); +} -	inline void intrusive_ptr_release(LLRefCount* p)  -	{ -		p->unref();  -	} -}; +inline void intrusive_ptr_release(LLThreadSafeRefCount* p)  +{ +	p->unref();  +} +inline void intrusive_ptr_add_ref(LLRefCount* p)  +{ +	p->ref(); +} +inline void intrusive_ptr_release(LLRefCount* p)  +{ +	p->unref();  +}  #endif diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp index d8bbb3a74f..57aa7d9c07 100755 --- a/indra/llcommon/llsd.cpp +++ b/indra/llcommon/llsd.cpp @@ -789,10 +789,7 @@ namespace  {  	inline LLSD::Impl& safe(LLSD::Impl* impl)  		{ return LLSD::Impl::safe(impl); } -		 -	inline const LLSD::Impl& safe(const LLSD::Impl* impl) -		{ return LLSD::Impl::safe(impl); } -		 +  	inline ImplMap& makeMap(LLSD::Impl*& var)  		{ return safe(var).makeMap(var); } diff --git a/indra/llcommon/llsdparam.h b/indra/llcommon/llsdparam.h index 1542f95e68..09f1bdf1e3 100755 --- a/indra/llcommon/llsdparam.h +++ b/indra/llcommon/llsdparam.h @@ -106,7 +106,6 @@ private:  	Parser::name_stack_t	mNameStack;  	const LLSD*				mCurReadSD;  	LLSD*					mWriteRootSD; -	LLSD*					mCurWriteSD;  }; diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp index 562fd26658..6ad4a97149 100755 --- a/indra/llcommon/llsdutil.cpp +++ b/indra/llcommon/llsdutil.cpp @@ -572,7 +572,7 @@ std::string llsd_matches(const LLSD& prototype, const LLSD& data, const std::str      return match_types(prototype.type(), TypeVector(), data.type(), pfx);  } -bool llsd_equals(const LLSD& lhs, const LLSD& rhs, unsigned bits) +bool llsd_equals(const LLSD& lhs, const LLSD& rhs, int bits)  {      // We're comparing strict equality of LLSD representation rather than      // performing any conversions. So if the types aren't equal, the LLSD diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h index d0b536c39a..99cb79aa54 100755 --- a/indra/llcommon/llsdutil.h +++ b/indra/llcommon/llsdutil.h @@ -126,7 +126,7 @@ LL_COMMON_API std::string llsd_matches(const LLSD& prototype, const LLSD& data,  /// Deep equality. If you want to compare LLSD::Real values for approximate  /// equality rather than bitwise equality, pass @a bits as for  /// is_approx_equal_fraction(). -LL_COMMON_API bool llsd_equals(const LLSD& lhs, const LLSD& rhs, unsigned bits=-1); +LL_COMMON_API bool llsd_equals(const LLSD& lhs, const LLSD& rhs, int bits=-1);  // Simple function to copy data out of input & output iterators if  // there is no need for casting. diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index 76979f29f6..f3b8999883 100755 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -107,7 +107,7 @@ bool iswindividual(llwchar elem)  bool _read_file_into_string(std::string& str, const std::string& filename)  { -	llifstream ifs(filename, llifstream::binary); +	llifstream ifs(filename.c_str(), llifstream::binary);  	if (!ifs.is_open())  	{  		LL_INFOS() << "Unable to open file " << filename << LL_ENDL; @@ -1397,7 +1397,7 @@ void LLStringUtilBase<T>::testHarness()  	s2.erase( 4, 1 );  	llassert( s2 == "hell"); -	s2.insert( 0, 'y' ); +	s2.insert( 0, "y" );  	llassert( s2 == "yhell");  	s2.erase( 1, 3 );  	llassert( s2 == "yl"); diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 06e118aa44..1a66612e87 100755 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -99,8 +99,6 @@ const char MEMINFO_FILE[] = "/proc/meminfo";  extern int errno;  #endif - -static const S32 CPUINFO_BUFFER_SIZE = 16383;  LLCPUInfo gSysCPU;  // Don't log memory info any more often than this. It also serves as our @@ -672,8 +670,6 @@ const std::string& LLOSInfo::getOSVersionString() const  	return mOSVersionString;  } -const S32 STATUS_SIZE = 8192; -  //static  U32 LLOSInfo::getProcessVirtualSizeKB()  { @@ -681,6 +677,7 @@ U32 LLOSInfo::getProcessVirtualSizeKB()  #if LL_WINDOWS  #endif  #if LL_LINUX +#   define STATUS_SIZE 2048	  	LLFILE* status_filep = LLFile::fopen("/proc/self/status", "rb");  	if (status_filep)  	{ diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 51c89e1eaf..c3f235c6ee 100755 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -92,13 +92,7 @@ void set_thread_name( DWORD dwThreadID, const char* threadName)  //   //---------------------------------------------------------------------------- -#if LL_DARWIN -// statically allocated thread local storage not supported in Darwin executable formats -#elif LL_WINDOWS -U32 __declspec(thread) sThreadID = 0; -#elif LL_LINUX -U32 __thread sThreadID = 0; -#endif  +U32 LL_THREAD_LOCAL sThreadID = 0;  U32 LLThread::sIDIter = 0; @@ -115,9 +109,7 @@ LL_COMMON_API void assert_main_thread()  void LLThread::registerThreadID()  { -#if !LL_DARWIN  	sThreadID = ++sIDIter; -#endif  }  // @@ -134,9 +126,7 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap  	// for now, hard code all LLThreads to report to single master thread recorder, which is known to be running on main thread  	threadp->mRecorder = new LLTrace::ThreadRecorder(*LLTrace::get_master_thread_recorder()); -#if !LL_DARWIN  	sThreadID = threadp->mID; -#endif  	// Run the user supplied function  	threadp->run(); @@ -347,13 +337,7 @@ void LLThread::setQuitting()  // static  U32 LLThread::currentID()  { -#if LL_DARWIN -	// statically allocated thread local storage not supported in Darwin executable formats -	return (U32)apr_os_thread_current(); -#else  	return sThreadID; -#endif -  }  // static diff --git a/indra/llcommon/llthreadlocalstorage.h b/indra/llcommon/llthreadlocalstorage.h index ec3b52c8cb..3b5786023f 100644 --- a/indra/llcommon/llthreadlocalstorage.h +++ b/indra/llcommon/llthreadlocalstorage.h @@ -130,56 +130,19 @@ class LLThreadLocalSingletonPointer  public:  	LL_FORCE_INLINE static DERIVED_TYPE* getInstance()  	{ -#if LL_DARWIN -        createTLSKey(); -        return (DERIVED_TYPE*)pthread_getspecific(sInstanceKey); -#else  		return sInstance; -#endif  	}  	static void setInstance(DERIVED_TYPE* instance)  	{ -#if LL_DARWIN -        createTLSKey(); -        pthread_setspecific(sInstanceKey, (void*)instance); -#else  		sInstance = instance; -#endif  	}  private: - -#if LL_WINDOWS -	static __declspec(thread) DERIVED_TYPE* sInstance; -#elif LL_LINUX -	static __thread DERIVED_TYPE* sInstance; -#elif LL_DARWIN -    static void TLSError() -    { -        LL_ERRS() << "Could not create thread local storage" << LL_ENDL; -    } -    static void createTLSKey() -    { -        static S32 key_created = pthread_key_create(&sInstanceKey, NULL); -        if (key_created != 0) -        { -            LL_ERRS() << "Could not create thread local storage" << LL_ENDL; -        } -    } -    static pthread_key_t sInstanceKey; -#endif +	static LL_THREAD_LOCAL DERIVED_TYPE* sInstance;  }; -#if LL_WINDOWS -template<typename DERIVED_TYPE> -__declspec(thread) DERIVED_TYPE* LLThreadLocalSingletonPointer<DERIVED_TYPE>::sInstance = NULL; -#elif LL_LINUX -template<typename DERIVED_TYPE> -__thread DERIVED_TYPE* LLThreadLocalSingletonPointer<DERIVED_TYPE>::sInstance = NULL; -#elif LL_DARWIN  template<typename DERIVED_TYPE> -pthread_key_t LLThreadLocalSingletonPointer<DERIVED_TYPE>::sInstanceKey; -#endif +LL_THREAD_LOCAL DERIVED_TYPE* LLThreadLocalSingletonPointer<DERIVED_TYPE>::sInstance = NULL;  #endif // LL_LLTHREADLOCALSTORAGE_H diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp index ab105a82e6..76e892212a 100755 --- a/indra/llcommon/lltimer.cpp +++ b/indra/llcommon/lltimer.cpp @@ -39,14 +39,10 @@  #	error "architecture not supported"  #endif -  //  // Locally used constants  // -const F64 SEC_TO_MICROSEC = 1000000.f;  const U64 SEC_TO_MICROSEC_U64 = 1000000; -const F64 USEC_TO_SEC_F64 = 0.000001; -  //---------------------------------------------------------------------------  // Globals and statics diff --git a/indra/llcommon/lltraceaccumulators.h b/indra/llcommon/lltraceaccumulators.h index 42fad8a793..6f27b97dff 100644 --- a/indra/llcommon/lltraceaccumulators.h +++ b/indra/llcommon/lltraceaccumulators.h @@ -62,11 +62,11 @@ namespace LLTrace  		{}  	public: - -		AccumulatorBuffer(const AccumulatorBuffer& other = *getDefaultBuffer()) -		:	mStorageSize(0), +		AccumulatorBuffer() +			: mStorageSize(0),  			mStorage(NULL)  		{ +			const AccumulatorBuffer& other = *getDefaultBuffer();  			resize(sNextStorageSlot);  			for (S32 i = 0; i < sNextStorageSlot; i++)  			{ @@ -93,6 +93,18 @@ namespace LLTrace  			return mStorage[index];   		} + +		AccumulatorBuffer(const AccumulatorBuffer& other) +			: mStorageSize(0), +			mStorage(NULL) +		{ +			resize(sNextStorageSlot); +			for (S32 i = 0; i < sNextStorageSlot; i++) +			{ +				mStorage[i] = other.mStorage[i]; +			} +		} +  		void addSamples(const AccumulatorBuffer<ACCUMULATOR>& other, EBufferAppendType append_type)  		{  			llassert(mStorageSize >= sNextStorageSlot && other.mStorageSize >= sNextStorageSlot); diff --git a/indra/llcommon/llunittype.h b/indra/llcommon/llunittype.h index 0e05ecd683..ac8504ca61 100644 --- a/indra/llcommon/llunittype.h +++ b/indra/llcommon/llunittype.h @@ -87,6 +87,40 @@ struct LLUnit  	:	mValue(value)  	{} + +	LL_FORCE_INLINE static self_t convert(self_t v)  +	{  +		return v; +	} + +	template<typename FROM_STORAGE_TYPE> +	LL_FORCE_INLINE static self_t convert(LLUnit<FROM_STORAGE_TYPE, UNITS> v)  +	{ +		self_t result; +		result.mValue = (STORAGE_TYPE)v.value(); +		return result; +	} + +	template<typename FROM_UNITS> +	LL_FORCE_INLINE static self_t convert(LLUnit<STORAGE_TYPE, FROM_UNITS> v)  +	{ +		self_t result; +		STORAGE_TYPE divisor = ll_convert_units(v, result); +		result.mValue /= divisor; +		return result; +	} + +	template<typename FROM_STORAGE_TYPE, typename FROM_UNITS> +	LL_FORCE_INLINE static self_t convert(LLUnit<FROM_STORAGE_TYPE, FROM_UNITS> v)  +	{  +		typedef typename LLResultTypePromote<FROM_STORAGE_TYPE, STORAGE_TYPE>::type_t result_storage_t; +		LLUnit<result_storage_t, UNITS> result; +		result_storage_t divisor = ll_convert_units(v, result); +		result.value(result.value() / divisor); +		return self_t(result.value()); +	} + +  	// unit initialization and conversion  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE LLUnit(LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) @@ -183,38 +217,6 @@ struct LLUnit  		return mValue >= convert(other).value();  	} -	LL_FORCE_INLINE static self_t convert(self_t v)  -	{  -		return v; -	} - -	template<typename FROM_STORAGE_TYPE> -	LL_FORCE_INLINE static self_t convert(LLUnit<FROM_STORAGE_TYPE, UNITS> v)  -	{ -		self_t result; -		result.mValue = (STORAGE_TYPE)v.value(); -		return result; -	} - -	template<typename FROM_UNITS> -	LL_FORCE_INLINE static self_t convert(LLUnit<STORAGE_TYPE, FROM_UNITS> v)  -	{ -		self_t result; -		STORAGE_TYPE divisor = ll_convert_units(v, result); -		result.mValue /= divisor; -		return result; -	} - -	template<typename FROM_STORAGE_TYPE, typename FROM_UNITS> -	LL_FORCE_INLINE static self_t convert(LLUnit<FROM_STORAGE_TYPE, FROM_UNITS> v)  -	{  -		typedef typename LLResultTypePromote<FROM_STORAGE_TYPE, STORAGE_TYPE>::type_t result_storage_t; -		LLUnit<result_storage_t, UNITS> result; -		result_storage_t divisor = ll_convert_units(v, result); -		result.value(result.value() / divisor); -		return self_t(result.value()); -	} -  protected:  	storage_t mValue;  }; @@ -269,7 +271,7 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE void operator += (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other)  	{ -        base_t::mValue += convert(other).value(); +        base_t::mValue += base_t::convert(other).value();  	}  	using base_t::operator -=; @@ -283,19 +285,19 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE void operator -= (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other)  	{ -        base_t::mValue -= convert(other).value(); +        base_t::mValue -= base_t::convert(other).value();  	}  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator == (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue == convert(other).value(); +		return base_t::mValue == base_t::convert(other).value();  	}  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator == (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue == convert(other).value(); +		return base_t::mValue == base_t::convert(other).value();  	}  	template<typename STORAGE_T> @@ -313,7 +315,7 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator != (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue != convert(other).value(); +		return base_t::mValue != base_t::convert(other).value();  	}  	template<typename STORAGE_T> @@ -325,13 +327,13 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator < (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue < convert(other).value(); +		return base_t::mValue < base_t::convert(other).value();  	}  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator < (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue < convert(other).value(); +		return base_t::mValue < base_t::convert(other).value();  	}  	template<typename STORAGE_T> @@ -343,13 +345,13 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator <= (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue <= convert(other).value(); +		return base_t::mValue <= base_t::convert(other).value();  	}  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator <= (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue <= convert(other).value(); +		return base_t::mValue <= base_t::convert(other).value();  	}  	template<typename STORAGE_T> @@ -361,13 +363,13 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator > (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue > convert(other).value(); +		return base_t::mValue > base_t::convert(other).value();  	}  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator > (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue > convert(other).value(); +		return base_t::mValue > base_t::convert(other).value();  	}  	template<typename STORAGE_T> @@ -379,13 +381,13 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator >= (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue >= convert(other).value(); +		return base_t::mValue >= base_t::convert(other).value();  	}  	template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>  	LL_FORCE_INLINE bool operator >= (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const  	{ -		return base_t::mValue >= convert(other).value(); +		return base_t::mValue >= base_t::convert(other).value();  	}  	template<typename STORAGE_T> diff --git a/indra/llcommon/lluriparser.cpp b/indra/llcommon/lluriparser.cpp index 8270c630d8..d98bc297e5 100644 --- a/indra/llcommon/lluriparser.cpp +++ b/indra/llcommon/lluriparser.cpp @@ -118,38 +118,19 @@ void LLUriParser::fragment(const std::string& s)  void LLUriParser::textRangeToString(UriTextRangeA& textRange, std::string& str)  { -	str = ""; - -	if(&textRange == NULL) -	{ -		return; -	} - -	if(textRange.first == NULL) -	{ -		return; -	} - -	if(textRange.afterLast == NULL) +	if (textRange.first != NULL && textRange.afterLast != NULL && textRange.first < textRange.afterLast)  	{ -		return; +		const ptrdiff_t len = textRange.afterLast - textRange.first; +		str.assign(textRange.first, static_cast<std::string::size_type>(len));  	} - -	S32 len = textRange.afterLast - textRange.first; -	if (len) +	else  	{ -		str.assign(textRange.first, len); +		str = LLStringUtil::null;  	}  }  void LLUriParser::extractParts()  { -	if(&mUri == NULL) -	{ -		LL_WARNS() << "mUri is NULL for uri: " << mNormalizedUri << LL_ENDL; -		return; -	} -  	if (mTmpScheme || mNormalizedTmp)  	{  		mScheme.clear(); diff --git a/indra/llcommon/lluriparser.h b/indra/llcommon/lluriparser.h index 561431e8f9..2df8085ae6 100644 --- a/indra/llcommon/lluriparser.h +++ b/indra/llcommon/lluriparser.h @@ -36,7 +36,7 @@ class LL_COMMON_API LLUriParser  {  public:  	LLUriParser(const std::string& u); -	virtual ~LLUriParser(); +	~LLUriParser();  	const char * scheme() const;  	void sheme (const std::string& s); diff --git a/indra/llcommon/stringize.h b/indra/llcommon/stringize.h index 2df008febb..a5a90d7297 100755 --- a/indra/llcommon/stringize.h +++ b/indra/llcommon/stringize.h @@ -30,7 +30,7 @@  #define LL_STRINGIZE_H  #include <sstream> -#include <boost/lambda/lambda.hpp> +#include <boost/phoenix/phoenix.hpp>  #include <llstring.h>  /** @@ -108,7 +108,7 @@ std::string stringize_f(Functor const & f)   * return out.str();   * @endcode   */ -#define STRINGIZE(EXPRESSION) (stringize_f(boost::lambda::_1 << EXPRESSION)) +#define STRINGIZE(EXPRESSION) (stringize_f(boost::phoenix::placeholders::arg1 << EXPRESSION))  /** @@ -144,7 +144,7 @@ void destringize_f(std::string const & str, Functor const & f)   * in >> item1 >> item2 >> item3 ... ;   * @endcode   */ -#define DESTRINGIZE(STR, EXPRESSION) (destringize_f((STR), (boost::lambda::_1 >> EXPRESSION))) +#define DESTRINGIZE(STR, EXPRESSION) (destringize_f((STR), (boost::phoenix::placeholders::arg1 >> EXPRESSION)))  #endif /* ! defined(LL_STRINGIZE_H) */ diff --git a/indra/llcommon/tests/lldependencies_test.cpp b/indra/llcommon/tests/lldependencies_test.cpp index 5395d785b6..b5e189a465 100755 --- a/indra/llcommon/tests/lldependencies_test.cpp +++ b/indra/llcommon/tests/lldependencies_test.cpp @@ -37,29 +37,14 @@  // associated header  #include "../lldependencies.h"  // other Linden headers -#include "../test/lltut.h" - -using boost::assign::list_of;  #if LL_WINDOWS  #pragma warning (disable : 4675) // "resolved by ADL" -- just as I want!  #endif -typedef LLDependencies<> StringDeps; -typedef StringDeps::KeyList StringList; - -// We use the very cool boost::assign::list_of() construct to specify vectors -// of strings inline. For reasons on which I'm not entirely clear, though, it -// needs a helper function. You can use list_of() to construct an implicit -// StringList (std::vector<std::string>) by conversion, e.g. for a function -// parameter -- but if you simply write StringList(list_of("etc.")), you get -// ambiguity errors. Shrug! -template<typename CONTAINER> -CONTAINER make(const CONTAINER& data) -{ -    return data; -} - +/***************************************************************************** +*   Display helpers: must be defined BEFORE lltut.h! +*****************************************************************************/  // Display an arbitary value as itself...  template<typename T>  std::ostream& display(std::ostream& out, const T& value) @@ -113,6 +98,31 @@ std::ostream& operator<<(std::ostream& out, const std::set<ENTRY>& set)      return out;  } +/***************************************************************************** +*   Now we can #include lltut.h +*****************************************************************************/ +#include "../test/lltut.h" + +/***************************************************************************** +*   Other helpers +*****************************************************************************/ +using boost::assign::list_of; + +typedef LLDependencies<> StringDeps; +typedef StringDeps::KeyList StringList; + +// We use the very cool boost::assign::list_of() construct to specify vectors +// of strings inline. For reasons on which I'm not entirely clear, though, it +// needs a helper function. You can use list_of() to construct an implicit +// StringList (std::vector<std::string>) by conversion, e.g. for a function +// parameter -- but if you simply write StringList(list_of("etc.")), you get +// ambiguity errors. Shrug! +template<typename CONTAINER> +CONTAINER make(const CONTAINER& data) +{ +    return data; +} +  const std::string& extract_key(const LLDependencies<>::value_type& entry)  {      return entry.first; diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp index a5aaff10c5..f51279e817 100755 --- a/indra/llcommon/tests/llerror_test.cpp +++ b/indra/llcommon/tests/llerror_test.cpp @@ -38,6 +38,9 @@  namespace  { +#ifdef __clang__ +#   pragma clang diagnostic ignored "-Wunused-function" +#endif  	void test_that_error_h_includes_enough_things_to_compile_a_message()  	{  		LL_INFOS() << "!" << LL_ENDL; @@ -381,8 +384,6 @@ namespace  	};  	std::string logFromNamespace(bool id) { return Foo::logFromNamespace(id); } -	std::string logFromClassWithNoLogTypeMember(bool id) { ClassWithNoLogType c; return c.logFromMember(id); } -	std::string logFromClassWithNoLogTypeStatic(bool id) { return ClassWithNoLogType::logFromStatic(id); }  	std::string logFromClassWithLogTypeMember(bool id) { ClassWithLogType c; return c.logFromMember(id); }  	std::string logFromClassWithLogTypeStatic(bool id) { return ClassWithLogType::logFromStatic(id); } @@ -393,8 +394,8 @@ namespace  		if (n1 == std::string::npos)  		{  			std::stringstream ss; -			ss << message << ": " << "expected to find a copy of " << expected -				<< " in actual " << actual; +			ss << message << ": " << "expected to find a copy of '" << expected +			   << "' in actual '" << actual << "'";  			throw tut::failure(ss.str().c_str());  		}  	} @@ -435,9 +436,6 @@ namespace tut  		testLogName(mRecorder, logFromStatic);  		testLogName(mRecorder, logFromAnon);  		testLogName(mRecorder, logFromNamespace); -		//testLogName(mRecorder, logFromClassWithNoLogTypeMember, "ClassWithNoLogType"); -		//testLogName(mRecorder, logFromClassWithNoLogTypeStatic, "ClassWithNoLogType"); -			// XXX: figure out what the exepcted response is for these  		testLogName(mRecorder, logFromClassWithLogTypeMember, "ClassWithLogType");  		testLogName(mRecorder, logFromClassWithLogTypeStatic, "ClassWithLogType");  	} @@ -457,11 +455,6 @@ namespace  		return "bar";  	} -	void uberLogger() -	{ -		LL_INFOS() << "uber(" << outerLogger() << "," << innerLogger() << ")" << LL_ENDL; -	} -  	class LogWhileLogging  	{  	public: @@ -494,17 +487,10 @@ namespace tut  		ensure_message_contains(1, "outside(moo)");  		ensure_message_count(2); -		uberLogger(); -		ensure_message_contains(2, "inside"); -		ensure_message_contains(3, "inside"); -		ensure_message_contains(4, "outside(moo)"); -		ensure_message_contains(5, "uber(bar,moo)"); -		ensure_message_count(6); -  		metaLogger(); -		ensure_message_contains(6, "logging"); -		ensure_message_contains(7, "meta(baz)"); -		ensure_message_count(8); +		ensure_message_contains(2, "logging"); +		ensure_message_contains(3, "meta(baz)"); +		ensure_message_count(4);  	}  	template<> template<> diff --git a/indra/llcommon/tests/lleventcoro_test.cpp b/indra/llcommon/tests/lleventcoro_test.cpp index cb5e15eff2..2096807e53 100755 --- a/indra/llcommon/tests/lleventcoro_test.cpp +++ b/indra/llcommon/tests/lleventcoro_test.cpp @@ -94,7 +94,6 @@ using coroutines::coroutine;  template<typename Iter>  bool match(Iter first, Iter last, std::string match) {    std::string::iterator i = match.begin(); -  i != match.end();    for(; (first != last) && (i != match.end()); ++i) {      if (*first != *i)        return false; diff --git a/indra/llcommon/tests/llframetimer_test.cpp b/indra/llcommon/tests/llframetimer_test.cpp index 8ac1c91a3a..be372bb855 100755 --- a/indra/llcommon/tests/llframetimer_test.cpp +++ b/indra/llcommon/tests/llframetimer_test.cpp @@ -84,25 +84,34 @@ namespace tut  	template<> template<>  	void frametimer_object_t::test<3>()  	{ +		clock_t t1 = clock(); +		ms_sleep(200); +		clock_t t2 = clock(); +		clock_t elapsed = t2 - t1 + 1; +		std::cout << "Note: using clock(), ms_sleep() actually took " << (long)elapsed << "ms" << std::endl; +  		F64 seconds_since_epoch = LLFrameTimer::getTotalSeconds();  		seconds_since_epoch += 2.0;  		LLFrameTimer timer;  		timer.setExpiryAt(seconds_since_epoch); -		ensure("timer not expired on create", !timer.hasExpired()); -		int ii; -		for(ii = 0; ii < 10; ++ii) +		/* +		 * Note that the ms_sleep(200) below is only guaranteed to return +		 * in 200ms _or_more_, so it should be true that by the 10th +		 * iteration we've gotten to the 2 seconds requested above +		 * and the timer should expire, but it can expire in fewer iterations +		 * if one or more of the ms_sleep calls takes longer. +		 * (as it did when we moved to Mac OS X 10.10) +		 */ +		int iterations_until_expiration = 0; +		while ( !timer.hasExpired() )  		{ -			ms_sleep(150); -			LLFrameTimer::updateFrameTime();			 -		} -		ensure("timer not expired after a bit", !timer.hasExpired()); -		for(ii = 0; ii < 10; ++ii) -		{ -			ms_sleep(100); -			LLFrameTimer::updateFrameTime();			 +			ms_sleep(200); +			LLFrameTimer::updateFrameTime(); +			iterations_until_expiration++;  		} -		ensure("timer expired", timer.hasExpired()); +		ensure("timer took too long to expire", iterations_until_expiration <= 10);  	} +	  /*  	template<> template<>  	void frametimer_object_t::test<4>() diff --git a/indra/llcommon/tests/llleap_test.cpp b/indra/llcommon/tests/llleap_test.cpp index 9ea822cb8d..2d88e2c676 100755 --- a/indra/llcommon/tests/llleap_test.cpp +++ b/indra/llcommon/tests/llleap_test.cpp @@ -17,7 +17,7 @@  // std headers  // external library headers  #include <boost/assign/list_of.hpp> -#include <boost/lambda/lambda.hpp> +#include <boost/phoenix/core/argument.hpp>  #include <boost/foreach.hpp>  // other Linden headers  #include "../test/lltut.h" @@ -38,24 +38,7 @@ StringVec sv(const StringVec& listof) { return listof; }  #define sleep(secs) _sleep((secs) * 1000)  #endif -#if ! LL_WINDOWS  const size_t BUFFERED_LENGTH = 1023*1024; // try wrangling just under a megabyte of data -#else -// "Then there's Windows... sigh." The "very large message" test is flaky in a -// way that seems to point to either the OS (nonblocking writes to pipes) or -// possibly the apr_file_write() function. Poring over log messages reveals -// that at some point along the way apr_file_write() returns 11 (Resource -// temporarily unavailable, i.e. EAGAIN) and says it wrote 0 bytes -- even -// though it did write the chunk! Our next write attempt retries the same -// chunk, resulting in the chunk being duplicated at the child end, corrupting -// the data stream. Much as I would love to be able to fix it for real, such a -// fix would appear to require distinguishing bogus EAGAIN returns from real -// ones -- how?? Empirically this behavior is only observed when writing a -// "very large message". To be able to move forward at all, try to bypass this -// particular failure by adjusting the size of a "very large message" on -// Windows. -const size_t BUFFERED_LENGTH = 65336; -#endif  // LL_WINDOWS  void waitfor(const std::vector<LLLeap*>& instances, int timeout=60)  { @@ -109,7 +92,7 @@ namespace tut          llleap_data():              reader(".py",                     // This logic is adapted from vita.viewerclient.receiveEvent() -                   boost::lambda::_1 << +                   boost::phoenix::placeholders::arg1 <<                     "import re\n"                     "import os\n"                     "import sys\n" @@ -403,7 +386,7 @@ namespace tut          AckAPI api;          Result result;          NamedTempFile script("py", -                             boost::lambda::_1 << +                             boost::phoenix::placeholders::arg1 <<                               "from " << reader_module << " import *\n"                               // make a request on our little API                               "request(pump='" << api.getName() << "', data={})\n" @@ -441,7 +424,7 @@ namespace tut          ReqIDAPI api;          Result result;          NamedTempFile script("py", -                             boost::lambda::_1 << +                             boost::phoenix::placeholders::arg1 <<                               "import sys\n"                               "from " << reader_module << " import *\n"                               // Note that since reader imports llsd, this @@ -484,7 +467,7 @@ namespace tut          ReqIDAPI api;          Result result;          NamedTempFile script("py", -                             boost::lambda::_1 << +                             boost::phoenix::placeholders::arg1 <<                               "import sys\n"                               "from " << reader_module << " import *\n"                               // Generate a very large string value. diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp index e4e766d51b..5ba343b183 100755 --- a/indra/llcommon/tests/llprocess_test.cpp +++ b/indra/llcommon/tests/llprocess_test.cpp @@ -85,7 +85,7 @@ static std::string readfile(const std::string& pathname, const std::string& desc      }      std::ifstream inf(pathname.c_str());      std::string output; -    tut::ensure(STRINGIZE("No output " << use_desc), std::getline(inf, output)); +    tut::ensure(STRINGIZE("No output " << use_desc), bool(std::getline(inf, output)));      std::string more;      while (std::getline(inf, more))      { @@ -154,7 +154,7 @@ struct PythonProcessLauncher      void launch()      {          mPy = LLProcess::create(mParams); -        tut::ensure(STRINGIZE("Couldn't launch " << mDesc << " script"), mPy); +        tut::ensure(STRINGIZE("Couldn't launch " << mDesc << " script"), bool(mPy));      }      /// Run Python script and wait for it to complete. @@ -873,7 +873,7 @@ namespace tut          std::string threw;                                              \          /* Both the following calls should work. */                     \          (PROCESS).GETPIPE(VALID);                                       \ -        ensure(#GETOPTPIPE "(" #VALID ") failed", (PROCESS).GETOPTPIPE(VALID)); \ +        ensure(#GETOPTPIPE "(" #VALID ") failed", bool((PROCESS).GETOPTPIPE(VALID))); \          /* pass obviously bogus PIPESLOT */                             \          CATCH_IN(threw, LLProcess::NoPipe, (PROCESS).GETPIPE(LLProcess::FILESLOT(4))); \          ensure_contains("didn't reject bad slot", threw, "no slot");    \ diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index b5893135ea..6fbb9abfc0 100755 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -46,9 +46,10 @@ typedef U32 uint32_t;  #include "boost/range.hpp"  #include "boost/foreach.hpp"  #include "boost/function.hpp" -#include "boost/lambda/lambda.hpp" -#include "boost/lambda/bind.hpp" -namespace lambda = boost::lambda; +#include "boost/bind.hpp" +#include "boost/phoenix/bind/bind_function.hpp" +#include "boost/phoenix/core/argument.hpp" +using namespace boost::phoenix;  #include "../llsd.h"  #include "../llsdserialize.h" @@ -1612,6 +1613,20 @@ namespace tut                 "print 'Running on', sys.platform\n");      } +    // helper for test<3> +    static void writeLLSDArray(std::ostream& out, const LLSD& array) +    { +        BOOST_FOREACH(LLSD item, llsd::inArray(array)) +        { +            LLSDSerialize::toNotation(item, out); +            // It's important to separate with newlines because Python's llsd +            // module doesn't support parsing from a file stream, only from a +            // string, so we have to know how much of the file to read into a +            // string. +            out << '\n'; +        } +    } +      template<> template<>      void TestPythonCompatibleObject::test<3>()      { @@ -1639,26 +1654,16 @@ namespace tut              "        assert False, 'Too many data items'\n";          // Create an llsdXXXXXX file containing 'data' serialized to -        // notation. It's important to separate with newlines because Python's -        // llsd module doesn't support parsing from a file stream, only from a -        // string, so we have to know how much of the file to read into a -        // string. +        // notation.          NamedTempFile file("llsd",                             // NamedTempFile's boost::function constructor                             // takes a callable. To this callable it passes the                             // std::ostream with which it's writing the -                           // NamedTempFile. This lambda-based expression -                           // first calls LLSD::Serialize() with that ostream, -                           // then streams a newline to it, etc. -                           (lambda::bind(LLSDSerialize::toNotation, cdata[0], lambda::_1), -                            lambda::_1 << '\n', -                            lambda::bind(LLSDSerialize::toNotation, cdata[1], lambda::_1), -                            lambda::_1 << '\n', -                            lambda::bind(LLSDSerialize::toNotation, cdata[2], lambda::_1), -                            lambda::_1 << '\n')); +                           // NamedTempFile. +                           boost::bind(writeLLSDArray, _1, cdata));          python("read C++ notation", -               lambda::_1 << +               placeholders::arg1 <<                 import_llsd <<                 "def parse_each(iterable):\n"                 "    for item in iterable:\n" @@ -1679,7 +1684,7 @@ namespace tut          NamedTempFile file("llsd", "");          python("write Python notation", -               lambda::_1 << +               placeholders::arg1 <<                 "from __future__ import with_statement\n" <<                 import_llsd <<                 "DATA = [\n" diff --git a/indra/llcommon/tests/llstring_test.cpp b/indra/llcommon/tests/llstring_test.cpp index 93d3968dbf..a7aa347222 100755 --- a/indra/llcommon/tests/llstring_test.cpp +++ b/indra/llcommon/tests/llstring_test.cpp @@ -27,11 +27,11 @@   */  #include "linden_common.h" -#include "../test/lltut.h"  #include <boost/assign/list_of.hpp>  #include "../llstring.h" -#include "StringVec.h" +#include "StringVec.h"                  // must come BEFORE lltut.h +#include "../test/lltut.h"  using boost::assign::list_of; diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp index 7482a89dac..b9632a7921 100755 --- a/indra/llcorehttp/_httpoprequest.cpp +++ b/indra/llcorehttp/_httpoprequest.cpp @@ -104,7 +104,6 @@ char * os_strltrim(char * str);  void os_strlower(char * str);  // Error testing and reporting for libcurl status codes -void check_curl_easy_code(CURLcode code);  void check_curl_easy_code(CURLcode code, int curl_setopt_option);  static const char * const LOG_CORE("CoreHttp"); @@ -588,9 +587,18 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)  					(mReqLength ? fmt1 : fmt2),  					(unsigned long) mReqOffset, (unsigned long) (mReqOffset + mReqLength - 1));  #else -		snprintf(range_line, sizeof(range_line), -				 (mReqLength ? fmt1 : fmt2), -				 (unsigned long) mReqOffset, (unsigned long) (mReqOffset + mReqLength - 1)); +		if ( mReqLength ) +		{ +			snprintf(range_line, sizeof(range_line), +					 fmt1, +					 (unsigned long) mReqOffset, (unsigned long) (mReqOffset + mReqLength - 1)); +		} +		else +		{ +			snprintf(range_line, sizeof(range_line), +					 fmt2, +					 (unsigned long) mReqOffset); +		}  #endif // LL_WINDOWS  		range_line[sizeof(range_line) - 1] = '\0';  		mCurlHeaders = curl_slist_append(mCurlHeaders, range_line); @@ -1151,18 +1159,4 @@ void check_curl_easy_code(CURLcode code, int curl_setopt_option)  	}  } - -void check_curl_easy_code(CURLcode code) -{ -	if (CURLE_OK != code) -	{ -		// Comment from old llcurl code which may no longer apply: -		// -		// linux appears to throw a curl error once per session for a bad initialization -		// at a pretty random time (when enabling cookies). -		LL_WARNS(LOG_CORE) << "libcurl error detected:  " << curl_easy_strerror(code) -						   << LL_ENDL; -	} -} -  }  // end anonymous namespace diff --git a/indra/llcorehttp/bufferstream.cpp b/indra/llcorehttp/bufferstream.cpp index 6553900eef..678bf5ea9f 100755 --- a/indra/llcorehttp/bufferstream.cpp +++ b/indra/llcorehttp/bufferstream.cpp @@ -257,8 +257,6 @@ std::streampos BufferArrayStreamBuf::seekoff(std::streamoff off,  			return ret;  		} -		if (pos < 0) -			return ret;  		if (pos > mBufferArray->size())  		{  			pos = mBufferArray->size(); diff --git a/indra/llcorehttp/examples/http_texture_load.cpp b/indra/llcorehttp/examples/http_texture_load.cpp index b76c874557..9d9631b980 100755 --- a/indra/llcorehttp/examples/http_texture_load.cpp +++ b/indra/llcorehttp/examples/http_texture_load.cpp @@ -212,7 +212,7 @@ int main(int argc, char** argv)  				char * end;  				value = strtoul(optarg, &end, 10); -				if (value < 0 || value > 100 || *end != '\0') +				if (value > 100 || *end != '\0')  				{  					usage(std::cerr);  					return 1; @@ -227,7 +227,7 @@ int main(int argc, char** argv)  				char * end;  				value = strtoul(optarg, &end, 10); -				if (value < 0 || value > 3 || *end != '\0') +				if (value > 3 || *end != '\0')  				{  					usage(std::cerr);  					return 1; diff --git a/indra/llcrashlogger/llcrashlock.cpp b/indra/llcrashlogger/llcrashlock.cpp index 7fd7860707..7dde1fcd69 100644 --- a/indra/llcrashlogger/llcrashlock.cpp +++ b/indra/llcrashlogger/llcrashlock.cpp @@ -106,7 +106,7 @@ LLSD LLCrashLock::getLockFile(std::string filename)  {  	LLSD lock_sd = LLSD::emptyMap(); -	llifstream ifile(filename); +	llifstream ifile(filename.c_str());  	if (ifile.is_open())  	{									             @@ -120,7 +120,7 @@ LLSD LLCrashLock::getLockFile(std::string filename)  bool LLCrashLock::putLockFile(std::string filename, const LLSD& data)  {          bool result = true; -    llofstream ofile(filename); +    llofstream ofile(filename.c_str());  	if (!LLSDSerialize::toXML(data,ofile))  	{ diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index d336eeaabc..16df27bb8e 100755 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -1036,13 +1036,13 @@ void LLImageRaw::copyLineScaled( U8* in, U8* out, S32 in_pixel_len, S32 out_pixe  			a *= norm_factor;  // skip conditional  			S32 t4 = x * out_pixel_step * components; -			out[t4 + 0] = U8(llround(r)); +			out[t4 + 0] = U8(ll_round(r));  			if (components >= 2) -				out[t4 + 1] = U8(llround(g)); +				out[t4 + 1] = U8(ll_round(g));  			if (components >= 3) -				out[t4 + 2] = U8(llround(b)); +				out[t4 + 2] = U8(ll_round(b));  			if( components == 4) -				out[t4 + 3] = U8(llround(a)); +				out[t4 + 3] = U8(ll_round(a));  		}  	}  } @@ -1117,10 +1117,10 @@ void LLImageRaw::compositeRowScaled4onto3( U8* in, U8* out, S32 in_pixel_len, S3  			b *= norm_factor;  			a *= norm_factor; -			in_scaled_r = U8(llround(r)); -			in_scaled_g = U8(llround(g)); -			in_scaled_b = U8(llround(b)); -			in_scaled_a = U8(llround(a)); +			in_scaled_r = U8(ll_round(r)); +			in_scaled_g = U8(ll_round(g)); +			in_scaled_b = U8(ll_round(b)); +			in_scaled_a = U8(ll_round(a));  		}  		if( in_scaled_a ) @@ -1172,7 +1172,7 @@ static std::string find_file(std::string &name, S8 *codec)  	for (int i=0; i<(int)(NUM_FILE_EXTENSIONS); i++)  	{  		tname = name + "." + std::string(file_extensions[i].exten); -		llifstream ifs(tname, llifstream::binary); +		llifstream ifs(tname.c_str(), llifstream::binary);  		if (ifs.is_open())  		{  			ifs.close(); @@ -1219,7 +1219,7 @@ bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip  		return false; // format not recognized  	} -	llifstream ifs(name, llifstream::binary); +	llifstream ifs(name.c_str(), llifstream::binary);  	if (!ifs.is_open())  	{  		// SJB: changed from LL_INFOS() to LL_DEBUGS() to reduce spam diff --git a/indra/llimage/llimagefilter.cpp b/indra/llimage/llimagefilter.cpp index 0b9d136910..41adc7be9a 100755 --- a/indra/llimage/llimagefilter.cpp +++ b/indra/llimage/llimagefilter.cpp @@ -54,7 +54,7 @@ LLImageFilter::LLImageFilter(const std::string& file_path) :      mStencilMax(1.0)  {      // Load filter description from file -	llifstream filter_xml(file_path); +	llifstream filter_xml(file_path.c_str());  	if (filter_xml.is_open())  	{  		// Load and parse the file diff --git a/indra/llkdu/llimagej2ckdu.h b/indra/llkdu/llimagej2ckdu.h index fb1f6535ba..02281152bf 100755 --- a/indra/llkdu/llimagej2ckdu.h +++ b/indra/llkdu/llimagej2ckdu.h @@ -36,7 +36,17 @@  #include "kdu_elementary.h"  #include "kdu_messaging.h"  #include "kdu_params.h" + +// don't *really* want to rebuild KDU so turn off specific warnings for this header +#if LL_DARWIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-private-field" +#include "kdu_compressed.h" +#pragma clang diagnostic pop +#else  #include "kdu_compressed.h" +#endif +  #include "kdu_sample_processing.h"  class LLKDUDecodeState; diff --git a/indra/llkdu/llkdumem.h b/indra/llkdu/llkdumem.h index dbdf88b2d9..fab913d93b 100755 --- a/indra/llkdu/llkdumem.h +++ b/indra/llkdu/llkdumem.h @@ -29,7 +29,17 @@  // Support classes for reading and writing from memory buffers in KDU  #define KDU_NO_THREADS +// don't *really* want to rebuild KDU so turn off specific warnings for this header +#if LL_DARWIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wself-assign-field" +#pragma clang diagnostic ignored "-Wunused-private-field"  #include "kdu_image.h" +#pragma clang diagnostic pop +#else +#include "kdu_image.h" +#endif +  #include "kdu_elementary.h"  #include "kdu_messaging.h"  #include "kdu_params.h" diff --git a/indra/llkdu/tests/llimagej2ckdu_test.cpp b/indra/llkdu/tests/llimagej2ckdu_test.cpp index 3f627b65e1..0605fad068 100755 --- a/indra/llkdu/tests/llimagej2ckdu_test.cpp +++ b/indra/llkdu/tests/llimagej2ckdu_test.cpp @@ -28,7 +28,16 @@  #include "linden_common.h"  // Class to test   #include "llimagej2ckdu.h" + +#if LL_DARWIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-private-field" +#include "llkdumem.h" +#pragma clang diagnostic pop +#else  #include "llkdumem.h" +#endif +  #include "kdu_block_coding.h"  // Tut header  #include "lltut.h" @@ -114,7 +123,6 @@ kdu_block_encoder::kdu_block_encoder() { }  kdu_block_decoder::kdu_block_decoder() { }  void kdu_block::set_max_passes(int , bool ) { }  void kdu_block::set_max_bytes(int , bool ) { } -void kdu_block::set_max_samples(int ) { }  void kdu_tile::close(kdu_thread_env* ) { }  int kdu_tile::get_num_components() { return 0; }  bool kdu_tile::get_ycc() { return false; } @@ -157,7 +165,7 @@ void kdu_codestream::get_valid_tiles(kdu_dims& ) { }  void kdu_codestream::create(kdu_compressed_source*, kdu_thread_env*) { }  void kdu_codestream::apply_input_restrictions( int, int, int, int, kdu_dims*, kdu_component_access_mode ) { }  void kdu_codestream::get_subsampling(int , kdu_coords&, bool ) { } -void kdu_codestream::flush(kdu_long *, int , kdu_uint16 *, bool, bool, double, kdu_thread_env*) { } +void kdu_codestream::flush(kdu_long *, int, kdu_uint16 *, bool, bool, double, kdu_thread_env*, int) { }  void kdu_codestream::set_resilient(bool ) { }  int kdu_codestream::get_num_components(bool ) { return 0; }  kdu_long kdu_codestream::get_total_bytes(bool ) { return 0; } @@ -175,8 +183,7 @@ kdu_block* kdu_subband::open_block(kdu_coords, int*, kdu_thread_env*) { return N  bool kdu_codestream_comment::put_text(const char*) { return false; }  void kdu_customize_warnings(kdu_message*) { }  void kdu_customize_errors(kdu_message*) { } - -kdu_long kdu_multi_analysis::create(kdu_codestream, kdu_tile, bool, kdu_roi_image*, bool, int, kdu_thread_env*, kdu_thread_queue*, bool ) { kdu_long a = 0; return a; } +kdu_long kdu_multi_analysis::create(kdu_codestream, kdu_tile, kdu_thread_env*, kdu_thread_queue*, int, kdu_roi_image*, int) { kdu_long a = 0; return a; }  siz_params::siz_params() : kdu_params(NULL, false, false, false, false, false) { }  void siz_params::finalize(bool ) { }  void siz_params::copy_with_xforms(kdu_params*, int, int, bool, bool, bool) { } @@ -184,20 +191,12 @@ int siz_params::write_marker_segment(kdu_output*, kdu_params*, int) { return 0;  bool siz_params::check_marker_segment(kdu_uint16, int, kdu_byte a[], int&) { return false; }  bool siz_params::read_marker_segment(kdu_uint16, int, kdu_byte a[], int) { return false; } -#ifdef LL_LINUX -// Linux use the old pre KDU v7.0.0 -// *TODO: Supress this legacy stubbs once Linux migrates to v7.0.0 -kdu_decoder::kdu_decoder(kdu_subband , kdu_sample_allocator*, bool , float, int, kdu_thread_env*, kdu_thread_queue*) { } -void kdu_codestream::create(siz_params*, kdu_compressed_target*, kdu_dims*, int, kdu_long ) { } -void kdu_convert_ycc_to_rgb(kdu_line_buf&, kdu_line_buf&, kdu_line_buf&, int) { } -#else  kdu_decoder::kdu_decoder(kdu_subband , kdu_sample_allocator*, bool , float, int, kdu_thread_env*, kdu_thread_queue*, int) { }  void kdu_codestream::create(siz_params*, kdu_compressed_target*, kdu_dims*, int, kdu_long, kdu_thread_env* ) { }  void (*kdu_convert_ycc_to_rgb_rev16)(kdu_int16*,kdu_int16*,kdu_int16*,int);  void (*kdu_convert_ycc_to_rgb_irrev16)(kdu_int16*,kdu_int16*,kdu_int16*,int);  void (*kdu_convert_ycc_to_rgb_rev32)(kdu_int32*,kdu_int32*,kdu_int32*,int);  void (*kdu_convert_ycc_to_rgb_irrev32)(float*,float*,float*,int); -#endif  // -------------------------------------------------------------------------------------------  // TUT diff --git a/indra/llmath/llline.cpp b/indra/llmath/llline.cpp index f26231840b..cfee315b55 100755 --- a/indra/llmath/llline.cpp +++ b/indra/llmath/llline.cpp @@ -30,7 +30,6 @@  #include "llline.h"  #include "llrand.h" -const F32 SOME_SMALL_NUMBER = 1.0e-5f;  const F32 SOME_VERY_SMALL_NUMBER = 1.0e-8f;  LLLine::LLLine() diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h index a8b27ad189..93b9f22b25 100755 --- a/indra/llmath/llmath.h +++ b/indra/llmath/llmath.h @@ -206,16 +206,16 @@ inline S32 llceil( F32 f )  #ifndef BOGUS_ROUND  // Use this round.  Does an arithmetic round (0.5 always rounds up) -inline S32 llround(const F32 val) +inline S32 ll_round(const F32 val)  {  	return llfloor(val + 0.5f);  }  #else // BOGUS_ROUND -// Old llround implementation - does banker's round (toward nearest even in the case of a 0.5. +// Old ll_round implementation - does banker's round (toward nearest even in the case of a 0.5.  // Not using this because we don't have a consistent implementation on both platforms, use  // llfloor(val + 0.5f), which is consistent on all platforms. -inline S32 llround(const F32 val) +inline S32 ll_round(const F32 val)  {  	#if LL_WINDOWS  		// Note: assumes that the floating point control word is set to rounding mode (the default) @@ -254,12 +254,12 @@ inline int round_int(double x)  }  #endif // BOGUS_ROUND -inline F32 llround( F32 val, F32 nearest ) +inline F32 ll_round( F32 val, F32 nearest )  {  	return F32(floor(val * (1.0f / nearest) + 0.5f)) * nearest;  } -inline F64 llround( F64 val, F64 nearest ) +inline F64 ll_round( F64 val, F64 nearest )  {  	return F64(floor(val * (1.0 / nearest) + 0.5)) * nearest;  } @@ -309,25 +309,6 @@ const S32 LL_SHIFT_AMOUNT			= 16;                    //16.16 fixed point represe  	#define LL_MAN_INDEX				1  #endif -/* Deprecated: use llround(), lltrunc(), or llfloor() instead -// ================================================================================================ -// Real2Int -// ================================================================================================ -inline S32 F64toS32(F64 val) -{ -	val		= val + LL_DOUBLE_TO_FIX_MAGIC; -	return ((S32*)&val)[LL_MAN_INDEX] >> LL_SHIFT_AMOUNT;  -} - -// ================================================================================================ -// Real2Int -// ================================================================================================ -inline S32 F32toS32(F32 val) -{ -	return F64toS32 ((F64)val); -} -*/ -  ////////////////////////////////////////////////  //  // Fast exp and log @@ -351,9 +332,7 @@ static union  #define LL_EXP_A (1048576 * OO_LN2) // use 1512775 for integer  #define LL_EXP_C (60801)			// this value of C good for -4 < y < 4 -#define LL_FAST_EXP(y) (LLECO.n.i = llround(F32(LL_EXP_A*(y))) + (1072693248 - LL_EXP_C), LLECO.d) - - +#define LL_FAST_EXP(y) (LLECO.n.i = ll_round(F32(LL_EXP_A*(y))) + (1072693248 - LL_EXP_C), LLECO.d)  inline F32 llfastpow(const F32 x, const F32 y)  { @@ -370,9 +349,6 @@ inline F32 snap_to_sig_figs(F32 foo, S32 sig_figs)  		bar *= 10.f;  	} -	//F32 new_foo = (F32)llround(foo * bar); -	// the llround() implementation sucks.  Don't us it. -  	F32 sign = (foo > 0.f) ? 1.f : -1.f;  	F32 new_foo = F32( S64(foo * bar + sign * 0.5f));  	new_foo /= bar; diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 7b5240c651..280d2653d3 100755 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -322,7 +322,7 @@ public:  		//is it here?  		if (isInside(data->getPositionGroup()))  		{ -			if (((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius()) || +			if ((((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius())) ||  				(data->getBinRadius() > getSize()[0] &&	parent && parent->getElementCount() >= gOctreeMaxCapacity)))   			{ //it belongs here  				mData.push_back(NULL); @@ -445,7 +445,7 @@ public:  			mDataEnd = &mData[0];  		} -		notifyRemoval(data); +		this->notifyRemoval(data);  		checkAlive();  	} @@ -711,7 +711,7 @@ public:  			//(don't notify listeners of addition)  			for (U32 i = 0; i < child->getChildCount(); i++)  			{ -				addChild(child->getChild(i), TRUE); +				this->addChild(child->getChild(i), TRUE);  			}  			//destroy child @@ -755,10 +755,10 @@ public:  			return false;  		} -		if (this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup())) +		if (this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup()))  		{  			//we got it, just act like a branch -			oct_node* node = getNodeAt(data); +			oct_node* node = this->getNodeAt(data);  			if (node == this)  			{  				LLOctreeNode<T>::insert(data); @@ -771,7 +771,7 @@ public:  		else if (this->getChildCount() == 0)  		{  			//first object being added, just wrap it up -			while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup()))) +			while (!(this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup())))  			{  				LLVector4a center, size;  				center = this->getCenter(); @@ -786,7 +786,7 @@ public:  		}  		else  		{ -			while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup()))) +			while (!(this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup())))  			{  				//the data is outside the root node, we need to grow  				LLVector4a center(this->getCenter()); @@ -814,7 +814,7 @@ public:  				//clear our children and add the root copy  				this->clearChildren(); -				addChild(newnode); +				this->addChild(newnode);  			}  			//insert the data diff --git a/indra/llmath/llquantize.h b/indra/llmath/llquantize.h index 1595dbecf8..10c950abbb 100755 --- a/indra/llmath/llquantize.h +++ b/indra/llmath/llquantize.h @@ -52,7 +52,7 @@ inline U16 F32_to_U16_ROUND(F32 val, F32 lower, F32 upper)  	val /= (upper - lower);  	// round the value.   Sreturn the U16 -	return (U16)(llround(val*U16MAX)); +	return (U16)(ll_round(val*U16MAX));  } @@ -92,7 +92,7 @@ inline U8 F32_to_U8_ROUND(F32 val, F32 lower, F32 upper)  	val /= (upper - lower);  	// return the rounded U8 -	return (U8)(llround(val*U8MAX)); +	return (U8)(ll_round(val*U8MAX));  } diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index adf6e790d3..c2198b91a7 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -56,8 +56,6 @@  #define DEBUG_SILHOUETTE_NORMALS 0 // TomY: Use this to display normals using the silhouette  #define DEBUG_SILHOUETTE_EDGE_MAP 0 // DaveP: Use this to display edge map using the silhouette -const F32 CUT_MIN = 0.f; -const F32 CUT_MAX = 1.f;  const F32 MIN_CUT_DELTA = 0.02f;  const F32 HOLLOW_MIN = 0.f; @@ -560,7 +558,7 @@ void LLProfile::genNGon(const LLProfileParams& params, S32 sides, F32 offset, F3  	// Scale to have size "match" scale.  Compensates to get object to generally fill bounding box. -	S32 total_sides = llround(sides / ang_scale);	// Total number of sides all around +	S32 total_sides = ll_round(sides / ang_scale);	// Total number of sides all around  	if (total_sides < 8)  	{ @@ -2076,7 +2074,7 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge  	generate(); -	if (mParams.getSculptID().isNull() && mParams.getSculptType() == LL_SCULPT_TYPE_NONE || mParams.getSculptType() == LL_SCULPT_TYPE_MESH) +	if ((mParams.getSculptID().isNull() && mParams.getSculptType() == LL_SCULPT_TYPE_NONE) || mParams.getSculptType() == LL_SCULPT_TYPE_MESH)  	{  		createVolumeFaces();  	} @@ -4038,7 +4036,6 @@ LLVertexIndexPair::LLVertexIndexPair(const LLVector3 &vertex, const S32 index)  }  const F32 VERTEX_SLOP = 0.00001f; -const F32 VERTEX_SLOP_SQRD = VERTEX_SLOP * VERTEX_SLOP;  struct lessVertex  { @@ -4925,9 +4922,7 @@ F64 find_vertex_score(LLVCacheVertexData& data)  {  	F64 score = -1.0; -	if (data.mActiveTriangles >= 0) -	{  -		score = 0.0; +	score = 0.0;  	S32 cache_idx = data.mCacheTag; @@ -4949,9 +4944,8 @@ F64 find_vertex_score(LLVCacheVertexData& data)  	}  	//bonus points for having low valence -		F64 valence_boost = pow((F64)data.mActiveTriangles, -FindVertexScore_ValenceBoostPower); +	F64 valence_boost = pow((F64)data.mActiveTriangles, -FindVertexScore_ValenceBoostPower);  	score += FindVertexScore_ValenceBoostScale * valence_boost; -	}  	return score;  } diff --git a/indra/llmath/tests/llquaternion_test.cpp b/indra/llmath/tests/llquaternion_test.cpp index e69010b2d6..3490829743 100755 --- a/indra/llmath/tests/llquaternion_test.cpp +++ b/indra/llmath/tests/llquaternion_test.cpp @@ -175,10 +175,10 @@ namespace tut  	void llquat_test_object_t::test<6>()  	{  		LLQuaternion quat1(3.0f, 2.0f, 6.0f, 0.0f), quat2(1.0f, 1.0f, 1.0f, 1.0f); -		ensure("1. The two values are different", llround(12.000000f, 2) == llround(dot(quat1, quat2), 2)); +		ensure("1. The two values are different", ll_round(12.000000f, 2) == ll_round(dot(quat1, quat2), 2));  		LLQuaternion quat0(3.0f, 9.334f, 34.5f, 23.0f), quat(34.5f, 23.23f, 2.0f, 45.5f); -		ensure("2. The two values are different", llround(1435.828807f, 2) == llround(dot(quat0, quat), 2)); +		ensure("2. The two values are different", ll_round(1435.828807f, 2) == ll_round(dot(quat0, quat), 2));  	}  	//test case for LLQuaternion &LLQuaternion::constrain(F32 radians) fn. diff --git a/indra/llmath/tests/mathmisc_test.cpp b/indra/llmath/tests/mathmisc_test.cpp index 91a2e6c009..f12140cf8f 100755 --- a/indra/llmath/tests/mathmisc_test.cpp +++ b/indra/llmath/tests/mathmisc_test.cpp @@ -128,33 +128,33 @@ namespace tut  	void math_object::test<8>()  	{  		F32 val = 430903.2f; -		S32 val1 = llround(val); -		ensure("float llround value 1", (430903 == val1)); +		S32 val1 = ll_round(val); +		ensure("float ll_round value 1", (430903 == val1));  		val = -430903.9f; -		val1 = llround(val); -		ensure("float llround value 2", (-430904 == val1)); +		val1 = ll_round(val); +		ensure("float ll_round value 2", (-430904 == val1));  	}  	template<> template<>  	void math_object::test<9>()  	{  		F32 val = 430905.2654f, nearest = 100.f; -		val = llround(val, nearest); -		ensure("float llround value 1", (430900 == val)); +		val = ll_round(val, nearest); +		ensure("float ll_round value 1", (430900 == val));  		val = -430905.2654f, nearest = 10.f; -		val = llround(val, nearest); -		ensure("float llround value 1", (-430910 == val)); +		val = ll_round(val, nearest); +		ensure("float ll_round value 1", (-430910 == val));  	}  	template<> template<>  	void math_object::test<10>()  	{  		F64 val = 430905.2654, nearest = 100.0; -		val = llround(val, nearest); -		ensure("double llround value 1", (430900 == val)); +		val = ll_round(val, nearest); +		ensure("double ll_round value 1", (430900 == val));  		val = -430905.2654, nearest = 10.0; -		val = llround(val, nearest); -		ensure("double llround value 1", (-430910.00000 == val)); +		val = ll_round(val, nearest); +		ensure("double ll_round value 1", (-430910.00000 == val));  	}  	template<> template<> diff --git a/indra/llmath/tests/v4coloru_test.cpp b/indra/llmath/tests/v4coloru_test.cpp index 128f6f3564..12e607a820 100755 --- a/indra/llmath/tests/v4coloru_test.cpp +++ b/indra/llmath/tests/v4coloru_test.cpp @@ -300,8 +300,8 @@ namespace tut  		LLColor4U llcolor4u(r,g,b,a),llcolor4u1;  		const F32 fVal = 3.f;  		llcolor4u1 = llcolor4u.multAll(fVal); -		ensure("multAll:Fail to multiply ", (((U8)llround(r * fVal) == llcolor4u1.mV[VX]) && (U8)llround(g * fVal) == llcolor4u1.mV[VY] -											&& ((U8)llround(b * fVal) == llcolor4u1.mV[VZ])&& ((U8)llround(a * fVal) == llcolor4u1.mV[VW])));		 +		ensure("multAll:Fail to multiply ", (((U8)ll_round(r * fVal) == llcolor4u1.mV[VX]) && (U8)ll_round(g * fVal) == llcolor4u1.mV[VY] +											&& ((U8)ll_round(b * fVal) == llcolor4u1.mV[VZ])&& ((U8)ll_round(a * fVal) == llcolor4u1.mV[VW])));		  	}  	template<> template<> @@ -329,8 +329,8 @@ namespace tut  		llcolor4u.setVecScaleClamp(color3);  		const S32 MAX_COLOR = 255;  		F32 color_scale_factor = MAX_COLOR/r; -		S32 r2 = llround(r * color_scale_factor); -		S32 g2 = llround(g * color_scale_factor); +		S32 r2 = ll_round(r * color_scale_factor); +		S32 g2 = ll_round(g * color_scale_factor);  		ensure("setVecScaleClamp():Fail to add the value ",  ((r2 == llcolor4u.mV[VX]) && (g2 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));  	}  } diff --git a/indra/llmath/v4color.cpp b/indra/llmath/v4color.cpp index cd2be7c8fd..79a64b24f2 100755 --- a/indra/llmath/v4color.cpp +++ b/indra/llmath/v4color.cpp @@ -125,10 +125,10 @@ LLColor4 LLColor4::cyan6(0.2f, 0.6f, 0.6f, 1.0f);  LLColor4::operator const LLColor4U() const  {  	return LLColor4U( -		(U8)llclampb(llround(mV[VRED]*255.f)), -		(U8)llclampb(llround(mV[VGREEN]*255.f)), -		(U8)llclampb(llround(mV[VBLUE]*255.f)), -		(U8)llclampb(llround(mV[VALPHA]*255.f))); +		(U8)llclampb(ll_round(mV[VRED]*255.f)), +		(U8)llclampb(ll_round(mV[VGREEN]*255.f)), +		(U8)llclampb(ll_round(mV[VBLUE]*255.f)), +		(U8)llclampb(ll_round(mV[VALPHA]*255.f)));  }  LLColor4::LLColor4(const LLColor3 &vec, F32 a) diff --git a/indra/llmath/v4coloru.h b/indra/llmath/v4coloru.h index 12da7e2dd7..fddad34978 100755 --- a/indra/llmath/v4coloru.h +++ b/indra/llmath/v4coloru.h @@ -353,10 +353,10 @@ inline LLColor4U LLColor4U::multAll(const F32 k)  {  	// Round to nearest  	return LLColor4U( -		(U8)llround(mV[VX] * k), -		(U8)llround(mV[VY] * k), -		(U8)llround(mV[VZ] * k), -		(U8)llround(mV[VW] * k)); +		(U8)ll_round(mV[VX] * k), +		(U8)ll_round(mV[VY] * k), +		(U8)ll_round(mV[VZ] * k), +		(U8)ll_round(mV[VW] * k));  }  /*  inline LLColor4U operator*(const LLColor4U &a, U8 k) @@ -471,7 +471,7 @@ void LLColor4U::setVecScaleClamp(const LLColor4& color)  		color_scale_factor /= max_color;  	}  	const S32 MAX_COLOR = 255; -	S32 r = llround(color.mV[0] * color_scale_factor); +	S32 r = ll_round(color.mV[0] * color_scale_factor);  	if (r > MAX_COLOR)  	{  		r = MAX_COLOR; @@ -482,7 +482,7 @@ void LLColor4U::setVecScaleClamp(const LLColor4& color)  	}  	mV[0] = r; -	S32 g = llround(color.mV[1] * color_scale_factor); +	S32 g = ll_round(color.mV[1] * color_scale_factor);  	if (g > MAX_COLOR)  	{  		g = MAX_COLOR; @@ -493,7 +493,7 @@ void LLColor4U::setVecScaleClamp(const LLColor4& color)  	}  	mV[1] = g; -	S32 b = llround(color.mV[2] * color_scale_factor); +	S32 b = ll_round(color.mV[2] * color_scale_factor);  	if (b > MAX_COLOR)  	{  		b = MAX_COLOR; @@ -505,7 +505,7 @@ void LLColor4U::setVecScaleClamp(const LLColor4& color)  	mV[2] = b;  	// Alpha shouldn't be scaled, just clamped... -	S32 a = llround(color.mV[3] * MAX_COLOR); +	S32 a = ll_round(color.mV[3] * MAX_COLOR);  	if (a > MAX_COLOR)  	{  		a = MAX_COLOR; @@ -527,7 +527,7 @@ void LLColor4U::setVecScaleClamp(const LLColor3& color)  	}  	const S32 MAX_COLOR = 255; -	S32 r = llround(color.mV[0] * color_scale_factor); +	S32 r = ll_round(color.mV[0] * color_scale_factor);  	if (r > MAX_COLOR)  	{  		r = MAX_COLOR; @@ -539,7 +539,7 @@ void LLColor4U::setVecScaleClamp(const LLColor3& color)  	}  	mV[0] = r; -	S32 g = llround(color.mV[1] * color_scale_factor); +	S32 g = ll_round(color.mV[1] * color_scale_factor);  	if (g > MAX_COLOR)  	{  		g = MAX_COLOR; @@ -551,7 +551,7 @@ void LLColor4U::setVecScaleClamp(const LLColor3& color)  	}  	mV[1] = g; -	S32 b = llround(color.mV[2] * color_scale_factor); +	S32 b = ll_round(color.mV[2] * color_scale_factor);  	if (b > MAX_COLOR)  	{  		b = MAX_COLOR; diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index d02a60b7b2..549708097a 100755 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -355,9 +355,7 @@ void LLAvatarNameCache::requestNamesViaCapability()  	if (!url.empty())  	{ -		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::requestNamesViaCapability requested " -								 << ids << " ids" -								 << LL_ENDL; +		LL_INFOS("AvNameCache") << "LLAvatarNameCache::requestNamesViaCapability getting " << ids << " ids" << LL_ENDL;  		LLHTTPClient::get(url, new LLAvatarNameResponder(agent_ids));  	}  } @@ -381,8 +379,7 @@ void LLAvatarNameCache::legacyNameFetch(const LLUUID& agent_id,  										const std::string& full_name,  										bool is_group)  { -	LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::legacyNameFetch " -	                         << "agent " << agent_id << " " +	LL_DEBUGS("AvNameCache") << "LLAvatarNameCache agent " << agent_id << " "  							 << "full name '" << full_name << "'"  	                         << ( is_group ? " [group]" : "" )  	                         << LL_ENDL; @@ -411,7 +408,7 @@ void LLAvatarNameCache::requestNamesViaLegacy()  		// invoked below.  This should never happen in practice.  		sPendingQueue[agent_id] = now; -		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::requestNamesViaLegacy agent " << agent_id << LL_ENDL; +		LL_DEBUGS("AvNameCache") << "agent " << agent_id << LL_ENDL;  		gCacheName->get(agent_id, false,  // legacy compatibility  			boost::bind(&LLAvatarNameCache::legacyNameCallback, _1, _2, _3)); @@ -429,12 +426,13 @@ void LLAvatarNameCache::cleanupClass()  	sCache.clear();  } -void LLAvatarNameCache::importFile(std::istream& istr) +bool LLAvatarNameCache::importFile(std::istream& istr)  {  	LLSD data;  	if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(data, istr))  	{ -		return; +        LL_WARNS("AvNameCache") << "avatar name cache data xml parse failed" << LL_ENDL; +		return false;  	}  	// by convention LLSD storage is a map @@ -450,17 +448,19 @@ void LLAvatarNameCache::importFile(std::istream& istr)  		av_name.fromLLSD( it->second );  		sCache[agent_id] = av_name;  	} -    LL_INFOS("AvNameCache") << "loaded " << sCache.size() << LL_ENDL; - +    LL_INFOS("AvNameCache") << "LLAvatarNameCache loaded " << sCache.size() << LL_ENDL;  	// Some entries may have expired since the cache was stored,      // but they will be flushed in the first call to eraseUnrefreshed      // from LLAvatarNameResponder::idle + +    return true;  }  void LLAvatarNameCache::exportFile(std::ostream& ostr)  {  	LLSD agents;  	F64 max_unrefreshed = LLFrameTimer::getTotalSeconds() - MAX_UNREFRESHED_TIME; +    LL_INFOS("AvNameCache") << "LLAvatarNameCache at exit cache has " << sCache.size() << LL_ENDL;  	cache_t::const_iterator it = sCache.begin();  	for ( ; it != sCache.end(); ++it)  	{ @@ -473,6 +473,7 @@ void LLAvatarNameCache::exportFile(std::ostream& ostr)  			agents[agent_id.asString()] = av_name.asLLSD();  		}  	} +    LL_INFOS("AvNameCache") << "LLAvatarNameCache returning " << agents.size() << LL_ENDL;  	LLSD data;  	data["agents"] = agents;  	LLSDSerialize::toPrettyXML(data, ostr); @@ -515,6 +516,7 @@ void LLAvatarNameCache::idle()          }          else          { +            LL_WARNS_ONCE("AvNameCache") << "LLAvatarNameCache still using legacy api" << LL_ENDL;              requestNamesViaLegacy();          }  	} @@ -552,24 +554,26 @@ void LLAvatarNameCache::eraseUnrefreshed()      if (!sLastExpireCheck || sLastExpireCheck < max_unrefreshed)      {          sLastExpireCheck = now; - +        S32 expired = 0;          for (cache_t::iterator it = sCache.begin(); it != sCache.end();)          {              const LLAvatarName& av_name = it->second;              if (av_name.mExpires < max_unrefreshed)              { -                LL_DEBUGS("AvNameCache") << it->first  +                LL_DEBUGS("AvNameCacheExpired") << "LLAvatarNameCache " << it->first                                            << " user '" << av_name.getAccountName() << "' "                                           << "expired " << now - av_name.mExpires << " secs ago"                                           << LL_ENDL;                  sCache.erase(it++); +                expired++;              }  			else  			{  				++it;  			}          } -        LL_INFOS("AvNameCache") << sCache.size() << " cached avatar names" << LL_ENDL; +        LL_INFOS("AvNameCache") << "LLAvatarNameCache expired " << expired << " cached avatar names, " +                                << sCache.size() << " remaining" << LL_ENDL;  	}  } @@ -590,8 +594,7 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)  			{  				if (!isRequestPending(agent_id))  				{ -					LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::get " -											 << "refresh agent " << agent_id +					LL_DEBUGS("AvNameCache") << "LLAvatarNameCache refresh agent " << agent_id  											 << LL_ENDL;  					sAskQueue.insert(agent_id);  				} @@ -603,9 +606,7 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)  	if (!isRequestPending(agent_id))  	{ -		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::get " -								 << "queue request for agent " << agent_id -								 << LL_ENDL; +		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache queue request for agent " << agent_id << LL_ENDL;  		sAskQueue.insert(agent_id);  	} @@ -734,7 +735,7 @@ bool LLAvatarNameCache::expirationFromCacheControl(const LLSD& headers, F64 *exp  			fromCacheControl = true;  		}  	} -	LL_DEBUGS("AvNameCache") +	LL_DEBUGS("AvNameCache") << "LLAvatarNameCache "  		<< ( fromCacheControl ? "expires based on cache control " : "default expiration " )  		<< "in " << *expires - now << " seconds"  		<< LL_ENDL; diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index ea016b3125..5a10053a69 100755 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -46,7 +46,7 @@ namespace LLAvatarNameCache  	void cleanupClass();  	// Import/export the name cache to file. -	void importFile(std::istream& istr); +	bool importFile(std::istream& istr);  	void exportFile(std::ostream& ostr);  	// On the viewer, usually a simulator capabilitity. diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp index 4dd8d04656..daf3e0b4de 100755 --- a/indra/llmessage/llcachename.cpp +++ b/indra/llmessage/llcachename.cpp @@ -51,9 +51,6 @@ static const std::string NAME("name");  // We won't re-request a name during this time  const U32 PENDING_TIMEOUT_SECS = 5 * 60; -// File version number -const S32 CN_FILE_VERSION = 2; -  // Globals  LLCacheName* gCacheName = NULL;  std::map<std::string, std::string> LLCacheName::sCacheName; diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp index 955a66f864..8dbe2f8411 100755 --- a/indra/llmessage/llcircuit.cpp +++ b/indra/llmessage/llcircuit.cpp @@ -689,7 +689,7 @@ void LLCircuitData::checkPacketInID(TPACKETID id, BOOL receive_resent)  	// now, check to see if we've got a gap      U32 gap = 0; -	if ((mPacketsInID == id)) +	if (mPacketsInID == id)  	{  		// nope! bump and wrap the counter, then return  		mPacketsInID++; diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp index a30140e8f3..e202154445 100755 --- a/indra/llmessage/llhttpassetstorage.cpp +++ b/indra/llmessage/llhttpassetstorage.cpp @@ -47,8 +47,7 @@  const	char* const	LOCAL_ASSET_URL_FORMAT		= "http://%s:12041/asset";  const U32 MAX_RUNNING_REQUESTS = 1; -const F32 MAX_PROCESSING_TIME = 0.005f; -const S32 CURL_XFER_BUFFER_SIZE = 65536; +  // Try for 30 minutes for now.  const F32 GET_URL_TO_FILE_TIMEOUT = 1800.0f; diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp index 200116337d..f8db3dded2 100755 --- a/indra/llmessage/llhttpclient.cpp +++ b/indra/llmessage/llhttpclient.cpp @@ -157,7 +157,7 @@ namespace  		{  			LLBufferStream ostream(channels, buffer.get()); -			llifstream fstream(mFilename, std::iostream::binary | std::iostream::out); +			llifstream fstream(mFilename.c_str(), std::iostream::binary | std::iostream::out);  			if(fstream.is_open())  			{  				fstream.seekg(0, std::ios::end); diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h index 9a0a427efd..7fd4cee8ba 100755 --- a/indra/llmessage/lliopipe.h +++ b/indra/llmessage/lliopipe.h @@ -56,11 +56,8 @@ void pump_debug(const char *file, S32 line);  /**   * intrusive pointer support   */ -namespace boost -{ -	void intrusive_ptr_add_ref(LLIOPipe* p); -	void intrusive_ptr_release(LLIOPipe* p); -}; +void intrusive_ptr_add_ref(LLIOPipe* p); +void intrusive_ptr_release(LLIOPipe* p);  /**    * @class LLIOPipe @@ -251,68 +248,21 @@ protected:  		LLPumpIO* pump) = 0;  private: -	friend void boost::intrusive_ptr_add_ref(LLIOPipe* p); -	friend void boost::intrusive_ptr_release(LLIOPipe* p); +	friend void intrusive_ptr_add_ref(LLIOPipe* p); +	friend void intrusive_ptr_release(LLIOPipe* p);  	U32 mReferenceCount;  }; -namespace boost +inline void intrusive_ptr_add_ref(LLIOPipe* p)  { -	inline void intrusive_ptr_add_ref(LLIOPipe* p) -	{ -		++p->mReferenceCount; -	} -	inline void intrusive_ptr_release(LLIOPipe* p) +	++p->mReferenceCount; +} +inline void intrusive_ptr_release(LLIOPipe* p) +{ +	if(p && 0 == --p->mReferenceCount)  	{ -		if(p && 0 == --p->mReferenceCount) -		{ -			delete p; -		} +		delete p;  	} -}; - - -#if 0 -/**  - * @class LLIOBoiler - * @brief This class helps construct new LLIOPipe specializations - * @see LLIOPipe - * - * THOROUGH_DESCRIPTION - */ -class LLIOBoiler : public LLIOPipe -{ -public: -	LLIOBoiler(); -	virtual ~LLIOBoiler(); - -protected: -	/* @name LLIOPipe virtual implementations -	 */ -	//@{ -	/**  -	 * @brief Process the data in buffer -	 */ -	virtual EStatus process_impl( -		const LLChannelDescriptors& channels, -		buffer_ptr_t& buffer, -		bool& eos, -		LLSD& context, -		LLPumpIO* pump); -	//@} -}; - -// virtual -LLIOPipe::EStatus process_impl( -	const LLChannelDescriptors& channels, -	buffer_ptr_t& buffer, -	bool& eos, -	LLSD& context, -	LLPumpIO* pump) -{ -	return STATUS_NOT_IMPLEMENTED;  } -#endif // #if 0 - use this block as a boilerplate -  #endif // LL_LLIOPIPE_H diff --git a/indra/llmessage/llmessageconfig.cpp b/indra/llmessage/llmessageconfig.cpp index f8b2c8f5a6..64e79d6767 100755 --- a/indra/llmessage/llmessageconfig.cpp +++ b/indra/llmessage/llmessageconfig.cpp @@ -96,7 +96,7 @@ bool LLMessageConfigFile::loadFile()  {  	LLSD data;      { -        llifstream file(filename()); +        llifstream file(filename().c_str());          if (file.is_open())          { diff --git a/indra/llmessage/llpartdata.cpp b/indra/llmessage/llpartdata.cpp index 41a0310ce0..53aa35c0f9 100755 --- a/indra/llmessage/llpartdata.cpp +++ b/indra/llmessage/llpartdata.cpp @@ -49,11 +49,6 @@ const S32 PS_MAX_DATA_BLOCK_SIZE = PS_SYS_DATA_BLOCK_SIZE+  const S32 PS_LEGACY_DATA_BLOCK_SIZE = PS_SYS_DATA_BLOCK_SIZE + PS_LEGACY_PART_DATA_BLOCK_SIZE; - -const U32 PART_DATA_MASK = LLPartData::LL_PART_DATA_GLOW | LLPartData::LL_PART_DATA_BLEND; - - -  const F32 MAX_PART_SCALE = 4.f;  bool LLPartData::hasGlow() const diff --git a/indra/llmessage/llregionhandle.h b/indra/llmessage/llregionhandle.h index e3ddd46acd..085757dcbc 100755 --- a/indra/llmessage/llregionhandle.h +++ b/indra/llmessage/llregionhandle.h @@ -73,7 +73,7 @@ inline BOOL to_region_handle(const F32 x_pos, const F32 y_pos, U64 *region_handl  	}  	else  	{ -		x_int = (U32)llround(x_pos); +		x_int = (U32)ll_round(x_pos);  	}  	if (y_pos < 0.f)  	{ @@ -82,7 +82,7 @@ inline BOOL to_region_handle(const F32 x_pos, const F32 y_pos, U64 *region_handl  	}  	else  	{ -		y_int = (U32)llround(y_pos); +		y_int = (U32)ll_round(y_pos);  	}  	*region_handle = to_region_handle(x_int, y_int);  	return TRUE; diff --git a/indra/llmessage/llservicebuilder.cpp b/indra/llmessage/llservicebuilder.cpp index 392e7f1091..cf2e42f95c 100755 --- a/indra/llmessage/llservicebuilder.cpp +++ b/indra/llmessage/llservicebuilder.cpp @@ -34,7 +34,7 @@  void LLServiceBuilder::loadServiceDefinitionsFromFile(  	const std::string& service_filename)  { -	llifstream service_file(service_filename, std::ios::binary); +	llifstream service_file(service_filename.c_str(), std::ios::binary);  	if(service_file.is_open())  	{  		LLSD service_data; diff --git a/indra/llmessage/llthrottle.cpp b/indra/llmessage/llthrottle.cpp index e484bd258d..7605da4d3f 100755 --- a/indra/llmessage/llthrottle.cpp +++ b/indra/llmessage/llthrottle.cpp @@ -391,7 +391,7 @@ BOOL LLThrottleGroup::dynamicAdjust()  		}  		mBitsSentThisPeriod[i] = 0; -		total += llround(mBitsSentHistory[i]); +		total += ll_round(mBitsSentHistory[i]);  	}  	// Look for busy channels diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp index b518dd1b72..0ab67b8dda 100755 --- a/indra/llmessage/llxfermanager.cpp +++ b/indra/llmessage/llxfermanager.cpp @@ -261,7 +261,7 @@ U32 LLXferManager::numActiveListEntries(LLXfer *list_head)  	while (list_head)  	{ -		if ((list_head->mStatus == e_LL_XFER_IN_PROGRESS))  +		if (list_head->mStatus == e_LL_XFER_IN_PROGRESS)   		{  			num_entries++;  		} diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp index 3d81bf31d5..e9ce94ab3b 100755 --- a/indra/llmessage/message.cpp +++ b/indra/llmessage/message.cpp @@ -2752,7 +2752,7 @@ void LLMessageSystem::dumpReceiveCounts()  			if (mt->mReceiveCount > 0)  			{  				LL_INFOS("Messaging") << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes -						<< " Invalid: " << std::setw(3) << mt->mReceiveInvalid << " " << mt->mName << " " << llround(100 * mt->mDecodeTimeThisFrame / mReceiveTime.value()) << "%" << LL_ENDL; +						<< " Invalid: " << std::setw(3) << mt->mReceiveInvalid << " " << mt->mName << " " << ll_round(100 * mt->mDecodeTimeThisFrame / mReceiveTime.value()) << "%" << LL_ENDL;  			}  		}  	} diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp index eadf83c428..efca1bbfca 100755 --- a/indra/llmessage/tests/llhost_test.cpp +++ b/indra/llmessage/tests/llhost_test.cpp @@ -151,11 +151,31 @@ namespace tut  	template<> template<>  	void host_object::test<9>()  	{ -		skip("this test is flaky, but we should figure out why..."); +		skip("this test is irreparably flaky");  //		skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\""); -		std::string hostStr = "lindenlab.com";		 +		// nat: is it reasonable to expect LLHost::getHostName() to echo +		// back something resembling the string passed to setHostByName()? +		// +		// If that's not even reasonable, would a round trip in the /other/ +		// direction make more sense? (Call getHostName() for something with +		// known IP address; call setHostByName(); verify IP address) +		// +		// Failing that... is there a plausible way to test getHostName() and +		// setHostByName()? Hopefully without putting up a dummy local DNS +		// server? + +		// monty: If you don't control the DNS server or the DNS configuration +		// for the test point then, no, none of these will necessarily be +		// reliable and may start to fail at any time. Forward translation +		// is subject to CNAME records and round-robin address assignment. +		// Reverse lookup is 1-to-many and is more and more likely to have +		// nothing to do with the forward translation. +		//  +		// So the test is increasingly meaningless on a real network. + +		std::string hostStr = "lindenlab.com";  		LLHost host; -		host.setHostByName(hostStr);	 +		host.setHostByName(hostStr);  		// reverse DNS will likely result in appending of some  		// sub-domain to the main hostname. so look for @@ -177,9 +197,9 @@ namespace tut  	template<> template<>  	void host_object::test<10>()  	{ -		std::string hostStr = "64.233.167.99";		 +		std::string hostStr = "64.233.167.99";  		LLHost host; -		host.setHostByName(hostStr);	 +		host.setHostByName(hostStr);  		ensure("SetHostByName for dotted IP Address failed", host.getAddress() == ip_string_to_u32(hostStr.c_str()));  	} diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt index 75d89aac78..05fc12e338 100755 --- a/indra/llplugin/CMakeLists.txt +++ b/indra/llplugin/CMakeLists.txt @@ -68,7 +68,7 @@ list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES})  add_library (llplugin ${llplugin_SOURCE_FILES}) -add_subdirectory(slplugin) +##add_subdirectory(slplugin)  # Add tests  if (LL_TESTS) diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index 0644d2638c..52626b0302 100755 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -32,8 +32,6 @@  #include "llpluginclassmedia.h"  #include "llpluginmessageclasses.h" -#include "llqtwebkit.h" -  static int LOW_PRIORITY_TEXTURE_SIZE_DEFAULT = 256;  static int nextPowerOf2( int value ) diff --git a/indra/llplugin/slplugin/slplugin-objc.h b/indra/llplugin/slplugin/slplugin-objc.h index f2c2b3239c..af0ebe1af2 100755 --- a/indra/llplugin/slplugin/slplugin-objc.h +++ b/indra/llplugin/slplugin/slplugin-objc.h @@ -29,7 +29,9 @@   */  //Protos for ObjectiveC classes (cannot import cocoa here due to BOOL conflict) +#ifndef __OBJC__  class NSWindow; +#endif // __OBJC__  /* Defined in slplugin-objc.mm: */ diff --git a/indra/llprimitive/llmaterial.cpp b/indra/llprimitive/llmaterial.cpp index 7f3c8da434..57ceb3e11b 100644 --- a/indra/llprimitive/llmaterial.cpp +++ b/indra/llprimitive/llmaterial.cpp @@ -119,18 +119,18 @@ LLSD LLMaterial::asLLSD() const  	LLSD material_data;  	material_data[MATERIALS_CAP_NORMAL_MAP_FIELD] = mNormalID; -	material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_X_FIELD] = llround(mNormalOffsetX * MATERIALS_MULTIPLIER); -	material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_Y_FIELD] = llround(mNormalOffsetY * MATERIALS_MULTIPLIER); -	material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_X_FIELD] = llround(mNormalRepeatX * MATERIALS_MULTIPLIER); -	material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_Y_FIELD] = llround(mNormalRepeatY * MATERIALS_MULTIPLIER); -	material_data[MATERIALS_CAP_NORMAL_MAP_ROTATION_FIELD] = llround(mNormalRotation * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_X_FIELD] = ll_round(mNormalOffsetX * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_Y_FIELD] = ll_round(mNormalOffsetY * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_X_FIELD] = ll_round(mNormalRepeatX * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_Y_FIELD] = ll_round(mNormalRepeatY * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_NORMAL_MAP_ROTATION_FIELD] = ll_round(mNormalRotation * MATERIALS_MULTIPLIER);  	material_data[MATERIALS_CAP_SPECULAR_MAP_FIELD] = mSpecularID; -	material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_X_FIELD] = llround(mSpecularOffsetX * MATERIALS_MULTIPLIER); -	material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_Y_FIELD] = llround(mSpecularOffsetY * MATERIALS_MULTIPLIER); -	material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_X_FIELD] = llround(mSpecularRepeatX * MATERIALS_MULTIPLIER); -	material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_Y_FIELD] = llround(mSpecularRepeatY * MATERIALS_MULTIPLIER); -	material_data[MATERIALS_CAP_SPECULAR_MAP_ROTATION_FIELD] = llround(mSpecularRotation * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_X_FIELD] = ll_round(mSpecularOffsetX * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_Y_FIELD] = ll_round(mSpecularOffsetY * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_X_FIELD] = ll_round(mSpecularRepeatX * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_Y_FIELD] = ll_round(mSpecularRepeatY * MATERIALS_MULTIPLIER); +	material_data[MATERIALS_CAP_SPECULAR_MAP_ROTATION_FIELD] = ll_round(mSpecularRotation * MATERIALS_MULTIPLIER);  	material_data[MATERIALS_CAP_SPECULAR_COLOR_FIELD]     = mSpecularLightColor.getValue();  	material_data[MATERIALS_CAP_SPECULAR_EXP_FIELD]       = mSpecularLightExponent; diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index e0294cfd6a..1571427d51 100755 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -191,7 +191,7 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa  	U32 tc_count     = (tc_source && tc_source->getFloat_array()) 		? tc.getCount()	: 0;  	U32 norm_count   = (norm_source && norm_source->getFloat_array()) 	? n.getCount(): 0; -	if ((vertex_count == 0)) +	if (vertex_count == 0)  	{  		LL_WARNS() << "Unable to process mesh with empty position array; invalid model." << LL_ENDL;  		return LLModel::BAD_ELEMENT; diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index eb07482227..29747cb09c 100755 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -107,8 +107,6 @@ const F32 FLEXIBLE_OBJECT_DEFAULT_LENGTH = 1.0f;  const BOOL FLEXIBLE_OBJECT_DEFAULT_USING_COLLISION_SPHERE = FALSE;  const BOOL FLEXIBLE_OBJECT_DEFAULT_RENDERING_COLLISION_SPHERE = FALSE; -const S32 MAX_FACE_BITS = 9; -  const char *SCULPT_DEFAULT_TEXTURE = "be293869-d0d9-0a69-5989-ad27f1946fd4"; // old inverted texture: "7595d345-a24c-e7ef-f0bd-78793792133e";  // Texture rotations are sent over the wire as a S16.  This is used to scale the actual float @@ -998,8 +996,6 @@ BOOL LLPrimitive::setMaterial(U8 material)  	}  } -const F32 LL_MAX_SCALE_S = 100.0f; -const F32 LL_MAX_SCALE_T = 100.0f;  S32 LLPrimitive::packTEField(U8 *cur_ptr, U8 *data_ptr, U8 data_size, U8 last_face_index, EMsgVariableType type) const  {  	S32 face_index; @@ -1153,12 +1149,12 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const  			const LLTextureEntry* te = getTE(face_index);  			scale_s[face_index] = (F32) te->mScaleS;  			scale_t[face_index] = (F32) te->mScaleT; -			offset_s[face_index] = (S16) llround((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ; -			offset_t[face_index] = (S16) llround((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ; -			image_rot[face_index] = (S16) llround(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * TEXTURE_ROTATION_PACK_FACTOR)); +			offset_s[face_index] = (S16) ll_round((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ; +			offset_t[face_index] = (S16) ll_round((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ; +			image_rot[face_index] = (S16) ll_round(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * TEXTURE_ROTATION_PACK_FACTOR));  			bump[face_index] = te->getBumpShinyFullbright();  			media_flags[face_index] = te->getMediaTexGen(); -			glow[face_index] = (U8) llround((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF)); +			glow[face_index] = (U8) ll_round((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));  			// Directly sending material_ids is not safe!  			memcpy(&material_data[face_index*16],getTE(face_index)->getMaterialID().get(),16);	/* Flawfinder: ignore */  @@ -1238,12 +1234,12 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const  			const LLTextureEntry* te = getTE(face_index);  			scale_s[face_index] = (F32) te->mScaleS;  			scale_t[face_index] = (F32) te->mScaleT; -			offset_s[face_index] = (S16) llround((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ; -			offset_t[face_index] = (S16) llround((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ; -			image_rot[face_index] = (S16) llround(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * TEXTURE_ROTATION_PACK_FACTOR)); +			offset_s[face_index] = (S16) ll_round((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ; +			offset_t[face_index] = (S16) ll_round((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ; +			image_rot[face_index] = (S16) ll_round(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * TEXTURE_ROTATION_PACK_FACTOR));  			bump[face_index] = te->getBumpShinyFullbright();  			media_flags[face_index] = te->getMediaTexGen(); -            glow[face_index] = (U8) llround((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF)); +            glow[face_index] = (U8) ll_round((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));  			// Directly sending material_ids is not safe!  			memcpy(&material_data[face_index*16],getTE(face_index)->getMaterialID().get(),16);	/* Flawfinder: ignore */  diff --git a/indra/llprimitive/llvolumemessage.cpp b/indra/llprimitive/llvolumemessage.cpp index a2c2666146..8d47a7147f 100755 --- a/indra/llprimitive/llvolumemessage.cpp +++ b/indra/llprimitive/llvolumemessage.cpp @@ -52,13 +52,13 @@ bool LLVolumeMessage::packProfileParams(  	tempU8 = params->getCurveType();  	mesgsys->addU8Fast(_PREHASH_ProfileCurve, tempU8); -	tempU16 = (U16) llround( params->getBegin() / CUT_QUANTA); +	tempU16 = (U16) ll_round( params->getBegin() / CUT_QUANTA);  	mesgsys->addU16Fast(_PREHASH_ProfileBegin, tempU16); -	tempU16 = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA); +	tempU16 = 50000 - (U16) ll_round(params->getEnd() / CUT_QUANTA);  	mesgsys->addU16Fast(_PREHASH_ProfileEnd, tempU16); -	tempU16 = (U16) llround(params->getHollow() / HOLLOW_QUANTA); +	tempU16 = (U16) ll_round(params->getHollow() / HOLLOW_QUANTA);  	mesgsys->addU16Fast(_PREHASH_ProfileHollow, tempU16);  	return true; @@ -80,13 +80,13 @@ bool LLVolumeMessage::packProfileParams(  	tempU8 = params->getCurveType();  	dp.packU8(tempU8, "Curve"); -	tempU16 = (U16) llround( params->getBegin() / CUT_QUANTA); +	tempU16 = (U16) ll_round( params->getBegin() / CUT_QUANTA);  	dp.packU16(tempU16, "Begin"); -	tempU16 = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA); +	tempU16 = 50000 - (U16) ll_round(params->getEnd() / CUT_QUANTA);  	dp.packU16(tempU16, "End"); -	tempU16 = (U16) llround(params->getHollow() / HOLLOW_QUANTA); +	tempU16 = (U16) ll_round(params->getHollow() / HOLLOW_QUANTA);  	dp.packU16(tempU16, "Hollow");  	return true;  } @@ -217,46 +217,46 @@ bool LLVolumeMessage::packPathParams(  	U8 curve = params->getCurveType();  	mesgsys->addU8Fast(_PREHASH_PathCurve, curve); -	U16 begin = (U16) llround(params->getBegin() / CUT_QUANTA); +	U16 begin = (U16) ll_round(params->getBegin() / CUT_QUANTA);  	mesgsys->addU16Fast(_PREHASH_PathBegin, begin); -	U16 end = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA); +	U16 end = 50000 - (U16) ll_round(params->getEnd() / CUT_QUANTA);  	mesgsys->addU16Fast(_PREHASH_PathEnd, end);  	// Avoid truncation problem with direct F32->U8 cast.  	// (e.g., (U8) (0.50 / 0.01) = (U8) 49.9999999 = 49 not 50. -	U8 pack_scale_x = 200 - (U8) llround(params->getScaleX() / SCALE_QUANTA); +	U8 pack_scale_x = 200 - (U8) ll_round(params->getScaleX() / SCALE_QUANTA);  	mesgsys->addU8Fast(_PREHASH_PathScaleX, pack_scale_x ); -	U8 pack_scale_y = 200 - (U8) llround(params->getScaleY() / SCALE_QUANTA); +	U8 pack_scale_y = 200 - (U8) ll_round(params->getScaleY() / SCALE_QUANTA);  	mesgsys->addU8Fast(_PREHASH_PathScaleY, pack_scale_y ); -	U8 pack_shear_x = (U8) llround(params->getShearX() / SHEAR_QUANTA); +	U8 pack_shear_x = (U8) ll_round(params->getShearX() / SHEAR_QUANTA);  	mesgsys->addU8Fast(_PREHASH_PathShearX, pack_shear_x ); -	U8 pack_shear_y = (U8) llround(params->getShearY() / SHEAR_QUANTA); +	U8 pack_shear_y = (U8) ll_round(params->getShearY() / SHEAR_QUANTA);  	mesgsys->addU8Fast(_PREHASH_PathShearY, pack_shear_y ); -	S8 twist = (S8) llround(params->getTwist() / SCALE_QUANTA); +	S8 twist = (S8) ll_round(params->getTwist() / SCALE_QUANTA);  	mesgsys->addS8Fast(_PREHASH_PathTwist, twist); -	S8 twist_begin = (S8) llround(params->getTwistBegin() / SCALE_QUANTA); +	S8 twist_begin = (S8) ll_round(params->getTwistBegin() / SCALE_QUANTA);  	mesgsys->addS8Fast(_PREHASH_PathTwistBegin, twist_begin); -	S8 radius_offset = (S8) llround(params->getRadiusOffset() / SCALE_QUANTA); +	S8 radius_offset = (S8) ll_round(params->getRadiusOffset() / SCALE_QUANTA);  	mesgsys->addS8Fast(_PREHASH_PathRadiusOffset, radius_offset); -	S8 taper_x = (S8) llround(params->getTaperX() / TAPER_QUANTA); +	S8 taper_x = (S8) ll_round(params->getTaperX() / TAPER_QUANTA);  	mesgsys->addS8Fast(_PREHASH_PathTaperX, taper_x); -	S8 taper_y = (S8) llround(params->getTaperY() / TAPER_QUANTA); +	S8 taper_y = (S8) ll_round(params->getTaperY() / TAPER_QUANTA);  	mesgsys->addS8Fast(_PREHASH_PathTaperY, taper_y); -	U8 revolutions = (U8) llround( (params->getRevolutions() - 1.0f) / REV_QUANTA); +	U8 revolutions = (U8) ll_round( (params->getRevolutions() - 1.0f) / REV_QUANTA);  	mesgsys->addU8Fast(_PREHASH_PathRevolutions, revolutions); -	S8 skew = (S8) llround(params->getSkew() / SCALE_QUANTA); +	S8 skew = (S8) ll_round(params->getSkew() / SCALE_QUANTA);  	mesgsys->addS8Fast(_PREHASH_PathSkew, skew);  	return true; @@ -274,46 +274,46 @@ bool LLVolumeMessage::packPathParams(  	U8 curve = params->getCurveType();  	dp.packU8(curve, "Curve"); -	U16 begin = (U16) llround(params->getBegin() / CUT_QUANTA); +	U16 begin = (U16) ll_round(params->getBegin() / CUT_QUANTA);  	dp.packU16(begin, "Begin"); -	U16 end = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA); +	U16 end = 50000 - (U16) ll_round(params->getEnd() / CUT_QUANTA);  	dp.packU16(end, "End");  	// Avoid truncation problem with direct F32->U8 cast.  	// (e.g., (U8) (0.50 / 0.01) = (U8) 49.9999999 = 49 not 50. -	U8 pack_scale_x = 200 - (U8) llround(params->getScaleX() / SCALE_QUANTA); +	U8 pack_scale_x = 200 - (U8) ll_round(params->getScaleX() / SCALE_QUANTA);  	dp.packU8(pack_scale_x, "ScaleX"); -	U8 pack_scale_y = 200 - (U8) llround(params->getScaleY() / SCALE_QUANTA); +	U8 pack_scale_y = 200 - (U8) ll_round(params->getScaleY() / SCALE_QUANTA);  	dp.packU8(pack_scale_y, "ScaleY"); -	S8 pack_shear_x = (S8) llround(params->getShearX() / SHEAR_QUANTA); +	S8 pack_shear_x = (S8) ll_round(params->getShearX() / SHEAR_QUANTA);  	dp.packU8(*(U8 *)&pack_shear_x, "ShearX"); -	S8 pack_shear_y = (S8) llround(params->getShearY() / SHEAR_QUANTA); +	S8 pack_shear_y = (S8) ll_round(params->getShearY() / SHEAR_QUANTA);  	dp.packU8(*(U8 *)&pack_shear_y, "ShearY"); -	S8 twist = (S8) llround(params->getTwist() / SCALE_QUANTA); +	S8 twist = (S8) ll_round(params->getTwist() / SCALE_QUANTA);  	dp.packU8(*(U8 *)&twist, "Twist"); -	S8 twist_begin = (S8) llround(params->getTwistBegin() / SCALE_QUANTA); +	S8 twist_begin = (S8) ll_round(params->getTwistBegin() / SCALE_QUANTA);  	dp.packU8(*(U8 *)&twist_begin, "TwistBegin"); -	S8 radius_offset = (S8) llround(params->getRadiusOffset() / SCALE_QUANTA); +	S8 radius_offset = (S8) ll_round(params->getRadiusOffset() / SCALE_QUANTA);  	dp.packU8(*(U8 *)&radius_offset, "RadiusOffset"); -	S8 taper_x = (S8) llround(params->getTaperX() / TAPER_QUANTA); +	S8 taper_x = (S8) ll_round(params->getTaperX() / TAPER_QUANTA);  	dp.packU8(*(U8 *)&taper_x, "TaperX"); -	S8 taper_y = (S8) llround(params->getTaperY() / TAPER_QUANTA); +	S8 taper_y = (S8) ll_round(params->getTaperY() / TAPER_QUANTA);  	dp.packU8(*(U8 *)&taper_y, "TaperY"); -	U8 revolutions = (U8) llround( (params->getRevolutions() - 1.0f) / REV_QUANTA); +	U8 revolutions = (U8) ll_round( (params->getRevolutions() - 1.0f) / REV_QUANTA);  	dp.packU8(*(U8 *)&revolutions, "Revolutions"); -	S8 skew = (S8) llround(params->getSkew() / SCALE_QUANTA); +	S8 skew = (S8) ll_round(params->getSkew() / SCALE_QUANTA);  	dp.packU8(*(U8 *)&skew, "Skew");  	return true; diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt index dba12d048e..331f988382 100755 --- a/indra/llrender/CMakeLists.txt +++ b/indra/llrender/CMakeLists.txt @@ -121,7 +121,6 @@ target_link_libraries(llrender      ${LLCOMMON_LIBRARIES}      ${LLIMAGE_LIBRARIES}      ${LLMATH_LIBRARIES} -    ${LLRENDER_LIBRARIES}      ${LLVFS_LIBRARIES}      ${LLXML_LIBRARIES}      ${LLVFS_LIBRARIES} diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp index 25b1c533c1..de26d19efc 100755 --- a/indra/llrender/llfontfreetype.cpp +++ b/indra/llrender/llfontfreetype.cpp @@ -103,7 +103,6 @@ LLFontGlyphInfo::LLFontGlyphInfo(U32 index)  LLFontFreetype::LLFontFreetype()  :	LLTrace::MemTrackable<LLFontFreetype>("LLFontFreetype"),  	mFontBitmapCachep(new LLFontBitmapCache), -	mValid(FALSE),  	mAscender(0.f),  	mDescender(0.f),  	mLineHeight(0.f), @@ -184,8 +183,8 @@ BOOL LLFontFreetype::loadFace(const std::string& filename, F32 point_size, F32 v  	mDescender = -mFTFace->descender * pixels_per_unit;  	mLineHeight = mFTFace->height * pixels_per_unit; -	S32 max_char_width = llround(0.5f + (x_max - x_min)); -	S32 max_char_height = llround(0.5f + (y_max - y_min)); +	S32 max_char_width = ll_round(0.5f + (x_max - x_min)); +	S32 max_char_height = ll_round(0.5f + (y_max - y_min));  	mFontBitmapCachep->init(components, max_char_width, max_char_height);  	claimMem(mFontBitmapCachep); diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h index 2963fbd43d..a5ece42b88 100755 --- a/indra/llrender/llfontfreetype.h +++ b/indra/llrender/llfontfreetype.h @@ -162,8 +162,6 @@ private:  	BOOL mIsFallback;  	font_vector_t mFallbackFonts; // A list of fallback fonts to look for glyphs in (for Unicode chars) -	BOOL mValid; -  	typedef boost::unordered_map<llwchar, LLFontGlyphInfo*> char_glyph_info_map_t;  	mutable char_glyph_info_map_t mCharGlyphInfoMap; // Information about glyph location in bitmap diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 1d181b476a..53ca080d66 100755 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -61,12 +61,6 @@ LLCoordGL LLFontGL::sCurOrigin;  F32 LLFontGL::sCurDepth;  std::vector<std::pair<LLCoordGL, F32> > LLFontGL::sOriginStack; -const F32 EXT_X_BEARING = 1.f; -const F32 EXT_Y_BEARING = 0.f; -const F32 EXT_KERNING = 1.f; -const F32 PIXEL_BORDER_THRESHOLD = 0.0001f; -const F32 PIXEL_CORRECTION_DISTANCE = 0.01f; -  const F32 PAD_UVY = 0.5f; // half of vertical padding between glyphs in the glyph texture  const F32 DROP_SHADOW_SOFT_STRENGTH = 0.3f; @@ -217,10 +211,10 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	case LEFT:  		break;  	case RIGHT: -	  	cur_x -= llmin(scaled_max_pixels, llround(getWidthF32(wstr.c_str(), begin_offset, length) * sScaleX)); +	  	cur_x -= llmin(scaled_max_pixels, ll_round(getWidthF32(wstr.c_str(), begin_offset, length) * sScaleX));  		break;  	case HCENTER: -	    cur_x -= llmin(scaled_max_pixels, llround(getWidthF32(wstr.c_str(), begin_offset, length) * sScaleX)) / 2; +	    cur_x -= llmin(scaled_max_pixels, ll_round(getWidthF32(wstr.c_str(), begin_offset, length) * sScaleX)) / 2;  		break;  	default:  		break; @@ -229,7 +223,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	cur_render_y = cur_y;  	cur_render_x = cur_x; -	F32 start_x = (F32)llround(cur_x); +	F32 start_x = (F32)ll_round(cur_x);  	const LLFontBitmapCache* font_bitmap_cache = mFontFreetype->getFontBitmapCache(); @@ -243,12 +237,12 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	if (use_ellipses)  	{  		// check for too long of a string -		S32 string_width = llround(getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX); +		S32 string_width = ll_round(getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX);  		if (string_width > scaled_max_pixels)  		{  			// use four dots for ellipsis width to generate padding  			const LLWString dots(utf8str_to_wstring(std::string("...."))); -			scaled_max_pixels = llmax(0, scaled_max_pixels - llround(getWidthF32(dots.c_str()))); +			scaled_max_pixels = llmax(0, scaled_max_pixels - ll_round(getWidthF32(dots.c_str())));  			draw_ellipses = TRUE;  		}  	} @@ -313,10 +307,10 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  				(fgi->mXBitmapOffset + fgi->mWidth) * inv_width,  				(fgi->mYBitmapOffset - PAD_UVY) * inv_height);  		// snap glyph origin to whole screen pixel -		LLRectf screen_rect((F32)llround(cur_render_x + (F32)fgi->mXBearing), -				    (F32)llround(cur_render_y + (F32)fgi->mYBearing), -				    (F32)llround(cur_render_x + (F32)fgi->mXBearing) + (F32)fgi->mWidth, -				    (F32)llround(cur_render_y + (F32)fgi->mYBearing) - (F32)fgi->mHeight); +		LLRectf screen_rect((F32)ll_round(cur_render_x + (F32)fgi->mXBearing), +				    (F32)ll_round(cur_render_y + (F32)fgi->mYBearing), +				    (F32)ll_round(cur_render_x + (F32)fgi->mXBearing) + (F32)fgi->mWidth, +				    (F32)ll_round(cur_render_y + (F32)fgi->mYBearing) - (F32)fgi->mHeight);  		if (glyph_count >= GLYPH_BATCH_SIZE)  		{ @@ -347,8 +341,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  		// Must do this to cur_x, not just to cur_render_x, otherwise you  		// will squish sub-pixel kerned characters too close together.  		// For example, "CCCCC" looks bad. -		cur_x = (F32)llround(cur_x); -		//cur_y = (F32)llround(cur_y); +		cur_x = (F32)ll_round(cur_x); +		//cur_y = (F32)ll_round(cur_y);  		cur_render_x = cur_x;  		cur_render_y = cur_y; @@ -458,7 +452,7 @@ S32 LLFontGL::getWidth(const std::string& utf8text, S32 begin_offset, S32 max_ch  S32 LLFontGL::getWidth(const llwchar* wchars, S32 begin_offset, S32 max_chars) const  {  	F32 width = getWidthF32(wchars, begin_offset, max_chars); -	return llround(width); +	return ll_round(width);  }  F32 LLFontGL::getWidthF32(const std::string& utf8text) const @@ -520,7 +514,7 @@ F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars  			cur_x += mFontFreetype->getXKerning(fgi, next_glyph);  		}  		// Round after kerning. -		cur_x = (F32)llround(cur_x); +		cur_x = (F32)ll_round(cur_x);  	}  	// add in extra pixels for last character's width past its xadvance @@ -628,7 +622,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch  		}  		// Round after kerning. -		cur_x = (F32)llround(cur_x); +		cur_x = (F32)ll_round(cur_x);  	}  	if( clip ) @@ -698,7 +692,7 @@ S32	LLFontGL::firstDrawableChar(const llwchar* wchars, F32 max_pixels, S32 text_  		}  		// Round after kerning. -		total_width = (F32)llround(total_width); +		total_width = (F32)ll_round(total_width);  	}  	if (drawable_chars == 0) @@ -781,7 +775,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t  		// Round after kerning. -		cur_x = (F32)llround(cur_x); +		cur_x = (F32)ll_round(cur_x);  	}  	return llmin(max_chars, pos - begin_offset); diff --git a/indra/llrender/llpostprocess.cpp b/indra/llrender/llpostprocess.cpp index a95bb7027b..b6ea5aa7f1 100755 --- a/indra/llrender/llpostprocess.cpp +++ b/indra/llrender/llpostprocess.cpp @@ -49,17 +49,8 @@ static LLStaticHashedString sBlurWidth("blurWidth");  LLPostProcess * gPostProcess = NULL; -  static const unsigned int NOISE_SIZE = 512; -/// CALCULATING LUMINANCE (Using NTSC lum weights) -/// http://en.wikipedia.org/wiki/Luma_%28video%29 -static const float LUMINANCE_R = 0.299f; -static const float LUMINANCE_G = 0.587f; -static const float LUMINANCE_B = 0.114f; - -static const char * const XML_FILENAME = "postprocesseffects.xml"; -  LLPostProcess::LLPostProcess(void) :   					initialized(false),    					mAllEffects(LLSD::emptyMap()), diff --git a/indra/llrender/llrender2dutils.cpp b/indra/llrender/llrender2dutils.cpp index df5d79a436..4e2ebfd51e 100644 --- a/indra/llrender/llrender2dutils.cpp +++ b/indra/llrender/llrender2dutils.cpp @@ -433,8 +433,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex  		F32 image_width = image->getWidth(0);  		F32 image_height = image->getHeight(0); -		S32 image_natural_width = llround(image_width * uv_width); -		S32 image_natural_height = llround(image_height * uv_height); +		S32 image_natural_width = ll_round(image_width * uv_width); +		S32 image_natural_height = ll_round(image_height * uv_height);  		LLRectf draw_center_rect(	uv_center_rect.mLeft * image_width,  									uv_center_rect.mTop * image_height, @@ -468,10 +468,10 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex  			draw_center_rect.setCenterAndSize(uv_center_rect.getCenterX() * width, uv_center_rect.getCenterY() * height, scaled_width, scaled_height);  		} -		draw_center_rect.mLeft   = llround(ui_translation.mV[VX] + (F32)draw_center_rect.mLeft * ui_scale.mV[VX]); -		draw_center_rect.mTop    = llround(ui_translation.mV[VY] + (F32)draw_center_rect.mTop * ui_scale.mV[VY]); -		draw_center_rect.mRight  = llround(ui_translation.mV[VX] + (F32)draw_center_rect.mRight * ui_scale.mV[VX]); -		draw_center_rect.mBottom = llround(ui_translation.mV[VY] + (F32)draw_center_rect.mBottom * ui_scale.mV[VY]); +		draw_center_rect.mLeft   = ll_round(ui_translation.mV[VX] + (F32)draw_center_rect.mLeft * ui_scale.mV[VX]); +		draw_center_rect.mTop    = ll_round(ui_translation.mV[VY] + (F32)draw_center_rect.mTop * ui_scale.mV[VY]); +		draw_center_rect.mRight  = ll_round(ui_translation.mV[VX] + (F32)draw_center_rect.mRight * ui_scale.mV[VX]); +		draw_center_rect.mBottom = ll_round(ui_translation.mV[VY] + (F32)draw_center_rect.mBottom * ui_scale.mV[VY]);  		LLRectf draw_outer_rect(ui_translation.mV[VX],   								ui_translation.mV[VY] + height * ui_scale.mV[VY],  @@ -703,8 +703,8 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre  			ui_translation.mV[VY] += y;  			ui_translation.scaleVec(ui_scale);  			S32 index = 0; -			S32 scaled_width = llround(width * ui_scale.mV[VX]); -			S32 scaled_height = llround(height * ui_scale.mV[VY]); +			S32 scaled_width = ll_round(width * ui_scale.mV[VX]); +			S32 scaled_height = ll_round(height * ui_scale.mV[VY]);  			uv[index] = LLVector2(uv_rect.mRight, uv_rect.mTop);  			pos[index] = LLVector3(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY] + scaled_height, 0.f); diff --git a/indra/llrender/lluiimage.cpp b/indra/llrender/lluiimage.cpp index 6f1fae92cd..5d8f92b2e6 100644 --- a/indra/llrender/lluiimage.cpp +++ b/indra/llrender/lluiimage.cpp @@ -149,13 +149,13 @@ void LLUIImage::draw3D(const LLVector3& origin_agent, const LLVector3& x_axis, c  S32 LLUIImage::getWidth() const  {   	// return clipped dimensions of actual image area -	return llround((F32)mImage->getWidth(0) * mClipRegion.getWidth());  +	return ll_round((F32)mImage->getWidth(0) * mClipRegion.getWidth());   }  S32 LLUIImage::getHeight() const  {   	// return clipped dimensions of actual image area -	return llround((F32)mImage->getHeight(0) * mClipRegion.getHeight());  +	return ll_round((F32)mImage->getHeight(0) * mClipRegion.getHeight());   }  S32 LLUIImage::getTextureWidth() const diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp index b787794b95..623f570cef 100755 --- a/indra/llui/llaccordionctrl.cpp +++ b/indra/llui/llaccordionctrl.cpp @@ -36,25 +36,17 @@  #include "boost/bind.hpp" -static const S32 DRAGGER_BAR_MARGIN = 4; -static const S32 DRAGGER_BAR_HEIGHT = 5;  static const S32 BORDER_MARGIN = 2;  static const S32 PARENT_BORDER_MARGIN = 5; - -static const S32 panel_delta = DRAGGER_BAR_MARGIN;  // Distanse between two panels  - -static const S32 HORIZONTAL_MULTIPLE = 8;  static const S32 VERTICAL_MULTIPLE = 16;  static const F32 MIN_AUTO_SCROLL_RATE = 120.f;  static const F32 MAX_AUTO_SCROLL_RATE = 500.f;  static const F32 AUTO_SCROLL_RATE_ACCEL = 120.f; -  // LLAccordionCtrl =================================================================|  static LLDefaultChildRegistry::Register<LLAccordionCtrl>	t2("accordion"); -  LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)   , mFitParent(params.fit_parent)   , mAutoScrolling( false ) @@ -613,7 +605,7 @@ BOOL LLAccordionCtrl::autoScroll		(S32 x, S32 y)  		// autoscroll region should take up no more than one third of visible scroller area  		S32 auto_scroll_region_height = llmin(rect_local.getHeight() / 3, 10); -		S32 auto_scroll_speed = llround(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32()); +		S32 auto_scroll_speed = ll_round(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32());  		LLRect bottom_scroll_rect = screen_local_extents;  		bottom_scroll_rect.mTop = rect_local.mBottom + auto_scroll_region_height; diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp index 30cb18812b..42726de0ad 100755 --- a/indra/llui/llbadge.cpp +++ b/indra/llui/llbadge.cpp @@ -196,10 +196,10 @@ void renderBadgeBackground(F32 centerX, F32 centerY, F32 width, F32 height, cons  	F32 x = LLFontGL::sCurOrigin.mX + centerX - width * 0.5f;  	F32 y = LLFontGL::sCurOrigin.mY + centerY - height * 0.5f; -	LLRectf screen_rect(llround(x), -						llround(y), -						llround(x) + width, -						llround(y) + height); +	LLRectf screen_rect(ll_round(x), +						ll_round(y), +						ll_round(x) + width, +						ll_round(y) + height);  	LLVector3 vertices[4];  	vertices[0] = LLVector3(screen_rect.mRight, screen_rect.mTop,    1.0f); diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index ce8383857c..8c7df45884 100755 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -606,8 +606,8 @@ void LLButton::getOverlayImageSize(S32& overlay_width, S32& overlay_height)  	overlay_height = mImageOverlay->getHeight();  	F32 scale_factor = llmin((F32)getRect().getWidth() / (F32)overlay_width, (F32)getRect().getHeight() / (F32)overlay_height, 1.f); -	overlay_width = llround((F32)overlay_width * scale_factor); -	overlay_height = llround((F32)overlay_height * scale_factor); +	overlay_width = ll_round((F32)overlay_width * scale_factor); +	overlay_height = ll_round((F32)overlay_height * scale_factor);  } @@ -776,7 +776,7 @@ void LLButton::draw()  	if (hasFocus())  	{  		F32 lerp_amt = gFocusMgr.getFocusFlashAmt(); -		drawBorder(imagep, gFocusMgr.getFocusColor() % alpha, llround(lerp(1.f, 3.f, lerp_amt))); +		drawBorder(imagep, gFocusMgr.getFocusColor() % alpha, ll_round(lerp(1.f, 3.f, lerp_amt)));  	}  	if (use_glow_effect) @@ -1067,7 +1067,7 @@ void LLButton::resize(LLUIString label)  		{  			S32 overlay_width = mImageOverlay->getWidth();  			F32 scale_factor = (getRect().getHeight() - (mImageOverlayBottomPad + mImageOverlayTopPad)) / (F32)mImageOverlay->getHeight(); -			overlay_width = llround((F32)overlay_width * scale_factor); +			overlay_width = ll_round((F32)overlay_width * scale_factor);  			switch(mImageOverlayAlignment)  			{ diff --git a/indra/llui/llcheckboxctrl.cpp b/indra/llui/llcheckboxctrl.cpp index 5525520d78..eee6339caf 100755 --- a/indra/llui/llcheckboxctrl.cpp +++ b/indra/llui/llcheckboxctrl.cpp @@ -41,8 +41,6 @@  #include "lltextbox.h"  #include "llkeyboard.h" -const U32 MAX_STRING_LENGTH = 10; -  static LLDefaultChildRegistry::Register<LLCheckBoxCtrl> r("check_box");  // Compiler optimization, generate extern template diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index 56be52f69a..b32aea5ffa 100755 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -788,6 +788,11 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)  		// since the dropdown button eats the key  		if (key == KEY_RETURN)  		{ +			if (mask == MASK_NONE) +			{ +				mOnReturnSignal(this, getValue()); +			} +  			// don't show list and don't eat key input when committing  			// free-form text entry with RETURN since user already knows              // what they are trying to select diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h index 67393504e7..c9b1212b70 100755 --- a/indra/llui/llcombobox.h +++ b/indra/llui/llcombobox.h @@ -199,6 +199,11 @@ public:  	void			setTextEntryCallback( commit_callback_t cb ) { mTextEntryCallback = cb; }  	void			setTextChangedCallback( commit_callback_t cb ) { mTextChangedCallback = cb; } +	/** +	* Connects callback to signal called when Return key is pressed. +	*/ +	boost::signals2::connection setReturnCallback( const commit_signal_t::slot_type& cb ) { return mOnReturnSignal.connect(cb); } +  	void			setButtonVisible(BOOL visible);  	void			onButtonMouseDown(); @@ -231,6 +236,7 @@ private:  	commit_callback_t	mTextChangedCallback;  	commit_callback_t	mSelectionCallback;  	boost::signals2::connection mTopLostSignalConnection; +	commit_signal_t		mOnReturnSignal;  	S32                 mLastSelectedIndex;  }; diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp index fdfaf284de..26ae31cac6 100755 --- a/indra/llui/llconsole.cpp +++ b/indra/llui/llconsole.cpp @@ -52,7 +52,6 @@ extern void AddNewDebugConsoleToLCD(const LLWString &newLine);  LLConsole* gConsole = NULL;  // Created and destroyed in LLViewerWindow.  const F32 FADE_DURATION = 2.f; -const S32 MIN_CONSOLE_WIDTH = 200;  static LLDefaultChildRegistry::Register<LLConsole> r("console"); diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp index 7c6559eddb..48bf5bb80f 100755 --- a/indra/llui/lldraghandle.cpp +++ b/indra/llui/lldraghandle.cpp @@ -46,7 +46,6 @@ const S32 LEADING_PAD = 5;  const S32 TITLE_HPAD = 8;  const S32 BORDER_PAD = 1;  const S32 LEFT_PAD = BORDER_PAD + TITLE_HPAD + LEADING_PAD; -const S32 RIGHT_PAD = BORDER_PAD + 32; // HACK: space for close btn and minimize btn  S32 LLDragHandle::sSnapMargin = 5; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 3dbc9a5902..14f75a2352 100755 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1954,7 +1954,7 @@ void	LLFloater::drawShadow(LLPanel* panel)  	}  	gl_drop_shadow(left, top, right, bottom,   		shadow_color % getCurrentTransparency(), -		llround(shadow_offset)); +		ll_round(shadow_offset));  }  void LLFloater::updateTransparency(LLView* view, ETypeTransparency transparency_type) @@ -2082,16 +2082,16 @@ void LLFloater::updateTitleButtons()  				btn_rect.setLeftTopAndSize(  					LLPANEL_BORDER_WIDTH,  					getRect().getHeight() - close_box_from_top - (floater_close_box_size + 1) * button_count, -					llround((F32)floater_close_box_size * mButtonScale), -					llround((F32)floater_close_box_size * mButtonScale)); +					ll_round((F32)floater_close_box_size * mButtonScale), +					ll_round((F32)floater_close_box_size * mButtonScale));  			}  			else  			{  				btn_rect.setLeftTopAndSize(  					getRect().getWidth() - LLPANEL_BORDER_WIDTH - (floater_close_box_size + 1) * button_count,  					getRect().getHeight() - close_box_from_top, -					llround((F32)floater_close_box_size * mButtonScale), -					llround((F32)floater_close_box_size * mButtonScale)); +					ll_round((F32)floater_close_box_size * mButtonScale), +					ll_round((F32)floater_close_box_size * mButtonScale));  			}  			// first time here, init 'buttons_rect' @@ -2142,16 +2142,16 @@ void LLFloater::buildButtons(const Params& floater_params)  			btn_rect.setLeftTopAndSize(  				LLPANEL_BORDER_WIDTH,  				getRect().getHeight() - close_box_from_top - (floater_close_box_size + 1) * (i + 1), -				llround(floater_close_box_size * mButtonScale), -				llround(floater_close_box_size * mButtonScale)); +				ll_round(floater_close_box_size * mButtonScale), +				ll_round(floater_close_box_size * mButtonScale));  		}  		else  		{  			btn_rect.setLeftTopAndSize(  				getRect().getWidth() - LLPANEL_BORDER_WIDTH - (floater_close_box_size + 1) * (i + 1),  				getRect().getHeight() - close_box_from_top, -				llround(floater_close_box_size * mButtonScale), -				llround(floater_close_box_size * mButtonScale)); +				ll_round(floater_close_box_size * mButtonScale), +				ll_round(floater_close_box_size * mButtonScale));  		}  		LLButton::Params p; @@ -3466,28 +3466,28 @@ LLCoordCommon LL_COORD_FLOATER::convertToCommon() const  	LLCoordCommon out;  	if (self.mX < -0.5f)  	{ -		out.mX = llround(rescale(self.mX, -1.f, -0.5f, snap_rect.mLeft - (floater_width - FLOATER_MIN_VISIBLE_PIXELS), snap_rect.mLeft)); +		out.mX = ll_round(rescale(self.mX, -1.f, -0.5f, snap_rect.mLeft - (floater_width - FLOATER_MIN_VISIBLE_PIXELS), snap_rect.mLeft));  	}  	else if (self.mX > 0.5f)  	{ -		out.mX = llround(rescale(self.mX, 0.5f, 1.f, snap_rect.mRight - floater_width, snap_rect.mRight - FLOATER_MIN_VISIBLE_PIXELS)); +		out.mX = ll_round(rescale(self.mX, 0.5f, 1.f, snap_rect.mRight - floater_width, snap_rect.mRight - FLOATER_MIN_VISIBLE_PIXELS));  	}  	else  	{ -		out.mX = llround(rescale(self.mX, -0.5f, 0.5f, snap_rect.mLeft, snap_rect.mRight - floater_width)); +		out.mX = ll_round(rescale(self.mX, -0.5f, 0.5f, snap_rect.mLeft, snap_rect.mRight - floater_width));  	}  	if (self.mY < -0.5f)  	{ -		out.mY = llround(rescale(self.mY, -1.f, -0.5f, snap_rect.mBottom - (floater_height - FLOATER_MIN_VISIBLE_PIXELS), snap_rect.mBottom)); +		out.mY = ll_round(rescale(self.mY, -1.f, -0.5f, snap_rect.mBottom - (floater_height - FLOATER_MIN_VISIBLE_PIXELS), snap_rect.mBottom));  	}  	else if (self.mY > 0.5f)  	{ -		out.mY = llround(rescale(self.mY, 0.5f, 1.f, snap_rect.mTop - floater_height, snap_rect.mTop - FLOATER_MIN_VISIBLE_PIXELS)); +		out.mY = ll_round(rescale(self.mY, 0.5f, 1.f, snap_rect.mTop - floater_height, snap_rect.mTop - FLOATER_MIN_VISIBLE_PIXELS));  	}  	else  	{ -		out.mY = llround(rescale(self.mY, -0.5f, 0.5f, snap_rect.mBottom, snap_rect.mTop - floater_height)); +		out.mY = ll_round(rescale(self.mY, -0.5f, 0.5f, snap_rect.mBottom, snap_rect.mTop - floater_height));  	}  	// return center point instead of lower left diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h index 1c7326260c..afd2a8ce06 100755 --- a/indra/llui/llfocusmgr.h +++ b/indra/llui/llfocusmgr.h @@ -92,7 +92,7 @@ public:  	void			setKeystrokesOnly(BOOL keystrokes_only) { mKeystrokesOnly = keystrokes_only; }  	F32				getFocusFlashAmt() const; -	S32				getFocusFlashWidth() const { return llround(lerp(1.f, 3.f, getFocusFlashAmt())); } +	S32				getFocusFlashWidth() const { return ll_round(lerp(1.f, 3.f, getFocusFlashAmt())); }  	LLColor4		getFocusColor() const;  	void			triggerFocusFlash();  	BOOL			getAppHasFocus() const { return mAppHasFocus; } diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 00d553e457..f60129e601 100755 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -53,7 +53,6 @@  /// Local function declarations, constants, enums, and typedefs  ///---------------------------------------------------------------------------- -const S32 RENAME_WIDTH_PAD = 4;  const S32 RENAME_HEIGHT_PAD = 1;  const S32 AUTO_OPEN_STACK_DEPTH = 16; @@ -307,18 +306,18 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height )  	LLFolderViewFolder::arrange(&mMinWidth, &target_height);  	LLRect scroll_rect = (mScrollContainer ? mScrollContainer->getContentWindowRect() : LLRect()); -	reshape( llmax(scroll_rect.getWidth(), mMinWidth), llround(mCurHeight) ); +	reshape( llmax(scroll_rect.getWidth(), mMinWidth), ll_round(mCurHeight) );  	LLRect new_scroll_rect = (mScrollContainer ? mScrollContainer->getContentWindowRect() : LLRect());  	if (new_scroll_rect.getWidth() != scroll_rect.getWidth())  	{ -		reshape( llmax(scroll_rect.getWidth(), mMinWidth), llround(mCurHeight) ); +		reshape( llmax(scroll_rect.getWidth(), mMinWidth), ll_round(mCurHeight) );  	}  	// move item renamer text field to item's new position  	updateRenamerPosition(); -	return llround(mTargetHeight); +	return ll_round(mTargetHeight);  }  static LLTrace::BlockTimerStatHandle FTM_FILTER("Filter Folder View"); @@ -341,7 +340,7 @@ void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent)  		scroll_rect = mScrollContainer->getContentWindowRect();  	}  	width  = llmax(mMinWidth, scroll_rect.getWidth()); -	height = llmax(llround(mCurHeight), scroll_rect.getHeight()); +	height = llmax(ll_round(mCurHeight), scroll_rect.getHeight());  	// Restrict width within scroll container's width  	if (mUseEllipses && mScrollContainer) diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 6dd6f94d02..747b472ac2 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -861,7 +861,7 @@ void LLFolderViewItem::draw()  	if (filter_string_length > 0)  	{ -		S32 left = llround(text_left) + font->getWidth(combined_string, 0, mViewModelItem->getFilterStringOffset()) - 2; +		S32 left = ll_round(text_left) + font->getWidth(combined_string, 0, mViewModelItem->getFilterStringOffset()) - 2;  		S32 right = left + font->getWidth(combined_string, mViewModelItem->getFilterStringOffset(), filter_string_length) + 2;  		S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD);  		S32 top = getRect().getHeight() - TOP_PAD; @@ -1045,7 +1045,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )  				{  					S32 child_width = *width;  					S32 child_height = 0; -					S32 child_top = parent_item_height - llround(running_height); +					S32 child_top = parent_item_height - ll_round(running_height);  					target_height += folderp->arrange( &child_width, &child_height ); @@ -1064,7 +1064,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )  				{  					S32 child_width = *width;  					S32 child_height = 0; -					S32 child_top = parent_item_height - llround(running_height); +					S32 child_top = parent_item_height - ll_round(running_height);  					target_height += itemp->arrange( &child_width, &child_height );  					// don't change width, as this item is as wide as its parent folder by construction @@ -1101,7 +1101,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )  			folders_t::iterator fit = iter++;  			// number of pixels that bottom of folder label is from top of parent folder  			if (getRect().getHeight() - (*fit)->getRect().mTop + (*fit)->getItemHeight()  -				> llround(mCurHeight) + mMaxFolderItemOverlap) +				> ll_round(mCurHeight) + mMaxFolderItemOverlap)  			{  				// hide if beyond current folder height  				(*fit)->setVisible(FALSE); @@ -1114,7 +1114,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )  			items_t::iterator iit = iter++;  			// number of pixels that bottom of item label is from top of parent folder  			if (getRect().getHeight() - (*iit)->getRect().mBottom -				> llround(mCurHeight) + mMaxFolderItemOverlap) +				> ll_round(mCurHeight) + mMaxFolderItemOverlap)  			{  				(*iit)->setVisible(FALSE);  			} @@ -1126,12 +1126,12 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )  	}  	// don't change width as this item is already as wide as its parent folder -	reshape(getRect().getWidth(),llround(mCurHeight)); +	reshape(getRect().getWidth(),ll_round(mCurHeight));  	// pass current height value back to parent -	*height = llround(mCurHeight); +	*height = ll_round(mCurHeight); -	return llround(mTargetHeight); +	return ll_round(mTargetHeight);  }  BOOL LLFolderViewFolder::needsArrange() diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index c59286fc60..69246a2f57 100755 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -103,7 +103,7 @@ F32 LLLayoutPanel::getVisibleAmount() const  S32 LLLayoutPanel::getLayoutDim() const  { -	return llround((F32)((mOrientation == LLLayoutStack::HORIZONTAL) +	return ll_round((F32)((mOrientation == LLLayoutStack::HORIZONTAL)  					? getRect().getWidth()  					: getRect().getHeight()));  } @@ -130,7 +130,7 @@ void LLLayoutPanel::setTargetDim(S32 value)  S32 LLLayoutPanel::getVisibleDim() const  {  	F32 min_dim = getRelevantMinDim(); -	return llround(mVisibleAmt +	return ll_round(mVisibleAmt  					* (min_dim  						+ (((F32)mTargetDim - min_dim) * (1.f - mCollapseAmt))));  } @@ -138,7 +138,7 @@ S32 LLLayoutPanel::getVisibleDim() const  void LLLayoutPanel::setOrientation( LLView::EOrientation orientation )  {  	mOrientation = orientation; -	S32 layout_dim = llround((F32)((mOrientation == LLLayoutStack::HORIZONTAL) +	S32 layout_dim = ll_round((F32)((mOrientation == LLLayoutStack::HORIZONTAL)  		? getRect().getWidth()  		: getRect().getHeight())); @@ -381,14 +381,14 @@ void LLLayoutStack::updateLayout()  		{  			panelp->mTargetDim = panelp->getRelevantMinDim();  		} -		space_to_distribute -= panelp->getVisibleDim() + llround((F32)mPanelSpacing * panelp->getVisibleAmount()); +		space_to_distribute -= panelp->getVisibleDim() + ll_round((F32)mPanelSpacing * panelp->getVisibleAmount());  		total_visible_fraction += panelp->mFractionalSize * panelp->getAutoResizeFactor();  	}  	llassert(total_visible_fraction < 1.05f);  	// don't need spacing after last panel -	space_to_distribute += panelp ? llround((F32)mPanelSpacing * panelp->getVisibleAmount()) : 0; +	space_to_distribute += panelp ? ll_round((F32)mPanelSpacing * panelp->getVisibleAmount()) : 0;  	S32 remaining_space = space_to_distribute;  	F32 fraction_distributed = 0.f; @@ -399,7 +399,7 @@ void LLLayoutStack::updateLayout()  			if (panelp->mAutoResize)  			{  				F32 fraction_to_distribute = (panelp->mFractionalSize * panelp->getAutoResizeFactor()) / (total_visible_fraction); -				S32 delta = llround((F32)space_to_distribute * fraction_to_distribute); +				S32 delta = ll_round((F32)space_to_distribute * fraction_to_distribute);  				fraction_distributed += fraction_to_distribute;  				panelp->mTargetDim += delta;  				remaining_space -= delta; @@ -431,23 +431,23 @@ void LLLayoutStack::updateLayout()  		LLRect panel_rect;  		if (mOrientation == HORIZONTAL)  		{ -			panel_rect.setLeftTopAndSize(llround(cur_pos), +			panel_rect.setLeftTopAndSize(ll_round(cur_pos),  										getRect().getHeight(), -										llround(panel_dim), +										ll_round(panel_dim),  										getRect().getHeight());  		}  		else  		{  			panel_rect.setLeftTopAndSize(0, -										llround(cur_pos), +										ll_round(cur_pos),  										getRect().getWidth(), -										llround(panel_dim)); +										ll_round(panel_dim));  		}  		LLRect resize_bar_rect(panel_rect);  		F32 panel_spacing = (F32)mPanelSpacing * panelp->getVisibleAmount();  		F32 panel_visible_dim = panelp->getVisibleDim(); -		S32 panel_spacing_round = (S32)(llround(panel_spacing)); +		S32 panel_spacing_round = (S32)(ll_round(panel_spacing));  		if (mOrientation == HORIZONTAL)  		{ diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 45f4272aa7..a08cf91a69 100755 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -88,6 +88,7 @@ LLLineEditor::Params::Params()  	background_image("background_image"),  	background_image_disabled("background_image_disabled"),  	background_image_focused("background_image_focused"), +	bg_image_always_focused("bg_image_always_focused", false),  	select_on_focus("select_on_focus", false),  	revert_on_esc("revert_on_esc", true),  	spellcheck("spellcheck", false), @@ -147,6 +148,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)  	mBgImage( p.background_image ),  	mBgImageDisabled( p.background_image_disabled ),  	mBgImageFocused( p.background_image_focused ), +	mShowImageFocused( p.bg_image_always_focused ),  	mHaveHistory(FALSE),  	mReplaceNewlinesWithSpaces( TRUE ),  	mLabel(p.label), @@ -829,7 +831,7 @@ BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask)  		// Scroll if mouse cursor outside of bounds  		if (mScrollTimer.hasExpired())  		{ -			S32 increment = llround(mScrollTimer.getElapsedTimeF32() / AUTO_SCROLL_TIME); +			S32 increment = ll_round(mScrollTimer.getElapsedTimeF32() / AUTO_SCROLL_TIME);  			mScrollTimer.reset();  			mScrollTimer.setTimerExpirySec(AUTO_SCROLL_TIME);  			if( (x < mTextLeftEdge) && (mScrollHPos > 0 ) ) @@ -1675,7 +1677,7 @@ void LLLineEditor::drawBackground()  	{  		image = mBgImageDisabled;  	} -	else if ( has_focus ) +	else if ( has_focus || mShowImageFocused)  	{  		image = mBgImageFocused;  	} @@ -1833,7 +1835,7 @@ void LLLineEditor::draw()  				0,  				LLFontGL::NO_SHADOW,  				select_left - mScrollHPos, -				mTextRightEdge - llround(rendered_pixels_right), +				mTextRightEdge - ll_round(rendered_pixels_right),  				&rendered_pixels_right);  		} @@ -1843,8 +1845,8 @@ void LLLineEditor::draw()  			color.setAlpha(alpha);  			// selected middle  			S32 width = mGLFont->getWidth(mText.getWString().c_str(), mScrollHPos + rendered_text, select_right - mScrollHPos - rendered_text); -			width = llmin(width, mTextRightEdge - llround(rendered_pixels_right)); -			gl_rect_2d(llround(rendered_pixels_right), cursor_top, llround(rendered_pixels_right)+width, cursor_bottom, color); +			width = llmin(width, mTextRightEdge - ll_round(rendered_pixels_right)); +			gl_rect_2d(ll_round(rendered_pixels_right), cursor_top, ll_round(rendered_pixels_right)+width, cursor_bottom, color);  			LLColor4 tmp_color( 1.f - text_color.mV[0], 1.f - text_color.mV[1], 1.f - text_color.mV[2], alpha );  			rendered_text += mGLFont->render(  @@ -1855,7 +1857,7 @@ void LLLineEditor::draw()  				0,  				LLFontGL::NO_SHADOW,  				select_right - mScrollHPos - rendered_text, -				mTextRightEdge - llround(rendered_pixels_right), +				mTextRightEdge - ll_round(rendered_pixels_right),  				&rendered_pixels_right);  		} @@ -1870,7 +1872,7 @@ void LLLineEditor::draw()  				0,  				LLFontGL::NO_SHADOW,  				S32_MAX, -				mTextRightEdge - llround(rendered_pixels_right), +				mTextRightEdge - ll_round(rendered_pixels_right),  				&rendered_pixels_right);  		}  	} @@ -1884,7 +1886,7 @@ void LLLineEditor::draw()  			0,  			LLFontGL::NO_SHADOW,  			S32_MAX, -			mTextRightEdge - llround(rendered_pixels_right), +			mTextRightEdge - ll_round(rendered_pixels_right),  			&rendered_pixels_right);  	}  #if 1 // for when we're ready for image art. @@ -2044,7 +2046,7 @@ void LLLineEditor::draw()  							0,  							LLFontGL::NO_SHADOW,  							S32_MAX, -							mTextRightEdge - llround(rendered_pixels_right), +							mTextRightEdge - ll_round(rendered_pixels_right),  							&rendered_pixels_right, FALSE);  		} @@ -2069,7 +2071,7 @@ void LLLineEditor::draw()  							0,  							LLFontGL::NO_SHADOW,  							S32_MAX, -							mTextRightEdge - llround(rendered_pixels_right), +							mTextRightEdge - ll_round(rendered_pixels_right),  							&rendered_pixels_right, FALSE);  		}  		// Draw children (border) @@ -2573,7 +2575,7 @@ void LLLineEditor::markAsPreedit(S32 position, S32 length)  S32 LLLineEditor::getPreeditFontSize() const  { -	return llround(mGLFont->getLineHeight() * LLUI::getScaleFactor().mV[VY]); +	return ll_round(mGLFont->getLineHeight() * LLUI::getScaleFactor().mV[VY]);  }  void LLLineEditor::setReplaceNewlinesWithSpaces(BOOL replace) diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index 40f931ecc1..c6d472f59b 100755 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -90,6 +90,7 @@ public:  										spellcheck,  										commit_on_focus_lost,  										ignore_tab, +										bg_image_always_focused,  										is_password;  		// colors @@ -375,6 +376,8 @@ protected:  	BOOL		mReadOnly; +	BOOL 		mShowImageFocused; +  	LLWString	mPreeditWString;  	LLWString	mPreeditOverwrittenWString;  	std::vector<S32> mPreeditPositions; diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 22fcadb60a..7cdbcb0621 100755 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -101,17 +101,10 @@ const std::string LLMenuGL::ARROW_DOWN("vvvvvvv");  const F32 MAX_MOUSE_SLOPE_SUB_MENU = 0.9f; -const S32 PIE_GESTURE_ACTIVATE_DISTANCE = 10; -  BOOL LLMenuGL::sKeyboardMode = FALSE;  LLHandle<LLView> LLMenuHolderGL::sItemLastSelectedHandle;  LLFrameTimer LLMenuHolderGL::sItemActivationTimer; -//LLColor4 LLMenuGL::sBackgroundColor( 0.8f, 0.8f, 0.0f, 1.0f ); - -const S32 PIE_CENTER_SIZE = 20;		// pixels, radius of center hole -const F32 PIE_SCALE_FACTOR = 1.7f; // scale factor for pie menu when mouse is initially down -const F32 PIE_SHRINK_TIME = 0.2f; // time of transition between unbounded and bounded display of pie menu  const F32 ACTIVATE_HIGHLIGHT_TIME = 0.3f; @@ -1589,7 +1582,7 @@ void LLMenuItemBranchDownGL::draw( void )  		std::string::size_type offset = upper_case_label.find(getJumpKey());  		if (offset != std::string::npos)  		{ -			S32 x_offset = llround((F32)getRect().getWidth() / 2.f - getFont()->getWidthF32(mLabel.getString(), 0, S32_MAX) / 2.f); +			S32 x_offset = ll_round((F32)getRect().getWidth() / 2.f - getFont()->getWidthF32(mLabel.getString(), 0, S32_MAX) / 2.f);  			S32 x_begin = x_offset + getFont()->getWidth(mLabel, 0, offset);  			S32 x_end = x_offset + getFont()->getWidth(mLabel, 0, offset + 1);  			gl_line_2d(x_begin, LABEL_BOTTOM_PAD_PIXELS, x_end, LABEL_BOTTOM_PAD_PIXELS); @@ -3026,8 +3019,8 @@ BOOL LLMenuGL::handleHover( S32 x, S32 y, MASK mask )  	LLVector2 mouse_avg_dir((F32)mMouseVelX, (F32)mMouseVelY);  	mouse_avg_dir.normVec();  	F32 interp = 0.5f * (llclamp(mouse_dir * mouse_avg_dir, 0.f, 1.f)); -	mMouseVelX = llround(lerp((F32)mouse_delta_x, (F32)mMouseVelX, interp)); -	mMouseVelY = llround(lerp((F32)mouse_delta_y, (F32)mMouseVelY, interp)); +	mMouseVelX = ll_round(lerp((F32)mouse_delta_x, (F32)mMouseVelX, interp)); +	mMouseVelY = ll_round(lerp((F32)mouse_delta_y, (F32)mMouseVelY, interp));  	mLastMouseX = x;  	mLastMouseY = y; diff --git a/indra/llui/llmodaldialog.cpp b/indra/llui/llmodaldialog.cpp index 33e66add18..8cf88ad5eb 100755 --- a/indra/llui/llmodaldialog.cpp +++ b/indra/llui/llmodaldialog.cpp @@ -287,7 +287,7 @@ void LLModalDialog::draw()  void LLModalDialog::centerOnScreen()  {  	LLVector2 window_size = LLUI::getWindowSize(); -	centerWithin(LLRect(0, 0, llround(window_size.mV[VX]), llround(window_size.mV[VY]))); +	centerWithin(LLRect(0, 0, ll_round(window_size.mV[VX]), ll_round(window_size.mV[VY])));  } diff --git a/indra/llui/llprogressbar.cpp b/indra/llui/llprogressbar.cpp index 84a890edfa..209796565c 100755 --- a/indra/llui/llprogressbar.cpp +++ b/indra/llui/llprogressbar.cpp @@ -77,7 +77,7 @@ void LLProgressBar::draw()  	LLColor4 bar_color = mColorBar.get();  	bar_color.mV[VALPHA] *= alpha; // modulate alpha  	LLRect progress_rect = getLocalRect(); -	progress_rect.mRight = llround(getRect().getWidth() * (mPercentDone / 100.f)); +	progress_rect.mRight = ll_round(getRect().getWidth() * (mPercentDone / 100.f));  	mImageFill->draw(progress_rect, bar_color);  } diff --git a/indra/llui/llrngwriter.cpp b/indra/llui/llrngwriter.cpp index cd9fe3610e..e4a31d6a79 100755 --- a/indra/llui/llrngwriter.cpp +++ b/indra/llui/llrngwriter.cpp @@ -28,7 +28,16 @@  #include "llrngwriter.h"  #include "lluicolor.h" + +#if LL_DARWIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdelete-incomplete" +#include "lluictrlfactory.h" +#pragma clang diagnostic pop +#else  #include "lluictrlfactory.h" +#endif +  #include "boost/bind.hpp"  static 	LLInitParam::Parser::parser_read_func_map_t sReadFuncs; diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp index 8c506d76bb..f70eebc594 100755 --- a/indra/llui/llscrollcontainer.cpp +++ b/indra/llui/llscrollcontainer.cpp @@ -48,7 +48,6 @@  /// Local function declarations, constants, enums, and typedefs  ///---------------------------------------------------------------------------- -static const S32 HORIZONTAL_MULTIPLE = 8;  static const S32 VERTICAL_MULTIPLE = 16;  static const F32 AUTO_SCROLL_RATE_ACCEL = 120.f; @@ -315,7 +314,7 @@ bool LLScrollContainer::autoScroll(S32 x, S32 y)  		// clip rect against root view  		inner_rect_local.intersectWith(screen_local_extents); -		S32 auto_scroll_speed = llround(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32()); +		S32 auto_scroll_speed = ll_round(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32());  		// autoscroll region should take up no more than one third of visible scroller area  		S32 auto_scroll_region_width = llmin(inner_rect_local.getWidth() / 3, 10);   		S32 auto_scroll_region_height = llmin(inner_rect_local.getHeight() / 3, 10);  diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index c59a4fb860..db8fdc46b7 100755 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -648,7 +648,7 @@ bool LLScrollListCtrl::updateColumnWidths()  		S32 new_width = 0;  		if (column->mRelWidth >= 0)  		{ -			new_width = (S32)llround(column->mRelWidth*mItemListRect.getWidth()); +			new_width = (S32)ll_round(column->mRelWidth*mItemListRect.getWidth());  		}  		else if (column->mDynamicWidth)  		{ @@ -2096,9 +2096,6 @@ BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask )  	// not called from parent means we have keyboard focus or a child does  	if (mCanSelect)   	{ -		// Ignore capslock -		mask = mask; -  		if (mask == MASK_NONE)  		{  			switch(key) @@ -2683,7 +2680,7 @@ void LLScrollListCtrl::addColumn(const LLScrollListColumn::Params& column_params  			}  			if (new_column->mRelWidth >= 0)  			{ -				new_column->setWidth((S32)llround(new_column->mRelWidth*mItemListRect.getWidth())); +				new_column->setWidth((S32)ll_round(new_column->mRelWidth*mItemListRect.getWidth()));  			}  			else if(new_column->mDynamicWidth)  			{ diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp index 2da39fa54b..0056cb6dc4 100755 --- a/indra/llui/llsliderctrl.cpp +++ b/indra/llui/llsliderctrl.cpp @@ -43,8 +43,6 @@  #include "llresmgr.h"  #include "lluictrlfactory.h" -const U32 MAX_STRING_LENGTH = 10; -  static LLDefaultChildRegistry::Register<LLSliderCtrl> r("slider");  LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p) diff --git a/indra/llui/llspellcheck.cpp b/indra/llui/llspellcheck.cpp index 250372da5b..0db4281059 100755 --- a/indra/llui/llspellcheck.cpp +++ b/indra/llui/llspellcheck.cpp @@ -144,12 +144,14 @@ void LLSpellChecker::refreshDictionaryMap()  	const std::string user_path = getDictionaryUserPath();  	// Load dictionary information (file name, friendly name, ...) -	llifstream user_file(user_path + DICT_FILE_MAIN, std::ios::binary); +    std::string user_filename(user_path + DICT_FILE_MAIN); +	llifstream user_file(user_filename.c_str(), std::ios::binary);  	if ( (!user_file.is_open())   		|| (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(sDictMap, user_file))   		|| (0 == sDictMap.size()) )  	{ -		llifstream app_file(app_path + DICT_FILE_MAIN, std::ios::binary); +        std::string app_filename(app_path + DICT_FILE_MAIN); +		llifstream app_file(app_filename.c_str(), std::ios::binary);  		if ( (!app_file.is_open())   			|| (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(sDictMap, app_file))   			|| (0 == sDictMap.size()) ) @@ -159,7 +161,7 @@ void LLSpellChecker::refreshDictionaryMap()  	}  	// Load user installed dictionary information -	llifstream custom_file(user_path + DICT_FILE_USER, std::ios::binary); +	llifstream custom_file(user_filename.c_str(), std::ios::binary);  	if (custom_file.is_open())  	{  		LLSD custom_dict_map; @@ -215,7 +217,7 @@ void LLSpellChecker::addToDictFile(const std::string& dict_path, const std::stri  	if (gDirUtilp->fileExists(dict_path))  	{ -		llifstream file_in(dict_path, std::ios::in); +		llifstream file_in(dict_path.c_str(), std::ios::in);  		if (file_in.is_open())  		{  			std::string word; int line_num = 0; @@ -238,7 +240,7 @@ void LLSpellChecker::addToDictFile(const std::string& dict_path, const std::stri  	word_list.push_back(word); -	llofstream file_out(dict_path, std::ios::out | std::ios::trunc);	 +	llofstream file_out(dict_path.c_str(), std::ios::out | std::ios::trunc);	  	if (file_out.is_open())  	{  		file_out << word_list.size() << std::endl; @@ -352,7 +354,7 @@ void LLSpellChecker::initHunspell(const std::string& dict_language)  		if (gDirUtilp->fileExists(user_path + DICT_FILE_IGNORE))  		{ -			llifstream file_in(user_path + DICT_FILE_IGNORE, std::ios::in); +			llifstream file_in((user_path + DICT_FILE_IGNORE).c_str(), std::ios::in);  			if (file_in.is_open())  			{  				std::string word; int idxLine = 0; @@ -463,7 +465,8 @@ void LLSpellChecker::removeDictionary(const std::string& dict_language)  LLSD LLSpellChecker::loadUserDictionaryMap()  {  	LLSD dict_map; -	llifstream dict_file(getDictionaryUserPath() + DICT_FILE_USER, std::ios::binary); +    std::string dict_filename(getDictionaryUserPath() + DICT_FILE_USER); +	llifstream dict_file(dict_filename.c_str(), std::ios::binary);  	if (dict_file.is_open())  	{  		LLSDSerialize::fromXMLDocument(dict_map, dict_file); @@ -475,7 +478,7 @@ LLSD LLSpellChecker::loadUserDictionaryMap()  // static  void LLSpellChecker::saveUserDictionaryMap(const LLSD& dict_map)  { -	llofstream dict_file(getDictionaryUserPath() + DICT_FILE_USER, std::ios::trunc); +	llofstream dict_file((getDictionaryUserPath() + DICT_FILE_USER).c_str(), std::ios::trunc);  	if (dict_file.is_open())  	{  		LLSDSerialize::toPrettyXML(dict_map, dict_file); diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index ebdbdf59c0..8b1ba406c8 100755 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -153,7 +153,7 @@ F32 clamp_precision(F32 value, S32 decimal_precision)  	for (S32 i = 0; i < decimal_precision; i++)  		clamped_value *= 10.0; -	clamped_value = llround((F32)clamped_value); +	clamped_value = ll_round((F32)clamped_value);  	for (S32 i = 0; i < decimal_precision; i++)  		clamped_value /= 10.0; diff --git a/indra/llui/llstatbar.cpp b/indra/llui/llstatbar.cpp index 303417c337..35f5330a3f 100755 --- a/indra/llui/llstatbar.cpp +++ b/indra/llui/llstatbar.cpp @@ -711,7 +711,7 @@ void LLStatBar::drawTicks( F32 min, F32 max, F32 value_scale, LLRect &bar_rect )  				if (tick_begin > last_label + MIN_LABEL_SPACING)  				{  					gl_rect_2d(tick_begin, bar_rect.mTop, tick_end, bar_rect.mBottom - TICK_LENGTH, LLColor4(1.f, 1.f, 1.f, 0.25f)); -					S32 label_pos = tick_begin - llround((F32)tick_label_width * ((F32)tick_begin / (F32)bar_rect.getWidth())); +					S32 label_pos = tick_begin - ll_round((F32)tick_label_width * ((F32)tick_begin / (F32)bar_rect.getWidth()));  					LLFontGL::getFontMonospace()->renderUTF8(tick_label, 0, label_pos, bar_rect.mBottom - TICK_LENGTH,  						LLColor4(1.f, 1.f, 1.f, 0.5f),  						LLFontGL::LEFT, LLFontGL::TOP); diff --git a/indra/llui/llstatbar.h b/indra/llui/llstatbar.h index 89d7ff24ed..1ff4c67fc5 100755 --- a/indra/llui/llstatbar.h +++ b/indra/llui/llstatbar.h @@ -80,7 +80,6 @@ private:  				 mFloatingTargetMaxBar,  				 mCurMaxBar,  				 mCurMinBar, -				 mLabelSpacing,  				 mTickSpacing;  	S32          mDecimalDigits,  				 mNumHistoryFrames, diff --git a/indra/llui/llstatgraph.cpp b/indra/llui/llstatgraph.cpp index 98962aff9a..3fe314e77a 100755 --- a/indra/llui/llstatgraph.cpp +++ b/indra/llui/llstatgraph.cpp @@ -111,7 +111,7 @@ void LLStatGraph::draw()  	color = it->mColor;  	gGL.color4fv(color.mV); -	gl_rect_2d(1, llround(frac*getRect().getHeight()), getRect().getWidth() - 1, 0, TRUE); +	gl_rect_2d(1, ll_round(frac*getRect().getHeight()), getRect().getWidth() - 1, 0, TRUE);  }  void LLStatGraph::setMin(const F32 min) diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index eca57d1c23..602a703450 100755 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -38,7 +38,6 @@  #include "lltextutil.h"  #include "lltooltip.h"  #include "lluictrl.h" -#include "lluriparser.h"  #include "llurlaction.h"  #include "llurlregistry.h"  #include "llview.h" @@ -1557,7 +1556,7 @@ void LLTextBase::reflow()  											line_count));  				line_start_index = segment->getStart() + seg_offset; -				cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels; +				cur_top -= ll_round((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;  				remaining_pixels = text_available_width;  				line_height = 0;  			} @@ -1569,7 +1568,7 @@ void LLTextBase::reflow()  											last_segment_char_on_line,   											line_rect,   											line_count)); -				cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels; +				cur_top -= ll_round((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;  				break;  			}  			// ...or finished a segment and there are segments remaining on this line @@ -1584,7 +1583,7 @@ void LLTextBase::reflow()  												line_rect,   												line_count));  					line_start_index = segment->getStart() + seg_offset; -					cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels; +					cur_top -= ll_round((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;  					line_height = 0;  					remaining_pixels = text_available_width;  				} diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 1f169c3eb5..926326aaff 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -2858,7 +2858,7 @@ void LLTextEditor::markAsPreedit(S32 position, S32 length)  S32 LLTextEditor::getPreeditFontSize() const  { -	return llround((F32)mFont->getLineHeight() * LLUI::getScaleFactor().mV[VY]); +	return ll_round((F32)mFont->getLineHeight() * LLUI::getScaleFactor().mV[VY]);  }  BOOL LLTextEditor::isDirty() const diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp index 234e600ccd..324ceb7fba 100755 --- a/indra/llui/lltextvalidate.cpp +++ b/indra/llui/lltextvalidate.cpp @@ -336,7 +336,7 @@ namespace LLTextValidate  		S32 len = str.length();  		while(len--)  		{ -			if (str[len] < 0x20 && str[len] != 0xA || str[len] > 0x7f) +			if ((str[len] < 0x20 && str[len] != 0xA) || str[len] > 0x7f)  			{  				rv = FALSE;  				break; diff --git a/indra/llui/lltimectrl.cpp b/indra/llui/lltimectrl.cpp index 9ea1e8815e..516057f8fd 100755 --- a/indra/llui/lltimectrl.cpp +++ b/indra/llui/lltimectrl.cpp @@ -153,7 +153,7 @@ U32 LLTimeCtrl::getMinutes() const  void LLTimeCtrl::setTime24(F32 time)  {  	time = llclamp(time, 0.0f, 23.99f); // fix out of range values -	mTime = llround(time * MINUTES_PER_HOUR); // fixes values like 4.99999 +	mTime = ll_round(time * MINUTES_PER_HOUR); // fixes values like 4.99999  	updateText();  } @@ -381,7 +381,7 @@ bool LLTimeCtrl::isHoursStringValid(const std::string& str)  bool LLTimeCtrl::isMinutesStringValid(const std::string& str)  {  	U32 minutes; -	if (!LLStringUtil::convertToU32(str, minutes) || (minutes <= MINUTES_MAX) && str.length() < 3) +	if (!LLStringUtil::convertToU32(str, minutes) || ((minutes <= MINUTES_MAX) && str.length() < 3))  		return true;  	return false; @@ -415,7 +415,8 @@ U32 LLTimeCtrl::parseHours(const std::string& str)  U32 LLTimeCtrl::parseMinutes(const std::string& str)  {  	U32 minutes; -	if (LLStringUtil::convertToU32(str, minutes) && (minutes >= MINUTES_MIN) && (minutes <= MINUTES_MAX)) +	// not sure of this fix - clang doesnt like compare minutes U32 to >= MINUTES_MIN (0) but MINUTES_MIN can change +	if (LLStringUtil::convertToU32(str, minutes) && ((S32)minutes >= MINUTES_MIN) && ((S32)minutes <= MINUTES_MAX))  	{  		return minutes;  	} diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 1f570edd88..aabc7ed2e4 100755 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -236,8 +236,8 @@ void LLUI::dirtyRect(LLRect rect)  void LLUI::setMousePositionScreen(S32 x, S32 y)  {  	S32 screen_x, screen_y; -	screen_x = llround((F32)x * getScaleFactor().mV[VX]); -	screen_y = llround((F32)y * getScaleFactor().mV[VY]); +	screen_x = ll_round((F32)x * getScaleFactor().mV[VX]); +	screen_y = ll_round((F32)y * getScaleFactor().mV[VY]);  	LLView::getWindow()->setCursorPosition(LLCoordGL(screen_x, screen_y).convert());  } @@ -248,8 +248,8 @@ void LLUI::getMousePositionScreen(S32 *x, S32 *y)  	LLCoordWindow cursor_pos_window;  	getWindow()->getCursorPosition(&cursor_pos_window);  	LLCoordGL cursor_pos_gl(cursor_pos_window.convert()); -	*x = llround((F32)cursor_pos_gl.mX / getScaleFactor().mV[VX]); -	*y = llround((F32)cursor_pos_gl.mY / getScaleFactor().mV[VX]); +	*x = ll_round((F32)cursor_pos_gl.mX / getScaleFactor().mV[VX]); +	*y = ll_round((F32)cursor_pos_gl.mY / getScaleFactor().mV[VX]);  }  //static  @@ -369,15 +369,15 @@ LLVector2 LLUI::getWindowSize()  //static  void LLUI::screenPointToGL(S32 screen_x, S32 screen_y, S32 *gl_x, S32 *gl_y)  { -	*gl_x = llround((F32)screen_x * getScaleFactor().mV[VX]); -	*gl_y = llround((F32)screen_y * getScaleFactor().mV[VY]); +	*gl_x = ll_round((F32)screen_x * getScaleFactor().mV[VX]); +	*gl_y = ll_round((F32)screen_y * getScaleFactor().mV[VY]);  }  //static  void LLUI::glPointToScreen(S32 gl_x, S32 gl_y, S32 *screen_x, S32 *screen_y)  { -	*screen_x = llround((F32)gl_x / getScaleFactor().mV[VX]); -	*screen_y = llround((F32)gl_y / getScaleFactor().mV[VY]); +	*screen_x = ll_round((F32)gl_x / getScaleFactor().mV[VX]); +	*screen_y = ll_round((F32)gl_y / getScaleFactor().mV[VY]);  }  //static diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index a5796c8af2..3ce39c947f 100755 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -183,7 +183,15 @@ public:  				if (!widget)   				{  					LL_WARNS() << "Widget in " << filename << " was of type " << typeid(view).name() << " instead of expected type " << typeid(T).name() << LL_ENDL; + +#if LL_DARWIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdelete-incomplete" +					delete view; +#pragma clang diagnostic pop +#else  					delete view; +#endif  					view = NULL;  				}  			} diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index e18d7405ab..5f60d80858 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -39,8 +39,6 @@  #include "lluicolortable.h"  #include "message.h" -#include "uriparser/Uri.h" -  #define APP_HEADER_REGEX "((x-grid-location-info://[-\\w\\.]+/app)|(secondlife:///app))"  // Utility functions @@ -495,6 +493,17 @@ LLUrlEntrySecondlifeURL::LLUrlEntrySecondlifeURL()  	mIcon = "Hand";  	mMenuName = "menu_url_http.xml"; +	mTooltip = LLTrans::getString("TooltipHttpUrl"); +} + +/// Return the url from a string that matched the regex +std::string LLUrlEntrySecondlifeURL::getUrl(const std::string &string) const +{ +	if (string.find("://") == std::string::npos) +	{ +		return "https://" + escapeUrl(string); +	} +	return escapeUrl(string);  }  std::string LLUrlEntrySecondlifeURL::getLabel(const std::string &url, const LLUrlLabelCallback &cb) @@ -512,15 +521,6 @@ std::string LLUrlEntrySecondlifeURL::getTooltip(const std::string &url) const  	return url;  } -std::string LLUrlEntrySecondlifeURL::getUrl(const std::string &string) const -{ -	if (string.find("://") == std::string::npos) -	{ -		return "http://" + escapeUrl(string); -	} -	return escapeUrl(string); -} -  //  // LLUrlEntrySimpleSecondlifeURL Describes *secondlife.com and *lindenlab.com urls to substitute icon 'hand.png' before link  // @@ -1033,9 +1033,9 @@ void LLUrlEntryParcel::processParcelInfo(const LLParcelData& parcel_data)  	// If parcel name is empty use Sim_name (x, y, z) for parcel label.  	else if (!parcel_data.sim_name.empty())  	{ -		S32 region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS; -		S32 region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS; -		S32 region_z = llround(parcel_data.global_z); +		S32 region_x = ll_round(parcel_data.global_x) % REGION_WIDTH_UNITS; +		S32 region_y = ll_round(parcel_data.global_y) % REGION_WIDTH_UNITS; +		S32 region_z = ll_round(parcel_data.global_z);  		label = llformat("%s (%d, %d, %d)",  				parcel_data.sim_name.c_str(), region_x, region_y, region_z); diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index ddfc33ab78..60a494974f 100755 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -199,11 +199,11 @@ class LLUrlEntrySecondlifeURL : public LLUrlEntryBase  {  public:  	LLUrlEntrySecondlifeURL(); -	bool isTrusted() const { return true; } +	/*virtual*/ bool isTrusted() const { return true; } +	/*virtual*/ std::string getUrl(const std::string &string) const;  	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);  	/*virtual*/ std::string getQuery(const std::string &url) const;  	/*virtual*/ std::string getTooltip(const std::string &url) const; -	/*virtual*/ std::string getUrl(const std::string &string) const;  };  /// diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 88d2c4639d..1143574968 100755 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -191,7 +191,7 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL  			if (start < match_start || match_entry == NULL)  			{ -				if((mLLUrlEntryInvalidSLURL == *it)) +				if (mLLUrlEntryInvalidSLURL == *it)  				{  					if(url_entry && url_entry->isSLURLvalid(text.substr(start, end - start + 1)))  					{ @@ -220,9 +220,12 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL  		// fill in the LLUrlMatch object and return it  		std::string url = text.substr(match_start, match_end - match_start + 1); -		LLUriParser up(url); -		up.normalize(); -		url = up.normalizedUri(); +		if (match_entry == mUrlEntryTrusted) +		{ +			LLUriParser up(url); +			up.normalize(); +			url = up.normalizedUri(); +		}  		match.setValues(match_start, match_end,  						match_entry->getUrl(url), @@ -255,7 +258,7 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr  		// character encoding, so we need to update the start  		// and end values to be correct for the wide string.  		LLWString wurl = utf8str_to_wstring(match.getUrl()); -		S32 start = text.find(wurl); +		size_t start = text.find(wurl);  		if (start == std::string::npos)  		{  			return false; diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h index d85fbcb012..5ce4048d5d 100755 --- a/indra/llui/llurlregistry.h +++ b/indra/llui/llurlregistry.h @@ -93,6 +93,7 @@ private:  	friend class LLSingleton<LLUrlRegistry>;  	std::vector<LLUrlEntryBase *> mUrlEntry; +	LLUrlEntryBase*	mUrlEntryTrusted;  	LLUrlEntryBase*	mUrlEntryIcon;  	LLUrlEntryBase* mLLUrlEntryInvalidSLURL;  	LLUrlEntryBase* mUrlEntryHTTPLabel; diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 9e6bebc93b..a8beb9cfc9 100755 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -2164,10 +2164,6 @@ LLControlVariable *LLView::findControl(const std::string& name)  	return control_group.getControl(name);	  } -const S32 FLOATER_H_MARGIN = 15; -const S32 MIN_WIDGET_HEIGHT = 10; -const S32 VPAD = 4; -  void LLView::initFromParams(const LLView::Params& params)  {  	LLRect required_rect = getRequiredRect(); diff --git a/indra/llui/llviewereventrecorder.cpp b/indra/llui/llviewereventrecorder.cpp index c5a4354f32..9fe6a542b4 100644 --- a/indra/llui/llviewereventrecorder.cpp +++ b/indra/llui/llviewereventrecorder.cpp @@ -50,7 +50,7 @@ bool LLViewerEventRecorder::displayViewerEventRecorderMenuItems() {  void LLViewerEventRecorder::setEventLoggingOn() {    if (! mLog.is_open()) { -    mLog.open(mLogFilename, llofstream::out); +      mLog.open(mLogFilename.c_str(), std::ios_base::out);    }    logEvents=true;     LL_DEBUGS() << "LLViewerEventRecorder::setEventLoggingOn event logging turned on" << LL_ENDL; diff --git a/indra/llui/llxuiparser.cpp b/indra/llui/llxuiparser.cpp index 37d88cb9f9..99a0869ce3 100755 --- a/indra/llui/llxuiparser.cpp +++ b/indra/llui/llxuiparser.cpp @@ -58,7 +58,9 @@ static 	LLInitParam::Parser::parser_inspect_func_map_t sSimpleXUIInspectFuncs;  const char* NO_VALUE_MARKER = "no_value"; +#ifdef LL_WINDOWS  const S32 LINE_NUMBER_HERE = 0; +#endif  struct MaxOccursValues : public LLInitParam::TypeValuesHelper<U32, MaxOccursValues>  { diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp index a9d96c9807..76296ff877 100755 --- a/indra/llvfs/lldiriterator.cpp +++ b/indra/llvfs/lldiriterator.cpp @@ -127,7 +127,8 @@ bool LLDirIterator::Impl::next(std::string &fname)  		{  			boost::smatch match;  			std::string name = mIter->path().filename().string(); -			if (found = boost::regex_match(name, match, mFilterExp)) +			found = boost::regex_match(name, match, mFilterExp); +			if (found)  			{  				fname = name;  			} diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp index e64368e8d7..6572edead3 100644 --- a/indra/llvfs/llpidlock.cpp +++ b/indra/llvfs/llpidlock.cpp @@ -95,7 +95,7 @@ LLPidLockFile& LLPidLockFile::instance()  void LLPidLockFile::writeLockFile(LLSD pids)  { -	llofstream ofile(mLockName); +	llofstream ofile(mLockName.c_str());  	if (!LLSDSerialize::toXML(pids,ofile))  	{ @@ -119,7 +119,7 @@ bool LLPidLockFile::requestLock(LLNameTable<void *> *name_table, bool autosave,  	LLSD out_pids;  	out_pids.append( (LLSD::Integer)mPID ); -	llifstream ifile(mLockName); +	llifstream ifile(mLockName.c_str());  	if (ifile.is_open())   	{									//If file exists, we need to decide whether or not to continue. @@ -175,7 +175,7 @@ bool LLPidLockFile::checkLock()  void LLPidLockFile::releaseLock()  { -	llifstream ifile(mLockName); +	llifstream ifile(mLockName.c_str());  	LLSD in_pids;  	LLSD out_pids;  	bool write_file=FALSE; diff --git a/indra/llvfs/llvfs_objc.h b/indra/llvfs/llvfs_objc.h index 90101eb2e9..56cdbebfc5 100755 --- a/indra/llvfs/llvfs_objc.h +++ b/indra/llvfs/llvfs_objc.h @@ -40,4 +40,4 @@ std::string* getSystemResourceFolder();  std::string* getSystemExecutableFolder(); -#endif LL_LLVFS_OBJC_H +#endif // LL_LLVFS_OBJC_H diff --git a/indra/llvfs/llvfs_objc.mm b/indra/llvfs/llvfs_objc.mm index 47b0e73978..282ea41339 100755 --- a/indra/llvfs/llvfs_objc.mm +++ b/indra/llvfs/llvfs_objc.mm @@ -48,7 +48,7 @@ std::string* findSystemDirectory(NSSearchPathDirectory searchPathDirectory,  {      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; -    std::string *result; +    std::string *result = nil;      NSString *path = nil;      // Search for the path diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm index 9e7093782e..1c9160a42d 100644 --- a/indra/llwindow/llopenglview-objc.mm +++ b/indra/llwindow/llopenglview-objc.mm @@ -104,20 +104,20 @@ attributedStringInfo getSegments(NSAttributedString *str)  - (unsigned long)getVramSize  {      CGLRendererInfoObj info = 0; -	GLint vram_mbytes = 0; +	GLint vram_megabytes = 0;      int num_renderers = 0;      CGLError the_err = CGLQueryRendererInfo (CGDisplayIDToOpenGLDisplayMask(kCGDirectMainDisplay), &info, &num_renderers);      if(0 == the_err)      { -        CGLDescribeRenderer (info, 0, kCGLRPTextureMemoryMegabytes, &vram_mbytes); +        CGLDescribeRenderer (info, 0, kCGLRPTextureMemoryMegabytes, &vram_megabytes);          CGLDestroyRendererInfo (info);      }      else      { -        vram_mbytes = 256; +        vram_megabytes = 256;      } -	return (unsigned long)vram_mbytes; +	return (unsigned long)vram_megabytes; // return value is in megabytes.  }  - (void)viewDidMoveToWindow diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index fc1ea06d10..15e054fb5d 100755 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -44,15 +44,9 @@  extern BOOL gDebugWindowProc; -// culled from winuser.h -//const S32	WHEEL_DELTA = 120;     /* Value for rolling one detent */ -// On the Mac, the scroll wheel reports a delta of 1 for each detent. -// There's also acceleration for faster scrolling, based on a slider in the system preferences. -const S32	WHEEL_DELTA = 1;     /* Value for rolling one detent */  const S32	BITS_PER_PIXEL = 32;  const S32	MAX_NUM_RESOLUTIONS = 32; -  //  // LLWindowMacOSX  // @@ -244,8 +238,8 @@ void callRightMouseDown(float *pos, MASK mask)      }  	LLCoordGL		outCoords; -	outCoords.mX = llround(pos[0]); -	outCoords.mY = llround(pos[1]); +	outCoords.mX = ll_round(pos[0]); +	outCoords.mY = ll_round(pos[1]);  	gWindowImplementation->getCallbacks()->handleRightMouseDown(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));  } @@ -257,8 +251,8 @@ void callRightMouseUp(float *pos, MASK mask)      }  	LLCoordGL		outCoords; -	outCoords.mX = llround(pos[0]); -	outCoords.mY = llround(pos[1]); +	outCoords.mX = ll_round(pos[0]); +	outCoords.mY = ll_round(pos[1]);  	gWindowImplementation->getCallbacks()->handleRightMouseUp(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));  } @@ -270,8 +264,8 @@ void callLeftMouseDown(float *pos, MASK mask)      }  	LLCoordGL		outCoords; -	outCoords.mX = llround(pos[0]); -	outCoords.mY = llround(pos[1]); +	outCoords.mX = ll_round(pos[0]); +	outCoords.mY = ll_round(pos[1]);  	gWindowImplementation->getCallbacks()->handleMouseDown(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));  } @@ -283,8 +277,8 @@ void callLeftMouseUp(float *pos, MASK mask)      }  	LLCoordGL		outCoords; -	outCoords.mX = llround(pos[0]); -	outCoords.mY = llround(pos[1]); +	outCoords.mX = ll_round(pos[0]); +	outCoords.mY = ll_round(pos[1]);  	gWindowImplementation->getCallbacks()->handleMouseUp(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));  } @@ -297,8 +291,8 @@ void callDoubleClick(float *pos, MASK mask)      }  	LLCoordGL	outCoords; -	outCoords.mX = llround(pos[0]); -	outCoords.mY = llround(pos[1]); +	outCoords.mX = ll_round(pos[0]); +	outCoords.mY = ll_round(pos[1]);  	gWindowImplementation->getCallbacks()->handleDoubleClick(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));  } @@ -313,8 +307,8 @@ void callResize(unsigned int width, unsigned int height)  void callMouseMoved(float *pos, MASK mask)  {  	LLCoordGL		outCoords; -	outCoords.mX = llround(pos[0]); -	outCoords.mY = llround(pos[1]); +	outCoords.mX = ll_round(pos[0]); +	outCoords.mY = ll_round(pos[1]);  	float deltas[2];  	gWindowImplementation->getMouseDeltas(deltas);  	outCoords.mX += deltas[0]; @@ -376,8 +370,8 @@ void callDeltaUpdate(float *delta, MASK mask)  void callMiddleMouseDown(float *pos, MASK mask)  {  	LLCoordGL		outCoords; -	outCoords.mX = llround(pos[0]); -	outCoords.mY = llround(pos[1]); +	outCoords.mX = ll_round(pos[0]); +	outCoords.mY = ll_round(pos[1]);  	float deltas[2];  	gWindowImplementation->getMouseDeltas(deltas);  	outCoords.mX += deltas[0]; @@ -388,8 +382,8 @@ void callMiddleMouseDown(float *pos, MASK mask)  void callMiddleMouseUp(float *pos, MASK mask)  {  	LLCoordGL outCoords; -	outCoords.mX = llround(pos[0]); -	outCoords.mY = llround(pos[1]); +	outCoords.mX = ll_round(pos[0]); +	outCoords.mY = ll_round(pos[1]);  	float deltas[2];  	gWindowImplementation->getMouseDeltas(deltas);  	outCoords.mX += deltas[0]; @@ -525,8 +519,8 @@ void LLWindowMacOSX::updateMouseDeltas(float* deltas)  {  	if (mCursorDecoupled)  	{ -		mCursorLastEventDeltaX = llround(deltas[0]); -		mCursorLastEventDeltaY = llround(-deltas[1]); +		mCursorLastEventDeltaX = ll_round(deltas[0]); +		mCursorLastEventDeltaY = ll_round(-deltas[1]);  		if (mCursorIgnoreNextDelta)  		{ diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp index 598a802d67..4e3d0ab392 100755 --- a/indra/llxml/llcontrol.cpp +++ b/indra/llxml/llcontrol.cpp @@ -833,7 +833,7 @@ U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only  		}  	}  	llofstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (file.is_open())  	{  		LLSDSerialize::toPrettyXML(settings, file); @@ -853,7 +853,7 @@ U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_v  {  	LLSD settings;  	llifstream infile; -	infile.open(filename); +	infile.open(filename.c_str());  	if(!infile.is_open())  	{  		LL_WARNS("Settings") << "Cannot find file " << filename << " to load." << LL_ENDL; diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp index cb99496ef1..455df13e48 100755 --- a/indra/llxml/llxmlnode.cpp +++ b/indra/llxml/llxmlnode.cpp @@ -43,8 +43,6 @@  #include "lluuid.h"  #include "lldir.h" -const S32 MAX_COLUMN_WIDTH = 80; -  // static  BOOL LLXMLNode::sStripEscapedStrings = TRUE;  BOOL LLXMLNode::sStripWhitespaceValues = FALSE; diff --git a/indra/llxml/tests/llcontrol_test.cpp b/indra/llxml/tests/llcontrol_test.cpp index c273773c9b..2b691ffbb1 100755 --- a/indra/llxml/tests/llcontrol_test.cpp +++ b/indra/llxml/tests/llcontrol_test.cpp @@ -80,7 +80,7 @@ namespace tut  		}  		void writeSettingsFile(const LLSD& config)  		{ -			llofstream file(mTestConfigFile); +			llofstream file(mTestConfigFile.c_str());  			if (file.is_open())  			{  				LLSDSerialize::toPrettyXML(config, file); diff --git a/indra/lscript/lscript_execute/lscript_readlso.cpp b/indra/lscript/lscript_execute/lscript_readlso.cpp index 7ec56c2409..abcb28e998 100755 --- a/indra/lscript/lscript_execute/lscript_readlso.cpp +++ b/indra/lscript/lscript_execute/lscript_readlso.cpp @@ -114,7 +114,7 @@ void LLScriptLSOParse::printRegisters(LLFILE *fp)  		else if (gMajorVersion == LSL2_MAJOR_VERSION_TWO)  		{  			U64 data = get_register_u64(mRawData, (LSCRIPTRegisters)i); -			fprintf(fp, "%s: 0x%X%X\n", gLSCRIPTRegisterNames[i], (U32)(data>>32), (U32)(data && 0xFFFFFFFF)); +			fprintf(fp, "%s: 0x%X%X\n", gLSCRIPTRegisterNames[i], (U32)(data>>32), (U32)(data & 0xFFFFFFFF));  		}  	}  	fprintf(fp, "=============================\n\n"); diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp index da7de01799..66c00cd58c 100755 --- a/indra/media_plugins/example/media_plugin_example.cpp +++ b/indra/media_plugins/example/media_plugin_example.cpp @@ -363,10 +363,10 @@ void MediaPluginExample::update( F64 milliseconds )          };          if ( mXpos[ n ] + mXInc[ n ] < 0 || mXpos[ n ] + mXInc[ n ] >= mWidth - mBlockSize[ n ] ) -            mXInc[ n ] =- mXInc[ n ]; +            mXInc[ n ]= -mXInc[ n ];          if ( mYpos[ n ] + mYInc[ n ] < 0 || mYpos[ n ] + mYInc[ n ] >= mHeight - mBlockSize[ n ] ) -            mYInc[ n ] =- mYInc[ n ]; +            mYInc[ n ]= -mYInc[ n ];          mXpos[ n ] += mXInc[ n ];          mYpos[ n ] += mYInc[ n ]; diff --git a/indra/media_plugins/winmmshim/forwarding_api.cpp b/indra/media_plugins/winmmshim/forwarding_api.cpp index 495e08942b..33f0675028 100755 --- a/indra/media_plugins/winmmshim/forwarding_api.cpp +++ b/indra/media_plugins/winmmshim/forwarding_api.cpp @@ -1338,7 +1338,7 @@ extern "C" {  		return joySetThreshold_orig( uJoyID, uThreshold);  	} -	BOOL WINAPI  mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus) +	BOOL WINAPI mciDriverNotify(HANDLE hwndCallback, MCIDEVICEID uDeviceID, UINT uStatus)  	{  		ll_winmm_shim_initialize();  		//OutputDebugString(L"mciDriverNotify\n"); @@ -1610,7 +1610,7 @@ extern "C" {  		return mciGetYieldProc_orig( mciId, pdwYieldData);  	} -	UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType) +	UINT WINAPI mciLoadCommandResource(HANDLE hInstance, LPCWSTR lpResName, UINT uType)  	{  		ll_winmm_shim_initialize();  		//OutputDebugString(L"mciLoadCommandResource"); diff --git a/indra/media_plugins/winmmshim/forwarding_api.h b/indra/media_plugins/winmmshim/forwarding_api.h index 076a08f769..1418fc9e1d 100755 --- a/indra/media_plugins/winmmshim/forwarding_api.h +++ b/indra/media_plugins/winmmshim/forwarding_api.h @@ -306,7 +306,7 @@ typedef MMRESULT (WINAPI *joySetCapture_type)( HWND hwnd, UINT uJoyID, UINT uPer  extern joySetCapture_type joySetCapture_orig;  typedef MMRESULT (WINAPI *joySetThreshold_type)( UINT uJoyID, UINT uThreshold);  extern joySetThreshold_type joySetThreshold_orig; -typedef BOOL (WINAPI  *mciDriverNotify_type)(HWND hwndCallback, UINT uDeviceID, UINT uStatus); +typedef BOOL(WINAPI  *mciDriverNotify_type)(HANDLE hwndCallback, MCIDEVICEID uDeviceID, UINT uStatus);  extern mciDriverNotify_type mciDriverNotify_orig;  typedef UINT (WINAPI  *mciDriverYield_type)(UINT uDeviceID);  extern mciDriverYield_type mciDriverYield_orig; @@ -384,7 +384,7 @@ typedef HTASK (WINAPI *mciGetCreatorTask_type)( MCIDEVICEID mciId);  extern mciGetCreatorTask_type mciGetCreatorTask_orig;  typedef YIELDPROC (WINAPI *mciGetYieldProc_type)( MCIDEVICEID mciId, LPDWORD pdwYieldData);  extern mciGetYieldProc_type mciGetYieldProc_orig; -typedef UINT (WINAPI *mciLoadCommandResource_type)(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType); +typedef UINT (WINAPI *mciLoadCommandResource_type)(HANDLE hInstance, LPCWSTR lpResName, UINT uType);  extern mciLoadCommandResource_type mciLoadCommandResource_orig;  typedef BOOL (WINAPI *mciExecute_type)(LPCSTR pszCommand);  extern mciExecute_type mciExecute_orig; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 318e3c8688..13040ea423 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -4,17 +4,19 @@ project(viewer)  include(00-Common)  include(Boost) +include(BuildPackagesInfo)  include(BuildVersion) +include(CMakeCopyIfDifferent)  include(DBusGlib)  include(DirectX) -include(OpenSSL)  include(DragDrop)  include(EXPAT)  include(FMODEX) -include(OPENAL) -include(OpenGL) +include(GLOD) +include(GooglePerfTools)  include(Hunspell)  include(JsonCpp) +include(LLAppearance)  include(LLAudio)  include(LLCharacter)  include(LLCommon) @@ -22,6 +24,8 @@ include(LLCoreHttp)  include(LLImage)  include(LLImageJ2COJ)  include(LLInventory) +include(LLKDU) +include(LLLogin)  include(LLMath)  include(LLMessage)  include(LLPhysicsExtensions) @@ -36,18 +40,16 @@ include(LScript)  include(Linking)  include(NDOF)  include(NVAPI) -include(GooglePerfTools) +include(OPENAL) +include(OpenGL) +include(OpenSSL) +include(PNG) +include(Prebuilt)  include(TemplateCheck)  include(UI)  include(UnixInstall) -include(LLKDU)  include(ViewerMiscLibs) -include(LLLogin)  include(VisualLeakDetector) -include(GLOD) -include(CMakeCopyIfDifferent) -include(LLAppearance) -include(PNG)  include(ZLIB)  include(URIPARSER) @@ -60,6 +62,9 @@ if(FMODEX)    include_directories(${FMODEX_INCLUDE_DIR})  endif(FMODEX) +# install SLPlugin host executable and its dynamic-library plugins +use_prebuilt_binary(slplugins) +  include_directories(      ${DBUSGLIB_INCLUDE_DIRS}      ${JSONCPP_INCLUDE_DIR} @@ -1301,7 +1306,7 @@ set(viewer_HEADER_FILES  source_group("CMake Rules" FILES ViewerInstall.cmake) -# the viewer_version.txt file created here is for passing to viewer_manifest +# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild  # the summary.json file is created for the benefit of the TeamCity builds, where  #   it is used to provide descriptive information to the build results page  add_custom_target(generate_viewer_version ALL @@ -1372,6 +1377,9 @@ if (LINUX)      set(viewer_LIBRARIES          Xinerama          ) +    if (OPENAL) +      LIST(APPEND viewer_LIBRARIES ${OPENAL_LIBRARIES}) +    endif (OPENAL)  endif (LINUX)  if (WINDOWS) @@ -1586,6 +1594,7 @@ set(viewer_APPSETTINGS_FILES      app_settings/viewerart.xml      ${CMAKE_SOURCE_DIR}/../etc/message.xml      ${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg +    packages-info.txt      )  source_group("App Settings" FILES ${viewer_APPSETTINGS_FILES}) @@ -1666,6 +1675,9 @@ if (WINDOWS)          LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO /LARGEADDRESSAWARE"          LINK_FLAGS_RELEASE "/FORCE:MULTIPLE /MAP\"secondlife-bin.MAP\" /OPT:REF /LARGEADDRESSAWARE"          ) + +    add_dependencies(${VIEWER_BINARY_NAME} generate_viewer_version) +      if(USE_PRECOMPILED_HEADERS)          set_target_properties(              ${VIEWER_BINARY_NAME} @@ -1801,7 +1813,6 @@ if (WINDOWS)          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat        DEPENDS          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -        generate_viewer_version          stage_third_party_libs          ${COPY_INPUT_DEPENDENCIES}        COMMENT "Performing viewer_manifest copy" @@ -1815,10 +1826,10 @@ if (WINDOWS)        add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)      endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) -    add_dependencies(${VIEWER_BINARY_NAME} -      SLPlugin -      windows-crash-logger -      ) +##  add_dependencies(${VIEWER_BINARY_NAME} +##    SLPlugin +##    windows-crash-logger +##    )      # sets the 'working directory' for debugging from visual studio.      if (NOT UNATTENDED) @@ -1873,10 +1884,9 @@ if (WINDOWS)              ${COPY_INPUT_DEPENDENCIES}          ) -      add_custom_target(package ALL DEPENDS +      add_custom_target(llpackage ALL DEPENDS          ${CMAKE_CFG_INTDIR}/touched.bat          windows-setup-build-all -        generate_viewer_version          )          # temporarily disable packaging of event_host until hg subrepos get          # sorted out on the parabuild cluster... @@ -1986,12 +1996,14 @@ if (LINUX)    set(COPY_INPUT_DEPENDENCIES      ${VIEWER_BINARY_NAME}      linux-crash-logger -    SLPlugin -    media_plugin_webkit -    media_plugin_gstreamer010 +##  SLPlugin +##  media_plugin_webkit +##  media_plugin_gstreamer010      llcommon      ) +  add_dependencies(${VIEWER_BINARY_NAME} generate_viewer_version) +    add_custom_command(        OUTPUT ${product}.tar.bz2        COMMAND ${PYTHON_EXECUTABLE} @@ -2010,7 +2022,6 @@ if (LINUX)          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched        DEPENDS          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -        generate_viewer_version          ${COPY_INPUT_DEPENDENCIES}        ) @@ -2035,7 +2046,6 @@ if (LINUX)        --source=${CMAKE_CURRENT_SOURCE_DIR}      DEPENDS        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -      generate_viewer_version        ${COPY_INPUT_DEPENDENCIES}      COMMENT "Performing viewer_manifest copy"      ) @@ -2043,10 +2053,10 @@ if (LINUX)    add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)    if (PACKAGE) -    add_custom_target(package ALL DEPENDS ${product}.tar.bz2) +    add_custom_target(llpackage ALL DEPENDS ${product}.tar.bz2)      # Make sure we don't run two instances of viewer_manifest.py at the same time. -    add_dependencies(package copy_l_viewer_manifest) -    check_message_template(package) +    add_dependencies(llpackage copy_l_viewer_manifest) +    check_message_template(llpackage)    endif (PACKAGE)  endif (LINUX) @@ -2077,6 +2087,8 @@ if (DARWIN)       "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app/Contents/Info.plist"      ) +  add_dependencies(${VIEWER_BINARY_NAME} generate_viewer_version) +    add_custom_command(      TARGET ${VIEWER_BINARY_NAME} POST_BUILD      COMMAND ${PYTHON_EXECUTABLE} @@ -2096,10 +2108,10 @@ if (DARWIN)      DEPENDS        ${VIEWER_BINARY_NAME}        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -      generate_viewer_version      ) -  add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-crash-logger) +##add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-crash-logger) +  add_dependencies(${VIEWER_BINARY_NAME} mac-crash-logger)    if (ENABLE_SIGNING)        set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}") @@ -2108,11 +2120,11 @@ if (DARWIN)    endif (ENABLE_SIGNING)    if (PACKAGE) -      add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME}) -      add_dependencies(package generate_viewer_version) +      add_custom_target(llpackage ALL DEPENDS ${VIEWER_BINARY_NAME}) +      add_dependencies(llpackage generate_viewer_version)        add_custom_command( -        TARGET package POST_BUILD +        TARGET llpackage POST_BUILD          COMMAND ${PYTHON_EXECUTABLE}          ARGS            ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py @@ -2131,7 +2143,6 @@ if (DARWIN)            ${SIGNING_SETTING}          DEPENDS            ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -          generate_viewer_version        )    endif (PACKAGE)  endif (DARWIN) @@ -2154,19 +2165,21 @@ if (PACKAGE)    if (DARWIN)      list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")      # *TODO: Generate these search dirs in the cmake files related to each binary. -    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}") +##  list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}")      list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_crash_logger/${CMAKE_CFG_INTDIR}") -    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}") -    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/quicktime/${CMAKE_CFG_INTDIR}") -    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/webkit/${CMAKE_CFG_INTDIR}") +##  list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}") +##  list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/quicktime/${CMAKE_CFG_INTDIR}") +##  list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/webkit/${CMAKE_CFG_INTDIR}")      set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-darwin.tar.bz2") -    set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-crash-logger") +##  set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-crash-logger") +    set(VIEWER_EXE_GLOBS "'Second Life' mac-crash-logger")      set(VIEWER_LIB_GLOB "*.dylib")    endif (DARWIN)    if (LINUX)      list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/packaged")      set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-linux.tar.bz2") -    set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin SLPlugin") +##  set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin SLPlugin") +    set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin")      set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}*")      set(VIEWER_COPY_MANIFEST copy_l_viewer_manifest)    endif (LINUX) @@ -2194,7 +2207,7 @@ if (PACKAGE)    add_custom_target(generate_breakpad_symbols DEPENDS "${VIEWER_SYMBOL_FILE}")    add_dependencies(generate_breakpad_symbols "${VIEWER_BINARY_NAME}" "${VIEWER_COPY_MANIFEST}") -  add_dependencies(package generate_breakpad_symbols) +  add_dependencies(llpackage generate_breakpad_symbols)    endif(RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING)  endif (PACKAGE) @@ -2372,11 +2385,6 @@ include(LLAddBuildTest)  SET(viewer_TEST_SOURCE_FILES    llagentaccess.cpp    llwlparammanager.cpp -  # Not *actually* a unit test, it's an integration test. -  # Because it won't work in the new unit test iface, i've commented out -  # and notified Nat. Delete this when it's replaced! -  # + poppy & brad 2009-06-05 -  # llcapabilitylistener.cpp    )  set_source_files_properties(    ${viewer_TEST_SOURCE_FILES} diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 7c35ff8c4b..1523336b0d 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.7.28 +3.7.29 diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2eb780ec5d..845cb5ae96 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5030,7 +5030,7 @@        <key>Type</key>        <string>LLSD</string>        <key>Value</key> -      <array /> +      <array/>      </map>      <key>LSLFindCaseInsensitivity</key>          <map> @@ -14703,17 +14703,6 @@        <key>Value</key>        <integer>1</integer>      </map> -    <key>UseHTTPInventory</key> -    <map> -      <key>Comment</key> -      <string>Allow use of http inventory transfers instead of UDP</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map>      <key>ClickToWalk</key>      <map>        <key>Comment</key> diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index d119504017..c62b45ed81 100755 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -97,7 +97,7 @@          <key>Type</key>              <string>Boolean</string>          <key>Value</key> -            <integer>true</integer> +            <integer>1</integer>      </map>         <key>InstantMessageLogPath</key>          <map> diff --git a/indra/newview/generate_breakpad_symbols.py b/indra/newview/generate_breakpad_symbols.py index 4181e4ebb3..d351c406bc 100755 --- a/indra/newview/generate_breakpad_symbols.py +++ b/indra/newview/generate_breakpad_symbols.py @@ -31,7 +31,6 @@ $/LicenseInfo$  import collections  import fnmatch  import itertools -import operator  import os  import re  import sys @@ -149,7 +148,7 @@ def main(configuration, search_dirs, viewer_exes, libs_suffix, dump_syms_tool, v                     == os.path.splitext(os.path.basename(m))[0].lower()          # there must be at least one .sym file in tarfile_members that matches          # each required module (ignoring file extensions) -        if not reduce(operator.or_, itertools.imap(match_module_basename, tarfile_members)): +        if not any(itertools.imap(match_module_basename, tarfile_members)):              print >> sys.stderr, "failed to find required %s in generated %s" \                      % (required_module, viewer_symbol_file)              os.remove(viewer_symbol_file) diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 65581a6781..8c8b4971cf 100755 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -1,6 +1,6 @@  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;; secondlife setup.nsi
 -;; Copyright 2004-2011, Linden Research, Inc.
 +;; Second Life setup.nsi
 +;; Copyright 2004-2015, Linden Research, Inc.
  ;;
  ;; This library is free software; you can redistribute it and/or
  ;; modify it under the terms of the GNU Lesser General Public
 @@ -18,26 +18,27 @@  ;;
  ;; Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  ;;
 -;; NSIS Unicode 2.38.1 or higher required
 +;; NSIS Unicode 2.46.5 or higher required
  ;; http://www.scratchpaper.com/
  ;;
 -;; Author: James Cook, Don Kjer, Callum Prentice
 +;; Author: James Cook, TankMaster Finesmith, Don Kjer, Callum Prentice
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; Compiler flags
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -SetOverwrite on				; overwrite files
 -SetCompress auto			; compress iff saves space
 -SetCompressor /solid lzma	; compress whole installer as one block
 -SetDatablockOptimize off	; only saves us 0.1%, not worth it
 -XPStyle on                  ; add an XP manifest to the installer
 -RequestExecutionLevel admin	; on Vista we must be admin because we write to Program Files
 +SetOverwrite on				# Overwrite files
 +SetCompress auto			# Compress if saves space
 +SetCompressor /solid lzma	# Compress whole installer as one block
 +SetDatablockOptimize off	# Only saves us 0.1%, not worth it
 +XPStyle on                  # Add an XP manifest to the installer
 +RequestExecutionLevel admin	# For when we write to Program Files
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Project flags
 +;; Project flags
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +# This placeholder is replaced by viewer_manifest.py
  %%VERSION%%
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 @@ -72,140 +73,317 @@ LangString LanguageCode ${LANG_RUSSIAN}  "ru"  LangString LanguageCode ${LANG_TURKISH}  "tr"
  LangString LanguageCode ${LANG_TRADCHINESE}  "zh"
 -;; this placeholder is replaced by viewer_manifest.py
 +# This placeholder is replaced by viewer_manifest.py
  %%INST_VARS%%
  Name ${INSTNAME}
 -SubCaption 0 $(LicenseSubTitleSetup)	; override "license agreement" text
 +SubCaption 0 $(LicenseSubTitleSetup)	# Override "license agreement" text
 -BrandingText " "						; bottom of window text
 +BrandingText " "						# Bottom of window text
  Icon          %%SOURCE%%\installers\windows\install_icon.ico
  UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico
 -WindowIcon on							; show our icon in left corner
 -BGGradient off							; no big background window
 -CRCCheck on								; make sure CRC is OK
 -InstProgressFlags smooth colored		; new colored smooth look
 -ShowInstDetails nevershow				; no details, no "show" button
 -SetOverwrite on							; stomp files by default
 -AutoCloseWindow true					; after all files install, close window
 +WindowIcon on							# Show our icon in left corner
 +BGGradient off							# No big background window
 +CRCCheck on								# Make sure CRC is OK
 +InstProgressFlags smooth colored		# New colored smooth look
 +SetOverwrite on							# Overwrite files by default
 +AutoCloseWindow true					# After all files install, close window
  InstallDir "$PROGRAMFILES\${INSTNAME}"
  InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
 +UninstallText $(UninstallTextMsg)
  DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
  Page directory dirPre
  Page instfiles
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Variables
 +;; Variables
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Var INSTPROG
  Var INSTEXE
  Var INSTSHORTCUT
 -Var COMMANDLINE         ; command line passed to this installer, set in .onInit
 -Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
 -Var SKIP_DIALOGS        ; set from command line in  .onInit. autoinstall 
 -                        ; GUI and the defaults.
 -Var SKIP_AUTORUN		; skip automatic launch of viewer after install
 -Var DO_UNINSTALL_V2     ; If non-null, path to a previous Viewer 2 installation that will be uninstalled.
 -
 -;;; Function definitions should go before file includes, because calls to
 -;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
 -;;; the end of this script NSIS has to decompress the whole installer before 
 -;;; it can call the DLL function. JC
 -
 -!include "FileFunc.nsh"     ; For GetParameters, GetOptions
 +Var COMMANDLINE         # Command line passed to this installer, set in .onInit
 +Var SHORTCUT_LANG_PARAM # "--set InstallLanguage de", Passes language to viewer
 +Var SKIP_DIALOGS        # Set from command line in  .onInit. autoinstall GUI and the defaults.
 +Var SKIP_AUTORUN		# Skip automatic launch of the viewer after install
 +Var DO_UNINSTALL_V2     # If non-null, path to a previous Viewer 2 installation that will be uninstalled.
 +
 +# Function definitions should go before file includes, because calls to
 +# DLLs like LangDLL trigger an implicit file include, so if that call is at
 +# the end of this script NSIS has to decompress the whole installer before 
 +# it can call the DLL function. JC
 +
 +!include "FileFunc.nsh"     # For GetParameters, GetOptions
  !insertmacro GetParameters
  !insertmacro GetOptions
 -!include WinVer.nsh			; For OS and SP detection
 -!include x64.nsh			; For 64bit OS detection
 +!include WinVer.nsh			# For OS and SP detection
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; After install completes, launch app
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function .onInstSuccess
 -Call CheckWindowsServPack				; Warn if not on the latest SP before asking to launch.
 -    Push $R0	# Option value, unused
 -	StrCmp $SKIP_AUTORUN "true" +2;
 -	# Assumes SetOutPath $INSTDIR
 -	Exec '"$INSTDIR\$INSTEXE" $SHORTCUT_LANG_PARAM'
 -	Pop $R0
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Pre-directory page callback
 +;; Pre-directory page callback
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function dirPre
      StrCmp $SKIP_DIALOGS "true" 0 +2
  	Abort
 +
  FunctionEnd    
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Make sure this computer meets the minimum system requirements.
 -; Currently: Windows 32bit XP SP3, 64bit XP SP2 and Server 2003 SP2
 +;; Prep Installer Section
 +;;
 +;; Note: to add new languages, add a language file include to the list 
 +;; at the top of this file, add an entry to the menu and then add an 
 +;; entry to the language ID selector below
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function CheckWindowsVersion
 -  ${If} ${AtMostWin2000}
 -    MessageBox MB_OK $(CheckWindowsVersionMB)
 +Function .onInit
 +Call CheckCPUFlags							# Make sure we have SSE2 support
 +Call CheckWindowsVersion					# Don't install On unsupported systems
 +    Push $0
 +    ${GetParameters} $COMMANDLINE			# Get our command line
 +
 +    ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0   
 +    IfErrors +2 0	# If error jump past setting SKIP_DIALOGS
 +        StrCpy $SKIP_DIALOGS "true"
 +
 +	${GetOptions} $COMMANDLINE "/SKIP_AUTORUN" $0
 +	IfErrors +2 0 ; If error jump past setting SKIP_AUTORUN
 +		StrCpy $SKIP_AUTORUN "true"
 +
 +    ${GetOptions} $COMMANDLINE "/LANGID=" $0	# /LANGID=1033 implies US English
 +
 +# If no language (error), then proceed
 +    IfErrors lbl_configure_default_lang
 +# No error means we got a language, so use it
 +    StrCpy $LANGUAGE $0
 +    Goto lbl_return
 +
 +lbl_configure_default_lang:
 +# If we currently have a version of SL installed, default to the language of that install
 +# Otherwise don't change $LANGUAGE and it will default to the OS UI language.
 +    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 +    IfErrors +2 0	# If error skip the copy instruction 
 +	StrCpy $LANGUAGE $0
 +
 +# For silent installs, no language prompt, use default
 +    IfSilent lbl_return
 +    StrCmp $SKIP_DIALOGS "true" lbl_return
 +  
 +lbl_build_menu:
 +	Push ""
 +# Use separate file so labels can be UTF-16 but we can still merge changes into this ASCII file. JC
 +    !include "%%SOURCE%%\installers\windows\language_menu.nsi"
 +    
 +	Push A	# A means auto count languages for the auto count to work the first empty push (Push "") must remain
 +	LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
 +	Pop $0
 +	StrCmp $0 "cancel" 0 +2
 +		Abort
 +    StrCpy $LANGUAGE $0
 +
 +# Save language in registry		
 +	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
 +lbl_return:
 +    Pop $0
 +    Return
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Prep Uninstaller Section
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.onInit
 +# Read language from registry and set for uninstaller. Key will be removed on successful uninstall
 +	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 +    IfErrors lbl_end
 +	StrCpy $LANGUAGE $0
 +lbl_end:
 +    Return
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Checks for CPU valid (must have SSE2 support)
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckCPUFlags
 +    Push $1
 +    System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
 +    IntCmp $1 1 OK_SSE2
 +    MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE2
      Quit
 -  ${EndIf}
 -  ${If} ${IsWinXP}
 -  ${AndIfNot} ${RunningX64}
 -  ${AndIfNot} ${IsServicePack} 3
 +  OK_SSE2:
 +    Pop $1
 +    Return
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Make sure this computer meets the minimum system requirements.
 +;; Currently: Windows Vista SP2
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckWindowsVersion
 +  ${If} ${AtMostWin2003}
      MessageBox MB_OK $(CheckWindowsVersionMB)
      Quit
    ${EndIf}
 -  ${If} ${IsWinXP}
 -  ${AndIf} ${RunningX64}
 +  ${If} ${IsWinVista}
    ${AndIfNot} ${IsServicePack} 2
      MessageBox MB_OK $(CheckWindowsVersionMB)
      Quit
    ${EndIf}
 -  ${If} ${IsWin2003}
 +  ${If} ${IsWin2008}
    ${AndIfNot} ${IsServicePack} 2
      MessageBox MB_OK $(CheckWindowsVersionMB)
      Quit
    ${EndIf}
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;Recommend Upgrading Service Pack
 +;; Install Section
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function CheckWindowsServPack
 -  ${If} ${IsWinVista}
 -  ${AndIfNot} ${IsServicePack} 2
 -    MessageBox MB_OK $(CheckWindowsServPackMB)
 -    DetailPrint $(UseLatestServPackDP)
 -    Return
 -  ${EndIf}
 +Section ""
 -  ${If} ${IsWin2008}
 -  ${AndIfNot} ${IsServicePack} 2
 -    MessageBox MB_OK $(CheckWindowsServPackMB)
 -    DetailPrint $(UseLatestServPackDP)
 -    Return
 -  ${EndIf}
 +SetShellVarContext all			# Install for all users (if you change this, change it in the uninstall as well)
 -  ${If} ${IsWin7}
 -  ${AndIfNot} ${IsServicePack} 1
 -    MessageBox MB_OK $(CheckWindowsServPackMB)
 -    DetailPrint $(UseLatestServPackDP)
 -    Return
 -  ${EndIf}
 +# Start with some default values.
 +StrCpy $INSTPROG "${INSTNAME}"
 +StrCpy $INSTEXE "${INSTEXE}"
 +StrCpy $INSTSHORTCUT "${SHORTCUT}"
 -  ${If} ${IsWin2008R2}
 -  ${AndIfNot} ${IsServicePack} 1
 -    MessageBox MB_OK $(CheckWindowsServPackMB)
 -    DetailPrint $(UseLatestServPackDP)
 -    Return
 -  ${EndIf}
 -FunctionEnd
 +Call CheckIfAdministrator		# Make sure the user can install/uninstall
 +Call CheckIfAlreadyCurrent		# Make sure this version is not already installed
 +Call CloseSecondLife			# Make sure Second Life not currently running
 +Call CheckNetworkConnection		# Ping secondlife.com
 +Call CheckWillUninstallV2		# Check if Second Life is already installed
 +
 +StrCmp $DO_UNINSTALL_V2 "" PRESERVE_DONE
 +PRESERVE_DONE:
 +
 +Call RemoveProgFilesOnInst		# Remove existing files to prevent certain errors when running the new version of the viewer
 +
 +# This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
 +%%INSTALL_FILES%%
 +
 +# Pass the installer's language to the client to use as a default
 +StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
 +
 +# Shortcuts in start menu
 +CreateDirectory	"$SMPROGRAMS\$INSTSHORTCUT"
 +SetOutPath "$INSTDIR"
 +CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
 +				"$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 +
 +
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
 +				"InternetShortcut" "URL" \
 +				"http://join.secondlife.com/"
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
 +				"InternetShortcut" "URL" \
 +				"http://www.secondlife.com/account/"
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
 +				"InternetShortcut" "URL" \
 +                "http://wiki.secondlife.com/wiki/LSL_Portal"
 +CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
 +				'"$INSTDIR\uninst.exe"' ''
 +
 +# Other shortcuts
 +SetOutPath "$INSTDIR"
 +CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
 +        "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 +CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
 +        "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 +CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
 +				'"$INSTDIR\uninst.exe"' ''
 +
 +# Write registry
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "Publisher" "Linden Research, Inc."
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLInfoAbout" "http://secondlife.com/whatis/"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLUpdateInfo" "http://secondlife.com/support/downloads/"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "HelpLink" "https://support.secondlife.com/contact-support/"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayVersion" "${VERSION_LONG}"
 +WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "EstimatedSize" "0x0001D500"		# ~117 MB
 +# BUG-2707 Disable SEHOP for installed viewer.
 +WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\$INSTEXE" "DisableExceptionChainValidation" 1
 +
 +# Write URL registry info
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 +
 +# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks.
 +WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"'
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 +
 +# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks.
 +WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"'
 +
 +# Write out uninstaller
 +WriteUninstaller "$INSTDIR\uninst.exe"
 +
 +# Uninstall existing "Second Life Viewer 2" install if needed.
 +StrCmp $DO_UNINSTALL_V2 "" REMOVE_SLV2_DONE
 +  ExecWait '"$PROGRAMFILES\SecondLifeViewer2\uninst.exe" /S _?=$PROGRAMFILES\SecondLifeViewer2'
 +  Delete "$PROGRAMFILES\SecondLifeViewer2\uninst.exe"	# With _? option above, uninst.exe will be left behind.
 +  RMDir "$PROGRAMFILES\SecondLifeViewer2"	# Will remove only if empty.
 +
 +REMOVE_SLV2_DONE:
 +
 +SectionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Uninstall Section
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Section Uninstall
 +
 +# Start with some default values.
 +StrCpy $INSTPROG "${INSTNAME}"
 +StrCpy $INSTEXE "${INSTEXE}"
 +StrCpy $INSTSHORTCUT "${SHORTCUT}"
 +
 +# Make sure the user can install/uninstall
 +Call un.CheckIfAdministrator
 +
 +# Uninstall for all users (if you change this, change it in the install as well)
 +SetShellVarContext all			
 +
 +# Make sure we're not running
 +Call un.CloseSecondLife
 +
 +# Clean up registry keys and subkeys (these should all be !defines somewhere)
 +DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
 +DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
 +# BUG-2707 Remove entry that disabled SEHOP
 +DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\$INSTEXE"
 +
 +# Clean up shortcuts
 +Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
 +RMDir  "$SMPROGRAMS\$INSTSHORTCUT"
 +
 +Delete "$DESKTOP\$INSTSHORTCUT.lnk"
 +Delete "$INSTDIR\$INSTSHORTCUT.lnk"
 +Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
 +
 +# Remove the main installation directory
 +Call un.ProgramFiles
 +
 +# Clean up cache and log files, but leave them in-place for non AGNI installs.
 +Call un.UserSettingsFiles
 +
 +SectionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Make sure the user can install/uninstall
 +;; Make sure the user can install
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function CheckIfAdministrator
      DetailPrint $(CheckAdministratorInstDP)
 @@ -216,10 +394,11 @@ Function CheckIfAdministrator          Quit
  lbl_is_admin:
      Return
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;
 +;; Make sure the user can uninstall
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function un.CheckIfAdministrator
      DetailPrint $(CheckAdministratorUnInstDP)
 @@ -230,11 +409,12 @@ Function un.CheckIfAdministrator          Quit
  lbl_is_admin:
      Return
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Checks to see if the current version has already been installed (according to the registry).
 -; If it has, allow user to bail out of install process.
 +;; Checks to see if the current version has already been installed (according to the registry).
 +;; If it has, allow user to bail out of install process.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function CheckIfAlreadyCurrent
      Push $0
 @@ -246,26 +426,34 @@ Function CheckIfAlreadyCurrent  continue_install:
      Pop $0
      Return
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Checks for CPU valid (must have SSE2 support)
 +;; Function CheckWillUninstallV2               
 +;;
 +;; If called through auto-update, need to uninstall any existing V2 installation.
 +;; Don't want to end up with SecondLifeViewer2 and SecondLifeViewer installations
 +;;  existing side by side with no indication on which to use.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function CheckCPUFlags
 -    Push $1
 -    System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
 -    IntCmp $1 1 OK_SSE2
 -    MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE2
 -    Quit
 +Function CheckWillUninstallV2
 +
 +  StrCpy $DO_UNINSTALL_V2 ""
 +
 +  StrCmp $SKIP_DIALOGS "true" 0 CHECKV2_DONE
 +  StrCmp $INSTDIR "$PROGRAMFILES\SecondLifeViewer2" CHECKV2_DONE	# Don't uninstall our own install dir.
 +  IfFileExists "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" CHECKV2_FOUND CHECKV2_DONE
 +
 +CHECKV2_FOUND:
 +  StrCpy $DO_UNINSTALL_V2 "true"
 +
 +CHECKV2_DONE:
 -  OK_SSE2:
 -    Pop $1
 -    Return
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Close the program, if running. Modifies no variables.
 -; Allows user to bail out of install process.
 +;; Close the program, if running. Modifies no variables.
 +;; Allows user to bail out of install process.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function CloseSecondLife
    Push $0
 @@ -291,334 +479,134 @@ Function CloseSecondLife    DONE:
      Pop $0
      Return
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Close the program, if running. Modifies no variables.
 +;; Allows user to bail out of uninstall process.
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.CloseSecondLife
 +  Push $0
 +  FindWindow $0 "Second Life" ""
 +  IntCmp $0 0 DONE
 +  MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
 +
 +  CANCEL_UNINSTALL:
 +    Quit
 +
 +  CLOSE:
 +    DetailPrint $(CloseSecondLifeUnInstDP)
 +    SendMessage $0 16 0 0
 +
 +  LOOP:
 +	  FindWindow $0 "Second Life" ""
 +	  IntCmp $0 0 DONE
 +	  Sleep 500
 +	  Goto LOOP
 +
 +  DONE:
 +    Pop $0
 +    Return
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Test our connection to secondlife.com
 -; Also allows us to count attempted installs by examining web logs.
 -; *TODO: Return current SL version info and have installer check
 -; if it is up to date.
 +;; Test our connection to secondlife.com
 +;; Also allows us to count attempted installs by examining web logs.
 +;; *TODO: Return current SL version info and have installer check
 +;; if it is up to date.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function CheckNetworkConnection
      Push $0
      Push $1
      Push $2	# Option value for GetOptions
      DetailPrint $(CheckNetworkConnectionDP)
 -    ; Look for a tag value from the stub installer, used for statistics
 -    ; to correlate installs.  Default to "" if not found on command line.
 +# Look for a tag value from the stub installer, used for statistics to correlate installs.
 +# Default to "" if not found on command line.
      StrCpy $2 ""
      ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
      GetTempFileName $0
 -    !define HTTP_TIMEOUT 5000 ; milliseconds
 -    ; Don't show secondary progress bar, this will be quick.
 +    !define HTTP_TIMEOUT 5000		# Milliseconds
 +# Don't show secondary progress bar, this will be quick.
      NSISdl::download_quiet \
          /TIMEOUT=${HTTP_TIMEOUT} \
          "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \
          $0
 -    Pop $1 ; Return value, either "success", "cancel" or an error message
 +    Pop $1		# Return value, either "success", "cancel" or an error message
      ; MessageBox MB_OK "Download result: $1"
      ; Result ignored for now
  	; StrCmp $1 "success" +2
  	;	DetailPrint "Connection failed: $1"
 -    Delete $0 ; temporary file
 +    Delete $0	# Temporary file
      Pop $2
      Pop $1
      Pop $0
      Return
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Function CheckOldExeName
 -; Viewer versions < 3.6.12 used the name 'SecondLife.exe'
 -; If that name is found in the install folder, delete it to invalidate any
 -; old shortcuts to it that may be in non-standard locations, so that the user
 -; does not end up running the old version (potentially getting caught in an 
 -; infinite update loop). See MAINT-3575
 -; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -
 -Function CheckOldExeName
 -  IfFileExists "$INSTDIR\SecondLife.exe" CHECKOLDEXE_FOUND CHECKOLDEXE_DONE
 -
 -CHECKOLDEXE_FOUND:
 -  Delete "$INSTDIR\SecondLife.exe"
 -CHECKOLDEXE_DONE:
 -FunctionEnd
 -
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Function CheckWillUninstallV2               
 -;
 -; If we are being called through auto-update, we need to uninstall any
 -; existing V2 installation. Otherwise, we wind up with
 -; SecondLifeViewer2 and SecondLifeViewer installations existing side
 -; by side no indication which to use.
 -; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function CheckWillUninstallV2
 -
 -  StrCpy $DO_UNINSTALL_V2 ""
 -
 -  StrCmp $SKIP_DIALOGS "true" 0 CHECKV2_DONE
 -  StrCmp $INSTDIR "$PROGRAMFILES\SecondLifeViewer2" CHECKV2_DONE ; don't uninstall our own install dir.
 -  IfFileExists "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" CHECKV2_FOUND CHECKV2_DONE
 -
 -CHECKV2_FOUND:
 -  StrCpy $DO_UNINSTALL_V2 "true"
 -
 -CHECKV2_DONE:
 -
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Save user files to temp location
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function PreserveUserFiles
 -
 -Push $0
 -Push $1
 -Push $2
 -
 -    RMDir /r "$TEMP\SecondLifeSettingsBackup"
 -    CreateDirectory "$TEMP\SecondLifeSettingsBackup"
 -    StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 -
 -  LOOP:
 -    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -    StrCmp $1 "" DONE               ; no more users
 -
 -    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 -
 -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 -    ExpandEnvStrings $2 $2
 -
 -    CreateDirectory "$TEMP\SecondLifeSettingsBackup\$0"
 -    CopyFiles /SILENT "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\$0"
 -
 -  CONTINUE:
 -    IntOp $0 $0 + 1
 -    Goto LOOP
 -  DONE:
 -
 -Pop $2
 -Pop $1
 -Pop $0
 -
 -; Copy files in Documents and Settings\All Users\SecondLife
 -Push $0
 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 -    StrCmp $0 "" +2
 -    CreateDirectory "$TEMP\SecondLifeSettingsBackup\AllUsers\"
 -    CopyFiles /SILENT "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\AllUsers\"
 -Pop $0
 -
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Restore user files from temp location
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RestoreUserFiles
 -
 -Push $0
 -Push $1
 -Push $2
 -
 -    StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 -
 -  LOOP:
 -    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -    StrCmp $1 "" DONE               ; no more users
 -
 -    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 -
 -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 -    ExpandEnvStrings $2 $2
 -
 -    CreateDirectory "$2\Application Data\SecondLife\"
 -    CopyFiles /SILENT "$TEMP\SecondLifeSettingsBackup\$0\*" "$2\Application Data\SecondLife\" 
 -
 -  CONTINUE:
 -    IntOp $0 $0 + 1
 -    Goto LOOP
 -  DONE:
 -
 -Pop $2
 -Pop $1
 -Pop $0
 -
 -; Copy files in Documents and Settings\All Users\SecondLife
 -Push $0
 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 -    StrCmp $0 "" +2
 -    CreateDirectory "$2\Application Data\SecondLife\"
 -    CopyFiles /SILENT "$TEMP\SecondLifeSettingsBackup\AllUsers\*" "$2\Application Data\SecondLife\" 
 -Pop $0
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Remove temp dirs
 +;; Delete files on install if previous install exists to prevent undesired behavior
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RemoveTempUserFiles
 -
 -Push $0
 -Push $1
 -Push $2
 +Function RemoveProgFilesOnInst
 -    StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 -
 -  LOOP:
 -    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -    StrCmp $1 "" DONE               ; no more users
 -
 -    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 -
 -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 -    ExpandEnvStrings $2 $2
 -
 -    RMDir /r "$TEMP\SecondLifeSettingsBackup\$0\*"
 -
 -  CONTINUE:
 -    IntOp $0 $0 + 1
 -    Goto LOOP
 -  DONE:
 -
 -Pop $2
 -Pop $1
 -Pop $0
 -
 -; Copy files in Documents and Settings\All Users\SecondLife
 -Push $0
 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 -    StrCmp $0 "" +2
 -    RMDir /r "$TEMP\SecondLifeSettingsBackup\AllUsers\*"
 -Pop $0
 -
 -FunctionEnd
 -
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Clobber user files - TEST ONLY
 -; This is here for testing, generally not desirable to call it.
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;Function ClobberUserFilesTESTONLY
 -
 -;Push $0
 -;Push $1
 -;Push $2
 -;
 -;    StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 -;
 -;  LOOP:
 -;    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -;    StrCmp $1 "" DONE               ; no more users
 -;
 -;    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -;    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 -;
 -;    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 -;    ExpandEnvStrings $2 $2
 -;
 -;    RMDir /r "$2\Application Data\SecondLife\"
 -;
 -;  CONTINUE:
 -;    IntOp $0 $0 + 1
 -;    Goto LOOP
 -;  DONE:
 -;
 -;Pop $2
 -;Pop $1
 -;Pop $0
 -;
 -;; Copy files in Documents and Settings\All Users\SecondLife
 -;Push $0
 -;    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 -;    StrCmp $0 "" +2
 -;    RMDir /r "$2\Application Data\SecondLife\"
 -;Pop $0
 -;
 -;FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Delete the installed shader files
 -;;; Since shaders are in active development, we'll likely need to shuffle them
 -;;; around a bit from build to build.  This ensures that shaders that we move
 -;;; or rename in the dev tree don't get left behind in the install.
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RemoveOldShaders
 -
 -;; Remove old shader files first so fallbacks will work. see DEV-5663
 -RMDir /r "$INSTDIR\app_settings\shaders\*"
 -
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Delete the installed XUI files
 -;;; We've changed the directory hierarchy for skins, putting all XUI and texture
 -;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
 -;;; to skins/xui/en-us.  Need to clean up the old path when upgrading
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RemoveOldXUI
 +# Remove old SecondLife.exe to invalidate any old shortcuts to it that may be in non-standard locations. See MAINT-3575
 +Delete "$INSTDIR\SecondLife.exe"
 -;; remove old XUI and texture files
 -RmDir /r "$INSTDIR\skins\html"
 -RmDir /r "$INSTDIR\skins\xui"
 -RmDir /r "$INSTDIR\skins\textures"
 -Delete "$INSTDIR\skins\*.txt"
 +# Remove old shader files first so fallbacks will work. See DEV-5663
 +RMDir /r "$INSTDIR\app_settings\shaders"
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Remove any releasenotes files.
 -;;; We are no longer including release notes with the viewer. This will delete
 -;;; any that were left behind by an older installer. Delete will not fail if
 -;;; the files do not exist
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RemoveOldReleaseNotes
 +# Remove skins folder to clean up files removed during development
 +RMDir /r "$INSTDIR\skins"
 -;; remove releasenotes.txt file from application directory, and the shortcut
 -;; from the start menu.
 +# We are no longer including release notes with the viewer, so remove them.
  Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
  Delete "$INSTDIR\releasenotes.txt"
  FunctionEnd
 -
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Delete files in Documents and Settings\<user>\SecondLife
 -; Delete files in Documents and Settings\All Users\SecondLife
 +;; Delete files in \Users\<User>\AppData\
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function un.DocumentsAndSettingsFolder
 +Function un.UserSettingsFiles
 +
 +StrCmp $DO_UNINSTALL_V2 "true" Keep			# Don't remove user's settings files on auto upgrade
 -; Delete files in Documents and Settings\<user>\SecondLife
 +# Ask if user wants to keep data files or not
 +MessageBox MB_YESNO|MB_ICONQUESTION $(RemoveDataFilesMB) IDYES Remove IDNO Keep
 +
 +Remove:
  Push $0
  Push $1
  Push $2
 -  DetailPrint "Deleting files in Documents and Settings folder"
 +  DetailPrint "Deleting Second Life data files"
 -  StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 +  StrCpy $0 0	# Index number used to iterate via EnumRegKey
    LOOP:
      EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -    StrCmp $1 "" DONE               ; no more users
 +    StrCmp $1 "" DONE               # No more users
      ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 +    StrCmp $2 "" CONTINUE 0         # "ProfileImagePath" value is missing
 -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 +# Required since ProfileImagePath is of type REG_EXPAND_SZ
      ExpandEnvStrings $2 $2
 -        ; Remove all cache and settings files but leave any other .txt files to preserve the chat logs
 -;    RMDir /r "$2\Application Data\SecondLife\logs"
 -    RMDir /r "$2\Application Data\SecondLife\browser_profile"
 -    RMDir /r "$2\Application Data\SecondLife\user_settings"
 -    Delete  "$2\Application Data\SecondLife\*.xml"
 -    Delete  "$2\Application Data\SecondLife\*.bmp"
 -    Delete  "$2\Application Data\SecondLife\search_history.txt"
 -    Delete  "$2\Application Data\SecondLife\plugin_cookies.txt"
 -    Delete  "$2\Application Data\SecondLife\typed_locations.txt"
 +# Delete files in \Users\<User>\AppData\Roaming\SecondLife
 +# Remove all settings files but leave any other .txt files to preserve the chat logs
 +;    RMDir /r "$2\AppData\Roaming\SecondLife\logs"
 +    RMDir /r "$2\AppData\Roaming\SecondLife\browser_profile"
 +    RMDir /r "$2\AppData\Roaming\SecondLife\user_settings"
 +    Delete  "$2\AppData\Roaming\SecondLife\*.xml"
 +    Delete  "$2\AppData\Roaming\SecondLife\*.bmp"
 +    Delete  "$2\AppData\Roaming\SecondLife\search_history.txt"
 +    Delete  "$2\AppData\Roaming\SecondLife\plugin_cookies.txt"
 +    Delete  "$2\AppData\Roaming\SecondLife\typed_locations.txt"
 +# Delete files in \Users\<User>\AppData\Local\SecondLife
 +    RmDir /r  "$2\AppData\Local\SecondLife"							#Delete the cache folder
    CONTINUE:
      IntOp $0 $0 + 1
 @@ -629,82 +617,30 @@ Pop $2  Pop $1
  Pop $0
 -; Delete files in Documents and Settings\All Users\SecondLife
 +# Delete files in ProgramData\Secondlife
  Push $0
    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
    StrCmp $0 "" +2
    RMDir /r "$0\SecondLife"
  Pop $0
 -; Delete files in C:\Windows\Application Data\SecondLife
 -; If the user is running on a pre-NT system, Application Data lives here instead of
 -; in Documents and Settings.
 -RMDir /r "$WINDIR\Application Data\SecondLife"
 -
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Close the program, if running. Modifies no variables.
 -; Allows user to bail out of uninstall process.
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function un.CloseSecondLife
 -  Push $0
 -  FindWindow $0 "Second Life" ""
 -  IntCmp $0 0 DONE
 -  MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
 -
 -  CANCEL_UNINSTALL:
 -    Quit
 -
 -  CLOSE:
 -    DetailPrint $(CloseSecondLifeUnInstDP)
 -    SendMessage $0 16 0 0
 -
 -  LOOP:
 -	  FindWindow $0 "Second Life" ""
 -	  IntCmp $0 0 DONE
 -	  Sleep 500
 -	  Goto LOOP
 -
 -  DONE:
 -    Pop $0
 -    Return
 -FunctionEnd
 -
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;
 -;   Delete the stored password for the current Windows user
 -;   DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
 -;
 -Function un.RemovePassword
 -
 -DetailPrint "Removing Second Life password"
 -
 -SetShellVarContext current
 -Delete "$APPDATA\SecondLife\user_settings\password.dat"
 -SetShellVarContext all
 +Keep:
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Delete the installed files
 -;;; This deletes the uninstall executable, but it works 
 -;;; because it is copied to temp directory before running
 -;;;
 -;;; Note:  You must list all files here, because we only
 -;;; want to delete our files, not things users left in the
 -;;; application directories.
 +;; Delete the installed files
 +;; This deletes the uninstall executable, but it works because it is copied to temp directory before running
 +;;
 +;; Note:  You must list all files here, because we only want to delete our files,
 +;; not things users left in the program directory.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function un.ProgramFiles
 -;; Remove mozilla file first so recursive directory deletion doesn't get hung up
 -Delete "$INSTDIR\app_settings\mozilla\components"
 -
 -;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
 +# This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
  %%DELETE_FILES%%
 -;; Optional/obsolete files.  Delete won't fail if they don't exist.
 +# Optional/obsolete files.  Delete won't fail if they don't exist.
  Delete "$INSTDIR\dronesettings.ini"
  Delete "$INSTDIR\message_template.msg"
  Delete "$INSTDIR\newview.pdb"
 @@ -717,19 +653,12 @@ Delete "$INSTDIR\motions\*.lla"  Delete "$INSTDIR\trial\*.html"
  Delete "$INSTDIR\newview.exe"
  Delete "$INSTDIR\SecondLife.exe"
 -;; MAINT-3099 workaround - prevent these log files, if present, from causing a user alert
 +
 +# MAINT-3099 workaround - prevent these log files, if present, from causing a user alert
  Delete "$INSTDIR\VivoxVoiceService-*.log"
 -;; Remove entire help directory
 -Delete "$INSTDIR\help\Advanced\*"
 -RMDir  "$INSTDIR\help\Advanced"
 -Delete "$INSTDIR\help\basics\*"
 -RMDir  "$INSTDIR\help\basics"
 -Delete "$INSTDIR\help\Concepts\*"
 -RMDir  "$INSTDIR\help\Concepts"
 -Delete "$INSTDIR\help\welcome\*"
 -RMDir  "$INSTDIR\help\welcome"
 -Delete "$INSTDIR\help\*"
 -RMDir  "$INSTDIR\help"
 +
 +# Remove entire help directory
 +RMDir /r  "$INSTDIR\help"
  Delete "$INSTDIR\uninst.exe"
  RMDir "$INSTDIR"
 @@ -737,7 +666,7 @@ RMDir "$INSTDIR"  IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
  FOLDERFOUND:
 -  ; Silent uninstall always removes all files (/SD IDYES)
 +# Silent uninstall always removes all files (/SD IDYES)
    MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
    RMDir /r "$INSTDIR"
 @@ -746,240 +675,78 @@ NOFOLDER:  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Uninstall settings
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -UninstallText $(UninstallTextMsg)
 -ShowUninstDetails show
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Uninstall section
 +;; After install completes, launch app
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Section Uninstall
 -
 -; Start with some default values.
 -StrCpy $INSTPROG "${INSTNAME}"
 -StrCpy $INSTEXE "${INSTEXE}"
 -StrCpy $INSTSHORTCUT "${SHORTCUT}"
 -Call un.CheckIfAdministrator		; Make sure the user can install/uninstall
 -
 -; uninstall for all users (if you change this, change it in the install as well)
 -SetShellVarContext all			
 -
 -; Make sure we're not running
 -Call un.CloseSecondLife
 -
 -; Clean up registry keys and subkeys (these should all be !defines somewhere)
 -DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
 -DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
 -
 -; Clean up shortcuts
 -Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
 -RMDir  "$SMPROGRAMS\$INSTSHORTCUT"
 -
 -Delete "$DESKTOP\$INSTSHORTCUT.lnk"
 -Delete "$INSTDIR\$INSTSHORTCUT.lnk"
 -Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
 -
 -; Clean up cache and log files.
 -; Leave them in-place for non AGNI installs.
 -
 -!ifdef UNINSTALL_SETTINGS
 -Call un.DocumentsAndSettingsFolder
 -!endif
 -
 -; remove stored password on uninstall
 -Call un.RemovePassword
 -
 -Call un.ProgramFiles
 +Function .onInstSuccess
 +Call CheckWindowsServPack		# Warn if not on the latest SP before asking to launch.
 +	Push $R0					# Option value, unused
 +	StrCmp $SKIP_AUTORUN "true" +2;
 +# Assumes SetOutPath $INSTDIR
 +	Exec '"$WINDIR\explorer.exe" "$INSTDIR\$INSTEXE"'
 +	Pop $R0
 -SectionEnd 				; end of uninstall section
 +FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;  Note: to add new languages, add a language file include to the list 
 -;;  at the top of this file, add an entry to the menu and then add an 
 -;;  entry to the language ID selector below
 +;; Recommend Upgrading to Service Pack 1 for Windows 7, if not present
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function .onInit
 -Call CheckWindowsVersion		; Don't install On unsupported systems
 -    Push $0
 -    ${GetParameters} $COMMANDLINE              ; get our command line
 -
 -    ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0   
 -    IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
 -        StrCpy $SKIP_DIALOGS "true"
 -
 -	${GetOptions} $COMMANDLINE "/SKIP_AUTORUN" $0
 -    IfErrors +2 0 ; If error jump past setting SKIP_AUTORUN
 -		StrCpy $SKIP_AUTORUN "true"
 -
 -    ${GetOptions} $COMMANDLINE "/LANGID=" $0   ; /LANGID=1033 implies US English
 -
 -    ; If no language (error), then proceed
 -    IfErrors lbl_configure_default_lang
 -    ; No error means we got a language, so use it
 -    StrCpy $LANGUAGE $0
 -    Goto lbl_return
 -
 -lbl_configure_default_lang:
 -    ; If we currently have a version of SL installed, default to the language of that install
 -    ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 -    IfErrors +2 0 ; If error skip the copy instruction 
 -	StrCpy $LANGUAGE $0
 -
 -    ; For silent installs, no language prompt, use default
 -    IfSilent lbl_return
 -    StrCmp $SKIP_DIALOGS "true" lbl_return
 -  
 -lbl_build_menu:
 -	Push ""
 -    # Use separate file so labels can be UTF-16 but we can still merge changes
 -    # into this ASCII file. JC
 -    !include "%%SOURCE%%\installers\windows\language_menu.nsi"
 -    
 -	Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
 -	LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
 -	Pop $0
 -	StrCmp $0 "cancel" 0 +2
 -		Abort
 -    StrCpy $LANGUAGE $0
 -
 -	; save language in registry		
 -	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
 -lbl_return:
 -    Pop $0
 +Function CheckWindowsServPack
 +  ${If} ${IsWin7}
 +  ${AndIfNot} ${IsServicePack} 1
 +    MessageBox MB_OK $(CheckWindowsServPackMB)
 +    DetailPrint $(UseLatestServPackDP)
      Return
 -FunctionEnd
 +  ${EndIf}
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function un.onInit
 -	; read language from registry and set for uninstaller
 -    ; Key will be removed on successful uninstall
 -	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 -    IfErrors lbl_end
 -	StrCpy $LANGUAGE $0
 -lbl_end:
 +  ${If} ${IsWin2008R2}
 +  ${AndIfNot} ${IsServicePack} 1
 +    MessageBox MB_OK $(CheckWindowsServPackMB)
 +    DetailPrint $(UseLatestServPackDP)
      Return
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; MAIN SECTION
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Section ""						; (default section)
 -
 -SetShellVarContext all			; install for all users (if you change this, change it in the uninstall as well)
 -
 -; Start with some default values.
 -StrCpy $INSTPROG "${INSTNAME}"
 -StrCpy $INSTEXE "${INSTEXE}"
 -StrCpy $INSTSHORTCUT "${SHORTCUT}"
 -
 -Call CheckCPUFlags				; Make sure we have SSE2 support
 -Call CheckIfAdministrator		; Make sure the user can install/uninstall
 -Call CheckIfAlreadyCurrent		; Make sure that we haven't already installed this version
 -Call CloseSecondLife			; Make sure we're not running
 -Call CheckNetworkConnection		; ping secondlife.com
 -Call CheckWillUninstallV2		; See if a V2 install exists and will be removed.
 -Call CheckOldExeName                    ; Clean up a previous version of the exe
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -StrCmp $DO_UNINSTALL_V2 "" PRESERVE_DONE
 -  Call PreserveUserFiles
 -PRESERVE_DONE:
 -
 -;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
 -;Call RemoveCacheFiles			; Installing over removes potentially corrupted
 -								; VFS and cache files.
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Need to clean out shader files from previous installs to fix DEV-5663
 -Call RemoveOldShaders
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Need to clean out old XUI files that predate skinning
 -Call RemoveOldXUI
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Clear out old releasenotes.txt files. These are now on the public wiki.
 -Call RemoveOldReleaseNotes
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Files
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
 -%%INSTALL_FILES%%
 -
 -# Pass the installer's language to the client to use as a default
 -StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Shortcuts in start menu
 -CreateDirectory	"$SMPROGRAMS\$INSTSHORTCUT"
 -SetOutPath "$INSTDIR"
 -CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
 -				"$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 -
 -
 -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
 -				"InternetShortcut" "URL" \
 -				"http://join.secondlife.com/"
 -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
 -				"InternetShortcut" "URL" \
 -				"http://www.secondlife.com/account/"
 -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
 -				"InternetShortcut" "URL" \
 -                "http://wiki.secondlife.com/wiki/LSL_Portal"
 -CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
 -				'"$INSTDIR\uninst.exe"' ''
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Other shortcuts
 -SetOutPath "$INSTDIR"
 -CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
 -        "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 -CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
 -        "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 -CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
 -				'"$INSTDIR\uninst.exe"' ''
 +  ${EndIf}
 +FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Write registry
 -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
 -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
 -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
 -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
 -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
 -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
 -
 +;; Clobber user files - TEST ONLY
 +;; This is here for testing, DO NOT USE UNLESS YOU KNOW WHAT YOU ARE TESTING FOR!
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Write URL registry info
 -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
 -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
 -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 -;; URL param must be last item passed to viewer, it ignores subsequent params
 -;; to avoid parameter injection attacks.
 -WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"'
 -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
 -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
 -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 -;; URL param must be last item passed to viewer, it ignores subsequent params
 -;; to avoid parameter injection attacks.
 -WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"'
 -
 -; write out uninstaller
 -WriteUninstaller "$INSTDIR\uninst.exe"
 -
 -; Uninstall existing "Second Life Viewer 2" install if needed.
 -StrCmp $DO_UNINSTALL_V2 "" REMOVE_SLV2_DONE
 -  ExecWait '"$PROGRAMFILES\SecondLifeViewer2\uninst.exe" /S _?=$PROGRAMFILES\SecondLifeViewer2'
 -  Delete "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" ; with _? option above, uninst.exe will be left behind.
 -  RMDir "$PROGRAMFILES\SecondLifeViewer2" ; will remove only if empty.
 -
 -  Call RestoreUserFiles
 -  Call RemoveTempUserFiles
 -REMOVE_SLV2_DONE:
 +;Function ClobberUserFilesTESTONLY
 -; end of default section
 -SectionEnd
 +;Push $0
 +;Push $1
 +;Push $2
 +;
 +;    StrCpy $0 0	# Index number used to iterate via EnumRegKey
 +;
 +;  LOOP:
 +;    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 +;    StrCmp $1 "" DONE               # no more users
 +;
 +;    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
 +;    StrCmp $2 "" CONTINUE 0         # "ProfileImagePath" value is missing
 +;
 +;# Required since ProfileImagePath is of type REG_EXPAND_SZ
 +;    ExpandEnvStrings $2 $2
 +;
 +;    RMDir /r "$2\Application Data\SecondLife\"
 +;
 +;  CONTINUE:
 +;    IntOp $0 $0 + 1
 +;    Goto LOOP
 +;  DONE:
 +;
 +;Pop $2
 +;Pop $1
 +;Pop $0
 +;
 +;# Copy files in Documents and Settings\All Users\SecondLife
 +;Push $0
 +;    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 +;    StrCmp $0 "" +2
 +;    RMDir /r "$2\Application Data\SecondLife\"
 +;Pop $0
 +;
 +;FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsi Binary files differindex 2352649b4b..83e1a3ea94 100755 --- a/indra/newview/installers/windows/lang_da.nsi +++ b/indra/newview/installers/windows/lang_da.nsi diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi Binary files differindex 397262afe1..866accae99 100755 --- a/indra/newview/installers/windows/lang_de.nsi +++ b/indra/newview/installers/windows/lang_de.nsi diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi Binary files differindex df0d55d9e0..343c312ddc 100755 --- a/indra/newview/installers/windows/lang_en-us.nsi +++ b/indra/newview/installers/windows/lang_en-us.nsi diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi Binary files differindex 32967a0dfa..f4f0786332 100755 --- a/indra/newview/installers/windows/lang_es.nsi +++ b/indra/newview/installers/windows/lang_es.nsi diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi Binary files differindex 7c75e25360..1b5dbfc975 100755 --- a/indra/newview/installers/windows/lang_fr.nsi +++ b/indra/newview/installers/windows/lang_fr.nsi diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi Binary files differindex ce66b61f9f..a456e6e417 100755 --- a/indra/newview/installers/windows/lang_it.nsi +++ b/indra/newview/installers/windows/lang_it.nsi diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi Binary files differindex e68830123a..5b1c5f4ce9 100755 --- a/indra/newview/installers/windows/lang_ja.nsi +++ b/indra/newview/installers/windows/lang_ja.nsi diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi Binary files differindex 7883819190..a172f0cdeb 100755 --- a/indra/newview/installers/windows/lang_pl.nsi +++ b/indra/newview/installers/windows/lang_pl.nsi diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi Binary files differindex eb3fb2386c..9ef252d232 100755 --- a/indra/newview/installers/windows/lang_pt-br.nsi +++ b/indra/newview/installers/windows/lang_pt-br.nsi diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi Binary files differindex 3b0042fbf5..d7c728d3e2 100755 --- a/indra/newview/installers/windows/lang_ru.nsi +++ b/indra/newview/installers/windows/lang_ru.nsi diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi Binary files differindex b9be1eab08..97c602f4fc 100755 --- a/indra/newview/installers/windows/lang_tr.nsi +++ b/indra/newview/installers/windows/lang_tr.nsi diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi Binary files differindex 3c6f6fd289..39c005a683 100755 --- a/indra/newview/installers/windows/lang_zh.nsi +++ b/indra/newview/installers/windows/lang_zh.nsi diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 99fa12fc32..359171c5bd 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -410,10 +410,8 @@ LLAgent::LLAgent() :  	mCurrentFidget(0),  	mFirstLogin(FALSE),  	mOutfitChosen(FALSE), -	 -	mVoiceConnected(false), -	mAppearanceSerialNum(0), +	mVoiceConnected(false),  	mMouselookModeInSignal(NULL),  	mMouselookModeOutSignal(NULL) @@ -2262,8 +2260,6 @@ void LLAgent::heardChat(const LLUUID& id)  	mChatTimer.reset();  } -const F32 SIT_POINT_EXTENTS = 0.2f; -  LLSD ll_sdmap_from_vector3(const LLVector3& vec)  {      LLSD ret; diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 33088283da..4830cb754b 100755 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -791,8 +791,7 @@ public:  private:  	BOOL			mShowAvatar; 		// Should we render the avatar? -	U32				mAppearanceSerialNum; -	 +  	//--------------------------------------------------------------------  	// Rendering state bitmap helpers  	//-------------------------------------------------------------------- diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index b0b2cfd435..7f0330ee99 100755 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -886,7 +886,6 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction)  	} -	LLVector3d	camera_offset(mCameraFocusOffsetTarget);  	LLVector3d	camera_offset_unit(mCameraFocusOffsetTarget);  	F32 min_zoom = LAND_MIN_ZOOM;  	F32 current_distance = (F32)camera_offset_unit.normalize(); @@ -958,7 +957,6 @@ void LLAgentCamera::cameraOrbitIn(const F32 meters)  	}  	else  	{ -		LLVector3d	camera_offset(mCameraFocusOffsetTarget);  		LLVector3d	camera_offset_unit(mCameraFocusOffsetTarget);  		F32 current_distance = (F32)camera_offset_unit.normalize();  		F32 new_distance = current_distance - meters; diff --git a/indra/newview/llagentpilot.cpp b/indra/newview/llagentpilot.cpp index 44589f0d57..cfc445f998 100755 --- a/indra/newview/llagentpilot.cpp +++ b/indra/newview/llagentpilot.cpp @@ -84,7 +84,7 @@ void LLAgentPilot::loadTxt(const std::string& filename)  		return;  	} -	llifstream file(filename); +	llifstream file(filename.c_str());  	if (!file)  	{ @@ -125,7 +125,7 @@ void LLAgentPilot::loadXML(const std::string& filename)  		return;  	} -	llifstream file(filename); +	llifstream file(filename.c_str());  	if (!file)  	{ @@ -168,7 +168,7 @@ void LLAgentPilot::save()  void LLAgentPilot::saveTxt(const std::string& filename)  {  	llofstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (!file)  	{ @@ -191,7 +191,7 @@ void LLAgentPilot::saveTxt(const std::string& filename)  void LLAgentPilot::saveXML(const std::string& filename)  {  	llofstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (!file)  	{ diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index d4bdb5f41b..dabb3df7af 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3807,7 +3807,7 @@ bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_b  	//to cause appearance of the agent to be updated  	bool result = false; -	if (result = gAgentWearables.moveWearable(item, closer_to_body)) +	if ((result = gAgentWearables.moveWearable(item, closer_to_body)))  	{  		gAgentAvatarp->wearableUpdated(item->getWearableType());  	} diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 54c5d1b9f4..6dc71bc94e 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -747,6 +747,15 @@ public:  	}  }; +namespace { +// With Xcode 6, _exit() is too magical to use with boost::bind(), so provide +// this little helper function. +void fast_exit(int rc) +{ +	_exit(rc); +} +} +  bool LLAppViewer::init()  {	  	setupErrorHandling(mSecondInstance); @@ -803,10 +812,10 @@ bool LLAppViewer::init()  	S32 rc(gSavedSettings.getS32("QAModeTermCode"));  	if (rc >= 0)  	{ -		// QAModeTermCode set, terminate with that rc on LL_ERRS. Use _exit() -		// rather than exit() because normal cleanup depends too much on -		// successful startup! -		LLError::setFatalFunction(boost::bind(_exit, rc)); +		// QAModeTermCode set, terminate with that rc on LL_ERRS. Use +		// fast_exit() rather than exit() because normal cleanup depends too +		// much on successful startup! +		LLError::setFatalFunction(boost::bind(fast_exit, rc));  	}      mAlloc.setProfilingEnabled(gSavedSettings.getBOOL("MemProfiling")); @@ -1681,19 +1690,12 @@ bool LLAppViewer::cleanup()  	//dump scene loading monitor results  	LLSceneMonitor::instance().dumpToFile(gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "scene_monitor_results.csv")); -	if (LLFastTimerView::sAnalyzePerformance) -	{ -		LL_INFOS() << "Analyzing performance" << LL_ENDL; -		std::string baseline_name = LLTrace::BlockTimer::sLogName + "_baseline.slp"; -		std::string current_name  = LLTrace::BlockTimer::sLogName + ".slp";  -		std::string report_name   = LLTrace::BlockTimer::sLogName + "_report.csv"; - -		LLFastTimerView::doAnalysis( -			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baseline_name), -			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, current_name), -			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, report_name));		 -	} -	LLMetricPerformanceTesterBasic::cleanClass(); +	// There used to be an 'if (LLFastTimerView::sAnalyzePerformance)' block +	// here, completely redundant with the one that occurs later in this same +	// function. Presumably the duplication was due to an automated merge gone +	// bad. Not knowing which instance to prefer, we chose to retain the later +	// one because it happens just after mFastTimerLogThread is deleted. This +	// comment is in case we guessed wrong, so we can move it here instead.  	// remove any old breakpad minidump files from the log directory  	if (! isError()) @@ -2038,7 +2040,7 @@ bool LLAppViewer::cleanup()      sImageDecodeThread = NULL;  	delete mFastTimerLogThread;  	mFastTimerLogThread = NULL; -	 +  	if (LLFastTimerView::sAnalyzePerformance)  	{  		LL_INFOS() << "Analyzing performance" << LL_ENDL; @@ -3273,7 +3275,7 @@ void LLAppViewer::writeDebugInfo(bool isStatic)          : getDynamicDebugFile() );  	LL_INFOS() << "Opening debug file " << *debug_filename << LL_ENDL; -	llofstream out_file(*debug_filename); +	llofstream out_file(debug_filename->c_str());      isStatic ?  LLSDSerialize::toPrettyXML(gDebugInfo, out_file)               :  LLSDSerialize::toPrettyXML(gDebugInfo["Dynamic"], out_file); @@ -3762,7 +3764,7 @@ void LLAppViewer::handleViewerCrash()  	{  		std::string filename;  		filename = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "stats.log"); -		llofstream file(filename, llofstream::binary); +		llofstream file(filename.c_str(), std::ios_base::binary);  		if(file.good())  		{  			LL_INFOS() << "Handle viewer crash generating stats log." << LL_ENDL; @@ -4650,17 +4652,22 @@ void LLAppViewer::loadNameCache()  	std::string filename =  		gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml");  	LL_INFOS("AvNameCache") << filename << LL_ENDL; -	llifstream name_cache_stream(filename); +	llifstream name_cache_stream(filename.c_str());  	if(name_cache_stream.is_open())  	{ -		LLAvatarNameCache::importFile(name_cache_stream); +		if ( ! LLAvatarNameCache::importFile(name_cache_stream)) +        { +            LL_WARNS("AppInit") << "removing invalid '" << filename << "'" << LL_ENDL; +            name_cache_stream.close(); +            LLFile::remove(filename); +        }  	}  	if (!gCacheName) return;  	std::string name_cache;  	name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache"); -	llifstream cache_file(name_cache); +	llifstream cache_file(name_cache.c_str());  	if(cache_file.is_open())  	{  		if(gCacheName->importFile(cache_file)) return; @@ -4668,24 +4675,26 @@ void LLAppViewer::loadNameCache()  }  void LLAppViewer::saveNameCache() -	{ +{  	// display names cache  	std::string filename =  		gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml"); -	llofstream name_cache_stream(filename); +	llofstream name_cache_stream(filename.c_str());  	if(name_cache_stream.is_open())  	{  		LLAvatarNameCache::exportFile(name_cache_stream); -} - -	if (!gCacheName) return; - -	std::string name_cache; -	name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache"); -	llofstream cache_file(name_cache); -	if(cache_file.is_open()) -	{ -		gCacheName->exportFile(cache_file); +    } +     +    // real names cache +	if (gCacheName) +    { +        std::string name_cache; +        name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache"); +        llofstream cache_file(name_cache.c_str()); +        if(cache_file.is_open()) +        { +            gCacheName->exportFile(cache_file); +        }  	}  } diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index c792eb8813..56154a2de3 100755 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -63,16 +63,7 @@ namespace  	int gArgC;  	char** gArgV;  	LLAppViewerMacOSX* gViewerAppPtr; -#ifdef LL_CARBON_CRASH_HANDLER -	OSErr AEQuitHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn) -	{ -		OSErr result = noErr; -		 -		LLAppViewer::instance()->userQuit(); -		 -		return(result); -	} -#endif +      void (*gOldTerminateHandler)() = NULL;  } diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 02e88a8b89..d2b1dcbf35 100755 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -63,9 +63,6 @@  #include "llsdutil.h"  #include "llvfs.h" -// When uploading multiple files, don't display any of them when uploading more than this number. -static const S32 FILE_COUNT_DISPLAY_THRESHOLD = 5; -  void dialog_refresh_all();  void on_new_single_inventory_upload_complete( diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index 746b541f9d..281e591b48 100755 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -76,7 +76,7 @@ void LLAvatarIconIDCache::load	()  	// build filename for each user  	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, mFilename); -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  		return; @@ -114,7 +114,7 @@ void LLAvatarIconIDCache::save	()  	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, mFilename);  	// open a file for writing -	llofstream file (resolved_filename); +	llofstream file (resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't open avatar icons cache file\"" << mFilename << "\" for writing" << LL_ENDL; diff --git a/indra/newview/llblocklist.cpp b/indra/newview/llblocklist.cpp index 1c68fabf8b..272a68bdf7 100755 --- a/indra/newview/llblocklist.cpp +++ b/indra/newview/llblocklist.cpp @@ -40,7 +40,6 @@ static const LLBlockListNameTypeComparator	NAME_TYPE_COMPARATOR;  LLBlockList::LLBlockList(const Params& p)  :	LLFlatListViewEx(p), - 	mSelectedItem(NULL),   	mDirty(true),  	mShouldAddAll(true),  	mActionType(NONE), diff --git a/indra/newview/llblocklist.h b/indra/newview/llblocklist.h index bac79f869e..0f7fa41c32 100755 --- a/indra/newview/llblocklist.h +++ b/indra/newview/llblocklist.h @@ -83,7 +83,6 @@ private:  	LLHandle<LLToggleableMenu>	mContextMenu; -	LLBlockedListItem*			mSelectedItem;  	std::string 				mNameFilter;  	bool 						mDirty;  	bool						mShouldAddAll; diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp index 28e367fbe1..d8b04f7004 100755 --- a/indra/newview/llchicletbar.cpp +++ b/indra/newview/llchicletbar.cpp @@ -35,16 +35,6 @@  namespace  {  	const std::string& PANEL_CHICLET_NAME	= "chiclet_list_panel"; - -	S32 get_curr_width(LLUICtrl* ctrl) -	{ -		S32 cur_width = 0; -		if ( ctrl && ctrl->getVisible() ) -		{ -			cur_width = ctrl->getRect().getWidth(); -		} -		return cur_width; -	}  }  LLChicletBar::LLChicletBar(const LLSD&) diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp index 06164e9597..1819fc74ee 100755 --- a/indra/newview/llcommandlineparser.cpp +++ b/indra/newview/llcommandlineparser.cpp @@ -622,7 +622,7 @@ void LLControlGroupCLP::configure(const std::string& config_filename, LLControlG      LLSD clpConfigLLSD;      llifstream input_stream; -    input_stream.open(config_filename, std::ios::in | std::ios::binary); +    input_stream.open(config_filename.c_str(), std::ios::in | std::ios::binary);      if(input_stream.is_open())      { diff --git a/indra/newview/llcommunicationchannel.cpp b/indra/newview/llcommunicationchannel.cpp index 0821510645..cf98b56b4c 100755 --- a/indra/newview/llcommunicationchannel.cpp +++ b/indra/newview/llcommunicationchannel.cpp @@ -103,11 +103,11 @@ void LLCommunicationChannel::onDelete(LLNotificationPtr p)  void LLCommunicationChannel::onFilterFail(LLNotificationPtr pNotificationPtr)  {  	std::string notificationType = pNotificationPtr->getType(); -	if ((notificationType == "groupnotify") +	if (((notificationType == "groupnotify")  		|| (notificationType == "offer") -		|| (notificationType == "notifytoast") +		|| (notificationType == "notifytoast"))          && !pNotificationPtr->isCancelled())  	{ -		mHistory.insert(std::make_pair<LLDate, LLNotificationPtr>(pNotificationPtr->getDate(), pNotificationPtr)); +		mHistory.insert(history_list_t::value_type(pNotificationPtr->getDate(), pNotificationPtr));  	}  } diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h index 56e1a26709..deff94ea16 100644 --- a/indra/newview/llconversationmodel.h +++ b/indra/newview/llconversationmodel.h @@ -213,7 +213,6 @@ private:  	void onAvatarNameCache(const LLAvatarName& av_name);	// callback used by fetchAvatarName  	void updateName(const LLAvatarName& av_name); -	bool mIsMuted;		         // default is false  	bool mIsModerator;	         // default is false  	bool mDisplayModeratorLabel; // default is false  	std::string mDisplayName; diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 73930c2115..f956023358 100755 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -54,7 +54,6 @@  const F32 MIN_INTERPOLATE_DISTANCE_SQUARED = 0.001f * 0.001f;  const F32 MAX_INTERPOLATE_DISTANCE_SQUARED = 10.f * 10.f;  const F32 OBJECT_DAMPING_TIME_CONSTANT = 0.06f; -const F32 MIN_SHADOW_CASTER_RADIUS = 2.0f;  static LLTrace::BlockTimerStatHandle FTM_CULL_REBOUND("Cull Rebound"); @@ -874,7 +873,7 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update)  		}  		pos -= camera.getOrigin();	 -		mDistanceWRTCamera = llround(pos.magVec(), 0.01f); +		mDistanceWRTCamera = ll_round(pos.magVec(), 0.01f);  		mVObjp->updateLOD();  	}  } diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index ab96201a63..e1d3d1a905 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -71,8 +71,6 @@ extern BOOL gUseGLPick;  F32 CLOTHING_GRAVITY_EFFECT = 0.7f;  F32 CLOTHING_ACCEL_FORCE_FACTOR = 0.2f; -const S32 NUM_TEST_AVATARS = 30; -const S32 MIN_PIXEL_AREA_2_PASS_SKINNING = 500000000;  // Format for gAGPVertices  // vertex format for bumpmapping: diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 67d1642639..33f7bc305c 100755 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -1329,7 +1329,7 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  					for( i = minimum; i <= maximum; i++ )  					{  						F32 minus_one_to_one = F32(maximum - i) * twice_one_over_range - 1.f; -						bias_and_scale_lut[i] = llclampb(llround(127 * minus_one_to_one * ARTIFICIAL_SCALE + 128)); +						bias_and_scale_lut[i] = llclampb(ll_round(127 * minus_one_to_one * ARTIFICIAL_SCALE + 128));  					}  				}  				else @@ -1337,7 +1337,7 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  					for( i = minimum; i <= maximum; i++ )  					{  						F32 minus_one_to_one = F32(i - minimum) * twice_one_over_range - 1.f; -						bias_and_scale_lut[i] = llclampb(llround(127 * minus_one_to_one * ARTIFICIAL_SCALE + 128)); +						bias_and_scale_lut[i] = llclampb(ll_round(127 * minus_one_to_one * ARTIFICIAL_SCALE + 128));  					}  				} diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 76c37439ab..4a059fdc67 100755 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -219,7 +219,7 @@ BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask)  	if (hasMouseCapture())  	{  		F32 lerp = llclamp(1.f - (F32) (x - mGraphRect.mLeft) / (F32) mGraphRect.getWidth(), 0.f, 1.f); -		mScrollIndex = llround( lerp * (F32)(mRecording.getNumRecordedPeriods() - MAX_VISIBLE_HISTORY)); +		mScrollIndex = ll_round( lerp * (F32)(mRecording.getNumRecordedPeriods() - MAX_VISIBLE_HISTORY));  		mScrollIndex = llclamp(	mScrollIndex, 0, (S32)mRecording.getNumRecordedPeriods());  		return TRUE;  	} @@ -361,7 +361,6 @@ BOOL LLFastTimerView::handleScrollWheel(S32 x, S32 y, S32 clicks)  static BlockTimerStatHandle FTM_RENDER_TIMER("Timers");  static const S32 MARGIN = 10; -static const S32 LEGEND_WIDTH = 220;  static std::vector<LLColor4> sTimerColors; @@ -1136,7 +1135,7 @@ void LLFastTimerView::drawLineGraph()  		max_time = llmax(F32Microseconds(1.f), F32Microseconds(cur_max));  	} -	max_calls = llround(lerp((F32)max_calls, (F32) cur_max_calls, LLSmoothInterpolation::getInterpolant(0.1f))); +	max_calls = ll_round(lerp((F32)max_calls, (F32) cur_max_calls, LLSmoothInterpolation::getInterpolant(0.1f)));  	if (llabs((S32)(max_calls - cur_max_calls)) <= 1)  	{  		max_calls = cur_max_calls; @@ -1472,7 +1471,7 @@ void LLFastTimerView::drawBars()  		LLRect frame_bar_rect;  		frame_bar_rect.setLeftTopAndSize(mBarRect.mLeft,   										bars_top,  -										llround((mAverageTimerRow.mBars[0].mTotalTime / mTotalTimeDisplay) * mBarRect.getWidth()),  +										ll_round((mAverageTimerRow.mBars[0].mTotalTime / mTotalTimeDisplay) * mBarRect.getWidth()),   										bar_height);  		mAverageTimerRow.mTop = frame_bar_rect.mTop;  		mAverageTimerRow.mBottom = frame_bar_rect.mBottom; @@ -1486,7 +1485,7 @@ void LLFastTimerView::drawBars()  			row.mTop = frame_bar_rect.mTop;  			row.mBottom = frame_bar_rect.mBottom;  			frame_bar_rect.mRight = frame_bar_rect.mLeft  -									+ llround((row.mBars[0].mTotalTime / mTotalTimeDisplay) * mBarRect.getWidth()); +									+ ll_round((row.mBars[0].mTotalTime / mTotalTimeDisplay) * mBarRect.getWidth());   			drawBar(frame_bar_rect, row, image_width, image_height);  			frame_bar_rect.translate(0, -(bar_height + vpad)); @@ -1617,8 +1616,8 @@ S32 LLFastTimerView::drawBar(LLRect bar_rect, TimerBarRow& row, S32 image_width,  	}  	LLRect children_rect; -	children_rect.mLeft  = llround(timer_bar.mChildrenStart / mTotalTimeDisplay * (F32)mBarRect.getWidth()) + mBarRect.mLeft; -	children_rect.mRight = llround(timer_bar.mChildrenEnd   / mTotalTimeDisplay * (F32)mBarRect.getWidth()) + mBarRect.mLeft; +	children_rect.mLeft  = ll_round(timer_bar.mChildrenStart / mTotalTimeDisplay * (F32)mBarRect.getWidth()) + mBarRect.mLeft; +	children_rect.mRight = ll_round(timer_bar.mChildrenEnd   / mTotalTimeDisplay * (F32)mBarRect.getWidth()) + mBarRect.mLeft;  	if (bar_rect.getHeight() > MIN_BAR_HEIGHT)  	{ diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 6c5b5be720..fc9e85caf8 100755 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -480,7 +480,7 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  				const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);  				if (item->getParentUUID() == favorites_id)  				{ -					LL_WARNS() << "Attemt to copy a favorite item into the same folder." << LL_ENDL; +					LL_WARNS("FavoritesBar") << "Attemt to copy a favorite item into the same folder." << LL_ENDL;  					break;  				} @@ -632,7 +632,7 @@ void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, con  	//		landmarks to an empty favorites bar.  	updateButtons(); -	LL_INFOS() << "Copied inventory item #" << item->getUUID() << " to favorites." << LL_ENDL; +	LL_INFOS("FavoritesBar") << "Copied inventory item #" << item->getUUID() << " to favorites." << LL_ENDL;  }  //virtual @@ -871,7 +871,7 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem  	fav_btn = LLUICtrlFactory::create<LLFavoriteLandmarkButton>(fav_btn_params);  	if (NULL == fav_btn)  	{ -		LL_WARNS() << "Unable to create LLFavoriteLandmarkButton widget: " << item->getName() << LL_ENDL; +		LL_WARNS("FavoritesBar") << "Unable to create LLFavoriteLandmarkButton widget: " << item->getName() << LL_ENDL;  		return NULL;  	} @@ -1160,7 +1160,7 @@ bool LLFavoritesBarCtrl::enableSelected(const LLSD& userdata)  void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)  {  	std::string action = userdata.asString(); -	LL_INFOS() << "Action = " << action << " Item = " << mSelectedItemID.asString() << LL_ENDL; +	LL_INFOS("FavoritesBar") << "Action = " << action << " Item = " << mSelectedItemID.asString() << LL_ENDL;  	LLViewerInventoryItem* item = gInventory.getItem(mSelectedItemID);  	if (!item) @@ -1444,11 +1444,25 @@ void LLFavoritesOrderStorage::getSLURL(const LLUUID& asset_id)  		boost::bind(&LLFavoritesOrderStorage::onLandmarkLoaded, this, asset_id, _1));  	if (lm)  	{ +        LL_DEBUGS("FavoritesBar") << "landmark for " << asset_id << " already loaded" << LL_ENDL;  		onLandmarkLoaded(asset_id, lm);  	}  }  // static +std::string LLFavoritesOrderStorage::getStoredFavoritesFilename() +{ +	std::string user_dir = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, ""); + +    return (user_dir.empty() ? "" +            : gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, +                                             "stored_favorites_" +                                          + LLGridManager::getInstance()->getGrid() +                                          + ".xml") +            ); +} + +// static  void LLFavoritesOrderStorage::destroyClass()  {  	LLFavoritesOrderStorage::instance().cleanup(); @@ -1456,10 +1470,14 @@ void LLFavoritesOrderStorage::destroyClass()  	std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");  	llifstream file; -	file.open(old_filename); +	file.open(old_filename.c_str());  	if (file.is_open())  	{ -		std::string new_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); +        file.close(); +		std::string new_filename = getStoredFavoritesFilename(); +        LL_INFOS("FavoritesBar") << "moving favorites from old name '" << old_filename +                                 << "' to new name '" << new_filename << "'" +                                 << LL_ENDL;  		LLFile::copy(old_filename,new_filename);  		LLFile::remove(old_filename);  	} @@ -1474,18 +1492,35 @@ void LLFavoritesOrderStorage::destroyClass()  	}  } +std::string LLFavoritesOrderStorage::getSavedOrderFileName() +{ +	// If we quit from the login screen we will not have an SL account +	// name.  Don't try to save, otherwise we'll dump a file in +	// C:\Program Files\SecondLife\ or similar. JC +	std::string user_dir = gDirUtilp->getLindenUserDir(); +    return (user_dir.empty() ? "" : gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME)); +} +  void LLFavoritesOrderStorage::load()  {  	// load per-resident sorting information -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); +	std::string filename = getSavedOrderFileName();  	LLSD settings_llsd;  	llifstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (file.is_open())  	{  		LLSDSerialize::fromXML(settings_llsd, file); +        LL_INFOS("FavoritesBar") << "loaded favorites order from '" << filename << "' " +                                 << (settings_llsd.isMap() ? "" : "un") << "successfully" +                                 << LL_ENDL; +        file.close();  	} +    else +    { +        LL_WARNS("FavoritesBar") << "unable to open favorites order file at '" << filename << "'" << LL_ENDL; +    }  	for (LLSD::map_const_iterator iter = settings_llsd.beginMap();  		iter != settings_llsd.endMap(); ++iter) @@ -1499,92 +1534,120 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()  	// Do not change the file if we are not logged in yet.  	if (!LLLoginInstance::getInstance()->authSuccess())  	{ -		LL_WARNS() << "Cannot save favorites: not logged in" << LL_ENDL; +		LL_WARNS("FavoritesBar") << "Cannot save favorites: not logged in" << LL_ENDL;  		return;  	} -	std::string user_dir = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, ""); -	if (user_dir.empty()) -	{ -		LL_WARNS() << "Cannot save favorites: empty user dir name" << LL_ENDL; -		return; -	} - -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); -	llifstream in_file; -	in_file.open(filename); -	LLSD fav_llsd; -	if (in_file.is_open()) -	{ -		LLSDSerialize::fromXML(fav_llsd, in_file); -	} - -	const LLUUID fav_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); -	LLInventoryModel::cat_array_t cats; -	LLInventoryModel::item_array_t items; -	gInventory.collectDescendents(fav_id, cats, items, LLInventoryModel::EXCLUDE_TRASH); - -	LLSD user_llsd; -	for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); it++) -	{ -		LLSD value; -		value["name"] = (*it)->getName(); -		value["asset_id"] = (*it)->getAssetUUID(); - -		slurls_map_t::iterator slurl_iter = mSLURLs.find(value["asset_id"]); -		if (slurl_iter != mSLURLs.end()) -		{ -			LL_DEBUGS() << "Saving favorite: idx=" << LLFavoritesOrderStorage::instance().getSortIndex((*it)->getUUID()) << ", SLURL=" <<  slurl_iter->second << ", value=" << value << LL_ENDL; -			value["slurl"] = slurl_iter->second; -			user_llsd[LLFavoritesOrderStorage::instance().getSortIndex((*it)->getUUID())] = value; -		} -		else -		{ -			LL_WARNS() << "Not saving favorite " << value["name"] << ": no matching SLURL" << LL_ENDL; -		} -	} - -	LLAvatarName av_name; -	LLAvatarNameCache::get( gAgentID, &av_name ); -	// Note : use the "John Doe" and not the "john.doe" version of the name  -	// as we'll compare it with the stored credentials in the login panel. -	LL_DEBUGS() << "Saved favorites for " << av_name.getUserName() << LL_ENDL; -	fav_llsd[av_name.getUserName()] = user_llsd; - -	llofstream file; -	file.open(filename); -	LLSDSerialize::toPrettyXML(fav_llsd, file); +	std::string filename = getStoredFavoritesFilename(); +    if (!filename.empty()) +    { +        llifstream in_file; +        in_file.open(filename.c_str()); +        LLSD fav_llsd; +        if (in_file.is_open()) +        { +            LLSDSerialize::fromXML(fav_llsd, in_file); +            LL_INFOS("FavoritesBar") << "loaded favorites from '" << filename << "' " +                                     << (fav_llsd.isMap() ? "" : "un") << "successfully" +                                     << LL_ENDL; +            in_file.close(); +        } +        else +        { +            LL_WARNS("FavoritesBar") << "unable to open favorites from '" << filename << "'" << LL_ENDL; +        } + +        const LLUUID fav_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); +        LLInventoryModel::cat_array_t cats; +        LLInventoryModel::item_array_t items; +        gInventory.collectDescendents(fav_id, cats, items, LLInventoryModel::EXCLUDE_TRASH); + +        LLSD user_llsd; +        for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); it++) +        { +            LLSD value; +            value["name"] = (*it)->getName(); +            value["asset_id"] = (*it)->getAssetUUID(); + +            slurls_map_t::iterator slurl_iter = mSLURLs.find(value["asset_id"]); +            if (slurl_iter != mSLURLs.end()) +            { +                LL_DEBUGS("FavoritesBar") << "Saving favorite: idx=" << LLFavoritesOrderStorage::instance().getSortIndex((*it)->getUUID()) << ", SLURL=" <<  slurl_iter->second << ", value=" << value << LL_ENDL; +                value["slurl"] = slurl_iter->second; +                user_llsd[LLFavoritesOrderStorage::instance().getSortIndex((*it)->getUUID())] = value; +            } +            else +            { +                LL_WARNS("FavoritesBar") << "Not saving favorite " << value["name"] << ": no matching SLURL" << LL_ENDL; +            } +        } + +        LLAvatarName av_name; +        LLAvatarNameCache::get( gAgentID, &av_name ); +        // Note : use the "John Doe" and not the "john.doe" version of the name  +        // as we'll compare it with the stored credentials in the login panel. +        fav_llsd[av_name.getUserName()] = user_llsd; + +        llofstream file; +        file.open(filename.c_str()); +        if ( file.is_open() ) +        { +            LLSDSerialize::toPrettyXML(fav_llsd, file); +            LL_INFOS("FavoritesBar") << "saved favorites for '" << av_name.getUserName() +                                     << "' to '" << filename << "' " +                                     << LL_ENDL; +            file.close(); +        } +        else +        { +            LL_WARNS("FavoritesBar") << "unable to open favorites storage for '" << av_name.getUserName() +                                     << "' at '" << filename << "' " +                                     << LL_ENDL; +        } +    }  }  void LLFavoritesOrderStorage::removeFavoritesRecordOfUser()  { -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); -	LLSD fav_llsd; -	llifstream file; -	file.open(filename); -	if (!file.is_open()) return; -	LLSDSerialize::fromXML(fav_llsd, file); - -	LLAvatarName av_name; -	LLAvatarNameCache::get( gAgentID, &av_name ); -	// Note : use the "John Doe" and not the "john.doe" version of the name. -	// See saveFavoritesSLURLs() here above for the reason why. -	LL_DEBUGS() << "Removed favorites for " << av_name.getUserName() << LL_ENDL; -	if (fav_llsd.has(av_name.getUserName())) -	{ -		fav_llsd.erase(av_name.getUserName()); -	} - -	llofstream out_file; -	out_file.open(filename); -	LLSDSerialize::toPrettyXML(fav_llsd, out_file); - +	std::string filename = getStoredFavoritesFilename(); +    if (!filename.empty()) +    { +        LLSD fav_llsd; +        llifstream file; +        file.open(filename.c_str()); +        if (file.is_open()) +        { +            LLSDSerialize::fromXML(fav_llsd, file); +            file.close(); +         +            LLAvatarName av_name; +            LLAvatarNameCache::get( gAgentID, &av_name ); +            // Note : use the "John Doe" and not the "john.doe" version of the name. +            // See saveFavoritesSLURLs() here above for the reason why. +            if (fav_llsd.has(av_name.getUserName())) +            { +                LL_INFOS("FavoritesBar") << "Removed favorites for " << av_name.getUserName() << LL_ENDL; +                fav_llsd.erase(av_name.getUserName()); +            } +         +            llofstream out_file; +            out_file.open(filename.c_str()); +            if ( out_file.is_open() ) +            { +                LLSDSerialize::toPrettyXML(fav_llsd, out_file); +                LL_INFOS("FavoritesBar") << "saved favorites to '" << filename << "' " +                                         << LL_ENDL; +                out_file.close(); +            } +        } +    }  }  void LLFavoritesOrderStorage::onLandmarkLoaded(const LLUUID& asset_id, LLLandmark* landmark)  { -	if (!landmark) return; - +	if (landmark) +    { +        LL_DEBUGS("FavoritesBar") << "landmark for " << asset_id << " loaded" << LL_ENDL;  	LLVector3d pos_global;  	if (!landmark->getGlobalPos(pos_global))  	{ @@ -1595,42 +1658,54 @@ void LLFavoritesOrderStorage::onLandmarkLoaded(const LLUUID& asset_id, LLLandmar  	if (!pos_global.isExactlyZero())  	{ +        LL_DEBUGS("FavoritesBar") << "requesting slurl for landmark " << asset_id << LL_ENDL;  		LLLandmarkActions::getSLURLfromPosGlobal(pos_global,  			boost::bind(&LLFavoritesOrderStorage::storeFavoriteSLURL, this, asset_id, _1));  	} +    }  }  void LLFavoritesOrderStorage::storeFavoriteSLURL(const LLUUID& asset_id, std::string& slurl)  { -	LL_DEBUGS() << "Saving landmark SLURL: " << slurl << LL_ENDL; +	LL_DEBUGS("FavoritesBar") << "Saving landmark SLURL '" << slurl << "' for " << asset_id << LL_ENDL;  	mSLURLs[asset_id] = slurl;  }  void LLFavoritesOrderStorage::save()  { -	// nothing to save if clean -	if (!mIsDirty) return; - -	// If we quit from the login screen we will not have an SL account -	// name.  Don't try to save, otherwise we'll dump a file in -	// C:\Program Files\SecondLife\ or similar. JC -	std::string user_dir = gDirUtilp->getLindenUserDir(); -	if (!user_dir.empty()) -	{ -		std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); -		LLSD settings_llsd; - -		for(sort_index_map_t::const_iterator iter = mSortIndexes.begin(); iter != mSortIndexes.end(); ++iter) -		{ -			settings_llsd[iter->first.asString()] = iter->second; -		} - -		llofstream file; -		file.open(filename); -		LLSDSerialize::toPrettyXML(settings_llsd, file); -	} +	if (mIsDirty) +    { +        // something changed, so save it +        std::string filename = LLFavoritesOrderStorage::getInstance()->getSavedOrderFileName(); +        if (!filename.empty()) +        { +            LLSD settings_llsd; + +            for(sort_index_map_t::const_iterator iter = mSortIndexes.begin(); iter != mSortIndexes.end(); ++iter) +            { +                settings_llsd[iter->first.asString()] = iter->second; +            } + +            llofstream file; +            file.open(filename.c_str()); +            if ( file.is_open() ) +            { +                LLSDSerialize::toPrettyXML(settings_llsd, file); +                LL_INFOS("FavoritesBar") << "saved favorites order to '" << filename << "' " << LL_ENDL; +            } +            else +            { +                LL_WARNS("FavoritesBar") << "failed to open favorites order file '" << filename << "' " << LL_ENDL; +            } +        } +        else +        { +            LL_DEBUGS("FavoritesBar") << "no user directory available to store favorites order file" << LL_ENDL; +        } +    }  } +  void LLFavoritesOrderStorage::cleanup()  {  	// nothing to clean diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 5ca1d3e8ed..a370724947 100755 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -162,19 +162,7 @@ private:  	boost::signals2::connection mEndDragConnection;  }; -/* -class AddFavoriteLandmarkCallback : public LLInventoryCallback -{ -public: -	AddFavoriteLandmarkCallback() : mTargetLandmarkId(LLUUID::null) {} -	void setTargetLandmarkId(const LLUUID& target_uuid) { mTargetLandmarkId = target_uuid; } - -private: -	void fire(const LLUUID& inv_item); -	LLUUID mTargetLandmarkId; -}; -*/  /**   * Class to store sorting order of favorites landmarks in a local file. EXT-3985.   * It replaced previously implemented solution to store sort index in landmark's name as a "<N>@" prefix. @@ -222,14 +210,16 @@ private:  	friend class LLSingleton<LLFavoritesOrderStorage>;  	LLFavoritesOrderStorage() : mIsDirty(false) { load(); }  	~LLFavoritesOrderStorage() { save(); } - +      	/**  	 * Removes sort indexes for items which are not in Favorites bar for now.  	 */  	void cleanup();  	const static std::string SORTING_DATA_FILE_NAME; - +    std::string getSavedOrderFileName(); +    static std::string getStoredFavoritesFilename(); +      	void load();  	void save(); diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index d89599cb45..ea39f812fd 100755 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -76,6 +76,8 @@ const char FEATURE_TABLE_FILENAME[] = "featuretable%s.txt";  const char FEATURE_TABLE_VER_FILENAME[] = "featuretable%s.%s.txt";  #endif +#if 0                               // consuming code in #if 0 below +#endif  LLFeatureInfo::LLFeatureInfo(const std::string& name, const BOOL available, const F32 level)  	: mValid(TRUE), mName(name), mAvailable(available), mRecommendedLevel(level)  { @@ -329,7 +331,7 @@ bool LLFeatureManager::parseFeatureTable(std::string filename)  	U32		version;  	cleanupFeatureTables(); // in case an earlier attempt left partial results -	file.open(filename); 	 /*Flawfinder: ignore*/ +	file.open(filename.c_str()); 	 /*Flawfinder: ignore*/  	if (!file)  	{ diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h index 0e0cec3943..b6e67375cd 100755 --- a/indra/newview/llfilepicker.h +++ b/indra/newview/llfilepicker.h @@ -164,11 +164,9 @@ private:  #if LL_DARWIN      S32 mPickOptions;  	std::vector<std::string> mFileVector; -	UInt32 mFileIndex;  	bool doNavChooseDialog(ELoadFilter filter);  	bool doNavSaveDialog(ESaveFilter filter, const std::string& filename); -	//static Boolean navOpenFilterProc(AEDesc *theItem, void *info, void *callBackUD, NavFilterModes filterMode);      std::vector<std::string>* navOpenFilterProc(ELoadFilter filter);  #endif diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index b64034b945..b6e61f83b1 100755 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -308,7 +308,7 @@ void LLVolumeImplFlexible::updateRenderRes()  	mRenderRes = (S32) (12.f*app_angle);  #else //legacy behavior  	//number of segments only cares about z axis -	F32 app_angle = llround((F32) atan2( mVO->getScale().mV[2]*2.f, drawablep->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f); +	F32 app_angle = ll_round((F32) atan2( mVO->getScale().mV[2]*2.f, drawablep->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f);   	// Rendering sections increases with visible angle on the screen  	mRenderRes = (S32)(FLEXIBLE_OBJECT_MAX_SECTIONS*4*app_angle*DEG_TO_RAD/LLViewerCamera::getInstance()->getView()); diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 66149a4367..b342d8fdf3 100755 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -123,18 +123,17 @@ BOOL LLFloaterAbout::postBuild()  	LLViewerTextEditor *support_widget =   		getChild<LLViewerTextEditor>("support_editor", true); -	LLViewerTextEditor *linden_names_widget =  -		getChild<LLViewerTextEditor>("linden_names", true); -  	LLViewerTextEditor *contrib_names_widget =   		getChild<LLViewerTextEditor>("contrib_names", true); -	LLViewerTextEditor *trans_names_widget =  -		getChild<LLViewerTextEditor>("trans_names", true); +	LLViewerTextEditor *licenses_widget =  +		getChild<LLViewerTextEditor>("licenses_editor", true);  	getChild<LLUICtrl>("copy_btn")->setCommitCallback(  		boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this)); +	static const LLUIColor about_color = LLUIColorTable::instance().getColor("TextFgReadOnlyColor"); +  	if (gAgent.getRegion())  	{  		// start fetching server release notes URL @@ -153,29 +152,11 @@ BOOL LLFloaterAbout::postBuild()  	support_widget->setEnabled(FALSE);  	support_widget->startOfDoc(); -	// Get the names of Lindens, added by viewer_manifest.py at build time -	std::string lindens_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"lindens.txt"); -	llifstream linden_file; -	std::string lindens; -	linden_file.open(lindens_path);		/* Flawfinder: ignore */ -	if (linden_file.is_open()) -	{ -		std::getline(linden_file, lindens); // all names are on a single line -		linden_file.close(); -		linden_names_widget->setText(lindens); -	} -	else -	{ -		LL_INFOS("AboutInit") << "Could not read lindens file at " << lindens_path << LL_ENDL; -	} -	linden_names_widget->setEnabled(FALSE); -	linden_names_widget->startOfDoc(); -  	// Get the names of contributors, extracted from .../doc/contributions.txt by viewer_manifest.py at build time  	std::string contributors_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"contributors.txt");  	llifstream contrib_file;  	std::string contributors; -	contrib_file.open(contributors_path);		/* Flawfinder: ignore */ +	contrib_file.open(contributors_path.c_str());		/* Flawfinder: ignore */  	if (contrib_file.is_open())  	{  		std::getline(contrib_file, contributors); // all names are on a single line @@ -189,23 +170,28 @@ BOOL LLFloaterAbout::postBuild()  	contrib_names_widget->setEnabled(FALSE);  	contrib_names_widget->startOfDoc(); -	// Get the names of translators, extracted from .../doc/tranlations.txt by viewer_manifest.py at build time -	std::string translators_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"translators.txt"); -	llifstream trans_file; -	std::string translators; -	trans_file.open(translators_path);		/* Flawfinder: ignore */ -	if (trans_file.is_open()) +    // Get the Versions and Copyrights, created at build time +	std::string licenses_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"packages-info.txt"); +	llifstream licenses_file; +	licenses_file.open(licenses_path.c_str());		/* Flawfinder: ignore */ +	if (licenses_file.is_open())  	{ -		std::getline(trans_file, translators); // all names are on a single line -		trans_file.close(); +		std::string license_line; +		licenses_widget->clear(); +		while ( std::getline(licenses_file, license_line) ) +		{ +			licenses_widget->appendText(license_line+"\n", FALSE, +										LLStyle::Params() .color(about_color)); +		} +		licenses_file.close();  	}  	else  	{ -		LL_WARNS("AboutInit") << "Could not read translators file at " << translators_path << LL_ENDL; +		// this case will use the (out of date) hard coded value from the XUI +		LL_INFOS("AboutInit") << "Could not read licenses file at " << licenses_path << LL_ENDL;  	} -	trans_names_widget->setText(translators); -	trans_names_widget->setEnabled(FALSE); -	trans_names_widget->startOfDoc(); +	licenses_widget->setEnabled(FALSE); +	licenses_widget->startOfDoc();  	return TRUE;  } diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 060c091737..0a0e5ffc06 100755 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -65,9 +65,6 @@  // NOTE: This is duplicated in lldatamoney.cpp ...  const F32 GROUP_LAND_BONUS_FACTOR = 1.1f; -const F64 CURRENCY_ESTIMATE_FREQUENCY = 0.5; -	// how long of a pause in typing a currency buy amount before an -	// estimate is fetched from the server  class LLFloaterBuyLandUI  :	public LLFloater @@ -392,9 +389,9 @@ void LLFloaterBuyLandUI::updateParcelInfo()  	}  	mParcelBillableArea = -		llround(mRegion->getBillableFactor() * mParcelActualArea); +		ll_round(mRegion->getBillableFactor() * mParcelActualArea); - 	mParcelSupportedObjects = llround( + 	mParcelSupportedObjects = ll_round(  		parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus());    	// Can't have more than region max tasks, regardless of parcel    	// object bonus factor.  diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index ef08db3d33..20d650fa37 100755 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -48,9 +48,7 @@ static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item"  const F32 NUDGE_TIME = 0.25f;		// in seconds  const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed -// Constants -const F32 CAMERA_BUTTON_DELAY = 0.0f; - +// constants  #define ORBIT "cam_rotate_stick"  #define PAN "cam_track_stick"  #define ZOOM "zoom" diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp index 6888e076aa..3a2047cfef 100644 --- a/indra/newview/llfloaterfacebook.cpp +++ b/indra/newview/llfloaterfacebook.cpp @@ -59,7 +59,6 @@ static LLPanelInjector<LLFacebookPhotoPanel> t_panel_photo("llfacebookphotopanel  static LLPanelInjector<LLFacebookCheckinPanel> t_panel_checkin("llfacebookcheckinpanel");  static LLPanelInjector<LLFacebookFriendsPanel> t_panel_friends("llfacebookfriendspanel"); -const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/";  const std::string DEFAULT_CHECKIN_ICON_URL = "http://map.secondlife.com.s3.amazonaws.com/map_placeholder.png";  const std::string DEFAULT_CHECKIN_QUERY_PARAMETERS = "?sourceid=slshare_checkin&utm_source=facebook&utm_medium=checkin&utm_campaign=slshare"; diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp index 600606d838..cd132b843d 100644 --- a/indra/newview/llfloaterflickr.cpp +++ b/indra/newview/llfloaterflickr.cpp @@ -55,7 +55,6 @@  static LLPanelInjector<LLFlickrPhotoPanel> t_panel_photo("llflickrphotopanel");  static LLPanelInjector<LLFlickrAccountPanel> t_panel_account("llflickraccountpanel"); -const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const std::string DEFAULT_PHOTO_QUERY_PARAMETERS = "?sourceid=slshare_photo&utm_source=flickr&utm_medium=photo&utm_campaign=slshare";  const std::string DEFAULT_TAG_TEXT = "secondlife ";  const std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife"; diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index 6966ca5639..37774fbc5c 100755 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -401,14 +401,9 @@ void LLFloaterGodTools::sendGodUpdateRegionInfo()  // Floats because spinners only support floats. JC  const F32 BILLABLE_FACTOR_DEFAULT = 1; -const F32 BILLABLE_FACTOR_MIN = 0.0f; -const F32 BILLABLE_FACTOR_MAX = 4.f;  // floats because spinners only understand floats. JC  const F32 PRICE_PER_METER_DEFAULT = 1.f; -const F32 PRICE_PER_METER_MIN = 0.f; -const F32 PRICE_PER_METER_MAX = 100.f; -  LLPanelRegionTools::LLPanelRegionTools()  : 	LLPanel() @@ -833,9 +828,6 @@ void LLPanelRegionTools::onSelectRegion()  //      ^                                ^        ^  //      LEFT                             R2       RIGHT -const F32 HOURS_TO_RADIANS = (2.f*F_PI)/24.f; - -  LLPanelGridTools::LLPanelGridTools() :  	LLPanel()  { diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index 9def253ba5..fc7fcf3ab9 100755 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -396,7 +396,7 @@ bool LLFloaterIMSession::canAddSelectedToChat(const uuid_vec_t& uuids)  {  	if (!mSession  		|| mDialog == IM_SESSION_GROUP_START -		|| mDialog == IM_SESSION_INVITE && gAgent.isInGroup(mSessionID)) +		|| (mDialog == IM_SESSION_INVITE && gAgent.isInGroup(mSessionID)))  	{  		return false;  	} @@ -779,7 +779,7 @@ bool LLFloaterIMSession::toggle(const LLUUID& session_id)  			floater->setVisible(false);  			return false;  		} -		else if(floater && (!floater->isDocked() || floater->getVisible() && !floater->hasFocus())) +		else if(floater && ((!floater->isDocked() || floater->getVisible()) && !floater->hasFocus()))  		{  			floater->setVisible(TRUE);  			floater->setFocus(TRUE); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 3cef7958c2..5ebd25d228 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1224,7 +1224,7 @@ void LLPanelLandObjects::refresh()  	{  		S32 sw_max = parcel->getSimWideMaxPrimCapacity();  		S32 sw_total = parcel->getSimWidePrimCount(); -		S32 max = llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()); +		S32 max = ll_round(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus());  		S32 total = parcel->getPrimCount();  		S32 owned = parcel->getOwnerPrimCount();  		S32 group = parcel->getGroupPrimCount(); @@ -2051,9 +2051,9 @@ void LLPanelLandOptions::refresh()  		else  		{  			mLocationText->setTextArg("[LANDING]",llformat("%d, %d, %d (%d\xC2\xB0)", -														   llround(pos.mV[VX]), -														   llround(pos.mV[VY]), -		   												   llround(pos.mV[VZ]), +														   ll_round(pos.mV[VX]), +														   ll_round(pos.mV[VY]), +		   												   ll_round(pos.mV[VZ]),  														   user_look_at_angle));  		} diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index cf03087afb..f34760a6bf 100755 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -208,8 +208,8 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**)  			self->mActualArea += actual_area;  			self->mBillableArea += billable_area; -			S32 region_x = llround(global_x) % REGION_WIDTH_UNITS; -			S32 region_y = llround(global_y) % REGION_WIDTH_UNITS; +			S32 region_x = ll_round(global_x) % REGION_WIDTH_UNITS; +			S32 region_y = ll_round(global_y) % REGION_WIDTH_UNITS;  			std::string location;  			location = llformat("%s (%d, %d)", sim_name.c_str(), region_x, region_y); diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index 473e2938be..333ff863e5 100755 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -52,10 +52,7 @@  // The minor cardinal direction labels are hidden if their height is more  // than this proportion of the map.  const F32 MAP_MINOR_DIR_THRESHOLD = 0.07f; -const S32 MAP_PADDING_LEFT = 0; -const S32 MAP_PADDING_TOP = 2; -const S32 MAP_PADDING_RIGHT = 2; -const S32 MAP_PADDING_BOTTOM = 0; +  //  // Member functions  // @@ -156,8 +153,8 @@ void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation )  	radius -= 8.f;  	text_box->setOrigin(  -		llround(map_half_width - text_half_width + radius * cos( rotation )), -		llround(map_half_height - text_half_height + radius * sin( rotation )) ); +		ll_round(map_half_width - text_half_width + radius * cos( rotation )), +		ll_round(map_half_height - text_half_height + radius * sin( rotation )) );  }  void LLFloaterMap::updateMinorDirections() diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index 4f2a6ec1b7..4fd5c0587a 100755 --- a/indra/newview/llfloatermediasettings.cpp +++ b/indra/newview/llfloatermediasettings.cpp @@ -47,7 +47,6 @@ LLFloaterMediaSettings::LLFloaterMediaSettings(const LLSD& key)  	mPanelMediaSettingsGeneral(NULL),  	mPanelMediaSettingsSecurity(NULL),  	mPanelMediaSettingsPermissions(NULL), -	mWaitingToClose( false ),  	mIdenticalHasMediaInfo( true ),  	mMultipleMedia(false),  	mMultipleValidMedia(false) diff --git a/indra/newview/llfloatermediasettings.h b/indra/newview/llfloatermediasettings.h index 1d25530986..f93512eb3a 100755 --- a/indra/newview/llfloatermediasettings.h +++ b/indra/newview/llfloatermediasettings.h @@ -83,7 +83,6 @@ private:  	bool haveValuesChanged() const;  	LLSD mInitialValues; -	bool mWaitingToClose;  };  #endif  // LL_LLFLOATERMEDIASETTINGS_H diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index e0a998c369..72c9170b06 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -121,12 +121,6 @@ S32 LLFloaterModelPreview::sUploadAmount = 10;  LLFloaterModelPreview* LLFloaterModelPreview::sInstance = NULL;  std::list<LLModelLoader*> LLModelLoader::sActiveLoaderList; -const S32 PREVIEW_BORDER_WIDTH = 2; -const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH; -const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE; -const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16; -const S32 PREVIEW_TEXTURE_HEIGHT = 300; -  // "Retain%" decomp parameter has values from 0.0 to 1.0 by 0.01  // But according to the UI spec for upload model floater, this parameter  // should be represented by Retain spinner with values from 1 to 100 by 1. @@ -2166,7 +2160,7 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)  	S32 file_size = (S32) stat.st_size; -	llifstream ifstream(filename, std::ifstream::in | std::ifstream::binary); +	llifstream ifstream(filename.c_str(), std::ifstream::in | std::ifstream::binary);  	LLSD data;  	LLSDSerialize::fromBinary(data, ifstream, file_size);  	ifstream.close(); @@ -3524,7 +3518,7 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw  		data["instance"][i] = instance.asLLSD();  	} -	llofstream out(filename, std::ios_base::out | std::ios_base::binary); +	llofstream out(filename.c_str(), std::ios_base::out | std::ios_base::binary);  	LLSDSerialize::toBinary(data, out);  	out.flush();  	out.close(); diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index ee7f413a59..0cca715fe2 100755 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -52,14 +52,9 @@  #include "llinventorytype.h"  const S32 PREVIEW_LINE_HEIGHT = 19; -const S32 PREVIEW_CLOSE_BOX_SIZE = 16;  const S32 PREVIEW_BORDER_WIDTH = 2;  const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH; -const S32 PREVIEW_VPAD = 2;  const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE; -const S32 PREVIEW_HEADER_SIZE = 3 * PREVIEW_LINE_HEIGHT + PREVIEW_VPAD; -const S32 PREF_BUTTON_WIDTH = 64; -const S32 PREF_BUTTON_HEIGHT = 16;  //-----------------------------------------------------------------------------  // LLFloaterNameDesc() diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp index 69c9d94dfa..87f927ff65 100755 --- a/indra/newview/llfloaterpathfindingcharacters.cpp +++ b/indra/newview/llfloaterpathfindingcharacters.cpp @@ -224,7 +224,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListItemData(const LLPa  	columns[2]["column"] = "owner";  	columns[2]["value"] = getOwnerName(pCharacterPtr); -	S32 cpuTime = llround(pCharacterPtr->getCPUTime()); +	S32 cpuTime = ll_round(pCharacterPtr->getCPUTime());  	std::string cpuTimeString = llformat("%d", cpuTime);  	LLStringUtil::format_map_t string_args;  	string_args["[CPU_TIME]"] = cpuTimeString; diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index d72ee073e1..f6ff83eaf4 100755 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -406,7 +406,7 @@ void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjec  	if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName())  	{ -		mMissingNameObjectsScrollListItems.insert(std::make_pair<std::string, LLScrollListItem *>(pObjectPtr->getUUID().asString(), scrollListItem)); +		mMissingNameObjectsScrollListItems.insert(scroll_list_item_map::value_type(pObjectPtr->getUUID().asString(), scrollListItem));  		pObjectPtr->registerOwnerNameListener(boost::bind(&LLFloaterPathfindingObjects::handleObjectNameResponse, this, _1));  	}  } diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp index a4d13ce1d5..31245db344 100755 --- a/indra/newview/llfloaterpay.cpp +++ b/indra/newview/llfloaterpay.cpp @@ -119,7 +119,6 @@ protected:  }; -const S32 MAX_AMOUNT_LENGTH = 10;  const S32 FASTPAY_BUTTON_WIDTH = 80;  const S32 PAY_AMOUNT_NOTIFICATION = 200; @@ -368,7 +367,8 @@ void LLFloaterPay::payViaObject(money_callback callback, LLSafeHandle<LLObjectSe  	LLSelectNode* node = selection->getFirstRootNode();  	if (!node)   	{ -		//FIXME: notify user object no longer exists +		// object no longer exists +		LLNotificationsUtil::add("PayObjectFailed");  		floater->closeFloater();  		return;  	} @@ -492,12 +492,22 @@ void LLFloaterPay::onGive(void* data)  		}  		if (amount > PAY_AMOUNT_NOTIFICATION && gStatusBar && gStatusBar->getBalance() > amount)  		{ -			LLUUID payee_id; -			BOOL is_group; +			LLUUID payee_id = LLUUID::null; +			BOOL is_group = false;  			if (floater->mObjectSelection.notNull())  			{  				LLSelectNode* node = floater->mObjectSelection->getFirstRootNode(); -				node->mPermissions->getOwnership(payee_id, is_group); +				if (node) +				{ +					node->mPermissions->getOwnership(payee_id, is_group); +				} +				else +				{ +					// object no longer exists +					LLNotificationsUtil::add("PayObjectFailed"); +					floater->closeFloater(); +					return; +				}  			}  			else  			{ @@ -563,6 +573,10 @@ void LLFloaterPay::give(S32 amount)  					msg->sendReliable( region->getHost() );  				}  			} +			else +			{ +				LLNotificationsUtil::add("PayObjectFailed"); +			}  		}  		else  		{ diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp index 849aa7cd14..042cf47070 100755 --- a/indra/newview/llfloaterperms.cpp +++ b/indra/newview/llfloaterperms.cpp @@ -195,7 +195,7 @@ private:  		// even if it is the same as a previous one.  		sPreviousReason = "";  		LLFloaterPermsDefault::setCapSent(true); -		LL_INFOS("FloaterPermsResponder") << "Sent default permissions to simulator" << LL_ENDL; +		LL_INFOS("ObjectPermissionsFloater") << "Default permissions successfully sent to simulator" << LL_ENDL;  	}  }; @@ -223,8 +223,20 @@ void LLFloaterPermsDefault::updateCap()  		report["default_object_perm_masks"]["NextOwner"] =  			(LLSD::Integer)LLFloaterPerms::getNextOwnerPerms(sCategoryNames[CAT_OBJECTS]); +        { +            LL_DEBUGS("ObjectPermissionsFloater") << "Sending default permissions to '" +                                                  << object_url << "'\n"; +            std::ostringstream sent_perms_log; +            LLSDSerialize::toPrettyXML(report, sent_perms_log); +            LL_CONT << sent_perms_log.str() << LL_ENDL; +        } +      		LLHTTPClient::post(object_url, report, new LLFloaterPermsResponder());  	} +    else +    { +        LL_DEBUGS("ObjectPermissionsFloater") << "AgentPreferences cap not available." << LL_ENDL; +    }  }  void LLFloaterPermsDefault::setCapSent(bool cap_sent) diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 0c669506fa..ee4396758e 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -111,13 +111,9 @@  #include "lllogininstance.h"        // to check if logged in yet  #include "llsdserialize.h" -const F32 MAX_USER_FAR_CLIP = 512.f; -const F32 MIN_USER_FAR_CLIP = 64.f;  const F32 BANDWIDTH_UPDATER_TIMEOUT = 0.5f;  char const* const VISIBILITY_DEFAULT = "default";  char const* const VISIBILITY_HIDDEN = "hidden"; -char const* const VISIBILITY_VISIBLE = "visible"; -char const* const VISIBILITY_INVISIBLE = "invisible";  //control value for middle mouse as talk2push button  const static std::string MIDDLE_MOUSE_CV = "MiddleMouse"; @@ -301,8 +297,8 @@ void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator)  	{  		if (fmodf((decimal_val * test_denominator) + 0.01f, 1.f) < 0.02f)  		{ -			numerator = llround(decimal_val * test_denominator); -			denominator = llround(test_denominator); +			numerator = ll_round(decimal_val * test_denominator); +			denominator = ll_round(test_denominator);  			break;  		}  	} diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index a3b9713e3e..ae330211db 100755 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -82,8 +82,6 @@  #include "lltrans.h" -const U32 INCLUDE_SCREENSHOT  = 0x01 << 0; -  //-----------------------------------------------------------------------------  // Globals  //----------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h index a5cb1b6184..5ba0185d32 100755 --- a/indra/newview/llfloaterscriptlimits.h +++ b/indra/newview/llfloaterscriptlimits.h @@ -170,21 +170,17 @@ private:  	LLSD mContent;  	LLUUID mParcelId;  	bool mGotParcelMemoryUsed; -	bool mGotParcelMemoryUsedDetails;  	bool mGotParcelMemoryMax;  	S32 mParcelMemoryMax;  	S32 mParcelMemoryUsed; -	S32 mParcelMemoryUsedDetails; -	 +  	bool mGotParcelURLsUsed; -	bool mGotParcelURLsUsedDetails;  	bool mGotParcelURLsMax;  	S32 mParcelURLsMax;  	S32 mParcelURLsUsed; -	S32 mParcelURLsUsedDetails; -	 +  	std::vector<LLSD> mObjectListItems; -		 +  protected:  // LLRemoteParcelInfoObserver interface: @@ -208,17 +204,11 @@ public:  	LLPanelScriptLimitsAttachment()  		:	LLPanelScriptLimitsInfo(),  		mGotAttachmentMemoryUsed(false), -		mGotAttachmentMemoryUsedDetails(false), -		mGotAttachmentMemoryMax(false),  		mAttachmentMemoryMax(0),  		mAttachmentMemoryUsed(0), -		mAttachmentMemoryUsedDetails(0),  		mGotAttachmentURLsUsed(false), -		mGotAttachmentURLsUsedDetails(false), -		mGotAttachmentURLsMax(false),  		mAttachmentURLsMax(0), -		mAttachmentURLsUsed(0), -		mAttachmentURLsUsedDetails(0) +		mAttachmentURLsUsed(0)  		{};  	~LLPanelScriptLimitsAttachment() @@ -237,18 +227,12 @@ public:  private:  	bool mGotAttachmentMemoryUsed; -	bool mGotAttachmentMemoryUsedDetails; -	bool mGotAttachmentMemoryMax;  	S32 mAttachmentMemoryMax;  	S32 mAttachmentMemoryUsed; -	S32 mAttachmentMemoryUsedDetails; -	 +  	bool mGotAttachmentURLsUsed; -	bool mGotAttachmentURLsUsedDetails; -	bool mGotAttachmentURLsMax;  	S32 mAttachmentURLsMax;  	S32 mAttachmentURLsUsed; -	S32 mAttachmentURLsUsedDetails;  protected: diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 1d0ddc2ced..b27a42cb8e 100755 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -930,11 +930,11 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3  		//change another value proportionally  		if(isWidthChanged)  		{ -			height = llround(width / aspect_ratio) ; +			height = ll_round(width / aspect_ratio) ;  		}  		else  		{ -			width = llround(height * aspect_ratio) ; +			width = ll_round(height * aspect_ratio) ;  		}  		//bound w/h by the max_value diff --git a/indra/newview/llfloaterspellchecksettings.cpp b/indra/newview/llfloaterspellchecksettings.cpp index 54c7b4c37d..5124dae147 100755 --- a/indra/newview/llfloaterspellchecksettings.cpp +++ b/indra/newview/llfloaterspellchecksettings.cpp @@ -350,7 +350,8 @@ void LLFloaterSpellCheckerImport::onBtnOK()  		custom_dict_info["language"] = dict_language;  		LLSD custom_dict_map; -		llifstream custom_file_in(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml"); +        std::string custom_filename(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml"); +		llifstream custom_file_in(custom_filename.c_str());  		if (custom_file_in.is_open())  		{  			LLSDSerialize::fromXMLDocument(custom_dict_map, custom_file_in); @@ -372,7 +373,7 @@ void LLFloaterSpellCheckerImport::onBtnOK()  			custom_dict_map.append(custom_dict_info);  		} -		llofstream custom_file_out(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml", std::ios::trunc); +		llofstream custom_file_out(custom_filename.c_str(), std::ios::trunc);  		if (custom_file_out.is_open())  		{  			LLSDSerialize::toPrettyXML(custom_dict_map, custom_file_out); diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index 0613ffc94d..c1c21c593e 100755 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -50,7 +50,6 @@  LLFloaterTOS::LLFloaterTOS(const LLSD& data)  :	LLModalDialog( data["message"].asString() ),  	mMessage(data["message"].asString()), -	mWebBrowserWindowId( 0 ),  	mLoadingScreenLoaded(false),  	mSiteAlive(false),  	mRealNavigateBegun(false), diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h index 8921d11489..47126d06a6 100755 --- a/indra/newview/llfloatertos.h +++ b/indra/newview/llfloatertos.h @@ -62,7 +62,6 @@ public:  private:  	std::string		mMessage; -	int				mWebBrowserWindowId;  	bool			mLoadingScreenLoaded;  	bool			mSiteAlive;  	bool			mRealNavigateBegun; diff --git a/indra/newview/llfloatertwitter.cpp b/indra/newview/llfloatertwitter.cpp index 868d623d57..c48b1a3325 100644 --- a/indra/newview/llfloatertwitter.cpp +++ b/indra/newview/llfloatertwitter.cpp @@ -54,7 +54,6 @@  static LLPanelInjector<LLTwitterPhotoPanel> t_panel_photo("lltwitterphotopanel");  static LLPanelInjector<LLTwitterAccountPanel> t_panel_account("lltwitteraccountpanel"); -const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const std::string DEFAULT_PHOTO_LOCATION_URL = "http://maps.secondlife.com/";  const std::string DEFAULT_PHOTO_QUERY_PARAMETERS = "?sourceid=slshare_photo&utm_source=twitter&utm_medium=photo&utm_campaign=slshare";  const std::string DEFAULT_STATUS_TEXT = " #SecondLife"; diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index bfc36a6bfb..76ad2146f1 100755 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -180,7 +180,6 @@ private:  	LLButton*					mToggleOverlapButton;				// button to togle overlap panel/highlighting  	LLComboBox*					mLanguageSelection;					// combo box for primary language selection  	LLComboBox*					mLanguageSelection_2;				// combo box for secondary language selection -	LLScrollContainer*			mOverlapScrollView;					// overlapping elements scroll container  	S32							mLastDisplayedX, mLastDisplayedY;	// stored position of last floater so the new one opens up in the same place  	std::string 				mDelim;								// the OS-specific delimiter character (/ or \) (*TODO: this shouldn't be needed, right?) diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 6837f6159f..1b1c24b19a 100755 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -660,9 +660,9 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)  	F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );  	std::string full_name = llformat("%s (%d, %d, %d)",   									 sim_name.c_str(),  -									 llround(region_x),  -									 llround(region_y), -									 llround((F32)pos_global.mdV[VZ])); +									 ll_round(region_x),  +									 ll_round(region_y), +									 ll_round((F32)pos_global.mdV[VZ]));  	std::string tooltip("");  	mTrackedStatus = LLTracker::TRACKING_LOCATION; diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 64f796e1fd..c80dec0e75 100755 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -80,10 +80,10 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)  	S32 top =	llmax(y, mDragStartY);  	S32 bottom =llmin(y, mDragStartY); -	left = llround((F32) left * LLUI::getScaleFactor().mV[VX]); -	right = llround((F32) right * LLUI::getScaleFactor().mV[VX]); -	top = llround((F32) top * LLUI::getScaleFactor().mV[VY]); -	bottom = llround((F32) bottom * LLUI::getScaleFactor().mV[VY]); +	left = ll_round((F32) left * LLUI::getScaleFactor().mV[VX]); +	right = ll_round((F32) right * LLUI::getScaleFactor().mV[VX]); +	top = ll_round((F32) top * LLUI::getScaleFactor().mV[VY]); +	bottom = ll_round((F32) bottom * LLUI::getScaleFactor().mV[VY]);  	F32 old_far_plane = LLViewerCamera::getInstance()->getFar();  	F32 old_near_plane = LLViewerCamera::getInstance()->getNear(); diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index b1b7a87ae8..ef238cefe3 100755 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -50,6 +50,8 @@ S32 LLGroupListItem::sIconWidth = 0;  class LLGroupComparator : public LLFlatListView::ItemComparator  {  public: +	LLGroupComparator() {}; +  	/** Returns true if item1 < item2, false otherwise */  	/*virtual*/ bool compare(const LLPanel* item1, const LLPanel* item2) const  	{ diff --git a/indra/newview/llhudeffecttrail.cpp b/indra/newview/llhudeffecttrail.cpp index 8771219034..fc6efdb840 100755 --- a/indra/newview/llhudeffecttrail.cpp +++ b/indra/newview/llhudeffecttrail.cpp @@ -42,13 +42,6 @@  #include "llvoavatar.h"  #include "llworld.h" - -const F32 PARTICLE_SPACING = 0.01f; -const F32 MAX_SIZE = 0.025f; -const F32 START_POS_MAG = 1.f; -const F32 END_POS_MAG = 1.2f; - -  LLHUDEffectSpiral::LLHUDEffectSpiral(const U8 type) : LLHUDEffect(type), mbInit(FALSE)  {  	mKillTime = 10.f; diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp index 31d832e524..c7d108b6de 100755 --- a/indra/newview/llhudnametag.cpp +++ b/indra/newview/llhudnametag.cpp @@ -52,17 +52,12 @@  const F32 SPRING_STRENGTH = 0.7f; -const F32 RESTORATION_SPRING_TIME_CONSTANT = 0.1f;  const F32 HORIZONTAL_PADDING = 16.f;  const F32 VERTICAL_PADDING = 12.f;  const F32 LINE_PADDING = 3.f;			// aka "leading"  const F32 BUFFER_SIZE = 2.f; -const F32 MIN_EDGE_OVERLAP = 3.f;  const F32 HUD_TEXT_MAX_WIDTH = 190.f; -const F32 HUD_TEXT_MAX_WIDTH_NO_BUBBLE = 1000.f; -const F32 RESIZE_TIME = 0.f;  const S32 NUM_OVERLAP_ITERATIONS = 10; -const F32 NEIGHBOR_FORCE_FRACTION = 1.f;  const F32 POSITION_DAMPING_TC = 0.2f;  const F32 MAX_STABLE_CAMERA_VELOCITY = 0.1f;  const F32 LOD_0_SCREEN_COVERAGE = 0.15f; @@ -315,7 +310,7 @@ void LLHUDNameTag::renderText(BOOL for_select)  	{  		LLUIImagePtr rect_top_image = LLUI::getUIImage("Rounded_Rect_Top");  		LLRect label_top_rect = screen_rect; -		const S32 label_height = llround((mFontp->getLineHeight() * (F32)mLabelSegments.size() + (VERTICAL_PADDING / 3.f))); +		const S32 label_height = ll_round((mFontp->getLineHeight() * (F32)mLabelSegments.size() + (VERTICAL_PADDING / 3.f)));  		label_top_rect.mBottom = label_top_rect.mTop - label_height;  		LLColor4 label_top_color = text_color;  		label_top_color.mV[VALPHA] = gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor; diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index f648d7baae..2c204170f2 100755 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -48,23 +48,11 @@  #include "pipeline.h"  #include <boost/tokenizer.hpp> - -const F32 SPRING_STRENGTH = 0.7f; -const F32 RESTORATION_SPRING_TIME_CONSTANT = 0.1f;  const F32 HORIZONTAL_PADDING = 15.f;  const F32 VERTICAL_PADDING = 12.f;  const F32 BUFFER_SIZE = 2.f; -const F32 MIN_EDGE_OVERLAP = 3.f;  const F32 HUD_TEXT_MAX_WIDTH = 190.f;  const F32 HUD_TEXT_MAX_WIDTH_NO_BUBBLE = 1000.f; -const F32 RESIZE_TIME = 0.f; -const S32 NUM_OVERLAP_ITERATIONS = 10; -const F32 NEIGHBOR_FORCE_FRACTION = 1.f; -const F32 POSITION_DAMPING_TC = 0.2f; -const F32 MAX_STABLE_CAMERA_VELOCITY = 0.1f; -//const F32 LOD_0_SCREEN_COVERAGE = 0.15f; -//const F32 LOD_1_SCREEN_COVERAGE = 0.30f; -//const F32 LOD_2_SCREEN_COVERAGE = 0.40f;  std::set<LLPointer<LLHUDText> > LLHUDText::sTextObjects;  std::vector<LLPointer<LLHUDText> > LLHUDText::sVisibleTextObjects; diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp index 9a63e99357..cead4dbce6 100755 --- a/indra/newview/llhudview.cpp +++ b/indra/newview/llhudview.cpp @@ -44,10 +44,6 @@  LLHUDView *gHUDView = NULL; -const S32 HUD_ARROW_SIZE = 32; - - -  LLHUDView::LLHUDView(const LLRect& r)  {  	buildFromFile( "panel_hud.xml"); diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 8dde2c33b7..932fce83ba 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -199,6 +199,7 @@ protected:  class LLInventoryFolderViewModelBuilder  {  public: + 	LLInventoryFolderViewModelBuilder() {}   	virtual ~LLInventoryFolderViewModelBuilder() {}  	virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type,  										LLAssetType::EType actual_asset_type, @@ -654,6 +655,7 @@ public:  class LLRecentInventoryBridgeBuilder : public LLInventoryFolderViewModelBuilder  {  public: +	LLRecentInventoryBridgeBuilder() {}  	// Overrides FolderBridge for Recent Inventory Panel.  	// It use base functionality for bridges other than FolderBridge.  	virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type, diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index dc8b15a5bf..c66e9da4a9 100755 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -550,7 +550,7 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)  		if (mFilterOps.mFilterTypes == FILTERTYPE_UUID)  		{  			mFilterOps.mFilterTypes &= ~FILTERTYPE_UUID; -			mFilterOps.mFilterUUID == LLUUID::null; +			mFilterOps.mFilterUUID = LLUUID::null;  			setModified(FILTER_RESTART);  		} @@ -663,13 +663,13 @@ void LLInventoryFilter::setHoursAgo(U32 hours)  		BOOL more_restrictive;  		if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection)  		{ -			less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours); -			more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero); +			less_restrictive = ((are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo))) || !hours); +			more_restrictive = ((are_date_limits_valid && (!is_increasing && hours)) || is_increasing_from_zero);  		}  		else  		{ -			less_restrictive = (are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo)) || !hours); -			more_restrictive = (are_date_limits_valid && (!is_decreasing && hours) || is_increasing_from_zero); +			less_restrictive = ((are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo))) || !hours); +			more_restrictive = ((are_date_limits_valid && (!is_decreasing && hours)) || is_increasing_from_zero);  		}  		mFilterOps.mHoursAgo = hours; diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index f18832fe95..40edb13a80 100755 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -181,8 +181,6 @@ private:  }; -const S32 MAX_FETCH_RETRIES = 10; -  const char * const LOG_INV("Inventory");  } // end of namespace anonymous @@ -199,10 +197,7 @@ LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch():  	mAllFoldersFetched(FALSE),  	mRecursiveInventoryFetchStarted(FALSE),  	mRecursiveLibraryFetchStarted(FALSE), -	mNumFetchRetries(0), -	mMinTimeBetweenFetches(0.3f), -	mMaxTimeBetweenFetches(10.f), -	mTimelyFetchPending(FALSE) +	mMinTimeBetweenFetches(0.3f)  {}  LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch() @@ -351,164 +346,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()  	if (mBackgroundFetchActive && gAgent.getRegion() && gAgent.getRegion()->capabilitiesReceived())  	{  		// If we'll be using the capability, we'll be sending batches and the background thing isn't as important. -		if (gSavedSettings.getBOOL("UseHTTPInventory"))  -		{ -			bulkFetch(); -			return; -		} -		 -#if 1 -		//-------------------------------------------------------------------------------- -		// DEPRECATED OLD CODE -		// - -		// No more categories to fetch, stop fetch process. -		if (mFetchQueue.empty()) -		{ -			setAllFoldersFetched(); -			return; -		} - -		F32 fast_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.1f); -		F32 slow_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.5f); -		if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() > slow_fetch_time) -		{ -			// Double timeouts on failure. -			mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f); -			mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f); -			LL_DEBUGS(LOG_INV) << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL; -			// fetch is no longer considered "timely" although we will wait for full time-out. -			mTimelyFetchPending = FALSE; -		} - -		while(1) -		{ -			if (mFetchQueue.empty()) -			{ -				break; -			} - -			if (gDisconnected) -			{ -				// Just bail if we are disconnected. -				break; -			} - -			const FetchQueueInfo info = mFetchQueue.front(); - -			if (info.mIsCategory) -			{ - -				LLViewerInventoryCategory* cat = gInventory.getCategory(info.mUUID); - -				// Category has been deleted, remove from queue. -				if (!cat) -				{ -					mFetchQueue.pop_front(); -					continue; -				} -			 -				if (mFetchTimer.getElapsedTimeF32() > mMinTimeBetweenFetches &&  -					LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion()) -				{ -					// Category exists but has no children yet, fetch the descendants -					// for now, just request every time and rely on retry timer to throttle. -					if (cat->fetch()) -					{ -						mFetchTimer.reset(); -						mTimelyFetchPending = TRUE; -					} -					else -					{ -						//  The catagory also tracks if it has expired and here it says it hasn't -						//  yet.  Get out of here because nothing is going to happen until we -						//  update the timers. -						break; -					} -				} -				// Do I have all my children? -				else if (gInventory.isCategoryComplete(info.mUUID)) -				{ -					// Finished with this category, remove from queue. -					mFetchQueue.pop_front(); - -					// Add all children to queue. -					LLInventoryModel::cat_array_t* categories; -					LLInventoryModel::item_array_t* items; -					gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items); -					for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin(); -						 it != categories->end(); -						 ++it) -					{ -						mFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(),info.mRecursive)); -					} - -					// We received a response in less than the fast time. -					if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() < fast_fetch_time) -					{ -						// Shrink timeouts based on success. -						mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f); -						mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f); -						LL_DEBUGS(LOG_INV) << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL; -					} - -					mTimelyFetchPending = FALSE; -					continue; -				} -				else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches) -				{ -					// Received first packet, but our num descendants does not match db's num descendants -					// so try again later. -					mFetchQueue.pop_front(); - -					if (mNumFetchRetries++ < MAX_FETCH_RETRIES) -					{ -						// push on back of queue -						mFetchQueue.push_back(info); -					} -					mTimelyFetchPending = FALSE; -					mFetchTimer.reset(); -					break; -				} - -				// Not enough time has elapsed to do a new fetch -				break; -			} -			else -			{ -				LLViewerInventoryItem* itemp = gInventory.getItem(info.mUUID); - -				mFetchQueue.pop_front(); -				if (!itemp)  -				{ -					continue; -				} - -				if (mFetchTimer.getElapsedTimeF32() > mMinTimeBetweenFetches) -				{ -					itemp->fetchFromServer(); -					mFetchTimer.reset(); -					mTimelyFetchPending = TRUE; -				} -				else if (itemp->mIsComplete) -				{ -					mTimelyFetchPending = FALSE; -				} -				else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches) -				{ -					mFetchQueue.push_back(info); -					mFetchTimer.reset(); -					mTimelyFetchPending = FALSE; -				} -				// Not enough time has elapsed to do a new fetch -				break; -			} -		} - -		// -		// DEPRECATED OLD CODE -		//-------------------------------------------------------------------------------- -#endif +		bulkFetch();  	}  } diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index 2139f85519..19fbfc2ed3 100755 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -87,12 +87,9 @@ private:  	BOOL mBackgroundFetchActive;  	bool mFolderFetchActive;  	S32 mFetchCount; -	BOOL mTimelyFetchPending; -	S32 mNumFetchRetries;  	LLFrameTimer mFetchTimer;  	F32 mMinTimeBetweenFetches; -	F32 mMaxTimeBetweenFetches;  	struct FetchQueueInfo  	{ diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp index f893daaeb2..9c00243f44 100755 --- a/indra/newview/lllandmarkactions.cpp +++ b/indra/newview/lllandmarkactions.cpp @@ -74,9 +74,9 @@ public:  		if (!landmark->getGlobalPos(landmark_global_pos))  			return false;  		//we have to round off each coordinates to compare positions properly -		return llround(mPos.mdV[VX]) ==  llround(landmark_global_pos.mdV[VX]) -				&& llround(mPos.mdV[VY]) ==  llround(landmark_global_pos.mdV[VY]) -				&& llround(mPos.mdV[VZ]) ==  llround(landmark_global_pos.mdV[VZ]); +		return ll_round(mPos.mdV[VX]) ==  ll_round(landmark_global_pos.mdV[VX]) +				&& ll_round(mPos.mdV[VY]) ==  ll_round(landmark_global_pos.mdV[VY]) +				&& ll_round(mPos.mdV[VZ]) ==  ll_round(landmark_global_pos.mdV[VZ]);  	}  }; @@ -320,7 +320,7 @@ void LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(const LLVector3d& gl  	{  		LLVector3 pos = sim_infop->getLocalPos(global_pos);  		std::string name = sim_infop->getName() ; -		cb(name, llround(pos.mV[VX]), llround(pos.mV[VY]),llround(pos.mV[VZ])); +		cb(name, ll_round(pos.mV[VX]), ll_round(pos.mV[VY]),ll_round(pos.mV[VZ]));  	}  	else  	{ @@ -364,7 +364,7 @@ void LLLandmarkActions::onRegionResponseNameAndCoords(region_name_and_coords_cal  	{  		LLVector3 local_pos = sim_infop->getLocalPos(global_pos);  		std::string name = sim_infop->getName() ; -		cb(name, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]), llround(local_pos.mV[VZ])); +		cb(name, ll_round(local_pos.mV[VX]), ll_round(local_pos.mV[VY]), ll_round(local_pos.mV[VZ]));  	}  } diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp index 619140e922..8fb7550169 100755 --- a/indra/newview/lllocalbitmaps.cpp +++ b/indra/newview/lllocalbitmaps.cpp @@ -76,7 +76,6 @@ bool                        LLLocalBitmapMgr::sNeedsRebake;  static const F32 LL_LOCAL_TIMER_HEARTBEAT   = 3.0;  static const BOOL LL_LOCAL_USE_MIPMAPS      = true;  static const S32 LL_LOCAL_DISCARD_LEVEL     = 0; -static const U32 LL_LOCAL_TEXLAYER_FOR_IDX  = 0;  static const bool LL_LOCAL_SLAM_FOR_DEBUG   = true;  static const bool LL_LOCAL_REPLACE_ON_DEL   = true;  static const S32 LL_LOCAL_UPDATE_RETRIES    = 5; diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp index 680b35b550..162d6e003e 100755 --- a/indra/newview/lllocationhistory.cpp +++ b/indra/newview/lllocationhistory.cpp @@ -127,7 +127,7 @@ void LLLocationHistory::save() const  	}  	// open a file for writing -	llofstream file (resolved_filename); +	llofstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't open location history file \"" << mFilename << "\" for writing" << LL_ENDL; @@ -148,7 +148,7 @@ void LLLocationHistory::load()  	// build filename for each user  	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename); -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  	{ diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index cadbc16f1e..7ddacf3033 100755 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -302,7 +302,7 @@ void LLLogChat::saveHistory(const std::string& filename,  		return;  	} -	llofstream file (LLLogChat::makeLogFileName(filename), std::ios_base::app); +	llofstream file(LLLogChat::makeLogFileName(filename).c_str(), std::ios_base::app);  	if (!file.is_open())  	{  		LL_WARNS() << "Couldn't open chat history log! - " + filename << LL_ENDL; diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index df59283bc4..b4d0bb6823 100755 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -58,7 +58,6 @@  #include "llmachineid.h"  #include "llupdaterservice.h"  #include "llevents.h" -#include "llnotificationsutil.h"  #include "llappviewer.h"  #include <boost/scoped_ptr.hpp> @@ -75,9 +74,14 @@ namespace {  	{  	public:  		MandatoryUpdateMachine(LLLoginInstance & loginInstance, LLUpdaterService & updaterService); -		 +  		void start(void); -		 + +		LLNotificationsInterface& getNotificationsInterface() const +		{ +			return mLoginInstance.getNotificationsInterface(); +		} +  	private:  		class State;  		class CheckingForUpdate; @@ -85,9 +89,9 @@ namespace {  		class ReadyToInstall;   		class StartingUpdaterService;  		class WaitingForDownload; -		 -		LLLoginInstance & mLoginInstance; +  		boost::scoped_ptr<State> mState; +		LLLoginInstance &  mLoginInstance;  		LLUpdaterService & mUpdaterService;  		void setCurrentState(State * newState); @@ -145,7 +149,7 @@ namespace {  		virtual void exit(void);  	private: -		MandatoryUpdateMachine & mMachine; +		//MandatoryUpdateMachine & mMachine;  	}; @@ -328,7 +332,7 @@ MandatoryUpdateMachine::Error::Error(MandatoryUpdateMachine & machine):  void MandatoryUpdateMachine::Error::enter(void)  {  	LL_INFOS() << "entering error" << LL_ENDL; -	LLNotificationsUtil::add("FailedRequiredUpdateInstall", LLSD(), LLSD(), boost::bind(&MandatoryUpdateMachine::Error::onButtonClicked, this, _1, _2)); +	mMachine.getNotificationsInterface().add("FailedRequiredUpdateInstall", LLSD(), LLSD(), boost::bind(&MandatoryUpdateMachine::Error::onButtonClicked, this, _1, _2));  } @@ -349,8 +353,8 @@ void MandatoryUpdateMachine::Error::onButtonClicked(const LLSD &, const LLSD &)  //----------------------------------------------------------------------------- -MandatoryUpdateMachine::ReadyToInstall::ReadyToInstall(MandatoryUpdateMachine & machine): -	mMachine(machine) +MandatoryUpdateMachine::ReadyToInstall::ReadyToInstall(MandatoryUpdateMachine & machine) //: +	//mMachine(machine)  {  	; // No op.  } @@ -384,7 +388,7 @@ MandatoryUpdateMachine::StartingUpdaterService::StartingUpdaterService(Mandatory  void MandatoryUpdateMachine::StartingUpdaterService::enter(void)  {  	LL_INFOS() << "entering start update service" << LL_ENDL; -	LLNotificationsUtil::add("UpdaterServiceNotRunning", LLSD(), LLSD(), boost::bind(&MandatoryUpdateMachine::StartingUpdaterService::onButtonClicked, this, _1, _2)); +	mMachine.getNotificationsInterface().add("UpdaterServiceNotRunning", LLSD(), LLSD(), boost::bind(&MandatoryUpdateMachine::StartingUpdaterService::onButtonClicked, this, _1, _2));  } diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h index b0247da7c8..c6773bbf68 100755 --- a/indra/newview/lllogininstance.h +++ b/indra/newview/lllogininstance.h @@ -70,6 +70,7 @@ public:  	void setPlatformInfo(const std::string platform, const std::string platform_version);  	void setNotificationsInterface(LLNotificationsInterface* ni) { mNotifications = ni; } +	LLNotificationsInterface& getNotificationsInterface() const { return *mNotifications; }  	typedef boost::function<void()> UpdaterLauncherCallback;  	void setUpdaterLauncher(const UpdaterLauncherCallback& ulc) { mUpdaterLauncher = ulc; } diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp index cd6473921d..b5fd3df0f3 100755 --- a/indra/newview/llmachineid.cpp +++ b/indra/newview/llmachineid.cpp @@ -88,7 +88,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Failed to initialize security. Error code = 0x"  << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Failed to initialize security. Error code = 0x"  << hex << hres << LL_ENDL;              CoUninitialize();              return 1;                    // Program has failed.          } @@ -106,7 +106,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << LL_ENDL;              CoUninitialize();              return 1;                 // Program has failed.          } @@ -132,7 +132,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Could not connect. Error code = 0x"  << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Could not connect. Error code = 0x"  << hex << hres << LL_ENDL;              pLoc->Release();                   CoUninitialize();              return 1;                // Program has failed. @@ -157,7 +157,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Could not set proxy blanket. Error code = 0x"   << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Could not set proxy blanket. Error code = 0x"   << hex << hres << LL_ENDL;              pSvc->Release();              pLoc->Release();                   CoUninitialize(); @@ -178,7 +178,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Query for operating system name failed." << " Error code = 0x"  << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Query for operating system name failed." << " Error code = 0x"  << hex << hres << LL_ENDL;              pSvc->Release();              pLoc->Release();              CoUninitialize(); @@ -205,7 +205,7 @@ S32 LLMachineID::init()              // Get the value of the Name property              hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0); -            LL_DEBUGS("AppInit") << " Serial Number : " << vtProp.bstrVal << LL_ENDL; +            LL_INFOS("AppInit") << " Serial Number : " << vtProp.bstrVal << LL_ENDL;              // use characters in the returned Serial Number to create a byte array of size len              BSTR serialNumber ( vtProp.bstrVal);              unsigned int j = 0; @@ -252,7 +252,7 @@ S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len)      if (has_static_unique_id)      {          memcpy ( unique_id, &static_unique_id, len); -        LL_DEBUGS("AppInit") << "UniqueID: 0x"; +        LL_INFOS_ONCE("AppInit") << "UniqueID: 0x";          // Code between here and LL_ENDL is not executed unless the LL_DEBUGS          // actually produces output          for (size_t i = 0; i < len; ++i) diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index 0935691ebc..8567180dd6 100755 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -521,8 +521,8 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const std::string  	std::string val_string;  	std::string fraction_string; -	F32 val_to_print = llround(value, 0.001f); -	S32 fractional_portion = llround(fmodf(llabs(val_to_print), 1.f) * 100.f); +	F32 val_to_print = ll_round(value, 0.001f); +	S32 fractional_portion = ll_round(fmodf(llabs(val_to_print), 1.f) * 100.f);  	if (val_to_print < 0.f)  	{  		if (fractional_portion == 0) diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp index b2350e5a75..f172aa0955 100755 --- a/indra/newview/llmaniprotate.cpp +++ b/indra/newview/llmaniprotate.cpp @@ -368,9 +368,9 @@ void LLManipRotate::render()  	LLQuaternion object_rot = first_object->getRotationEdit();  	object_rot.getEulerAngles(&(euler_angles.mV[VX]), &(euler_angles.mV[VY]), &(euler_angles.mV[VZ]));  	euler_angles *= RAD_TO_DEG; -	euler_angles.mV[VX] = llround(fmodf(euler_angles.mV[VX] + 360.f, 360.f), 0.05f); -	euler_angles.mV[VY] = llround(fmodf(euler_angles.mV[VY] + 360.f, 360.f), 0.05f); -	euler_angles.mV[VZ] = llround(fmodf(euler_angles.mV[VZ] + 360.f, 360.f), 0.05f); +	euler_angles.mV[VX] = ll_round(fmodf(euler_angles.mV[VX] + 360.f, 360.f), 0.05f); +	euler_angles.mV[VY] = ll_round(fmodf(euler_angles.mV[VY] + 360.f, 360.f), 0.05f); +	euler_angles.mV[VZ] = ll_round(fmodf(euler_angles.mV[VZ] + 360.f, 360.f), 0.05f);  	renderXYZ(euler_angles);  } @@ -1524,7 +1524,6 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )  				F32 mouse_angle = fmodf(atan2(projected_mouse * axis1, projected_mouse * axis2) * RAD_TO_DEG + 360.f, 360.f);  				F32 relative_mouse_angle = fmodf(mouse_angle + (SNAP_ANGLE_DETENTE / 2), SNAP_ANGLE_INCREMENT); -				//fmodf(llround(mouse_angle * RAD_TO_DEG, 7.5f) + 360.f, 360.f);  				LLVector3 object_axis;  				getObjectAxisClosestToMouse(object_axis); @@ -1608,7 +1607,6 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )  			F32 mouse_angle = fmodf(atan2(projected_mouse * axis1, projected_mouse * axis2) * RAD_TO_DEG + 360.f, 360.f);  			F32 relative_mouse_angle = fmodf(mouse_angle + (SNAP_ANGLE_DETENTE / 2), SNAP_ANGLE_INCREMENT); -			//fmodf(llround(mouse_angle * RAD_TO_DEG, 7.5f) + 360.f, 360.f);  			LLVector3 object_axis;  			getObjectAxisClosestToMouse(object_axis); diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 52222c3727..407613d32c 100755 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -228,8 +228,6 @@ void LLManipScale::render()  		const F32 BOX_HANDLE_BASE_SIZE		= 50.0f;   // box size in pixels = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR  		const F32 BOX_HANDLE_BASE_FACTOR	= 0.2f; -		LLVector3 center_agent = gAgent.getPosAgentFromGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal()); -  		if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)  		{  			for (S32 i = 0; i < NUM_MANIPULATORS; i++) @@ -1536,8 +1534,8 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)  	mScaleSnapUnit1 = mScaleSnapUnit1 / (mSnapDir1 * mScaleDir);  	mScaleSnapUnit2 = mScaleSnapUnit2 / (mSnapDir2 * mScaleDir); -	mTickPixelSpacing1 = llround((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir1).length()); -	mTickPixelSpacing2 = llround((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir2).length()); +	mTickPixelSpacing1 = ll_round((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir1).length()); +	mTickPixelSpacing2 = ll_round((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir2).length());  	if (uniform)  	{ @@ -1608,8 +1606,8 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		F32 grid_offset2 = fmodf(dist_grid_axis, smallest_subdivision2);  		// how many smallest grid units are we away from largest grid scale? -		S32 sub_div_offset_1 = llround(fmod(dist_grid_axis - grid_offset1, mScaleSnapUnit1 / sGridMinSubdivisionLevel) / smallest_subdivision1); -		S32 sub_div_offset_2 = llround(fmod(dist_grid_axis - grid_offset2, mScaleSnapUnit2 / sGridMinSubdivisionLevel) / smallest_subdivision2); +		S32 sub_div_offset_1 = ll_round(fmod(dist_grid_axis - grid_offset1, mScaleSnapUnit1 / sGridMinSubdivisionLevel) / smallest_subdivision1); +		S32 sub_div_offset_2 = ll_round(fmod(dist_grid_axis - grid_offset2, mScaleSnapUnit2 / sGridMinSubdivisionLevel) / smallest_subdivision2);  		S32 num_ticks_per_side1 = llmax(1, lltrunc(0.5f * mSnapGuideLength / smallest_subdivision1));  		S32 num_ticks_per_side2 = llmax(1, lltrunc(0.5f * mSnapGuideLength / smallest_subdivision2)); @@ -1663,7 +1661,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		LLVector2 screen_translate_axis(llabs(mScaleDir * LLViewerCamera::getInstance()->getLeftAxis()), llabs(mScaleDir * LLViewerCamera::getInstance()->getUpAxis()));  		screen_translate_axis.normalize(); -		S32 tick_label_spacing = llround(screen_translate_axis * sTickLabelSpacing); +		S32 tick_label_spacing = ll_round(screen_translate_axis * sTickLabelSpacing);  		for (pass = 0; pass < 3; pass++)  		{ @@ -1743,8 +1741,8 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		stop_tick = llmin(max_ticks1, num_ticks_per_side1);  		F32 grid_resolution = mObjectSelection->getSelectType() == SELECT_TYPE_HUD ? 0.25f : llmax(gSavedSettings.getF32("GridResolution"), 0.001f); -		S32 label_sub_div_offset_1 = llround(fmod(dist_grid_axis - grid_offset1, mScaleSnapUnit1  * 32.f) / smallest_subdivision1); -		S32 label_sub_div_offset_2 = llround(fmod(dist_grid_axis - grid_offset2, mScaleSnapUnit2  * 32.f) / smallest_subdivision2); +		S32 label_sub_div_offset_1 = ll_round(fmod(dist_grid_axis - grid_offset1, mScaleSnapUnit1  * 32.f) / smallest_subdivision1); +		S32 label_sub_div_offset_2 = ll_round(fmod(dist_grid_axis - grid_offset2, mScaleSnapUnit2  * 32.f) / smallest_subdivision2);  		for (S32 i = start_tick; i <= stop_tick; i++)  		{ diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index d22672bc16..394db71fb9 100755 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -65,7 +65,6 @@  const S32 NUM_AXES = 3;  const S32 MOUSE_DRAG_SLOP = 2;       // pixels -const F32 HANDLE_HIDE_ANGLE = 0.15f; // radians  const F32 SELECTED_ARROW_SCALE = 1.3f;  const F32 MANIPULATOR_HOTSPOT_START = 0.2f;  const F32 MANIPULATOR_HOTSPOT_END = 1.2f; @@ -1246,7 +1245,7 @@ void LLManipTranslate::renderSnapGuides()  		// find distance to nearest smallest grid unit  		F32 offset_nearest_grid_unit = fmodf(dist_grid_axis, smallest_grid_unit_scale);  		// how many smallest grid units are we away from largest grid scale? -		S32 sub_div_offset = llround(fmodf(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale); +		S32 sub_div_offset = ll_round(fmodf(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale);  		S32 num_ticks_per_side = llmax(1, llfloor(0.5f * guide_size_meters / smallest_grid_unit_scale));  		LLGLDepthTest gls_depth(GL_FALSE); @@ -1361,12 +1360,12 @@ void LLManipTranslate::renderSnapGuides()  			}  		} -		sub_div_offset = llround(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() * 32.f) / smallest_grid_unit_scale); +		sub_div_offset = ll_round(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() * 32.f) / smallest_grid_unit_scale);  		LLVector2 screen_translate_axis(llabs(translate_axis * LLViewerCamera::getInstance()->getLeftAxis()), llabs(translate_axis * LLViewerCamera::getInstance()->getUpAxis()));  		screen_translate_axis.normVec(); -		S32 tick_label_spacing = llround(screen_translate_axis * sTickLabelSpacing); +		S32 tick_label_spacing = ll_round(screen_translate_axis * sTickLabelSpacing);  		// render tickmark values  		for (S32 i = -num_ticks_per_side; i <= num_ticks_per_side; i++) @@ -1404,7 +1403,7 @@ void LLManipTranslate::renderSnapGuides()  				F32 offset_val = 0.5f * tick_offset.mV[ARROW_TO_AXIS[mManipPart]] / getMinGridScale();  				EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode();  				F32 text_highlight = 0.8f; -				if(i - llround(offset_nearest_grid_unit / smallest_grid_unit_scale) == 0 && mInSnapRegime) +				if(i - ll_round(offset_nearest_grid_unit / smallest_grid_unit_scale) == 0 && mInSnapRegime)  				{  					text_highlight = 1.f;  				} diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index f4e08dc790..b96bdd73ff 100755 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -120,8 +120,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :  	if(!getDecoupleTextureSize())  	{ -		S32 screen_width = llround((F32)getRect().getWidth() * LLUI::getScaleFactor().mV[VX]); -		S32 screen_height = llround((F32)getRect().getHeight() * LLUI::getScaleFactor().mV[VY]); +		S32 screen_width = ll_round((F32)getRect().getWidth() * LLUI::getScaleFactor().mV[VX]); +		S32 screen_height = ll_round((F32)getRect().getHeight() * LLUI::getScaleFactor().mV[VY]);  		setTextureSize(screen_width, screen_height);  	} @@ -474,8 +474,8 @@ void LLMediaCtrl::reshape( S32 width, S32 height, BOOL called_from_parent )  {  	if(!getDecoupleTextureSize())  	{ -		S32 screen_width = llround((F32)width * LLUI::getScaleFactor().mV[VX]); -		S32 screen_height = llround((F32)height * LLUI::getScaleFactor().mV[VY]); +		S32 screen_width = ll_round((F32)width * LLUI::getScaleFactor().mV[VX]); +		S32 screen_height = ll_round((F32)height * LLUI::getScaleFactor().mV[VY]);  		// when floater is minimized, these sizes are negative  		if ( screen_height > 0 && screen_width > 0 ) @@ -789,13 +789,13 @@ void LLMediaCtrl::draw()  					{  						// max width, adjusted height  						width = r.getWidth(); -						height = llmin(llmax(llround(width / media_aspect), 0), r.getHeight()); +						height = llmin(llmax(ll_round(width / media_aspect), 0), r.getHeight());  					}  					else  					{  						// max height, adjusted width  						height = r.getHeight(); -						width = llmin(llmax(llround(height * media_aspect), 0), r.getWidth()); +						width = llmin(llmax(ll_round(height * media_aspect), 0), r.getWidth());  					}  				}  				else @@ -879,14 +879,14 @@ void LLMediaCtrl::convertInputCoords(S32& x, S32& y)  		coords_opengl = mMediaSource->getMediaPlugin()->getTextureCoordsOpenGL();  	} -	x = llround((F32)x * LLUI::getScaleFactor().mV[VX]); +	x = ll_round((F32)x * LLUI::getScaleFactor().mV[VX]);  	if ( ! coords_opengl )  	{ -		y = llround((F32)(y) * LLUI::getScaleFactor().mV[VY]); +		y = ll_round((F32)(y) * LLUI::getScaleFactor().mV[VY]);  	}  	else  	{ -		y = llround((F32)(getRect().getHeight() - y) * LLUI::getScaleFactor().mV[VY]); +		y = ll_round((F32)(getRect().getHeight() - y) * LLUI::getScaleFactor().mV[VY]);  	};  } diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp index 691be13610..2fb9e60b29 100755 --- a/indra/newview/llmediadataclient.cpp +++ b/indra/newview/llmediadataclient.cpp @@ -92,7 +92,7 @@ std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue  std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &q);  template <typename T> -static typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type) +typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type)  {  	for(typename T::iterator iter = c.begin(); iter != c.end(); ++iter)  	{ @@ -106,7 +106,7 @@ static typename T::iterator find_matching_request(T &c, const LLMediaDataClient:  }  template <typename T> -static typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type) +typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type)  {  	for(typename T::iterator iter = c.begin(); iter != c.end(); ++iter)  	{ @@ -123,7 +123,7 @@ static typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMedi  // to other elements in the container (such as std::vector).  // If the implementation is changed to use a container with this property, this will need to be revisited.  template <typename T> -static void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type) +void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type)  {  	for(typename T::iterator iter = c.begin(); iter != c.end();)  	{ @@ -171,10 +171,10 @@ bool LLMediaDataClient::isEmpty() const  bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)  { -	if(find_matching_request(mQueue, object->getID()) != mQueue.end()) +	if(find_matching_request(mQueue, object->getID(), LLMediaDataClient::Request::ANY) != mQueue.end())  		return true; -	if(find_matching_request(mUnQueuedRequests, object->getID()) != mUnQueuedRequests.end()) +	if(find_matching_request(mUnQueuedRequests, object->getID(), LLMediaDataClient::Request::ANY) != mUnQueuedRequests.end())  		return true;  	return false; @@ -183,8 +183,8 @@ bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)  void LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)  {  	LL_DEBUGS("LLMediaDataClient") << "removing requests matching ID " << object->getID() << LL_ENDL; -	remove_matching_requests(mQueue, object->getID()); -	remove_matching_requests(mUnQueuedRequests, object->getID()); +	remove_matching_requests(mQueue, object->getID(), LLMediaDataClient::Request::ANY); +	remove_matching_requests(mUnQueuedRequests, object->getID(), LLMediaDataClient::Request::ANY);  }  void LLMediaDataClient::startQueueTimer()  @@ -785,7 +785,7 @@ bool LLObjectMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &ob  	if(LLMediaDataClient::isInQueue(object))  		return true; -	if(find_matching_request(mRoundRobinQueue, object->getID()) != mRoundRobinQueue.end()) +	if(find_matching_request(mRoundRobinQueue, object->getID(), LLMediaDataClient::Request::ANY) != mRoundRobinQueue.end())  		return true;  	return false; @@ -796,7 +796,7 @@ void LLObjectMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr  	// First, call parent impl.  	LLMediaDataClient::removeFromQueue(object); -	remove_matching_requests(mRoundRobinQueue, object->getID()); +	remove_matching_requests(mRoundRobinQueue, object->getID(), LLMediaDataClient::Request::ANY);  }  bool LLObjectMediaDataClient::processQueueTimer() @@ -952,7 +952,7 @@ void LLObjectMediaNavigateClient::enqueue(Request *request)  	}  	// If there's already a matching request in the queue, remove it. -	request_queue_t::iterator iter = find_matching_request(mQueue, request); +	request_queue_t::iterator iter = find_matching_request(mQueue, request, LLMediaDataClient::Request::ANY);  	if(iter != mQueue.end())  	{  		LL_DEBUGS("LLMediaDataClient") << "removing matching queued request " << (**iter) << LL_ENDL; @@ -960,7 +960,7 @@ void LLObjectMediaNavigateClient::enqueue(Request *request)  	}  	else  	{ -		request_set_t::iterator set_iter = find_matching_request(mUnQueuedRequests, request); +		request_set_t::iterator set_iter = find_matching_request(mUnQueuedRequests, request, LLMediaDataClient::Request::ANY);  		if(set_iter != mUnQueuedRequests.end())  		{  			LL_DEBUGS("LLMediaDataClient") << "removing matching unqueued request " << (**set_iter) << LL_ENDL; diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h index 231b883c32..80dd519812 100755 --- a/indra/newview/llmediadataclient.h +++ b/indra/newview/llmediadataclient.h @@ -281,10 +281,9 @@ private:  	bool mQueueTimerIsRunning; -	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); -	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); -	template <typename T> friend void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); - +	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type); +	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type); +	template <typename T> friend void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type);  };  // MediaDataClient specific for the ObjectMedia cap diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp index 252d1b78ea..ff86400a56 100755 --- a/indra/newview/llmorphview.cpp +++ b/indra/newview/llmorphview.cpp @@ -47,17 +47,8 @@  LLMorphView *gMorphView = NULL; - -const F32 EDIT_AVATAR_ORBIT_SPEED = 0.1f; -const F32 EDIT_AVATAR_MAX_CAMERA_PITCH = 0.5f; - -const F32 CAMERA_MOVE_TIME = 0.5f;  const F32 MORPH_NEAR_CLIP = 0.1f; -const F32 CAMERA_DIST_MIN  = 0.4f; -const F32 CAMERA_DIST_MAX  = 4.0f; -const F32 CAMERA_DIST_STEP = 1.5f; -  //-----------------------------------------------------------------------------  // LLMorphView()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 1685a18e26..d7e7f13e87 100755 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -67,7 +67,6 @@ const F32 LLNetMap::MAP_SCALE_MIN = 32;  const F32 LLNetMap::MAP_SCALE_MID = 1024;  const F32 LLNetMap::MAP_SCALE_MAX = 4096; -const F32 MAP_SCALE_INCREMENT = 16;  const F32 MAP_SCALE_ZOOM_FACTOR = 1.04f; // Zoom in factor per click of scroll wheel (4%)  const F32 MIN_DOT_RADIUS = 3.5f;  const F32 DOT_SCALE = 0.75f; @@ -210,7 +209,7 @@ void LLNetMap::draw()  		}  		// figure out where agent is -		S32 region_width = llround(LLWorld::getInstance()->getRegionWidthInMeters()); +		S32 region_width = ll_round(LLWorld::getInstance()->getRegionWidthInMeters());  		for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  			 iter != LLWorld::getInstance()->getRegionList().end(); ++iter) @@ -381,8 +380,8 @@ void LLNetMap::draw()  						(pos_map.mV[VX] >= getRect().getWidth()) ||  						(pos_map.mV[VY] >= getRect().getHeight()) )  					{ -						S32 x = llround( pos_map.mV[VX] ); -						S32 y = llround( pos_map.mV[VY] ); +						S32 x = ll_round( pos_map.mV[VX] ); +						S32 y = ll_round( pos_map.mV[VY] );  						LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10);  					} else  					{ @@ -422,12 +421,12 @@ void LLNetMap::draw()  		// Draw dot for self avatar position  		LLVector3d pos_global = gAgent.getPositionGlobal();  		pos_map = globalPosToView(pos_global); -		S32 dot_width = llround(mDotRadius * 2.f); +		S32 dot_width = ll_round(mDotRadius * 2.f);  		LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage;  		if (you)  		{ -			you->draw(llround(pos_map.mV[VX] - mDotRadius), -					  llround(pos_map.mV[VY] - mDotRadius), +			you->draw(ll_round(pos_map.mV[VX] - mDotRadius), +					  ll_round(pos_map.mV[VY] - mDotRadius),  					  dot_width,  					  dot_width); @@ -531,8 +530,8 @@ void LLNetMap::drawTracking(const LLVector3d& pos_global, const LLColor4& color,  	{  		if (draw_arrow)  		{ -			S32 x = llround( pos_local.mV[VX] ); -			S32 y = llround( pos_local.mV[VY] ); +			S32 x = ll_round( pos_local.mV[VX] ); +			S32 y = ll_round( pos_local.mV[VY] );  			LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10 );  			LLWorldMapView::drawTrackingArrow( getRect(), x, y, color );  		} @@ -548,8 +547,8 @@ void LLNetMap::drawTracking(const LLVector3d& pos_global, const LLColor4& color,  LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y )  { -	x -= llround(getRect().getWidth() / 2 + mCurPan.mV[VX]); -	y -= llround(getRect().getHeight() / 2 + mCurPan.mV[VY]); +	x -= ll_round(getRect().getWidth() / 2 + mCurPan.mV[VX]); +	y -= ll_round(getRect().getHeight() / 2 + mCurPan.mV[VY]);  	LLVector3 pos_local( (F32)x, (F32)y, 0 ); @@ -685,7 +684,7 @@ void LLNetMap::renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &  	LLVector3 local_pos;  	local_pos.setVec( pos - mObjectImageCenterGlobal ); -	S32 diameter_pixels = llround(2 * radius_meters * mObjectMapTPM); +	S32 diameter_pixels = ll_round(2 * radius_meters * mObjectMapTPM);  	renderPoint( local_pos, color, diameter_pixels );  } @@ -701,8 +700,8 @@ void LLNetMap::renderPoint(const LLVector3 &pos_local, const LLColor4U &color,  	const S32 image_width = (S32)mObjectImagep->getWidth();  	const S32 image_height = (S32)mObjectImagep->getHeight(); -	S32 x_offset = llround(pos_local.mV[VX] * mObjectMapTPM + image_width / 2); -	S32 y_offset = llround(pos_local.mV[VY] * mObjectMapTPM + image_height / 2); +	S32 x_offset = ll_round(pos_local.mV[VX] * mObjectMapTPM + image_width / 2); +	S32 y_offset = ll_round(pos_local.mV[VY] * mObjectMapTPM + image_height / 2);  	if ((x_offset < 0) || (x_offset >= image_width))  	{ @@ -781,7 +780,7 @@ void LLNetMap::createObjectImage()  	// ... which is, the diagonal of the rect.  	F32 width = (F32)getRect().getWidth();  	F32 height = (F32)getRect().getHeight(); -	S32 square_size = llround( sqrt(width*width + height*height) ); +	S32 square_size = ll_round( sqrt(width*width + height*height) );  	// Find the least power of two >= the minimum size.  	const S32 MIN_SIZE = 64; diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp index e9970de58c..3418b33d37 100755 --- a/indra/newview/llnotificationstorage.cpp +++ b/indra/newview/llnotificationstorage.cpp @@ -123,14 +123,18 @@ bool LLNotificationStorage::readNotifications(LLSD& pNotificationData, bool is_n  	{  		LLPointer<LLSDParser> parser = new LLSDXMLParser();  		didFileRead = (parser->parse(notifyFile, pNotificationData, LLSDSerialize::SIZE_UNLIMITED) >= 0); +        notifyFile.close(); +  		if (!didFileRead)  		{  			LL_WARNS("LLNotificationStorage") << "Failed to parse open notifications from file '" << mFileName  -				<< "'" << LL_ENDL; +                                              << "'" << LL_ENDL; +            LLFile::remove(filename); +			LL_WARNS("LLNotificationStorage") << "Removed invalid open notifications file '" << mFileName  +                                              << "'" << LL_ENDL;  		}  	} - -	LL_INFOS("LLNotificationStorage") << "ending read '" << filename << "'" << LL_ENDL; +      	if (!didFileRead)  	{  		if(is_new_filename) diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 3cd39d7c7e..878f1af9ef 100755 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -462,9 +462,9 @@ std::string LLPanelClassifiedInfo::createLocationText(  	if (!pos_global.isNull())  	{ -		S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; -		S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; -		S32 region_z = llround((F32)pos_global.mdV[VZ]); +		S32 region_x = ll_round((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; +		S32 region_y = ll_round((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; +		S32 region_z = ll_round((F32)pos_global.mdV[VZ]);  		location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z));  	} diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 717aece8dd..afc1a789c4 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -77,8 +77,6 @@ const S32 MATMEDIA_MEDIA = 1;		// Media  const S32 MATTYPE_DIFFUSE = 0;		// Diffuse material texture  const S32 MATTYPE_NORMAL = 1;		// Normal map  const S32 MATTYPE_SPECULAR = 2;		// Specular map -const S32 ALPHAMODE_NONE = 0;		// No alpha mask applied -const S32 ALPHAMODE_BLEND = 1;		// Alpha blending mode  const S32 ALPHAMODE_MASK = 2;		// Alpha masking mode  const S32 BUMPY_TEXTURE = 18;		// use supplied normal map  const S32 SHINY_TEXTURE = 4;		// use supplied specular map diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 2f7c44f899..a2e136bd5a 100755 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -503,8 +503,8 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)  				land_type = LLTrans::getString("land_type_unknown");  			} -			S32 region_x = llround(global_x) % REGION_WIDTH_UNITS; -			S32 region_y = llround(global_y) % REGION_WIDTH_UNITS; +			S32 region_x = ll_round(global_x) % REGION_WIDTH_UNITS; +			S32 region_y = ll_round(global_y) % REGION_WIDTH_UNITS;  			std::string location = sim_name + llformat(" (%d, %d)", region_x, region_y);  			std::string area; diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h index 32a45100f4..7e4fce80e4 100755 --- a/indra/newview/llpanellandaudio.h +++ b/indra/newview/llpanellandaudio.h @@ -51,7 +51,6 @@ private:  	LLCheckBoxCtrl* mCheckEstateDisabledVoice;  	LLCheckBoxCtrl* mCheckParcelVoiceLocal;	  	LLLineEditor*	mMusicURLEdit; -	LLCheckBoxCtrl* mMusicUrlCheck;  	LLCheckBoxCtrl* mCheckAVSoundAny;  	LLCheckBoxCtrl* mCheckAVSoundGroup; diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index 63ddc05037..a660cb3b21 100755 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -131,9 +131,9 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type)  			if (name.empty())  			{ -				S32 region_x = llround(agent_pos.mV[VX]); -				S32 region_y = llround(agent_pos.mV[VY]); -				S32 region_z = llround(agent_pos.mV[VZ]); +				S32 region_x = ll_round(agent_pos.mV[VX]); +				S32 region_y = ll_round(agent_pos.mV[VY]); +				S32 region_z = ll_round(agent_pos.mV[VZ]);  				std::string region_name;  				LLViewerRegion* region = parcel_mgr->getSelectionRegion(); diff --git a/indra/newview/llpanellandmedia.h b/indra/newview/llpanellandmedia.h index 0e6292a25e..63cfa01470 100755 --- a/indra/newview/llpanellandmedia.h +++ b/indra/newview/llpanellandmedia.h @@ -59,12 +59,10 @@ private:  	LLButton*		mSetURLButton;  	LLSpinCtrl*		mMediaHeightCtrl;  	LLSpinCtrl*		mMediaWidthCtrl; -	LLTextBox*		mMediaResetCtrlLabel;  	LLTextBox*		mMediaSizeCtrlLabel;  	LLTextureCtrl*	mMediaTextureCtrl;  	LLCheckBoxCtrl*	mMediaAutoScaleCheck;  	LLCheckBoxCtrl*	mMediaLoopCheck; -	LLCheckBoxCtrl* mMediaUrlCheck;  	LLHandle<LLFloater>	mURLEntryFloater; diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 34f3bbf73e..cc8c3edd51 100755 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -75,9 +75,6 @@  #include "llsdserialize.h" -const S32 BLACK_BORDER_HEIGHT = 160; -const S32 MAX_PASSWORD = 16; -  LLPanelLogin *LLPanelLogin::sInstance = NULL;  BOOL LLPanelLogin::sCapslockDidNotification = FALSE; @@ -175,7 +172,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	mUsernameLength(0),  	mPasswordLength(0),  	mLocationLength(0), -	mFavoriteSelected(false),  	mShowFavorites(false)  {  	setBackgroundVisible(FALSE); @@ -196,7 +192,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	}  	else  	{ -	buildFromFile( "panel_login.xml"); +		buildFromFile( "panel_login.xml");  	}  	reshape(rect.getWidth(), rect.getHeight()); @@ -204,22 +200,18 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	LLLineEditor* password_edit(getChild<LLLineEditor>("password_edit"));  	password_edit->setKeystrokeCallback(onPassKey, this);  	// STEAM-14: When user presses Enter with this field in focus, initiate login -	password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLast, this)); +	password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, this));  	// change z sort of clickable text to be behind buttons  	sendChildToBack(getChildView("forgot_password_text"));  	LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo");  	updateLocationSelectorsVisibility(); // separate so that it can be called from preferences +	favorites_combo->setReturnCallback(boost::bind(&LLPanelLogin::onClickConnect, this));  	favorites_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this)); -	favorites_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectFavorite, this));  	LLComboBox* server_choice_combo = getChild<LLComboBox>("server_combo");  	server_choice_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectServer, this)); - -	LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit"); -	location_edit->setKeystrokeCallback(boost::bind(&LLPanelLogin::onLocationEditChanged, this, _1), NULL); -	location_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLocation, this));  	// Load all of the grids, sorted, and then add a bar and the current grid at the top  	server_choice_combo->removeall(); @@ -267,9 +259,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  		LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed  	} -	childSetAction("connect_btn", onClickConnectLast, this); -	childSetAction("connect_favorite_btn", onClickConnectFavorite, this); -	childSetAction("connect_location_btn", onClickConnectLocation, this); +	childSetAction("connect_btn", onClickConnect, this);  	LLButton* def_btn = getChild<LLButton>("connect_btn");  	setDefaultBtn(def_btn); @@ -303,7 +293,7 @@ void LLPanelLogin::addFavoritesToStartLocation()  	LLComboBox* combo = getChild<LLComboBox>("start_location_combo");  	if (!combo) return;  	int num_items = combo->getItemCount(); -	for (int i = num_items - 1; i > 0; i--) +	for (int i = num_items - 1; i > 1; i--)  	{  		combo->remove(i);  	} @@ -318,10 +308,10 @@ void LLPanelLogin::addFavoritesToStartLocation()  	LLSD fav_llsd;  	llifstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (!file.is_open())  	{ -		file.open(old_filename); +		file.open(old_filename.c_str());  		if (!file.is_open()) return;  	}  	LLSDSerialize::fromXML(fav_llsd, file); @@ -351,6 +341,10 @@ void LLPanelLogin::addFavoritesToStartLocation()  			{  				mShowFavorites = true;  				combo->add(label, value); +				if ( LLStartUp::getStartSLURL().getSLURLString() == value) +				{ +					combo->selectByValue(value); +				}  			}  		}  		break; @@ -665,7 +659,6 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  	LL_DEBUGS("AppInit")<<new_start_slurl.asString()<<LL_ENDL;  	LLComboBox* location_combo = sInstance->getChild<LLComboBox>("start_location_combo"); -	LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit");  	/*  	 * Determine whether or not the new_start_slurl modifies the grid.  	 * @@ -697,7 +690,10 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  			}  			if ( new_start_slurl.getLocationString().length() )  			{ -				location_edit->setValue(new_start_slurl.getLocationString()); +				if (location_combo->getCurrentIndex() == -1) +				{ +					location_combo->setLabel(new_start_slurl.getLocationString()); +				}  				sInstance->mLocationLength = new_start_slurl.getLocationString().length();  				sInstance->updateLoginButtons();  			} @@ -836,33 +832,6 @@ void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev  // Protected methods  //---------------------------------------------------------------------------  // static -void LLPanelLogin::onClickConnectLast(void *) -{ -	std::string location = LLSLURL::SIM_LOCATION_LAST; -	LLStartUp::setStartSLURL(location); - -	void* unused_parameter = 0; -	LLPanelLogin::sInstance->onClickConnect(unused_parameter); -} - -void LLPanelLogin::onClickConnectFavorite(void *) -{ -	LLPanelLogin::sInstance->onLocationSLURL(); - -	void* unused_parameter = 0; -	LLPanelLogin::sInstance->onClickConnect(unused_parameter); -} - -void LLPanelLogin::onClickConnectLocation(void *) -{ -	std::string location = sInstance->getChild<LLUICtrl>("location_edit")->getValue().asString(); -	LLStartUp::setStartSLURL(location); - -	void* unused_parameter = 0; -	LLPanelLogin::sInstance->onClickConnect(unused_parameter); -} - -// static  void LLPanelLogin::onClickConnect(void *)  {  	if (sInstance && sInstance->mCallback) @@ -1010,60 +979,9 @@ void LLPanelLogin::updateServer()  void LLPanelLogin::updateLoginButtons()  { -	LLButton* last_login_btn = getChild<LLButton>("connect_btn"); -	LLButton* loc_btn = getChild<LLButton>("connect_location_btn"); -	LLButton* fav_btn = getChild<LLButton>("connect_favorite_btn"); +	LLButton* login_btn = getChild<LLButton>("connect_btn"); -	// no username or no password - turn all buttons off -	if ( mUsernameLength == 0 || mPasswordLength == 0 ) -	{ -		last_login_btn->setEnabled(false); -		loc_btn->setEnabled(false); -		fav_btn->setEnabled(false); -	}; - -	// we have a username and a password -	if ( mUsernameLength != 0 && mPasswordLength != 0 ) -	{ -		// last login button always enabled for this case -		last_login_btn->setEnabled(true); - -		// double check status of favorites combo (must be items there and one must be selected to enable button) -		LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo"); -		int num_items = favorites_combo->getItemCount(); -		int selected_index = favorites_combo->getCurrentIndex(); -		if ( num_items > 0 && selected_index >=0 ) -			mFavoriteSelected = true; -		else -			mFavoriteSelected = false; - -		// only turn on favorites login button if one is selected -		fav_btn->setEnabled( mFavoriteSelected ); - -		// only enable location login if there is content there -		if ( mLocationLength > 0 ) -			loc_btn->setEnabled(true); -		else -			loc_btn->setEnabled(false); -	} -} - -void LLPanelLogin::onLocationEditChanged(LLUICtrl* ctrl) -{ -	LLLineEditor* self = (LLLineEditor*)ctrl; -	if (self ) -	{ -		mLocationLength = self->getText().length(); -		updateLoginButtons(); -	} -} - -void LLPanelLogin::onSelectFavorite() -{ -	// no way to unselect a favorite once it's selected (i think) -	mFavoriteSelected = true; - -	updateLoginButtons(); +	login_btn->setEnabled(mUsernameLength != 0 && mPasswordLength != 0);  }  void LLPanelLogin::onSelectServer() @@ -1108,7 +1026,6 @@ void LLPanelLogin::onSelectServer()  				// the grid specified by the location is not this one, so clear the combo  				location_combo->setCurrentByIndex(0); // last location on the new grid  				location_combo->setTextEntry(LLStringUtil::null); -				mFavoriteSelected = true;  			}  		}			  		break; diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index aa63ffabfc..869f2f8d39 100755 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -90,14 +90,9 @@ private:  	friend class LLPanelLoginListener;  	void addFavoritesToStartLocation();  	void addUsersWithFavoritesToUsername(); -	void onLocationEditChanged(LLUICtrl* ctrl); -	void onSelectFavorite();  	void onSelectServer();  	void onLocationSLURL(); -	static void onClickConnectLast(void*); -	static void onClickConnectFavorite(void*); -	static void onClickConnectLocation(void*);  	static void onClickConnect(void*);  	static void onClickNewAccount(void*);  	static void onClickVersion(void*); @@ -120,7 +115,7 @@ private:  	static LLPanelLogin* sInstance;  	static BOOL		sCapslockDidNotification;  	bool			mFirstLoginThisInstall; -	bool mFavoriteSelected; +  	unsigned int mUsernameLength;  	unsigned int mPasswordLength;  	unsigned int mLocationLength; diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index eb037577be..17c0b226d0 100755 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -160,10 +160,9 @@ BOOL LLPanelMainInventory::postBuild()  	}  	// Now load the stored settings from disk, if available. -	std::ostringstream filterSaveName; -	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME); -	LL_INFOS() << "LLPanelMainInventory::init: reading from " << filterSaveName.str() << LL_ENDL; -	llifstream file(filterSaveName.str()); +	std::string filterSaveName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME)); +	LL_INFOS() << "LLPanelMainInventory::init: reading from " << filterSaveName << LL_ENDL; +	llifstream file(filterSaveName.c_str());  	LLSD savedFilterState;  	if (file.is_open())  	{ @@ -243,16 +242,17 @@ LLPanelMainInventory::~LLPanelMainInventory( void )  		}  	} -	std::ostringstream filterSaveName; -	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME); -	llofstream filtersFile(filterSaveName.str()); +	std::string filterSaveName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME)); +	llofstream filtersFile(filterSaveName.c_str());  	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))  	{  		LL_WARNS() << "Could not write to filters save file " << filterSaveName << LL_ENDL;  	}  	else +    {  		filtersFile.close(); - +    } +      	gInventory.removeObserver(this);  	delete mSavedFolderState;  } diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 2fece32449..dcd0aab3ab 100755 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -412,9 +412,9 @@ void LLPanelObject::getState( )  	LLQuaternion object_rot = objectp->getRotationEdit();  	object_rot.getEulerAngles(&(mCurEulerDegrees.mV[VX]), &(mCurEulerDegrees.mV[VY]), &(mCurEulerDegrees.mV[VZ]));  	mCurEulerDegrees *= RAD_TO_DEG; -	mCurEulerDegrees.mV[VX] = fmod(llround(mCurEulerDegrees.mV[VX], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); -	mCurEulerDegrees.mV[VY] = fmod(llround(mCurEulerDegrees.mV[VY], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); -	mCurEulerDegrees.mV[VZ] = fmod(llround(mCurEulerDegrees.mV[VZ], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); +	mCurEulerDegrees.mV[VX] = fmod(ll_round(mCurEulerDegrees.mV[VX], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); +	mCurEulerDegrees.mV[VY] = fmod(ll_round(mCurEulerDegrees.mV[VY], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); +	mCurEulerDegrees.mV[VZ] = fmod(ll_round(mCurEulerDegrees.mV[VZ], OBJECT_ROTATION_PRECISION) + 360.f, 360.f);  	if (enable_rotate)  	{ @@ -1568,9 +1568,9 @@ void LLPanelObject::sendRotation(BOOL btn_down)  	if (mObject.isNull()) return;  	LLVector3 new_rot(mCtrlRotX->get(), mCtrlRotY->get(), mCtrlRotZ->get()); -	new_rot.mV[VX] = llround(new_rot.mV[VX], OBJECT_ROTATION_PRECISION); -	new_rot.mV[VY] = llround(new_rot.mV[VY], OBJECT_ROTATION_PRECISION); -	new_rot.mV[VZ] = llround(new_rot.mV[VZ], OBJECT_ROTATION_PRECISION); +	new_rot.mV[VX] = ll_round(new_rot.mV[VX], OBJECT_ROTATION_PRECISION); +	new_rot.mV[VY] = ll_round(new_rot.mV[VY], OBJECT_ROTATION_PRECISION); +	new_rot.mV[VZ] = ll_round(new_rot.mV[VZ], OBJECT_ROTATION_PRECISION);  	// Note: must compare before conversion to radians  	LLVector3 delta = new_rot - mCurEulerDegrees; diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 55eaf74f74..c1d7a134fa 100755 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -149,7 +149,6 @@ private:  	Updater*				mFriendListUpdater;  	Updater*				mNearbyListUpdater;  	Updater*				mRecentListUpdater; -	Updater*				mFacebookListUpdater;  	Updater*				mButtonsUpdater;      LLHandle< LLFloater >	mPicker;  }; diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index 44cca21a76..8fa9aac024 100755 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -284,9 +284,9 @@ std::string LLPanelPickInfo::createLocationText(const std::string& owner_name, c  	if (!pos_global.isNull())  	{ -		S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; -		S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; -		S32 region_z = llround((F32)pos_global.mdV[VZ]); +		S32 region_x = ll_round((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; +		S32 region_y = ll_round((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; +		S32 region_z = ll_round((F32)pos_global.mdV[VZ]);  		location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z));  	}  	return location_text; diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 4e7c5f6ed2..e62b5a4f1d 100755 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -231,15 +231,15 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)  	// If the region position is zero, grab position from the global  	if(mPosRegion.isExactlyZero())  	{ -		region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS; -		region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS; -		region_z = llround(parcel_data.global_z); +		region_x = ll_round(parcel_data.global_x) % REGION_WIDTH_UNITS; +		region_y = ll_round(parcel_data.global_y) % REGION_WIDTH_UNITS; +		region_z = ll_round(parcel_data.global_z);  	}  	else  	{ -		region_x = llround(mPosRegion.mV[VX]); -		region_y = llround(mPosRegion.mV[VY]); -		region_z = llround(mPosRegion.mV[VZ]); +		region_x = ll_round(mPosRegion.mV[VX]); +		region_y = ll_round(mPosRegion.mV[VY]); +		region_z = ll_round(mPosRegion.mV[VZ]);  	}  	if (!parcel_data.name.empty()) diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index ed91d277dd..e853b2d050 100755 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -551,7 +551,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		// Can't have more than region max tasks, regardless of parcel  		// object bonus factor. -		S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()), +		S32 primitives = llmin(ll_round(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()),  							   (S32)region->getMaxTasks());  		const U8* available = (U8*)getString("available").c_str(); diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 2be96b9b78..4bcd932d4b 100755 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -75,7 +75,6 @@  #include "llviewerwindow.h"  // Constants -static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;  static const F32 PLACE_INFO_UPDATE_INTERVAL = 3.0;  static const std::string AGENT_INFO_TYPE			= "agent";  static const std::string CREATE_LANDMARK_INFO_TYPE	= "create_landmark"; diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 7c0e448a99..f42df221e4 100755 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -630,12 +630,12 @@ void LLPanelPrimMediaControls::updateShape()  		// convert screenspace bbox to pixels (in screen coords)  		LLRect window_rect = gViewerWindow->getWorldViewRectScaled();  		LLCoordGL screen_min; -		screen_min.mX = llround((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (min.mV[VX] + 1.f) * 0.5f); -		screen_min.mY = llround((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (min.mV[VY] + 1.f) * 0.5f); +		screen_min.mX = ll_round((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (min.mV[VX] + 1.f) * 0.5f); +		screen_min.mY = ll_round((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (min.mV[VY] + 1.f) * 0.5f);  		LLCoordGL screen_max; -		screen_max.mX = llround((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (max.mV[VX] + 1.f) * 0.5f); -		screen_max.mY = llround((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (max.mV[VY] + 1.f) * 0.5f); +		screen_max.mX = ll_round((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (max.mV[VX] + 1.f) * 0.5f); +		screen_max.mY = ll_round((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (max.mV[VY] + 1.f) * 0.5f);  		// grow panel so that screenspace bounding box fits inside "media_region" element of panel  		LLRect media_panel_rect; diff --git a/indra/newview/llplacesinventorybridge.h b/indra/newview/llplacesinventorybridge.h index 07d18d03c5..108991210f 100755 --- a/indra/newview/llplacesinventorybridge.h +++ b/indra/newview/llplacesinventorybridge.h @@ -85,6 +85,8 @@ protected:  class LLPlacesInventoryBridgeBuilder : public LLInventoryFolderViewModelBuilder  {  public: +	LLPlacesInventoryBridgeBuilder() {} +  	/*virtual*/ LLInvFVBridge* createBridge(LLAssetType::EType asset_type,  											LLAssetType::EType actual_asset_type,  											LLInventoryType::EType inv_type, diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 92febf6c85..7feb20332b 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -106,9 +106,6 @@ const std::string DEFAULT_SCRIPT_NAME = "New Script"; // *TODO:Translate?  const std::string DEFAULT_SCRIPT_DESC = "(No Description)"; // *TODO:Translate?  // Description and header information - -const S32 MAX_EXPORT_SIZE = 1000; -  const S32 MAX_HISTORY_COUNT = 10;  const F32 LIVE_HELP_REFRESH_TIME = 1.f; diff --git a/indra/newview/llscripteditor.cpp b/indra/newview/llscripteditor.cpp index 81920562a7..cd3a4dfd11 100644 --- a/indra/newview/llscripteditor.cpp +++ b/indra/newview/llscripteditor.cpp @@ -32,7 +32,6 @@  #include "lllocalcliprect.h"  const S32	UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32; -const S32	UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;  static LLDefaultChildRegistry::Register<LLScriptEditor> r("script_editor"); diff --git a/indra/newview/llsearchhistory.cpp b/indra/newview/llsearchhistory.cpp index 7b4bf63740..0ea05a03d6 100755 --- a/indra/newview/llsearchhistory.cpp +++ b/indra/newview/llsearchhistory.cpp @@ -43,7 +43,7 @@ bool LLSearchHistory::load()  {  	// build filename for each user  	std::string resolved_filename = getHistoryFilePath(); -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		return false; @@ -76,7 +76,7 @@ bool LLSearchHistory::save()  	// build filename for each user  	std::string resolved_filename = getHistoryFilePath();  	// open a file for writing -	llofstream file (resolved_filename); +	llofstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		return false; diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index fc9d9f0842..40516f9bbb 100755 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -640,7 +640,7 @@ LLBasicCertificateStore::~LLBasicCertificateStore()  // persist the store  void LLBasicCertificateStore::save()  { -	llofstream file_store(mFilename, llofstream::binary); +	llofstream file_store(mFilename.c_str(), std::ios_base::binary);  	if(!file_store.fail())  	{  		for(iterator cert = begin(); @@ -1331,7 +1331,7 @@ void LLSecAPIBasicHandler::_writeProtectedData()  	std::string tmp_filename = mProtectedDataFilename + ".tmp";  	llofstream protected_data_stream(tmp_filename.c_str(),  -										llofstream::binary); +                                     std::ios_base::binary);  	try  	{ @@ -1364,6 +1364,7 @@ void LLSecAPIBasicHandler::_writeProtectedData()  	}  	catch (...)  	{ +		LL_WARNS() << "LLProtectedDataException(Error writing Protected Data Store)" << LL_ENDL;  		// it's good practice to clean up any secure information on error  		// (even though this file isn't really secure.  Perhaps in the future  		// it may be, however. @@ -1372,20 +1373,35 @@ void LLSecAPIBasicHandler::_writeProtectedData()  		// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData()  		// Decided throwing an exception here was overkill until we figure out why this happens  		//throw LLProtectedDataException("Error writing Protected Data Store"); -		LL_INFOS() << "LLProtectedDataException(Error writing Protected Data Store)" << LL_ENDL;  	} -	// move the temporary file to the specified file location. -	if((((LLFile::isfile(mProtectedDataFilename) != 0) &&  -		 (LLFile::remove(mProtectedDataFilename) != 0))) ||  -	   (LLFile::rename(tmp_filename, mProtectedDataFilename))) +    try +    { +        // move the temporary file to the specified file location. +        if(((   (LLFile::isfile(mProtectedDataFilename) != 0) +             && (LLFile::remove(mProtectedDataFilename) != 0))) +           || (LLFile::rename(tmp_filename, mProtectedDataFilename))) +        { +            LL_WARNS() << "LLProtectedDataException(Could not overwrite protected data store)" << LL_ENDL; +            LLFile::remove(tmp_filename); + +            // EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() +            // Decided throwing an exception here was overkill until we figure out why this happens +            //throw LLProtectedDataException("Could not overwrite protected data store"); +        } +	} +	catch (...)  	{ +		LL_WARNS() << "LLProtectedDataException(Error renaming '" << tmp_filename +                   << "' to '" << mProtectedDataFilename << "')" << LL_ENDL; +		// it's good practice to clean up any secure information on error +		// (even though this file isn't really secure.  Perhaps in the future +		// it may be, however.  		LLFile::remove(tmp_filename); -		// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() +		//crash in LLSecAPIBasicHandler::_writeProtectedData()  		// Decided throwing an exception here was overkill until we figure out why this happens -		//throw LLProtectedDataException("Could not overwrite protected data store"); -		LL_INFOS() << "LLProtectedDataException(Could not overwrite protected data store)" << LL_ENDL; +		//throw LLProtectedDataException("Error writing Protected Data Store");  	}  } @@ -1552,7 +1568,7 @@ std::string LLSecAPIBasicHandler::_legacyLoadPassword()  {  	const S32 HASHED_LENGTH = 32;	  	std::vector<U8> buffer(HASHED_LENGTH); -	llifstream password_file(mLegacyPasswordPath, llifstream::binary); +	llifstream password_file(mLegacyPasswordPath.c_str(), llifstream::binary);  	if(password_file.fail())  	{ diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 5960aaa98e..69c577f445 100755 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -100,14 +100,11 @@ LLViewerObject* getSelectedParentObject(LLViewerObject *object) ;  // Consts  // -const S32 NUM_SELECTION_UNDO_ENTRIES = 200;  const F32 SILHOUETTE_UPDATE_THRESHOLD_SQUARED = 0.02f; -const S32 MAX_ACTION_QUEUE_SIZE = 20;  const S32 MAX_SILS_PER_FRAME = 50;  const S32 MAX_OBJECTS_PER_PACKET = 254;  // For linked sets  const S32 MAX_CHILDREN_PER_TASK = 255; -const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 32;  //  // Globals @@ -1976,7 +1973,7 @@ void LLSelectMgr::selectionSetMedia(U8 media_type, const LLSD &media_data)  					llassert(mMediaData.isMap());  					const LLTextureEntry *texture_entry = object->getTE(te);  					if (!mMediaData.isMap() || -						(NULL != texture_entry) && !texture_entry->hasMedia() && !mMediaData.has(LLMediaEntry::HOME_URL_KEY)) +						((NULL != texture_entry) && !texture_entry->hasMedia() && !mMediaData.has(LLMediaEntry::HOME_URL_KEY)))  					{  						// skip adding/updating media  					} diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index cde05a8d9b..440fce07bb 100755 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -90,9 +90,6 @@ private:  	LLTextBox*					mCurrentLookName;  	LLTextBox*					mOutfitStatus; -	// Used to make sure the user's inventory is in memory. -	LLCurrentlyWornFetchObserver* mFetchWorn; -  	// Search string for filtering landmarks and teleport  	// history locations  	std::string					mFilterSubString; diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 4970eec636..0e23e2ad10 100755 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -70,10 +70,7 @@ static LLPanelInjector<LLSidepanelInventory> t_inventory("sidepanel_inventory");  static const char * const INBOX_BUTTON_NAME = "inbox_btn";  static const char * const INBOX_LAYOUT_PANEL_NAME = "inbox_layout_panel"; -static const char * const MAIN_INVENTORY_LAYOUT_PANEL_NAME = "main_inventory_layout_panel"; -  static const char * const INVENTORY_LAYOUT_STACK_NAME = "inventory_layout_stack"; -  static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox";  // diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp index 3a82233320..728fc69723 100755 --- a/indra/newview/llslurl.cpp +++ b/indra/newview/llslurl.cpp @@ -323,9 +323,9 @@ LLSLURL::LLSLURL(const std::string& grid,  {  	mGrid = grid;  	mRegion = region; -	S32 x = llround( (F32)fmod( position[VX], (F32)REGION_WIDTH_METERS ) ); -	S32 y = llround( (F32)fmod( position[VY], (F32)REGION_WIDTH_METERS ) ); -	S32 z = llround( (F32)position[VZ] ); +	S32 x = ll_round( (F32)fmod( position[VX], (F32)REGION_WIDTH_METERS ) ); +	S32 y = ll_round( (F32)fmod( position[VY], (F32)REGION_WIDTH_METERS ) ); +	S32 z = ll_round( (F32)position[VZ] );  	mType = LOCATION;  	mPosition = LLVector3(x, y, z);  } @@ -379,9 +379,9 @@ std::string LLSLURL::getSLURLString() const  		case LOCATION:  			{  				// lookup the grid -				S32 x = llround( (F32)mPosition[VX] ); -				S32 y = llround( (F32)mPosition[VY] ); -				S32 z = llround( (F32)mPosition[VZ] );	 +				S32 x = ll_round( (F32)mPosition[VX] ); +				S32 y = ll_round( (F32)mPosition[VY] ); +				S32 z = ll_round( (F32)mPosition[VZ] );	  				return LLGridManager::getInstance()->getSLURLBase(mGrid) +   				LLURI::escape(mRegion) + llformat("/%d/%d/%d",x,y,z);   			} @@ -416,9 +416,9 @@ std::string LLSLURL::getLoginString() const  		case LOCATION:  			unescaped_start << "uri:"   			<< mRegion << "&"  -			<< llround(mPosition[0]) << "&"  -			<< llround(mPosition[1]) << "&"  -			<< llround(mPosition[2]); +			<< ll_round(mPosition[0]) << "&"  +			<< ll_round(mPosition[1]) << "&"  +			<< ll_round(mPosition[2]);  			break;  		case HOME_LOCATION:  			unescaped_start << "home"; @@ -462,9 +462,9 @@ std::string LLSLURL::getLocationString() const  {  	return llformat("%s/%d/%d/%d",  					mRegion.c_str(), -					(int)llround(mPosition[0]), -					(int)llround(mPosition[1]), -					(int)llround(mPosition[2]));						  +					(int)ll_round(mPosition[0]), +					(int)ll_round(mPosition[1]), +					(int)ll_round(mPosition[2]));						   }  // static diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index 050b88413d..0ae8a338e0 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -179,14 +179,14 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail              if (image_aspect_ratio > window_aspect_ratio)              {                  // trim off top and bottom -                S32 new_height = llround((F32)getRect().getWidth() / image_aspect_ratio);  +                S32 new_height = ll_round((F32)getRect().getWidth() / image_aspect_ratio);                   rect.mBottom += (getRect().getHeight() - new_height) / 2;                  rect.mTop -= (getRect().getHeight() - new_height) / 2;              }              else if (image_aspect_ratio < window_aspect_ratio)              {                  // trim off left and right -                S32 new_width = llround((F32)getRect().getHeight() * image_aspect_ratio);  +                S32 new_width = ll_round((F32)getRect().getHeight() * image_aspect_ratio);                   rect.mLeft += (getRect().getWidth() - new_width) / 2;                  rect.mRight -= (getRect().getWidth() - new_width) / 2;              } @@ -347,9 +347,9 @@ void LLSnapshotLivePreview::draw()  			LLLocalClipRect clip(getLocalRect());  			{  				// draw diagonal stripe with gradient that passes over screen -				S32 x1 = gViewerWindow->getWindowWidthScaled() * llround((clamp_rescale(shine_interp, 0.f, 1.f, -1.f - SHINE_WIDTH, 1.f))); -				S32 x2 = x1 + llround(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH); -				S32 x3 = x2 + llround(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH); +				S32 x1 = gViewerWindow->getWindowWidthScaled() * ll_round((clamp_rescale(shine_interp, 0.f, 1.f, -1.f - SHINE_WIDTH, 1.f))); +				S32 x2 = x1 + ll_round(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH); +				S32 x3 = x2 + ll_round(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH);  				S32 y1 = 0;  				S32 y2 = gViewerWindow->getWindowHeightScaled(); @@ -431,7 +431,7 @@ void LLSnapshotLivePreview::draw()  			gGL.pushMatrix();  			{  				LLRect& rect = mImageRect[old_image_index]; -				gGL.translatef((F32)rect.mLeft, (F32)rect.mBottom - llround(getRect().getHeight() * 2.f * (fall_interp * fall_interp)), 0.f); +				gGL.translatef((F32)rect.mLeft, (F32)rect.mBottom - ll_round(getRect().getHeight() * 2.f * (fall_interp * fall_interp)), 0.f);  				gGL.rotatef(-45.f * fall_interp, 0.f, 0.f, 1.f);  				gGL.begin(LLRender::QUADS);  				{ @@ -485,13 +485,13 @@ BOOL LLSnapshotLivePreview::setThumbnailImageSize()  	{  		// image too wide, shrink to width  		mThumbnailWidth = max_width; -		mThumbnailHeight = llround((F32)max_width / aspect_ratio); +		mThumbnailHeight = ll_round((F32)max_width / aspect_ratio);  	}  	else  	{  		// image too tall, shrink to height  		mThumbnailHeight = max_height; -		mThumbnailWidth = llround((F32)max_height * aspect_ratio); +		mThumbnailWidth = ll_round((F32)max_height * aspect_ratio);  	}  	if (mThumbnailWidth > width || mThumbnailHeight > height) diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index eedb829b48..2d4b23d892 100755 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -94,16 +94,11 @@ extern S32 MENU_BAR_HEIGHT;  // TODO: these values ought to be in the XML too -const S32 MENU_PARCEL_SPACING = 1;	// Distance from right of menu item to parcel information  const S32 SIM_STAT_WIDTH = 8; -const F32 SIM_WARN_FRACTION = 0.75f; -const F32 SIM_FULL_FRACTION = 0.98f;  const LLColor4 SIM_OK_COLOR(0.f, 1.f, 0.f, 1.f);  const LLColor4 SIM_WARN_COLOR(1.f, 1.f, 0.f, 1.f);  const LLColor4 SIM_FULL_COLOR(1.f, 0.f, 0.f, 1.f);  const F32 ICON_TIMER_EXPIRY		= 3.f; // How long the balance and health icons should flash after a change. -const F32 ICON_FLASH_FREQUENCY	= 2.f; -const S32 TEXT_HEIGHT = 18;  static void onClickVolume(void*); diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp index e75af8db53..503dd6747d 100755 --- a/indra/newview/llsurface.cpp +++ b/indra/newview/llsurface.cpp @@ -1232,10 +1232,10 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y,  	S32 x_begin, y_begin, x_end, y_end; -	x_begin = llround(x * scale_inv); -	y_begin = llround(y * scale_inv); -	x_end = llround((x + width) * scale_inv); -	y_end = llround((y + width) * scale_inv); +	x_begin = ll_round(x * scale_inv); +	y_begin = ll_round(y * scale_inv); +	x_end = ll_round((x + width) * scale_inv); +	y_end = ll_round((y + width) * scale_inv);  	if (x_end > tex_width)  	{ @@ -1283,9 +1283,9 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y,  				// Want non-linear curve for transparency gradient  				coloru = MAX_WATER_COLOR;  				const F32 frac = 1.f - 2.f/(2.f - (height - WATER_HEIGHT)); -				S32 alpha = 64 + llround((255-64)*frac); +				S32 alpha = 64 + ll_round((255-64)*frac); -				alpha = llmin(llround((F32)MAX_WATER_COLOR.mV[3]), alpha); +				alpha = llmin(ll_round((F32)MAX_WATER_COLOR.mV[3]), alpha);  				alpha = llmax(64, alpha);  				coloru.mV[3] = alpha; diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp index a763d42a8d..802dff1ead 100644 --- a/indra/newview/llsyntaxid.cpp +++ b/indra/newview/llsyntaxid.cpp @@ -83,7 +83,7 @@ public:  		const std::string xml = str.str();  		// save the str to disk, usually to the cache. -		llofstream file(mFileSpec, std::ios_base::out); +		llofstream file(mFileSpec.c_str(), std::ios_base::out);  		file.write(xml.c_str(), str.str().size());  		file.close(); @@ -269,7 +269,7 @@ void LLSyntaxIdLSL::loadKeywordsIntoLLSD()  {  	LLSD content;  	llifstream file; -	file.open(mFullFileSpec); +	file.open(mFullFileSpec.c_str());  	if (file.is_open())  	{  		if (LLSDSerialize::fromXML(content, file) != LLSDParser::PARSE_FAILURE) diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp index f88f88a4fa..8a5704939a 100755 --- a/indra/newview/llteleporthistorystorage.cpp +++ b/indra/newview/llteleporthistorystorage.cpp @@ -164,7 +164,7 @@ void LLTeleportHistoryStorage::save()  	std::string resolvedFilename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);  	// open the history file for writing -	llofstream file (resolvedFilename); +	llofstream file(resolvedFilename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't open teleport history file \"" << mFilename << "\" for writing" << LL_ENDL; @@ -186,7 +186,7 @@ void LLTeleportHistoryStorage::load()  	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);  	// open the history file for reading -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't load teleport history from file \"" << mFilename << "\"" << LL_ENDL; diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 374c18b30d..717807f513 100755 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -72,12 +72,6 @@  #include "llfloaterreg.h"  #include "lllocalbitmaps.h" -static const S32 HPAD = 4; -static const S32 VPAD = 4; -static const S32 LINE = 16; -static const S32 FOOTER_HEIGHT = 100; -static const S32 BORDER_PAD = HPAD; -static const S32 TEXTURE_INVENTORY_PADDING = 30;  static const F32 CONTEXT_CONE_IN_ALPHA = 0.0f;  static const F32 CONTEXT_CONE_OUT_ALPHA = 1.f;  static const F32 CONTEXT_FADE_TIME = 0.08f; diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index acd4cf2d8d..fab4203ec3 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -340,7 +340,7 @@ private:  		// Threads:  Ttf  		DecodeResponder(LLTextureFetch* fetcher, const LLUUID& id, LLTextureFetchWorker* worker) -			: mFetcher(fetcher), mID(id), mWorker(worker) +			: mFetcher(fetcher), mID(id)  		{  		} @@ -356,7 +356,6 @@ private:  	private:  		LLTextureFetch* mFetcher;  		LLUUID mID; -		LLTextureFetchWorker* mWorker; // debug only (may get deleted from under us, use mFetcher/mID)  	};  	struct Compare diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index c82894a5cc..0a9453534b 100755 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -48,7 +48,6 @@  const S32 MAX_ALLOWED_MSG_WIDTH = 400;  const F32 DEFAULT_BUTTON_DELAY = 0.5f; -const S32 MSG_PAD = 8;  /*static*/ LLControlGroup* LLToastAlertPanel::sSettings = NULL;  /*static*/ LLToastAlertPanel::URLLoader* LLToastAlertPanel::sURLLoader; diff --git a/indra/newview/lltoastgroupnotifypanel.h b/indra/newview/lltoastgroupnotifypanel.h index 431fd32da2..269c23798c 100755 --- a/indra/newview/lltoastgroupnotifypanel.h +++ b/indra/newview/lltoastgroupnotifypanel.h @@ -60,8 +60,6 @@ private:  	static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT; -	LLButton* mSaveInventoryBtn; -  	LLUUID mGroupID;  	LLOfferInfo* mInventoryOffer;  }; diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp index e3eb8ba7af..0a0bfaf58b 100755 --- a/indra/newview/lltoolbrush.cpp +++ b/indra/newview/lltoolbrush.cpp @@ -65,8 +65,7 @@ const std::string REGION_BLOCKS_TERRAFORM_MSG = "This region does not allow terr  const S32 LAND_BRUSH_SIZE_COUNT = 3;  const F32 LAND_BRUSH_SIZE[LAND_BRUSH_SIZE_COUNT] = {1.0f, 2.0f, 4.0f}; -const S32 LAND_STEPS = 3; -const F32 LAND_METERS_PER_SECOND = 1.0f; +  enum  {  	E_LAND_LEVEL	= 0, diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp index 4bda9072d0..5a63f6e286 100755 --- a/indra/newview/lltoolcomp.cpp +++ b/indra/newview/lltoolcomp.cpp @@ -52,14 +52,8 @@  #include "llfloatertools.h"  #include "llviewercontrol.h" -const S32 BUTTON_HEIGHT = 16; -const S32 BUTTON_WIDTH_SMALL = 32; -const S32 BUTTON_WIDTH_BIG = 48; -const S32 HPAD = 4; -  extern LLControlGroup gSavedSettings; -  // we use this in various places instead of NULL  static LLPointer<LLTool> sNullTool(new LLTool(std::string("null"), NULL));  diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index b077cad9f8..526f8d1cd8 100755 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -948,8 +948,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info)  				const S32 item_index = mCurItemIndex;  				const EDragAndDropType dad_type = mCargoTypes[item_index];  				// Call the right implementation function -				(U32)callMemberFunction(*this, -										LLDragAndDropDictionary::instance().get(dad_type, target)) +				callMemberFunction(*this, LLDragAndDropDictionary::instance().get(dad_type, target))  					(hit_obj, hit_face, pick_info.mKeyMask, TRUE);  			}  		} diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index c12c106b8b..15f3c36674 100755 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -61,7 +61,6 @@ BOOL gCameraBtnOrbit = FALSE;  BOOL gCameraBtnPan = FALSE;  const S32 SLOP_RANGE = 4; -const F32 FOCUS_OFFSET_FACTOR = 1.f;  //  // Camera - shared functionality diff --git a/indra/newview/lltoolselectland.cpp b/indra/newview/lltoolselectland.cpp index 44c0cb3124..ff991dc9fd 100755 --- a/indra/newview/lltoolselectland.cpp +++ b/indra/newview/lltoolselectland.cpp @@ -219,8 +219,8 @@ void LLToolSelectLand::handleDeselect()  void LLToolSelectLand::roundXY(LLVector3d &vec)  { -	vec.mdV[VX] = llround( vec.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); -	vec.mdV[VY] = llround( vec.mdV[VY], (F64)PARCEL_GRID_STEP_METERS ); +	vec.mdV[VX] = ll_round( vec.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); +	vec.mdV[VY] = ll_round( vec.mdV[VY], (F64)PARCEL_GRID_STEP_METERS );  } diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp index 8eea2b242a..f7064e152a 100755 --- a/indra/newview/llurlhistory.cpp +++ b/indra/newview/llurlhistory.cpp @@ -40,29 +40,32 @@ const int MAX_URL_COUNT = 10;  // static  bool LLURLHistory::loadFile(const std::string& filename)  { +    bool dataloaded = false; +    sHistorySD = LLSD();  	LLSD data; -	{ -		std::string temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter(); - -		llifstream file((temp_str + filename)); - -		if (file.is_open()) -		{ -			LL_INFOS() << "Loading history.xml file at " << filename << LL_ENDL; -			LLSDSerialize::fromXML(data, file); -		} - -		if (data.isUndefined()) -		{ -			LL_INFOS() << "file missing, ill-formed, " -				"or simply undefined; not changing the" -				" file" << LL_ENDL; -			sHistorySD = LLSD(); -			return false; -		} -	} -	sHistorySD = data; -	return true; + +    std::string user_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + filename); + +    llifstream file(user_filename.c_str()); +    if (file.is_open()) +    { +        LLSDSerialize::fromXML(data, file); +        if (data.isUndefined()) +        { +            LL_WARNS() << "error loading " << user_filename << LL_ENDL; +        } +        else +        { +            LL_INFOS() << "Loaded history file at " << user_filename << LL_ENDL; +            sHistorySD = data; +            dataloaded = true; +        } +    } +    else +    { +        LL_INFOS() << "Unable to open history file at " << user_filename << LL_ENDL; +    } +	return dataloaded;  }  // static @@ -76,10 +79,10 @@ bool LLURLHistory::saveFile(const std::string& filename)  	}  	temp_str += gDirUtilp->getDirDelimiter() + filename; -	llofstream out(temp_str); +	llofstream out(temp_str.c_str());  	if (!out.good())  	{ -		LL_WARNS() << "Unable to open " << filename << " for output." << LL_ENDL; +		LL_WARNS() << "Unable to open " << temp_str << " for output." << LL_ENDL;  		return false;  	} diff --git a/indra/newview/llurlwhitelist.cpp b/indra/newview/llurlwhitelist.cpp index 8211ce12f6..3a7285974e 100755 --- a/indra/newview/llurlwhitelist.cpp +++ b/indra/newview/llurlwhitelist.cpp @@ -87,7 +87,7 @@ bool LLUrlWhiteList::load ()  	std::string resolvedFilename = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, mFilename );  	// open a file for reading -	llifstream file ( resolvedFilename ); +	llifstream file(resolvedFilename.c_str());  	if ( file.is_open () )  	{  		// add each line in the file to the list @@ -122,7 +122,7 @@ bool LLUrlWhiteList::save ()  	}  	// open a file for writing -	llofstream file ( resolvedFilename ); +	llofstream file(resolvedFilename.c_str());  	if ( file.is_open () )  	{  		// for each entry we have diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp index 6a8fad0134..5cc7d7bed3 100755 --- a/indra/newview/llversioninfo.cpp +++ b/indra/newview/llversioninfo.cpp @@ -38,8 +38,6 @@   #error "Channel or Version information is undefined"  #endif -const char * const LL_CHANNEL = LL_VIEWER_CHANNEL; -  //  // Set the version numbers in indra/VIEWER_VERSION  // diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index ea9463da04..afa00e3e6e 100755 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -1176,8 +1176,8 @@ LLRect get_whole_screen_region()  	if (zoom_factor > 1.f)  	{  		S32 num_horizontal_tiles = llceil(zoom_factor); -		S32 tile_width = llround((F32)gViewerWindow->getWorldViewWidthScaled() / zoom_factor); -		S32 tile_height = llround((F32)gViewerWindow->getWorldViewHeightScaled() / zoom_factor); +		S32 tile_width = ll_round((F32)gViewerWindow->getWorldViewWidthScaled() / zoom_factor); +		S32 tile_height = ll_round((F32)gViewerWindow->getWorldViewHeightScaled() / zoom_factor);  		int tile_y = sub_region / num_horizontal_tiles;  		int tile_x = sub_region - (tile_y * num_horizontal_tiles); @@ -1471,8 +1471,8 @@ void render_ui_2d()  		int pos_y = sub_region / llceil(zoom_factor);  		int pos_x = sub_region - (pos_y*llceil(zoom_factor));  		// offset for this tile -		LLFontGL::sCurOrigin.mX -= llround((F32)gViewerWindow->getWindowWidthScaled() * (F32)pos_x / zoom_factor); -		LLFontGL::sCurOrigin.mY -= llround((F32)gViewerWindow->getWindowHeightScaled() * (F32)pos_y / zoom_factor); +		LLFontGL::sCurOrigin.mX -= ll_round((F32)gViewerWindow->getWindowWidthScaled() * (F32)pos_x / zoom_factor); +		LLFontGL::sCurOrigin.mY -= ll_round((F32)gViewerWindow->getWindowHeightScaled() * (F32)pos_y / zoom_factor);  	}  	stop_glerror(); diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index 9766a25521..ada829eb4b 100755 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -53,7 +53,6 @@ const F32 FLY_FRAMES = 4;  const F32 NUDGE_TIME = 0.25f;  // in seconds  const S32 NUDGE_FRAMES = 2;  const F32 ORBIT_NUDGE_RATE = 0.05f;  // fraction of normal speed -const F32 YAW_NUDGE_RATE = 0.05f;  // fraction of normal speed  struct LLKeyboardActionRegistry   :	public LLRegistrySingleton<std::string, boost::function<void (EKeystate keystate)>, LLKeyboardActionRegistry> @@ -66,7 +65,7 @@ void agent_jump( EKeystate s )  {  	if( KEYSTATE_UP == s  ) return;  	F32 time = gKeyboard->getCurKeyElapsedTime(); -	S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount()); +	S32 frame_count = ll_round(gKeyboard->getCurKeyElapsedFrameCount());  	if( time < FLY_TIME   		|| frame_count <= FLY_FRAMES  @@ -133,7 +132,7 @@ static void agent_push_forwardbackward( EKeystate s, S32 direction, LLAgent::EDo  	if (KEYSTATE_UP == s) return;  	F32 time = gKeyboard->getCurKeyElapsedTime(); -	S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount()); +	S32 frame_count = ll_round(gKeyboard->getCurKeyElapsedFrameCount());  	if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)  	{ @@ -188,7 +187,7 @@ static void agent_slide_leftright( EKeystate s, S32 direction, LLAgent::EDoubleT  	agent_handle_doubletap_run(s, mode);  	if( KEYSTATE_UP == s ) return;  	F32 time = gKeyboard->getCurKeyElapsedTime(); -	S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount()); +	S32 frame_count = ll_round(gKeyboard->getCurKeyElapsedFrameCount());  	if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)  	{ diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 721ee1f0f5..509227c683 100755 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -924,7 +924,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)  					{  						F32 approximate_interest_dimension = (F32) sqrt(pimpl->getInterest()); -						pimpl->setLowPrioritySizeLimit(llround(approximate_interest_dimension)); +						pimpl->setLowPrioritySizeLimit(ll_round(approximate_interest_dimension));  					}  				}  				else @@ -1278,7 +1278,7 @@ void LLViewerMedia::loadCookieFile()  	}  	// open the file for reading -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't load plugin cookies from file \"" << PLUGIN_COOKIE_FILE_NAME << "\"" << LL_ENDL; @@ -1320,7 +1320,7 @@ void LLViewerMedia::saveCookieFile()  	}  	// open a file for writing -	llofstream file (resolved_filename); +	llofstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't open plugin cookie file \"" << PLUGIN_COOKIE_FILE_NAME << "\" for writing" << LL_ENDL; @@ -2330,8 +2330,8 @@ void LLViewerMediaImpl::scaleTextureCoords(const LLVector2& texture_coords, S32  		texture_y = 1.0 + texture_y;  	// scale x and y to texel units. -	*x = llround(texture_x * mMediaSource->getTextureWidth()); -	*y = llround((1.0f - texture_y) * mMediaSource->getTextureHeight()); +	*x = ll_round(texture_x * mMediaSource->getTextureWidth()); +	*y = ll_round((1.0f - texture_y) * mMediaSource->getTextureHeight());  	// Adjust for the difference between the actual texture height and the amount of the texture in use.  	*y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight()); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 0fbecd5180..5cd92c9920 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -128,10 +128,7 @@ extern void on_new_message(const LLSD& msg);  //  // Constants  // -const F32 BIRD_AUDIBLE_RADIUS = 32.0f; -const F32 SIT_DISTANCE_FROM_TARGET = 0.25f;  const F32 CAMERA_POSITION_THRESHOLD_SQUARED = 0.001f * 0.001f; -static const F32 LOGOUT_REPLY_TIME = 3.f;	// Wait this long after LogoutReply before quitting.  // Determine how quickly residents' scripts can issue question dialogs  // Allow bursts of up to 5 dialogs in 10 seconds. 10*2=20 seconds recovery if throttle kicks in @@ -2411,7 +2408,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  	BOOL is_do_not_disturb = gAgent.isDoNotDisturb();  	BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat)  		// object IMs contain sender object id in session_id (STORM-1209) -		|| dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id); +		|| (dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id));  	BOOL is_owned_by_me = FALSE;  	BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true;  	BOOL accept_im_from_only_friend = gSavedSettings.getBOOL("VoiceCallsFriendsOnly"); @@ -5117,7 +5114,7 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)  	if (object)  	{  		LLVector3 sit_spot = object->getPositionAgent() + (sitPosition * object->getRotation()); -		if (!use_autopilot || isAgentAvatarValid() && gAgentAvatarp->isSitting() && gAgentAvatarp->getRoot() == object->getRoot()) +		if (!use_autopilot || (isAgentAvatarValid() && gAgentAvatarp->isSitting() && gAgentAvatarp->getRoot() == object->getRoot()))  		{  			//we're already sitting on this object, so don't autopilot  		} @@ -7118,8 +7115,6 @@ void process_user_info_reply(LLMessageSystem* msg, void**)  //---------------------------------------------------------------------------  const S32 SCRIPT_DIALOG_MAX_BUTTONS = 12; -const S32 SCRIPT_DIALOG_BUTTON_STR_SIZE = 24; -const S32 SCRIPT_DIALOG_MAX_MESSAGE_SIZE = 512;  const char* SCRIPT_DIALOG_HEADER = "Script Dialog:\n";  bool callback_script_dialog(const LLSD& notification, const LLSD& response) diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 10b28bb6c2..ac3f07fcd8 100755 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -3006,7 +3006,7 @@ void LLViewerObject::processTaskInvFile(void** user_data, S32 error_code, LLExtS  BOOL LLViewerObject::loadTaskInvFile(const std::string& filename)  {  	std::string filename_and_local_path = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, filename); -	llifstream ifs(filename_and_local_path); +	llifstream ifs(filename_and_local_path.c_str());  	if(ifs.good())  	{  		char buffer[MAX_STRING];	/* Flawfinder: ignore */ diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index d574dec11d..d9d4c34fb0 100755 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -281,7 +281,7 @@ S32 LLViewerParcelMgr::getSelectedArea() const  		F64 width = mEastNorth.mdV[VX] - mWestSouth.mdV[VX];  		F64 height = mEastNorth.mdV[VY] - mWestSouth.mdV[VY];  		F32 area = (F32)(width * height); -		rv = llround(area); +		rv = ll_round(area);  	}  	return rv;  } @@ -301,10 +301,10 @@ void LLViewerParcelMgr::writeHighlightSegments(F32 west, F32 south, F32 east,  											   F32 north)  {  	S32 x, y; -	S32 min_x = llround( west / PARCEL_GRID_STEP_METERS ); -	S32 max_x = llround( east / PARCEL_GRID_STEP_METERS ); -	S32 min_y = llround( south / PARCEL_GRID_STEP_METERS ); -	S32 max_y = llround( north / PARCEL_GRID_STEP_METERS ); +	S32 min_x = ll_round( west / PARCEL_GRID_STEP_METERS ); +	S32 max_x = ll_round( east / PARCEL_GRID_STEP_METERS ); +	S32 min_y = ll_round( south / PARCEL_GRID_STEP_METERS ); +	S32 max_y = ll_round( north / PARCEL_GRID_STEP_METERS );  	const S32 STRIDE = mParcelsPerEdge+1; @@ -416,12 +416,12 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectParcelAt(const LLVector3d& pos_  	LLVector3d northeast = pos_global;  	southwest -= LLVector3d( PARCEL_GRID_STEP_METERS/2, PARCEL_GRID_STEP_METERS/2, 0 ); -	southwest.mdV[VX] = llround( southwest.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); -	southwest.mdV[VY] = llround( southwest.mdV[VY], (F64)PARCEL_GRID_STEP_METERS ); +	southwest.mdV[VX] = ll_round( southwest.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); +	southwest.mdV[VY] = ll_round( southwest.mdV[VY], (F64)PARCEL_GRID_STEP_METERS );  	northeast += LLVector3d( PARCEL_GRID_STEP_METERS/2, PARCEL_GRID_STEP_METERS/2, 0 ); -	northeast.mdV[VX] = llround( northeast.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); -	northeast.mdV[VY] = llround( northeast.mdV[VY], (F64)PARCEL_GRID_STEP_METERS ); +	northeast.mdV[VX] = ll_round( northeast.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); +	northeast.mdV[VY] = ll_round( northeast.mdV[VY], (F64)PARCEL_GRID_STEP_METERS );  	// Snap to parcel  	return selectLand( southwest, northeast, TRUE ); diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index 76418ad6a6..230bdca4ef 100755 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -42,8 +42,6 @@  #include "llvovolume.h"  const F32 PART_SIM_BOX_SIDE = 16.f; -const F32 PART_SIM_BOX_OFFSET = 0.5f*PART_SIM_BOX_SIDE; -const F32 PART_SIM_BOX_RAD = 0.5f*F_SQRT3*PART_SIM_BOX_SIDE;  //static  S32 LLViewerPartSim::sMaxParticleCount = 0; @@ -311,7 +309,6 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)  		if (part->mFlags & LLPartData::LL_PART_WIND_MASK)  		{ -			LLVector3 tempVel(part->mVelocity);  			part->mVelocity *= 1.f - 0.1f*dt;  			part->mVelocity += 0.1f*dt*regionp->mWind.getVelocity(regionp->getPosRegionFromAgent(part->mPosAgent));  		} @@ -391,7 +388,7 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)  		}  		// Do glow interpolation -		part->mGlow.mV[3] = (U8) llround(lerp(part->mStartGlow, part->mEndGlow, frac)*255.f); +		part->mGlow.mV[3] = (U8) ll_round(lerp(part->mStartGlow, part->mEndGlow, frac)*255.f);  		// Set the last update time to now.  		part->mLastUpdateTime = cur_time; diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp index a7fd2e0fe4..7efa821bbf 100755 --- a/indra/newview/llviewerpartsource.cpp +++ b/indra/newview/llviewerpartsource.cpp @@ -313,7 +313,7 @@ void LLViewerPartSourceScript::update(const F32 dt)  			part->mStartGlow = mPartSysData.mPartData.mStartGlow;  			part->mEndGlow = mPartSysData.mPartData.mEndGlow; -			part->mGlow = LLColor4U(0, 0, 0, (U8) llround(part->mStartGlow*255.f)); +			part->mGlow = LLColor4U(0, 0, 0, (U8) ll_round(part->mStartGlow*255.f));  			if (mPartSysData.mPattern & LLPartSysData::LL_PART_SRC_PATTERN_DROP)  			{ diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 7ebe12cc07..92e07c52a5 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -88,8 +88,6 @@  // out the two lists of capabilities for analysis.  //#define DEBUG_CAPS_GRANTS -const F32 WATER_TEXTURE_SCALE = 8.f;			//  Number of times to repeat the water texture across a region -const S16 MAX_MAP_DIST = 10;  // The server only keeps our pending agent info for 60 seconds.  // We want to allow for seed cap retry, but its not useful after that 60 seconds.  // Give it 3 chances, each at 18 seconds to give ourselves a few seconds to connect anyways if we give up. @@ -1937,7 +1935,6 @@ public:  			}  			else if( i != you_index)  			{ -				U32 loc = x << 16 | y << 8 | z; loc = loc;  				U32 pos = 0x0;  				pos |= x;  				pos <<= 8; @@ -2728,15 +2725,12 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("FlickrConnect");  	capabilityNames.append("TwitterConnect"); -	if (gSavedSettings.getBOOL("UseHTTPInventory")) -	{	 -		capabilityNames.append("FetchLib2"); -		capabilityNames.append("FetchLibDescendents2"); -		capabilityNames.append("FetchInventory2"); -		capabilityNames.append("FetchInventoryDescendents2"); -		capabilityNames.append("IncrementCOFVersion"); -		AISCommand::getCapabilityNames(capabilityNames); -	} +	capabilityNames.append("FetchLib2"); +	capabilityNames.append("FetchLibDescendents2"); +	capabilityNames.append("FetchInventory2"); +	capabilityNames.append("FetchInventoryDescendents2"); +	capabilityNames.append("IncrementCOFVersion"); +	AISCommand::getCapabilityNames(capabilityNames);  	capabilityNames.append("GetDisplayNames");  	capabilityNames.append("GetMesh"); diff --git a/indra/newview/llviewertexlayer.cpp b/indra/newview/llviewertexlayer.cpp index 65ba3fb6e5..66e5742911 100755 --- a/indra/newview/llviewertexlayer.cpp +++ b/indra/newview/llviewertexlayer.cpp @@ -39,9 +39,6 @@  #include "pipeline.h"  #include "llviewercontrol.h" -static const S32 BAKE_UPLOAD_ATTEMPTS = 7; -static const F32 BAKE_UPLOAD_RETRY_DELAY = 2.f; // actual delay grows by power of 2 each attempt -  // runway consolidate  extern std::string self_av_string(); diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 0c4f55d704..85ae64aeff 100755 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -169,8 +169,7 @@ public:  		mImage(image),  		mLabel(utf8str_to_wstring(inv_item->getName())),  		mItem(inv_item), -		mEditor(editor), -		mHasMouseHover(false) +		mEditor(editor)  	{  		mStyle = new LLStyle(LLStyle::Params().font(LLFontGL::getFontSansSerif())); @@ -262,8 +261,6 @@ private:  	std::string		mToolTip;  	LLPointer<LLInventoryItem> mItem;  	LLTextEditor&	mEditor; -	bool			mHasMouseHover; -  }; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index e684be4361..a957367f61 100755 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -452,7 +452,6 @@ void LLViewerTexture::initClass()  // tuning params  const F32 discard_bias_delta = .25f;  const F32 discard_delta_time = 0.5f; -const S32 min_non_tex_system_mem = (128<<20); // 128 MB  // non-const (used externally  F32 texmem_lower_bound_scale = 0.85f;  F32 texmem_middle_bound_scale = 0.925f; diff --git a/indra/newview/llviewertextureanim.cpp b/indra/newview/llviewertextureanim.cpp index 2b364851a7..9af92d7377 100755 --- a/indra/newview/llviewertextureanim.cpp +++ b/indra/newview/llviewertextureanim.cpp @@ -179,7 +179,7 @@ S32 LLViewerTextureAnim::animateTextures(F32 &off_s, F32 &off_t,  	if (!(mMode & SMOOTH))  	{ -		frame_counter = (F32)llround(frame_counter); +		frame_counter = (F32)ll_round(frame_counter);  	}  	// diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 322a55383a..926c40307b 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -165,7 +165,7 @@ void LLViewerTextureList::doPreloadImages()  static std::string get_texture_list_name()  { -	return std::string("texture_list_") + gSavedSettings.getString("LoginLocation") + ".xml"; +	return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "texture_list_" + gSavedSettings.getString("LoginLocation") + ".xml");  }  void LLViewerTextureList::doPrefetchImages() @@ -178,13 +178,22 @@ void LLViewerTextureList::doPrefetchImages()  	// Pre-fetch textures from last logout  	LLSD imagelist; -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, get_texture_list_name()); +	std::string filename = get_texture_list_name();  	llifstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (file.is_open())  	{ -		LLSDSerialize::fromXML(imagelist, file); -	} +		if ( ! LLSDSerialize::fromXML(imagelist, file) ) +        { +            file.close(); +            LL_WARNS() << "XML parse error reading texture list '" << filename << "'" << LL_ENDL; +            LL_WARNS() << "Removing invalid texture list '" << filename << "'" << LL_ENDL; +            LLFile::remove(filename); +            return; +        } +        file.close(); +	} +    S32 texture_count = 0;  	for (LLSD::array_iterator iter = imagelist.beginArray();  		 iter != imagelist.endArray(); ++iter)  	{ @@ -198,10 +207,12 @@ void LLViewerTextureList::doPrefetchImages()  			LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, texture_type);  			if (image)  			{ +                texture_count += 1;  				image->addTextureStats((F32)pixel_area);  			}  		}  	} +    LL_DEBUGS() << "fetched " << texture_count << " images from " << filename << LL_ENDL;  }  /////////////////////////////////////////////////////////////////////////////// @@ -261,9 +272,10 @@ void LLViewerTextureList::shutdown()  	if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "").empty())  	{ -		std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, get_texture_list_name()); +		std::string filename = get_texture_list_name();  		llofstream file; -		file.open(filename); +		file.open(filename.c_str()); +        LL_DEBUGS() << "saving " << imagelist.size() << " image list entries" << LL_ENDL;  		LLSDSerialize::toPrettyXML(imagelist, file);  	} @@ -447,7 +459,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,  	// If the image is not found, creates new image and  	// enqueues a request for transmission -	if ((&image_id == NULL) || image_id.isNull()) +	if (image_id.isNull())  	{  		return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI));  	} @@ -1258,9 +1270,6 @@ LLPointer<LLImageJ2C> LLViewerTextureList::convertToUploadFile(LLPointer<LLImage  	return compressedImage;  } -const S32 MIN_VIDEO_RAM = 32; -const S32 MAX_VIDEO_RAM = 512; // 512MB max for performance reasons. -  // Returns min setting for TextureMemory (in MB)  S32Megabytes LLViewerTextureList::getMinVideoRamSetting()  { diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index 2f84d0947a..fbbfe9a7d4 100755 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -61,8 +61,6 @@ typedef	void (*LLImageCallback)(BOOL success,  class LLViewerTextureList  { -    LOG_CLASS(LLViewerTextureList); -  	friend class LLTextureView;  	friend class LLViewerTextureManager;  	friend class LLLocalBitmap; @@ -206,6 +204,7 @@ private:  private:  	static S32 sNumImages;  	static void (*sUUIDCallback)(void**, const LLUUID &); +    LOG_CLASS(LLViewerTextureList);  };  class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIImageList> diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp index 7de82a4710..0f73515b5d 100755 --- a/indra/newview/llviewerwearable.cpp +++ b/indra/newview/llviewerwearable.cpp @@ -509,18 +509,7 @@ void LLViewerWearable::saveNewAsset() const  	//LL_INFOS() << *this << LL_ENDL;  	const std::string filename = asset_id_to_filename(mAssetID); -	LLFILE* fp = LLFile::fopen(filename, "wb");		/* Flawfinder: ignore */ -	BOOL successful_save = FALSE; -	if(fp && exportFile(fp)) -	{ -		successful_save = TRUE; -	} -	if(fp) -	{ -		fclose(fp); -		fp = NULL; -	} -	if(!successful_save) +	if(! exportFile(filename))  	{  		std::string buffer = llformat("Unable to save '%s' to wearable file.", mName.c_str());  		LL_WARNS() << buffer << LL_ENDL; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 756248a356..e317989f04 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -898,8 +898,8 @@ BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window,  LLCoordGL pos, MASK  	const char* buttonstatestr = "";  	S32 x = pos.mX;  	S32 y = pos.mY; -	x = llround((F32)x / mDisplayScale.mV[VX]); -	y = llround((F32)y / mDisplayScale.mV[VY]); +	x = ll_round((F32)x / mDisplayScale.mV[VX]); +	y = ll_round((F32)y / mDisplayScale.mV[VY]);  	// only send mouse clicks to UI if UI is visible  	if(gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) @@ -1065,8 +1065,8 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window,  LLCoordGL pos, MASK  {  	S32 x = pos.mX;  	S32 y = pos.mY; -	x = llround((F32)x / mDisplayScale.mV[VX]); -	y = llround((F32)y / mDisplayScale.mV[VY]); +	x = ll_round((F32)x / mDisplayScale.mV[VX]); +	y = ll_round((F32)y / mDisplayScale.mV[VY]);  	BOOL down = TRUE;  	BOOL handle = handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_RIGHT,down); @@ -1263,8 +1263,8 @@ void LLViewerWindow::handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask  	S32 x = pos.mX;  	S32 y = pos.mY; -	x = llround((F32)x / mDisplayScale.mV[VX]); -	y = llround((F32)y / mDisplayScale.mV[VY]); +	x = ll_round((F32)x / mDisplayScale.mV[VX]); +	y = ll_round((F32)y / mDisplayScale.mV[VY]);  	mMouseInWindow = TRUE; @@ -1722,7 +1722,7 @@ LLViewerWindow::LLViewerWindow(const Params& p)  		LLCoordWindow size;  		mWindow->getSize(&size);  		mWindowRectRaw.set(0, size.mY, size.mX, 0); -		mWindowRectScaled.set(0, llround((F32)size.mY / mDisplayScale.mV[VY]), llround((F32)size.mX / mDisplayScale.mV[VX]), 0); +		mWindowRectScaled.set(0, ll_round((F32)size.mY / mDisplayScale.mV[VY]), ll_round((F32)size.mX / mDisplayScale.mV[VX]), 0);  	}  	LLFontManager::initClass(); @@ -2250,8 +2250,8 @@ void LLViewerWindow::reshape(S32 width, S32 height)  		LLUI::setScaleFactor(mDisplayScale);  		// update our window rectangle -		mWindowRectScaled.mRight = mWindowRectScaled.mLeft + llround((F32)width / mDisplayScale.mV[VX]); -		mWindowRectScaled.mTop = mWindowRectScaled.mBottom + llround((F32)height / mDisplayScale.mV[VY]); +		mWindowRectScaled.mRight = mWindowRectScaled.mLeft + ll_round((F32)width / mDisplayScale.mV[VX]); +		mWindowRectScaled.mTop = mWindowRectScaled.mBottom + ll_round((F32)height / mDisplayScale.mV[VY]);  		setup2DViewport(); @@ -2444,8 +2444,8 @@ void LLViewerWindow::draw()  		microsecondsToTimecodeString(gFrameTime,text);  		const LLFontGL* font = LLFontGL::getFontSansSerif();  		font->renderUTF8(text, 0, -						llround((getWindowWidthScaled()/2)-100.f), -						llround((getWindowHeightScaled()-60.f)), +						ll_round((getWindowWidthScaled()/2)-100.f), +						ll_round((getWindowHeightScaled()-60.f)),  			LLColor4( 1.f, 1.f, 1.f, 1.f ),  			LLFontGL::LEFT, LLFontGL::TOP);  	} @@ -2521,7 +2521,7 @@ void LLViewerWindow::draw()  			const S32 DIST_FROM_TOP = 20;  			LLFontGL::getFontSansSerifBig()->renderUTF8(  				mOverlayTitle, 0, -				llround( getWindowWidthScaled() * 0.5f), +				ll_round( getWindowWidthScaled() * 0.5f),  				getWindowHeightScaled() - DIST_FROM_TOP,  				LLColor4(1, 1, 1, 0.4f),  				LLFontGL::HCENTER, LLFontGL::TOP); @@ -3373,7 +3373,7 @@ void LLViewerWindow::updateMouseDelta()  		fdx = fdx + ((F32) dx - fdx) * llmin(gFrameIntervalSeconds.value()*amount,1.f);  		fdy = fdy + ((F32) dy - fdy) * llmin(gFrameIntervalSeconds.value()*amount,1.f); -		mCurrentMouseDelta.set(llround(fdx), llround(fdy)); +		mCurrentMouseDelta.set(ll_round(fdx), ll_round(fdy));  		mouse_vel.setVec(fdx,fdy);  	}  	else @@ -3488,10 +3488,10 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window)  		new_world_rect.mTop = llmax(new_world_rect.mTop, new_world_rect.mBottom + 1);  		new_world_rect.mRight = llmax(new_world_rect.mRight, new_world_rect.mLeft + 1); -		new_world_rect.mLeft = llround((F32)new_world_rect.mLeft * mDisplayScale.mV[VX]); -		new_world_rect.mRight = llround((F32)new_world_rect.mRight * mDisplayScale.mV[VX]); -		new_world_rect.mBottom = llround((F32)new_world_rect.mBottom * mDisplayScale.mV[VY]); -		new_world_rect.mTop = llround((F32)new_world_rect.mTop * mDisplayScale.mV[VY]); +		new_world_rect.mLeft = ll_round((F32)new_world_rect.mLeft * mDisplayScale.mV[VX]); +		new_world_rect.mRight = ll_round((F32)new_world_rect.mRight * mDisplayScale.mV[VX]); +		new_world_rect.mBottom = ll_round((F32)new_world_rect.mBottom * mDisplayScale.mV[VY]); +		new_world_rect.mTop = ll_round((F32)new_world_rect.mTop * mDisplayScale.mV[VY]);  	}  	if (mWorldViewRectRaw != new_world_rect) @@ -5146,10 +5146,10 @@ void LLViewerWindow::calcDisplayScale()  LLRect 	LLViewerWindow::calcScaledRect(const LLRect & rect, const LLVector2& display_scale)  {  	LLRect res = rect; -	res.mLeft = llround((F32)res.mLeft / display_scale.mV[VX]); -	res.mRight = llround((F32)res.mRight / display_scale.mV[VX]); -	res.mBottom = llround((F32)res.mBottom / display_scale.mV[VY]); -	res.mTop = llround((F32)res.mTop / display_scale.mV[VY]); +	res.mLeft = ll_round((F32)res.mLeft / display_scale.mV[VX]); +	res.mRight = ll_round((F32)res.mRight / display_scale.mV[VX]); +	res.mBottom = ll_round((F32)res.mBottom / display_scale.mV[VY]); +	res.mTop = ll_round((F32)res.mTop / display_scale.mV[VY]);  	return res;  } @@ -5414,8 +5414,8 @@ void LLPickInfo::updateXYCoords()  		LLPointer<LLViewerTexture> imagep = LLViewerTextureManager::getFetchedTexture(tep->getID());  		if(mUVCoords.mV[VX] >= 0.f && mUVCoords.mV[VY] >= 0.f && imagep.notNull())  		{ -			mXYCoords.mX = llround(mUVCoords.mV[VX] * (F32)imagep->getWidth()); -			mXYCoords.mY = llround((1.f - mUVCoords.mV[VY]) * (F32)imagep->getHeight()); +			mXYCoords.mX = ll_round(mUVCoords.mV[VX] * (F32)imagep->getWidth()); +			mXYCoords.mY = ll_round((1.f - mUVCoords.mV[VY]) * (F32)imagep->getHeight());  		}  	}  } @@ -5444,7 +5444,7 @@ void LLPickInfo::getSurfaceInfo()  	if (objectp)  	{ -		if (gViewerWindow->cursorIntersect(llround((F32)mMousePt.mX), llround((F32)mMousePt.mY), 1024.f, +		if (gViewerWindow->cursorIntersect(ll_round((F32)mMousePt.mX), ll_round((F32)mMousePt.mY), 1024.f,  										   objectp, -1, mPickTransparent,  										   &mObjectFace,  										   &intersection, @@ -5486,52 +5486,6 @@ void LLPickInfo::getSurfaceInfo()  	}  } - -/* code to get UV via a special UV render - removed in lieu of raycast method -LLVector2 LLPickInfo::pickUV() -{ -	LLVector2 result(-1.f, -1.f); - -	LLViewerObject* objectp = getObject(); -	if (!objectp) -	{ -		return result; -	} - -	if (mObjectFace > -1 && -		objectp->mDrawable.notNull() && objectp->getPCode() == LL_PCODE_VOLUME && -		mObjectFace < objectp->mDrawable->getNumFaces()) -	{ -		S32 scaled_x = llround((F32)mPickPt.mX * gViewerWindow->getDisplayScale().mV[VX]); -		S32 scaled_y = llround((F32)mPickPt.mY * gViewerWindow->getDisplayScale().mV[VY]); -		const S32 UV_PICK_WIDTH = 5; -		const S32 UV_PICK_HALF_WIDTH = (UV_PICK_WIDTH - 1) / 2; -		U8 uv_pick_buffer[UV_PICK_WIDTH * UV_PICK_WIDTH * 4]; -		LLFace* facep = objectp->mDrawable->getFace(mObjectFace); -		if (facep) -		{ -			LLGLState scissor_state(GL_SCISSOR_TEST); -			scissor_state.enable(); -			LLViewerCamera::getInstance()->setPerspective(FOR_SELECTION, scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH, FALSE); -			//glViewport(scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH); -			glScissor(scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH); - -			glClear(GL_DEPTH_BUFFER_BIT); - -			facep->renderSelectedUV(); - -			glReadPixels(scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH, GL_RGBA, GL_UNSIGNED_BYTE, uv_pick_buffer); -			U8* center_pixel = &uv_pick_buffer[4 * ((UV_PICK_WIDTH * UV_PICK_HALF_WIDTH) + UV_PICK_HALF_WIDTH + 1)]; - -			result.mV[VX] = (F32)((center_pixel[VGREEN] & 0xf) + (16.f * center_pixel[VRED])) / 4095.f; -			result.mV[VY] = (F32)((center_pixel[VGREEN] >> 4) + (16.f * center_pixel[VBLUE])) / 4095.f; -		} -	} - -	return result; -} */ - -  //static   bool LLPickInfo::isFlora(LLViewerObject* object)  { diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp index 4e9400872a..c4430f4308 100755 --- a/indra/newview/llvlcomposition.cpp +++ b/indra/newview/llvlcomposition.cpp @@ -123,10 +123,10 @@ BOOL LLVLComposition::generateHeights(const F32 x, const F32 y,  	S32 x_begin, y_begin, x_end, y_end; -	x_begin = llround( x * mScaleInv ); -	y_begin = llround( y * mScaleInv ); -	x_end = llround( (x + width) * mScaleInv ); -	y_end = llround( (y + width) * mScaleInv ); +	x_begin = ll_round( x * mScaleInv ); +	y_begin = ll_round( y * mScaleInv ); +	x_end = ll_round( (x + width) * mScaleInv ); +	y_end = ll_round( (y + width) * mScaleInv );  	if (x_end > mWidth)  	{ @@ -318,8 +318,8 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,  	S32 x_begin, y_begin, x_end, y_end;  	x_begin = (S32)(x * mScaleInv);  	y_begin = (S32)(y * mScaleInv); -	x_end = llround( (x + width) * mScaleInv ); -	y_end = llround( (y + width) * mScaleInv ); +	x_end = ll_round( (x + width) * mScaleInv ); +	y_end = ll_round( (y + width) * mScaleInv );  	if (x_end > mWidth)  	{ diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 0a578fc0b3..9113b900d0 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -137,10 +137,6 @@ const LLUUID ANIM_AGENT_PHYSICS_MOTION = LLUUID("7360e029-3cb8-ebc4-863e-212df44  //-----------------------------------------------------------------------------  // Constants  //----------------------------------------------------------------------------- - -const S32 MIN_PIXEL_AREA_FOR_COMPOSITE = 1024; -const F32 SHADOW_OFFSET_AMT = 0.03f; -  const F32 DELTA_TIME_MIN = 0.01f;	// we clamp measured deltaTime to this  const F32 DELTA_TIME_MAX = 0.2f;	// range to insure stability of computations. @@ -148,22 +144,15 @@ const F32 PELVIS_LAG_FLYING		= 0.22f;// pelvis follow half life while flying  const F32 PELVIS_LAG_WALKING	= 0.4f;	// ...while walking  const F32 PELVIS_LAG_MOUSELOOK = 0.15f;  const F32 MOUSELOOK_PELVIS_FOLLOW_FACTOR = 0.5f; -const F32 PELVIS_LAG_WHEN_FOLLOW_CAM_IS_ON = 0.0001f; // not zero! - something gets divided by this!  const F32 TORSO_NOISE_AMOUNT = 1.0f;	// Amount of deviation from up-axis, in degrees  const F32 TORSO_NOISE_SPEED = 0.2f;	// Time scale factor on torso noise.  const F32 BREATHE_ROT_MOTION_STRENGTH = 0.05f; -const F32 BREATHE_SCALE_MOTION_STRENGTH = 0.005f; - -const F32 MIN_SHADOW_HEIGHT = 0.f; -const F32 MAX_SHADOW_HEIGHT = 0.3f;  const S32 MIN_REQUIRED_PIXEL_AREA_BODY_NOISE = 10000;  const S32 MIN_REQUIRED_PIXEL_AREA_BREATHE = 10000;  const S32 MIN_REQUIRED_PIXEL_AREA_PELVIS_FIX = 40; -const S32 TEX_IMAGE_SIZE_SELF = 512; -const S32 TEX_IMAGE_AREA_SELF = TEX_IMAGE_SIZE_SELF * TEX_IMAGE_SIZE_SELF;  const S32 TEX_IMAGE_SIZE_OTHER = 512 / 4;  // The size of local textures for other (!isSelf()) avatars  const F32 HEAD_MOVEMENT_AVG_TIME = 0.9f; @@ -4207,8 +4196,8 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass)  		}  		// Can't test for baked hair being defined, since that won't always be the case (not all viewers send baked hair)  		// TODO: 1.25 will be able to switch this logic back to calling isTextureVisible(); -		if ( getImage(TEX_HAIR_BAKED, 0) &&  -		     getImage(TEX_HAIR_BAKED, 0)->getID() != IMG_INVISIBLE || LLDrawPoolAlpha::sShowDebugAlpha)		 +		if ( ( getImage(TEX_HAIR_BAKED, 0) &&  +		     getImage(TEX_HAIR_BAKED, 0)->getID() != IMG_INVISIBLE ) || LLDrawPoolAlpha::sShowDebugAlpha)		  		{  			LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR);  			if (hair_mesh) @@ -7309,7 +7298,7 @@ void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMe  		if (it != contents.mParams.end())  		{  			S32 index = it - contents.mParams.begin(); -			contents.mParamAppearanceVersion = llround(contents.mParamWeights[index]); +			contents.mParamAppearanceVersion = ll_round(contents.mParamWeights[index]);  			LL_DEBUGS("Avatar") << "appversion req by appearance_version param: " << contents.mParamAppearanceVersion << LL_ENDL;  		}  	} diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index bb838977aa..e757e52fa4 100755 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -179,7 +179,6 @@ LLVOAvatarSelf::LLVOAvatarSelf(const LLUUID& id,  	mScreenp(NULL),  	mLastRegionHandle(0),  	mRegionCrossingCount(0), -	mInitialBakesLoaded(false),  	// Value outside legal range, so will always be a mismatch the  	// first time through.  	mLastHoverOffsetSent(LLVector3(0.0f, 0.0f, -999.0f)) diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index fab500c397..332a6353ad 100755 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -109,7 +109,6 @@ private:  private:  	LLUUID mInitialBakeIDs[6]; -	bool mInitialBakesLoaded;  /******************************************************************************** diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index b79a48012a..8d8f33b601 100755 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -51,7 +51,6 @@  const S32 GRASS_MAX_BLADES =	32;  const F32 GRASS_BLADE_BASE =	0.25f;			//  Width of grass at base -const F32 GRASS_BLADE_TOP =		0.25f;			//  Width of grass at top  const F32 GRASS_BLADE_HEIGHT =	0.5f;			// meters  const F32 GRASS_DISTRIBUTION_SD = 0.15f;		// empirically defined diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 962cdf0268..e24884fe81 100755 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -1024,10 +1024,15 @@ void LLSpeakerVolumeStorage::load()  	LLSD settings_llsd;  	llifstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (file.is_open())  	{ -		LLSDSerialize::fromXML(settings_llsd, file); +		if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXML(settings_llsd, file)) +        { +            LL_WARNS("Voice") << "failed to parse " << filename << LL_ENDL; +             +        } +              	}  	for (LLSD::map_const_iterator iter = settings_llsd.beginMap(); @@ -1062,7 +1067,7 @@ void LLSpeakerVolumeStorage::save()  		}  		llofstream file; -		file.open(filename); +		file.open(filename.c_str());  		LLSDSerialize::toPrettyXML(settings_llsd, file);  	}  } diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp index 23a8a61b85..cb83cf8fdf 100755 --- a/indra/newview/llvoicevisualizer.cpp +++ b/indra/newview/llvoicevisualizer.cpp @@ -70,7 +70,6 @@ const F32 DEFAULT_MAXIMUM_GESTICULATION_AMPLITUDE	= 1.0f;  //--------------------------------------------------------------------------------------  // other constants  //-------------------------------------------------------------------------------------- -const F32 ONE_HALF = 1.0f; // to clarify intent and reduce magic numbers in the code.   const LLVector3 WORLD_UPWARD_DIRECTION = LLVector3( 0.0f, 0.0f, 1.0f ); // Z is up in SL  //------------------------------------------------------------------ diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index b6aecb4aaa..a6a7a35b03 100755 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -2519,7 +2519,7 @@ void LLVivoxVoiceClient::sendPositionalUpdate(void)  				if(!p->mIsSelf)  				{  					// scale from the range 0.0-1.0 to vivox volume in the range 0-100 -					S32 volume = llround(p->mVolume / VOLUME_SCALE_VIVOX); +					S32 volume = ll_round(p->mVolume / VOLUME_SCALE_VIVOX);  					bool mute = p->mOnMuteList;  					if(mute) diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index c1593fa5fc..1ba0868544 100755 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -44,8 +44,6 @@  #include "pipeline.h"  #include "llspatialpartition.h" -const F32 MAX_PART_LIFETIME = 120.f; -  extern U64MicrosecondsImplicit gFrameTime;  LLPointer<LLVertexBuffer> LLVOPartGroup::sVB = NULL; @@ -683,7 +681,7 @@ void LLVOPartGroup::getGeometry(S32 idx,  		}  		else   		{ -			pglow = LLColor4U(0, 0, 0, (U8) llround(255.f*part.mStartGlow)); +			pglow = LLColor4U(0, 0, 0, (U8) ll_round(255.f*part.mStartGlow));  			pcolor = part.mStartColor;  		}  	} diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 07c2f0d44d..4dab213fa0 100755 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -62,8 +62,6 @@ static const S32 NUM_TILES = NUM_TILES_X * NUM_TILES_Y;  static const F32 SUN_DISK_RADIUS	= 0.5f;  static const F32 MOON_DISK_RADIUS	= SUN_DISK_RADIUS * 0.9f;  static const F32 SUN_INTENSITY = 1e5; -static const F32 SUN_DISK_INTENSITY = 24.f; -  // Texture coordinates:  static const LLVector2 TEX00 = LLVector2(0.f, 0.f); @@ -619,21 +617,6 @@ static inline LLColor3 colorMix(LLColor3 const & left, LLColor3 const & right, F  	return (left + ((right - left) * amount));  } -static inline F32 texture2D(LLPointer<LLImageRaw> const & tex, LLVector2 const & uv) -{ -	U16 w = tex->getWidth(); -	U16 h = tex->getHeight(); - -	U16 r = U16(uv[0] * w) % w; -	U16 c = U16(uv[1] * h) % h; - -	U8 const * imageBuffer = tex->getData(); - -	U8 sample = imageBuffer[r * w + c]; - -	return sample / 255.f; -} -  static inline LLColor3 smear(F32 val)  {  	return LLColor3(val, val, val); diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 66c0ace79d..367fa21b91 100755 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -396,9 +396,6 @@ void LLVOTree::idleUpdate(LLAgent &agent, const F64 &time)  	mTrunkLOD = trunk_LOD;  } -const F32 TREE_BLEND_MIN = 1.f; -const F32 TREE_BLEND_RANGE = 1.f; -  void LLVOTree::render(LLAgent &agent)  {  } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 47d4e5565b..0432f6f27c 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -78,10 +78,8 @@  #include "llvocache.h"  #include "llmaterialmgr.h" -const S32 MIN_QUIET_FRAMES_COALESCE = 30;  const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;  const F32 FORCE_CULL_AREA = 8.f; -const F32 MAX_LOD_DISTANCE = 24.f;  U32 JOINT_COUNT_REQUIRED_FOR_FULLRIG = 20;  BOOL gAnimateTextures = TRUE; @@ -1222,7 +1220,7 @@ S32	LLVOVolume::computeLODDetail(F32 distance, F32 radius)  	{  		// We've got LOD in the profile, and in the twist.  Use radius.  		F32 tan_angle = (LLVOVolume::sLODFactor*radius)/distance; -		cur_detail = LLVolumeLODGroup::getDetailFromTan(llround(tan_angle, 0.01f)); +		cur_detail = LLVolumeLODGroup::getDetailFromTan(ll_round(tan_angle, 0.01f));  	}  	else  	{ @@ -1280,8 +1278,8 @@ BOOL LLVOVolume::calcLOD()  	// DON'T Compensate for field of view changing on FOV zoom.  	distance *= F_PI/3.f; -	cur_detail = computeLODDetail(llround(distance, 0.01f),  -									llround(radius, 0.01f)); +	cur_detail = computeLODDetail(ll_round(distance, 0.01f),  +									ll_round(radius, 0.01f));  	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_LOD_INFO) && @@ -1294,7 +1292,7 @@ BOOL LLVOVolume::calcLOD()  	if (cur_detail != mLOD)  	{ -		mAppAngle = llround((F32) atan2( mDrawable->getRadius(), mDrawable->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f); +		mAppAngle = ll_round((F32) atan2( mDrawable->getRadius(), mDrawable->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f);  		mLOD = cur_detail;		  		return TRUE;  	} diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index e3419af10d..9ce16a1674 100755 --- a/indra/newview/llvowater.cpp +++ b/indra/newview/llvowater.cpp @@ -43,9 +43,6 @@  #include "pipeline.h"  #include "llspatialpartition.h" -const BOOL gUseRoam = FALSE; - -  ///////////////////////////////////  template<class T> inline T LERP(T a, T b, F32 factor) @@ -53,12 +50,6 @@ template<class T> inline T LERP(T a, T b, F32 factor)  	return a + (b - a) * factor;  } -const U32 N_RES_HALF	= (N_RES >> 1); - -const U32 WIDTH			= (N_RES * WAVE_STEP); //128.f //64		// width of wave tile, in meters -const F32 WAVE_STEP_INV	= (1. / WAVE_STEP); - -  LLVOWater::LLVOWater(const LLUUID &id,   					 const LLPCode pcode,   					 LLViewerRegion *regionp) : diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index c854e1fc66..374792193c 100755 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -150,7 +150,7 @@ void LLWaterParamManager::savePreset(const std::string & name)  	paramsData = mParamList[name].getAll();  	// write to file -	llofstream presetsXML(pathName); +	llofstream presetsXML(pathName.c_str());  	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();  	formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);  	presetsXML.close(); diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 58a00c5be0..c731a7d6cf 100755 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -382,6 +382,10 @@ class LLWearableItemCreationDateComparator : public LLWearableItemNameComparator  {  	LOG_CLASS(LLWearableItemCreationDateComparator); +public: +	// clang demands a default ctor here  +	LLWearableItemCreationDateComparator() {} +  protected:  	/*virtual*/ bool doCompare(const LLPanelInventoryListItemBase* item1, const LLPanelInventoryListItemBase* item2) const;  }; diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 0f0d9ce703..0be6e49834 100755 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -49,7 +49,7 @@  #include "llviewerregion.h"  #include "llviewerwindow.h"  #include "llnotificationsutil.h" - +#include "lluriparser.h"  #include "uriparser/Uri.h"  #include <boost/regex.hpp> @@ -240,19 +240,10 @@ bool LLWeb::useExternalBrowser(const std::string &url)  	}  	else if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_INT_LL_EXT_OTHERS)  	{ -		UriParserStateA state; -		UriUriA uri; -		state.uri = &uri; - -		std::string uri_string = url; -		uriParseUriA(&state, uri_string.c_str()); -		if (uri.hostText.first) -		{ -			S32 length = uri.hostText.afterLast - uri.hostText.first; -			std::string buf = uri.hostText.first; -			uri_string = buf.substr(0,length); -		} -		uriFreeUriMembersA(&uri); +		LLUriParser up(url); +		up.normalize(); +		up.extractParts(); +		std::string uri_string = up.host();  		boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)$", boost::regex::perl|boost::regex::icase);  		boost::match_results<std::string::const_iterator> matches; diff --git a/indra/newview/llwindowlistener.cpp b/indra/newview/llwindowlistener.cpp index a8e06511d7..734018cfc2 100755 --- a/indra/newview/llwindowlistener.cpp +++ b/indra/newview/llwindowlistener.cpp @@ -44,10 +44,7 @@  #include <typeinfo>  #include <map>  #include <boost/scoped_ptr.hpp> -#include <boost/lambda/core.hpp> -#include <boost/lambda/bind.hpp> - -namespace bll = boost::lambda; +#include <boost/bind.hpp>  LLWindowListener::LLWindowListener(LLViewerWindow *window, const KeyboardGetter& kbgetter)  	: LLEventAPI("LLWindow", "Inject input events into the LLWindow instance"), @@ -358,6 +355,30 @@ static WhichButton buttons;  typedef boost::function<bool(LLCoordGL, MASK)> MouseFunc; +// Wrap a function returning 'void' to return 'true' instead. I'm sure there's +// a more generic way to accomplish this, but generically handling the +// arguments seems to require variadic templates and perfect forwarding. (We +// used to be able to write (boost::lambda::bind(...), true), counting on +// boost::lambda's comma operator overload, until +// https://svn.boost.org/trac/boost/ticket/10864. And boost::phoenix doesn't +// seem to overload comma the same way; or at least not with bind().) +class MouseFuncTrue +{ +    typedef boost::function<void(LLCoordGL, MASK)> MouseFuncVoid; +    MouseFuncVoid mFunc; + +public: +    MouseFuncTrue(const MouseFuncVoid& func): +        mFunc(func) +    {} + +    bool operator()(LLCoordGL coords, MASK mask) const +    { +        mFunc(coords, mask); +        return true; +    } +}; +  static void mouseEvent(const MouseFunc& func, const LLSD& request)  {  	// Ensure we send response @@ -464,11 +485,11 @@ void LLWindowListener::mouseDown(LLSD const & request)  	if (actions.valid)  	{  		// Normally you can pass NULL to an LLWindow* without compiler -		// complaint, but going through boost::lambda::bind() evidently +		// complaint, but going through boost::bind() evidently  		// bypasses that special case: it only knows you're trying to pass an  		// int to a pointer. Explicitly cast NULL to the desired pointer type. -		mouseEvent(bll::bind(actions.down, mWindow, -							 static_cast<LLWindow*>(NULL), bll::_1, bll::_2), +		mouseEvent(boost::bind(actions.down, mWindow, +							 static_cast<LLWindow*>(NULL), _1, _2),  				   request);  	}  } @@ -478,8 +499,8 @@ void LLWindowListener::mouseUp(LLSD const & request)  	Actions actions(buttons.lookup(request["button"]));  	if (actions.valid)  	{ -		mouseEvent(bll::bind(actions.up, mWindow, -							 static_cast<LLWindow*>(NULL), bll::_1, bll::_2), +		mouseEvent(boost::bind(actions.up, mWindow, +							 static_cast<LLWindow*>(NULL), _1, _2),  				   request);  	}  } @@ -489,12 +510,10 @@ void LLWindowListener::mouseMove(LLSD const & request)  	// We want to call the same central mouseEvent() routine for  	// handleMouseMove() as for button clicks. But handleMouseMove() returns  	// void, whereas mouseEvent() accepts a function returning bool -- and -	// uses that bool return. Use (void-lambda-expression, true) to construct -	// a callable that returns bool anyway. Pass 'true' because we expect that -	// our caller will usually treat 'false' as a problem. -	mouseEvent((bll::bind(&LLWindowCallbacks::handleMouseMove, mWindow, -						  static_cast<LLWindow*>(NULL), bll::_1, bll::_2), -				true), +	// uses that bool return. Use MouseFuncTrue to construct a callable that +	// returns bool anyway. +	mouseEvent(MouseFuncTrue(boost::bind(&LLWindowCallbacks::handleMouseMove, mWindow, +						  static_cast<LLWindow*>(NULL), _1, _2)),  			   request);  } diff --git a/indra/newview/llwlanimator.cpp b/indra/newview/llwlanimator.cpp index e568638cf6..2142885767 100755 --- a/indra/newview/llwlanimator.cpp +++ b/indra/newview/llwlanimator.cpp @@ -242,7 +242,7 @@ std::string LLWLAnimator::timeToString(F32 curTime)  	// get hours and minutes  	hours = (S32) (24.0 * curTime);  	curTime -= ((F32) hours / 24.0f); -	min = llround(24.0f * 60.0f * curTime); +	min = ll_round(24.0f * 60.0f * curTime);  	// handle case where it's 60  	if(min == 60)  diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp index e9b0baf612..88079c5d26 100755 --- a/indra/newview/llwldaycycle.cpp +++ b/indra/newview/llwldaycycle.cpp @@ -109,7 +109,7 @@ LLSD LLWLDayCycle::loadDayCycleFromPath(const std::string& file_path)  {  	LL_INFOS("Windlight") << "Loading DayCycle settings from " << file_path << LL_ENDL; -	llifstream day_cycle_xml(file_path); +	llifstream day_cycle_xml(file_path.c_str());  	if (day_cycle_xml.is_open())  	{  		// load and parse it @@ -137,7 +137,7 @@ void LLWLDayCycle::save(const std::string& file_path)  {  	LLSD day_data = asLLSD(); -	llofstream day_cycle_xml(file_path); +	llofstream day_cycle_xml(file_path.c_str());  	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();  	formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);  	day_cycle_xml.close(); diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index 91ea10d43d..2b6d88efef 100755 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -334,7 +334,7 @@ void LLWLParamManager::savePreset(LLWLParamKey key)  	paramsData = mParamList[key].getAll();  	// write to file -	llofstream presetsXML(pathName); +	llofstream presetsXML(pathName.c_str());  	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();  	formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);  	presetsXML.close(); diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 315af3f942..5d657f7eef 100755 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -70,7 +70,6 @@ U32			gAgentPauseSerialNum = 0;  //  // Constants  // -const S32 MAX_NUMBER_OF_CLOUDS	= 750;  const S32 WORLD_PATCH_SIZE = 16;  extern LLColor4U MAX_WATER_COLOR; @@ -981,8 +980,8 @@ void LLWorld::updateWaterObjects()  		}  		// Resize and reshape the water objects -		const S32 water_center_x = center_x + llround((wx + dim[0]) * 0.5f * gDirAxes[dir][0]); -		const S32 water_center_y = center_y + llround((wy + dim[1]) * 0.5f * gDirAxes[dir][1]); +		const S32 water_center_x = center_x + ll_round((wx + dim[0]) * 0.5f * gDirAxes[dir][0]); +		const S32 water_center_y = center_y + ll_round((wy + dim[1]) * 0.5f * gDirAxes[dir][1]);  		LLVOWater* waterp = mEdgeWaterObjects[dir];  		if (!waterp || waterp->isDead()) diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 7cb53a0706..62fad32246 100755 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -67,7 +67,6 @@ const F32 OCEAN_GREEN = (F32)(0x47)/255.f;  const F32 OCEAN_BLUE  = (F32)(0x5F)/255.f;  const F32 GODLY_TELEPORT_HEIGHT = 200.f; -const S32 SCROLL_HINT_WIDTH = 65;  const F32 BIG_DOT_RADIUS = 5.f;  BOOL LLWorldMapView::sHandledLastClick = FALSE; @@ -420,8 +419,8 @@ void LLWorldMapView::draw()  			if (overlayimage)  			{  				// Inform the fetch mechanism of the size we need -				S32 draw_size = llround(sMapScale); -				overlayimage->setKnownDrawSize(llround(draw_size * LLUI::getScaleFactor().mV[VX]), llround(draw_size * LLUI::getScaleFactor().mV[VY])); +				S32 draw_size = ll_round(sMapScale); +				overlayimage->setKnownDrawSize(ll_round(draw_size * LLUI::getScaleFactor().mV[VX]), ll_round(draw_size * LLUI::getScaleFactor().mV[VY]));  				// Draw something whenever we have enough info  				if (overlayimage->hasGLTexture())  				{ @@ -509,7 +508,7 @@ void LLWorldMapView::draw()  	drawImage(pos_global, sAvatarYouImage);  	LLVector3 pos_map = globalPosToView(pos_global); -	if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY]))) +	if (!pointInView(ll_round(pos_map.mV[VX]), ll_round(pos_map.mV[VY])))  	{  		drawTracking(pos_global,  					 lerp(LLColor4::yellow, LLColor4::orange, 0.4f), @@ -774,8 +773,8 @@ void LLWorldMapView::drawGenericItem(const LLItemInfo& item, LLUIImagePtr image)  void LLWorldMapView::drawImage(const LLVector3d& global_pos, LLUIImagePtr image, const LLColor4& color)  {  	LLVector3 pos_map = globalPosToView( global_pos ); -	image->draw(llround(pos_map.mV[VX] - image->getWidth() /2.f), -				llround(pos_map.mV[VY] - image->getHeight()/2.f), +	image->draw(ll_round(pos_map.mV[VX] - image->getWidth() /2.f), +				ll_round(pos_map.mV[VY] - image->getHeight()/2.f),  				color);  } @@ -784,8 +783,8 @@ void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLUIImagePtr i  	LLVector3 pos_map = globalPosToView( global_pos );  	for(U32 i=0; i<count; i++)  	{ -		image->draw(llround(pos_map.mV[VX] - image->getWidth() /2.f), -					llround(pos_map.mV[VY] - image->getHeight()/2.f + i*offset), +		image->draw(ll_round(pos_map.mV[VX] - image->getWidth() /2.f), +					ll_round(pos_map.mV[VY] - image->getHeight()/2.f + i*offset),  					color);  	}  } @@ -959,8 +958,8 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&  								  const std::string& label, const std::string& tooltip, S32 vert_offset )  {  	LLVector3 pos_local = globalPosToView( pos_global ); -	S32 x = llround( pos_local.mV[VX] ); -	S32 y = llround( pos_local.mV[VY] ); +	S32 x = ll_round( pos_local.mV[VX] ); +	S32 y = ll_round( pos_local.mV[VY] );  	LLFontGL* font = LLFontGL::getFontSansSerifSmall();  	S32 text_x = x;  	S32 text_y = (S32)(y - sTrackCircleImage->getHeight()/2 - font->getLineHeight()); @@ -1111,8 +1110,8 @@ static void drawDot(F32 x_pixels, F32 y_pixels,  	if(-HEIGHT_THRESHOLD <= relative_z && relative_z <= HEIGHT_THRESHOLD)  	{ -		dot_image->draw(llround(x_pixels) - dot_image->getWidth()/2, -						llround(y_pixels) - dot_image->getHeight()/2,  +		dot_image->draw(ll_round(x_pixels) - dot_image->getWidth()/2, +						ll_round(y_pixels) - dot_image->getHeight()/2,   						color);  	}  	else @@ -1167,9 +1166,9 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,  			dot_image = sAvatarAboveImage;  		}  	} -	S32 dot_width = llround(dot_radius * 2.f); -	dot_image->draw(llround(x_pixels - dot_radius), -					llround(y_pixels - dot_radius), +	S32 dot_width = ll_round(dot_radius * 2.f); +	dot_image->draw(ll_round(x_pixels - dot_radius), +					ll_round(y_pixels - dot_radius),  					dot_width,  					dot_width,  					color); @@ -1196,8 +1195,8 @@ void LLWorldMapView::drawIconName(F32 x_pixels,  								  const std::string& second_line)  {  	const S32 VERT_PAD = 8; -	S32 text_x = llround(x_pixels); -	S32 text_y = llround(y_pixels +	S32 text_x = ll_round(x_pixels); +	S32 text_y = ll_round(y_pixels  						 - BIG_DOT_RADIUS  						 - VERT_PAD); @@ -1385,8 +1384,8 @@ void LLWorldMapView::setDirectionPos( LLTextBox* text_box, F32 rotation )  	F32 radius = llmin( map_half_height - text_half_height, map_half_width - text_half_width );  	text_box->setOrigin(  -		llround(map_half_width - text_half_width + radius * cos( rotation )), -		llround(map_half_height - text_half_height + radius * sin( rotation )) ); +		ll_round(map_half_width - text_half_width + radius * cos( rotation )), +		ll_round(map_half_height - text_half_height + radius * sin( rotation )) );  } @@ -1434,8 +1433,8 @@ void LLWorldMapView::reshape( S32 width, S32 height, BOOL called_from_parent )  bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track)  {  	LLVector3 pos_view = globalPosToView(item.getGlobalPosition()); -	S32 item_x = llround(pos_view.mV[VX]); -	S32 item_y = llround(pos_view.mV[VY]); +	S32 item_x = ll_round(pos_view.mV[VX]); +	S32 item_y = ll_round(pos_view.mV[VY]);  	if (x < item_x - BIG_DOT_RADIUS) return false;  	if (x > item_x + BIG_DOT_RADIUS) return false; @@ -1599,8 +1598,8 @@ BOOL LLWorldMapView::handleMouseDown( S32 x, S32 y, MASK mask )  {  	gFocusMgr.setMouseCapture( this ); -	mMouseDownPanX = llround(sPanX); -	mMouseDownPanY = llround(sPanY); +	mMouseDownPanX = ll_round(sPanX); +	mMouseDownPanY = ll_round(sPanY);  	mMouseDownX = x;  	mMouseDownY = y;  	sHandledLastClick = TRUE; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 3dfe1e5992..03712c1065 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -207,15 +207,9 @@ F32 LLPipeline::CameraDoFResScale;  F32 LLPipeline::RenderAutoHideSurfaceAreaLimit;  LLTrace::EventStatHandle<S64> LLPipeline::sStatBatchSize("renderbatchsize"); -const F32 BACKLIGHT_DAY_MAGNITUDE_AVATAR = 0.2f; -const F32 BACKLIGHT_NIGHT_MAGNITUDE_AVATAR = 0.1f;  const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;  const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f; -const S32 MAX_OFFSCREEN_GEOMETRY_CHANGES_PER_FRAME = 10; -const U32 REFLECTION_MAP_RES = 128;  const U32 DEFERRED_VB_MASK = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1; -// Max number of occluders to search for. JC -const S32 MAX_OCCLUDER_COUNT = 2;  extern S32 gBoxFrame;  //extern BOOL gHideSelectedObjects; @@ -410,16 +404,6 @@ static LLPipelineListener sPipelineListener;  static LLCullResult* sCull = NULL; -static const U32 gl_cube_face[] =  -{ -	GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, -	GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, -	GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, -	GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, -	GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, -	GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, -}; -  void validate_framebuffer_object(); diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index ef2f158a86..60f36770bb 100755 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -51,44 +51,20 @@        name="credits_panel">        <text            follows="top|left|right" -          height="10" +          height="20"            layout="topleft"            left="5"            name="linden_intro"            top="10"            width="435"            wrap="true"> -Second Life is brought to you by the Lindens: -      </text> -      <text_editor -       enabled="false"  -       follows="top|left" -       height="98" -       bg_readonly_color="Transparent" -       left="5" -       text_color="LtGray" -       max_length="65536" -       name="linden_names" -       top_pad="10" -       width="435" -       word_wrap="true"> -Philip, Andrew, Doug, Richard, Phoenix, Ian, Mark, Robin, Dan, Char, Ryan, Eric, Jim, Lee, Jeff, Michael, Kelly, Steve, Catherine, Bub, Ramzi, Jill, Jeska, Don, Kona, Callum, Charity, Jack, Shawn, babbage, James, Lauren, Blue, Brent, Reuben, Pathfinder, Jesse, Patsy, Torley, Bo, Cyn, Jonathan, Gia, Annette, Ginsu, Harry, Lex, Runitai, Guy, Cornelius, Beth, Swiss, Thumper, Wendy, Teeple, Seth, Dee, Mia, Sally, Liana, Aura, Beez, Milo, Red, Gulliver, Marius, Joe, Jose, Dore, Justin, Nora, Morpheus, Lexie, Amber, Chris, Xan, Leyla, Walker, Sabin, Joshua, Hiromi, Tofu, Fritz, June, Jean, Ivy, Dez, Ken, Betsy, Which, Spike, Rob, Zee, Dustin, George, Claudia, del, Matthew, jane, jay, Adrian, Yool, Rika, Yoz, siobhan, Qarl, Benjamin, Beast, Everett, madhavi, Christopher, Izzy, stephany, Jeremy, sean, adreanne, Pramod, Tobin, sejong, Iridium, maurice, kj, Meta, kari, JP, bert, kyle, Jon, Socrates, Bridie, Ivan, maria, Aric, Coco, Periapse, sandy, Storrs, Lotte, Colossus, Brad, Pastrami, Zen, BigPapi, Banzai, Sardonyx, Mani, Garry, Jaime, Neuro, Samuel, Niko, CeeLo, Austin, Soft, Poppy, emma, tessa, angelo, kurz, alexa, Sue, CG, Blake, Erica, Brett, Bevis, kristen, Q, simon, Enus, MJ, laurap, Kip, Scouse, Ron, Ram, kend, Marty, Prospero, melissa, kraft, Nat, Seraph, Hamilton, Lordan, Green, miz, Ashlei, Trinity, Ekim, Echo, Charlie, Rowan, Rome, Jt, Doris, benoc, Christy, Bao, Kate, Tj, Patch, Cheah, Johan, Brandy, Angela, Oreh, Cogsworth, Lan, Mitchell, Space, Bambers, Einstein, Bender, Malbers, Matias, Maggie, Rothman, Milton, Niall, Marin, Allison, Mango, Andrea, Katt, Yi, Ambroff, Rico, Raymond, Gail, Christa, William, Dawn, Usi, Dynamike, M, Corr, Dante, Molly, kaylee, Danica, Kelv, Lil, jacob, Nya, Rodney, elsie, Blondin, Grant, Nyx, Devin, Monty, Minerva, Keira, Katie, Jenn, Makai, Clare, Joy, Cody, Gayathri, FJ, spider, Oskar, Landon, Jarv, Noelle, Al, Doc, Gray, Vir, t, Maestro, Simone, Shannon, yang, Courtney, Scott, charlene, Quixote, Susan, Zed, Amanda, Katelin, Esbee, JoRoan, Enkidu, roxie, Scarlet, Merov, Kevin, Judy, Rand, Newell, Les, Dessie, Galen, Michon, Geo, Siz, Calyle, Pete, Praveen, Callen, Sheldon, Pink, Nelson, jenelle, Terrence, Nathan, Juan, Sascha, Huseby, Karina, Kaye, Kotler, Lis, Darv, Charrell, Dakota, Kimmora, Theeba, Taka, Mae, Perry, Ducot, dana, Esther, Dough, gisele, Doten, Viale, Fisher, jessieann, ashley, Torres, delby, rountree, kurt, Slaton, Madison, Rue, Gino, Wen, Casssandra, Brodesky, Squid, Gez, Rakesh, Gecko, Ladan, Tony, Tatem, Squire, Falcon, BK, Crimp, Tiggs, Bacon, Coyot, Carmilla, Webb, Sea, Arch, Jillian, Jason, Bernard, Vogt, Peggy, dragon, Pup, xandix, Wallace, Bewest, Inoshiro, Rhett, AG, Aimee, Ghengis, Itiaes, Eli, Steffan, Epic, Grapes, Stone, Prep, Scobu, Robert, Alain, Carla, Vicky, Tia, Alec, Taras, Lisa, Oz, Ariane, Log, House, Kazu, Kim, Drofnas, Tyler, Campbell, Michele, Madeline, Nelly, Baron, Thor, Lori, Hele, Fredrik, Teddy, Pixie, Berry, Gabrielle, Alfonso, Brooke, Wolf, Ringo, Cru, Charlar, Rodvik, Gibson, Elise, Bagman, Greger, Leonidas, Jerm, Leslie, CB, Brenda, Durian, Carlo, mm, Zeeshan, Caleb, Max, Elikak, Mercille, Steph, Chase, Baker -      </text_editor> -      <text -          follows="top|left" -          height="10" -          layout="topleft" -          left="5" -          name="contrib_intro" -          top_pad="10" -          width="435" -          wrap="true"> +Second Life is brought to you by the Lindens,   with open source contributions from:        </text>        <text_editor         enabled="false"          follows="top|left" -       height="98" +       height="340"         bg_readonly_color="Transparent"         left="5"         text_color="LtGray" @@ -99,31 +75,6 @@ with open source contributions from:         word_wrap="true">  Dummy Name replaced at run time        </text_editor> -      <text -          follows="top|left" -          height="10" -          layout="topleft" -          left="5" -          name="trans_intro" -          top_pad="10" -          width="435" -          wrap="true"> -and translations from: -      </text> -      <text_editor -       enabled="false"  -       follows="top|left" -       height="98" -       bg_readonly_color="Transparent" -       left="5" -       text_color="LtGray" -       max_length="65536" -       name="trans_names" -       top_pad="10" -       width="435" -       word_wrap="true"> -Dummy Name replaced at run time -      </text_editor>      </panel>      <panel        border="true" @@ -138,7 +89,7 @@ Dummy Name replaced at run time         left="5"         text_color="LtGray"         max_length="65536" -       name="credits_editor" +       name="licenses_editor"         top="5"         width="435"         word_wrap="true"> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 658c716ee7..b75d614dcc 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -3590,16 +3590,6 @@               function="ToggleControl"               parameter="ImagePipelineUseHTTP" />          </menu_item_check> -        <menu_item_check -         label="HTTP Inventory" -         name="HTTP Inventory"> -            <menu_item_check.on_check -             function="CheckControl" -             parameter="UseHTTPInventory" /> -            <menu_item_check.on_click -             function="ToggleControl" -             parameter="UseHTTPInventory" /> -        </menu_item_check>          <menu_item_call           label="Compress Images"           name="Compress Images"> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 1f816dc806..28565a85c6 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5277,6 +5277,17 @@ Warning: The 'Pay object' click action has been set, but it will only    <notification     icon="alertmodal.tga" +   name="PayObjectFailed" +   type="alertmodal"> +    Payment failed: object was not found. +    <tag>fail</tag> +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="OpenObjectCannotCopy"     type="alertmodal">  There are no items in this object that you are allowed to copy. @@ -10410,7 +10421,7 @@ Cannot create large prims that intersect other players.  Please re-try when othe     icon="alertmodal.tga"     name="DefaultObjectPermissions"     type="alert"> -	There was a problem saving the default permissions due to the following reason: [REASON].  Please try setting the default permissions later. +	There was a problem saving the default object permissions: [REASON].  Please try setting the default permissions later.  	<tag>fail</tag>     <usetemplate       name="okbutton" diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index a258a874b0..183ae2e824 100755 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -19,7 +19,7 @@    left="0"    name="ui_stack"    orientation="horizontal" -  top="0" +  top="10"    width="1024">      <layout_panel        height="172" @@ -30,7 +30,7 @@        auto_resize="false"        follows="left|right|top"        name="ui_container" -      width="960" +      width="1000"        left="0"        top="0"        height="172"> @@ -56,7 +56,8 @@      name="username_combo"      width="232">      <combo_box.combo_editor -      text_pad_left="8" /> +      text_pad_left="8"  +      bg_image_always_focused="true"/>      <combo_box.combo_button        visible="false" />      <combo_box.drop_down_button @@ -65,79 +66,42 @@    <line_editor      follows="left|top"      height="32" -    left_pad="0" +    left_pad="-11"      max_length_bytes="16"      text_pad_left="8"      name="password_edit"      label="Password" +  	bg_image_always_focused="true"      font="SansSerifLarge"      is_password="true"      select_on_focus="true"      commit_on_focus_lost="false"      bottom_delta="0" -    width="200" /> -  <check_box -    control_name="RememberPassword" -    follows="left|top" -    font="SansSerifMedium" -    left_pad="20" -    bottom_delta="-14" -    height="24" -    label="Remember me" -    check_button.bottom="3" -    name="remember_check" -    width="145" /> -  <text -    follows="left|top" -    font="SansSerifMedium" -    text_color="EmphasisColor" -    height="16" -    name="forgot_password_text" -    left_delta="0" -    bottom_delta="16" -    width="200"> -    Forgotten password -  </text> -  <button -    follows="left|top" -    image_unselected="PushButton_Login" -    image_pressed="PushButton_Login_Pressed" -    image_hover="PushButton_Login_Over" -    label="Log In" -    label_color="White" -    font="SansSerifMedium" -    name="connect_btn" -    enabled="true" -    left="0" -    width="80" -    height="26" -    bottom_delta="44" /> -  <text -    follows="left|top" -    font="SansSerifLarge" -    height="24" -    name="At_My_Last_Location_Label" -    left_pad="8" -    bottom_delta="1" -    width="120"> -    at last location -  </text> +    width="165" />    <combo_box -    control_name="NextLoginLocation" +    allow_text_entry="true" +    control_name="NextLoginLocation"          follows="left|top"      label="My favorite places" -    height="26" +    height="32"      max_chars="128" -    combo_editor.font="SansSerifMedium" -    left_pad="20" +    combo_editor.font="SansSerifLarge" +    left_pad="15"      bottom_delta="0"      name="start_location_combo"      width="175"      combo_button.scale_image="true"> +    <combo_box.combo_editor +      bg_image_always_focused="true" +      text_pad_left="8"/> +    <combo_box.item +      label="My last location" +      name="MyLastLocation" +      value="last" />      <combo_box.item        label="My home"        name="MyHome" -      value="home" /> +      value="home" />         </combo_box>    <button      follows="left|top" @@ -147,53 +111,48 @@      label="Log In"      label_color="White"      font="SansSerifMedium" -    name="connect_favorite_btn" -    left_pad="8" -    width="80" -    enabled="false" -    height="26" -    bottom_delta="0" /> -  <line_editor +    name="connect_btn" +    enabled="true"     +    width="120" +    height="32" +  	left_pad="15" +    bottom_delta="0" />   +  <check_box +    control_name="RememberPassword"      follows="left|top" -    width="170" -    height="26" -    left_pad="40" -    text_pad_left="8" -    name="location_edit" -    label="Type a location"      font="SansSerifMedium" -    select_on_focus="true" -    commit_on_focus_lost="false" -    bottom_delta="0" /> -  <button +    left="185" +    bottom_delta="21"  	 +    height="24" +    label="Remember me" +    check_button.bottom="3" +    name="remember_check" +    width="145" /> +  <text      follows="left|top" -    image_unselected="PushButton_Login" -    image_pressed="PushButton_Login_Pressed" -    image_hover="PushButton_Login_Over" -    label="Log In" -    enabled="false" -    label_color="White"      font="SansSerifMedium" -    name="connect_location_btn" -    left_pad="8" -    width="80" -    height="26" -    bottom_delta="0" /> +    text_color="EmphasisColor" +    height="16" +    name="forgot_password_text" +    left="408"     +    bottom_delta="0" +    width="200"> +    Forgotten password +  </text>     <combo_box      allow_text_entry="false"      font="SansSerifTiny"      follows="left|top"      height="26" +  	left="588" +  	bottom_delta="10"      max_chars="128" -    label="Select grid" -    left_pad="40" -    bottom_delta="0" +    label="Select grid"          layout="topleft" -    top_pad="2"      name="server_combo" -    width="128" /> -    </layout_panel> -    <layout_panel +    width="149" />	 +  </layout_panel> +  <layout_panel        height="172"        auto_resize="true"        name="ui_elastic_pad_right" diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index adeb848e03..1b0334498e 100755 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -193,14 +193,6 @@ void LLAppViewer::forceQuit(void) {}  LLAppViewer * LLAppViewer::sInstance = 0;  //----------------------------------------------------------------------------- -#include "llnotificationsutil.h" -LLNotificationPtr LLNotificationsUtil::add(const std::string& name,  -					  const LLSD& substitutions,  -					  const LLSD& payload,  -					  boost::function<void (const LLSD&, const LLSD&)> functor) { return LLNotificationPtr((LLNotification*)0); } - - -//-----------------------------------------------------------------------------  #include "llupdaterservice.h"  std::string const & LLUpdaterService::pumpName(void) @@ -488,8 +480,6 @@ namespace tut      template<> template<>      void lllogininstance_object::test<3>()      { -		skip(); -		  		set_test_name("Test Mandatory Update User Accepts");  		// Part 1 - Mandatory Update, with User accepts response. @@ -517,8 +507,6 @@ namespace tut  	template<> template<>      void lllogininstance_object::test<4>()      { -		skip(); -		  		set_test_name("Test Mandatory Update User Decline");  		// Test connect with update needed. diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 7544fe1c41..32cf9d3df6 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -38,7 +38,7 @@ viewer_dir = os.path.dirname(__file__)  # Put it FIRST because some of our build hosts have an ancient install of  # indra.util.llmanifest under their system Python!  sys.path.insert(0, os.path.join(viewer_dir, os.pardir, "lib", "python")) -from indra.util.llmanifest import LLManifest, main, proper_windows_path, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError +from indra.util.llmanifest import LLManifest, main, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError  try:      from llbase import llsd  except ImportError: @@ -55,7 +55,6 @@ class ViewerManifest(LLManifest):      def construct(self):          super(ViewerManifest, self).construct() -        self.exclude("*.svn*")          self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")          self.path(src="../../etc/message.xml", dst="app_settings/message.xml") @@ -74,26 +73,6 @@ class ViewerManifest(LLManifest):                  contributions_path = "../../doc/contributions.txt"                  contributor_names = self.extract_names(contributions_path)                  self.put_in_file(contributor_names, "contributors.txt", src=contributions_path) -                # include the extracted list of translators -                translations_path = "../../doc/translations.txt" -                translator_names = self.extract_names(translations_path) -                self.put_in_file(translator_names, "translators.txt", src=translations_path) -                # include the list of Lindens (if any) -                #   see https://wiki.lindenlab.com/wiki/Generated_Linden_Credits -                linden_names_path = os.getenv("LINDEN_CREDITS") -                if not linden_names_path : -                    print "No 'LINDEN_CREDITS' specified in environment, using built-in list" -                else: -                    try: -                        linden_file = open(linden_names_path,'r') -                    except IOError: -                        print "No Linden names found at '%s', using built-in list" % linden_names_path -                    else: -                         # all names should be one line, but the join below also converts to a string -                        linden_names = ', '.join(linden_file.readlines()) -                        self.put_in_file(linden_names, "lindens.txt", src=linden_names_path) -                        linden_file.close() -                        print "Linden names extracted from '%s'" % linden_names_path                  # ... and the entire windlight directory                  self.path("windlight") @@ -107,6 +86,9 @@ class ViewerManifest(LLManifest):                      self.path("dictionaries")                      self.end_prefix(pkgdir) +                # include the extracted packages information (see BuildPackagesInfo.cmake) +                self.path(src=os.path.join(self.args['build'],"packages-info.txt"), dst="packages-info.txt") +                  # CHOP-955: If we have "sourceid" or "viewer_channel" in the                  # build process environment, generate it into                  # settings_install.xml. @@ -349,14 +331,18 @@ class Windows_i686_Manifest(ViewerManifest):      def construct(self):          super(Windows_i686_Manifest, self).construct() +        pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') +        relpkgdir = os.path.join(pkgdir, "lib", "release") +        debpkgdir = os.path.join(pkgdir, "lib", "debug") +          if self.is_packaging_viewer():              # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.              self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())          # Plugin host application -        self.path2basename(os.path.join(os.pardir, -                                        'llplugin', 'slplugin', self.args['configuration']), -                           "slplugin.exe") +        # The current slplugin package places slplugin.exe right into the +        # packages base directory. +        self.path2basename(pkgdir, "slplugin.exe")          self.path2basename("../viewer_components/updater/scripts/windows", "update_install.bat")          # Get shared libs from the shared libs staging directory @@ -376,15 +362,10 @@ class Windows_i686_Manifest(ViewerManifest):              # Mesh 3rd party libs needed for auto LOD and collada reading              try: -                if self.args['configuration'].lower() == 'debug': -                    self.path("libcollada14dom22-d.dll") -                else: -                    self.path("libcollada14dom22.dll") -                                      self.path("glod.dll")              except RuntimeError, err:                  print err.message -                print "Skipping COLLADA and GLOD libraries (assumming linked statically)" +                print "Skipping GLOD library (assumming linked statically)"              # Get fmodex dll, continue if missing              try: @@ -404,11 +385,11 @@ class Windows_i686_Manifest(ViewerManifest):              # These need to be installed as a SxS assembly, currently a 'private' assembly.              # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx              if self.args['configuration'].lower() == 'debug': -                 self.path("msvcr100d.dll") -                 self.path("msvcp100d.dll") +                 self.path("msvcr120d.dll") +                 self.path("msvcp120d.dll")              else: -                 self.path("msvcr100.dll") -                 self.path("msvcp100.dll") +                 self.path("msvcr120.dll") +                 self.path("msvcp120.dll")              # Vivox runtimes              self.path("SLVoice.exe") @@ -443,82 +424,52 @@ class Windows_i686_Manifest(ViewerManifest):          self.path("featuretable_xp.txt")          # Media plugins - QuickTime -        if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"): -            self.path("media_plugin_quicktime.dll") -            self.end_prefix() -          # Media plugins - WebKit/Qt -        if self.prefix(src='../media_plugins/webkit/%s' % self.args['configuration'], dst="llplugin"): +        if self.prefix(src=os.path.join(pkgdir, "llplugin"), dst="llplugin"): +            self.path("media_plugin_quicktime.dll")              self.path("media_plugin_webkit.dll") -            self.end_prefix() +            self.path("qtcore4.dll") +            self.path("qtgui4.dll") +            self.path("qtnetwork4.dll") +            self.path("qtopengl4.dll") +            self.path("qtwebkit4.dll") +            self.path("qtxmlpatterns4.dll") + +            # For WebKit/Qt plugin runtimes (image format plugins) +            if self.prefix(src="imageformats", dst="imageformats"): +                self.path("qgif4.dll") +                self.path("qico4.dll") +                self.path("qjpeg4.dll") +                self.path("qmng4.dll") +                self.path("qsvg4.dll") +                self.path("qtiff4.dll") +                self.end_prefix() + +            # For WebKit/Qt plugin runtimes (codec/character encoding plugins) +            if self.prefix(src="codecs", dst="codecs"): +                self.path("qcncodecs4.dll") +                self.path("qjpcodecs4.dll") +                self.path("qkrcodecs4.dll") +                self.path("qtwcodecs4.dll") +                self.end_prefix() + +        self.end_prefix()          # winmm.dll shim          if self.prefix(src='../media_plugins/winmmshim/%s' % self.args['configuration'], dst=""):              self.path("winmm.dll")              self.end_prefix() -          if self.args['configuration'].lower() == 'debug': -            if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'debug'), -                           dst="llplugin"): +            if self.prefix(src=debpkgdir, dst="llplugin"):                  self.path("libeay32.dll") -                self.path("qtcored4.dll") -                self.path("qtguid4.dll") -                self.path("qtnetworkd4.dll") -                self.path("qtopengld4.dll") -                self.path("qtwebkitd4.dll") -                self.path("qtxmlpatternsd4.dll")                  self.path("ssleay32.dll") - -                # For WebKit/Qt plugin runtimes (image format plugins) -                if self.prefix(src="imageformats", dst="imageformats"): -                    self.path("qgifd4.dll") -                    self.path("qicod4.dll") -                    self.path("qjpegd4.dll") -                    self.path("qmngd4.dll") -                    self.path("qsvgd4.dll") -                    self.path("qtiffd4.dll") -                    self.end_prefix() - -                # For WebKit/Qt plugin runtimes (codec/character encoding plugins) -                if self.prefix(src="codecs", dst="codecs"): -                    self.path("qcncodecsd4.dll") -                    self.path("qjpcodecsd4.dll") -                    self.path("qkrcodecsd4.dll") -                    self.path("qtwcodecsd4.dll") -                    self.end_prefix() -                  self.end_prefix() +          else: -            if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release'), -                           dst="llplugin"): +            if self.prefix(src=relpkgdir, dst="llplugin"):                  self.path("libeay32.dll") -                self.path("qtcore4.dll") -                self.path("qtgui4.dll") -                self.path("qtnetwork4.dll") -                self.path("qtopengl4.dll") -                self.path("qtwebkit4.dll") -                self.path("qtxmlpatterns4.dll")                  self.path("ssleay32.dll") - -                # For WebKit/Qt plugin runtimes (image format plugins) -                if self.prefix(src="imageformats", dst="imageformats"): -                    self.path("qgif4.dll") -                    self.path("qico4.dll") -                    self.path("qjpeg4.dll") -                    self.path("qmng4.dll") -                    self.path("qsvg4.dll") -                    self.path("qtiff4.dll") -                    self.end_prefix() - -                # For WebKit/Qt plugin runtimes (codec/character encoding plugins) -                if self.prefix(src="codecs", dst="codecs"): -                    self.path("qcncodecs4.dll") -                    self.path("qjpcodecs4.dll") -                    self.path("qkrcodecs4.dll") -                    self.path("qtwcodecs4.dll") -                    self.end_prefix() -                  self.end_prefix()          # pull in the crash logger and updater from other projects @@ -631,7 +582,7 @@ class Windows_i686_Manifest(ViewerManifest):          while (not installer_created) and (nsis_attempts > 0):              try:                  nsis_attempts-=1; -                self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile)) +                self.run_command('"' + NSIS_path + '" ' + self.dst_path_of(tempfile))                  installer_created=True # if no exception was raised, the codesign worked              except ManifestError, err:                  if nsis_attempts: @@ -668,12 +619,16 @@ class Darwin_i386_Manifest(ViewerManifest):          # copy over the build result (this is a no-op if run within the xcode script)          self.path(self.args['configuration'] + "/Second Life.app", dst="") +        pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') +        relpkgdir = os.path.join(pkgdir, "lib", "release") +        debpkgdir = os.path.join(pkgdir, "lib", "debug") +          if self.prefix(src="", dst="Contents"):  # everything goes in Contents              self.path("Info.plist", dst="Info.plist")              # copy additional libs in <bundle>/Contents/MacOS/ -            self.path("../packages/lib/release/libndofdev.dylib", dst="Resources/libndofdev.dylib") -            self.path("../packages/lib/release/libhunspell-1.3.0.dylib", dst="Resources/libhunspell-1.3.0.dylib") +            self.path(os.path.join(relpkgdir, "libndofdev.dylib"), dst="Resources/libndofdev.dylib") +            self.path(os.path.join(relpkgdir, "libhunspell-1.3.0.dylib"), dst="Resources/libhunspell-1.3.0.dylib")              if self.prefix(dst="MacOS"):                  self.path2basename("../viewer_components/updater/scripts/darwin", "*.py") @@ -733,7 +688,6 @@ class Darwin_i386_Manifest(ViewerManifest):                      print "Skipping %s" % dst                      return [] -                libdir = "../packages/lib/release"                  # dylibs is a list of all the .dylib files we expect to need                  # in our bundled sub-apps. For each of these we'll create a                  # symlink from sub-app/Contents/Resources to the real .dylib. @@ -743,7 +697,7 @@ class Darwin_i386_Manifest(ViewerManifest):                                                                 "llcommon",                                                                 self.args['configuration'],                                                                 libfile), -                                                               os.path.join(libdir, libfile)), +                                                               os.path.join(relpkgdir, libfile)),                                         dst=libfile)                  for libfile in ( @@ -754,7 +708,7 @@ class Darwin_i386_Manifest(ViewerManifest):                                  "libexception_handler.dylib",                                  "libGLOD.dylib",                                  ): -                    dylibs += path_optional(os.path.join(libdir, libfile), libfile) +                    dylibs += path_optional(os.path.join(relpkgdir, libfile), libfile)                  # SLVoice and vivox lols, no symlinks needed                  for libfile in ( @@ -766,38 +720,41 @@ class Darwin_i386_Manifest(ViewerManifest):                                  'ca-bundle.crt',                                  'SLVoice',                                  ): -                     self.path2basename(libdir, libfile) +                     self.path2basename(relpkgdir, libfile)                  # dylibs that vary based on configuration                  if self.args['configuration'].lower() == 'debug':                      for libfile in (                                  "libfmodexL.dylib",                                  ): -                        dylibs += path_optional(os.path.join("../packages/lib/debug", -                                                             libfile), libfile) +                        dylibs += path_optional(os.path.join(debpkgdir, libfile), libfile)                  else:                      for libfile in (                                  "libfmodex.dylib",                                  ): -                        dylibs += path_optional(os.path.join("../packages/lib/release", -                                                             libfile), libfile) +                        dylibs += path_optional(os.path.join(relpkgdir, libfile), libfile)                  # our apps -                for app_bld_dir, app in (("mac_crash_logger", "mac-crash-logger.app"), +                for app_bld_dir, app in ((os.path.join(os.pardir, +                                                       "mac_crash_logger", +                                                       self.args['configuration']), +                                          "mac-crash-logger.app"),                                           # plugin launcher -                                         (os.path.join("llplugin", "slplugin"), "SLPlugin.app"), +                                         (pkgdir, "SLPlugin.app"),                                           ): -                    self.path2basename(os.path.join(os.pardir, -                                                    app_bld_dir, self.args['configuration']), -                                       app) +                    self.path2basename(app_bld_dir, app)                      # our apps dependencies on shared libs                      # for each app, for each dylib we collected in dylibs,                      # create a symlink to the real copy of the dylib.                      resource_path = self.dst_path_of(os.path.join(app, "Contents", "Resources"))                      for libfile in dylibs: -                        symlinkf(os.path.join(os.pardir, os.pardir, os.pardir, libfile), -                                 os.path.join(resource_path, libfile)) +                        src = os.path.join(os.pardir, os.pardir, os.pardir, libfile) +                        dst = os.path.join(resource_path, libfile) +                        try: +                            symlinkf(src, dst) +                        except OSError as err: +                            print "Can't symlink %s -> %s: %s" % (src, dst, err)                  # SLPlugin.app/Contents/Resources gets those Qt4 libraries it needs.                  if self.prefix(src="", dst="SLPlugin.app/Contents/Resources"):                      for libfile in ('libQtCore.4.dylib', @@ -814,26 +771,24 @@ class Darwin_i386_Manifest(ViewerManifest):                                      'libQtWebKit.4.7.1.dylib',                                      'libQtXml.4.dylib',                                      'libQtXml.4.7.1.dylib'): -                        self.path2basename("../packages/lib/release", libfile) +                        self.path2basename(relpkgdir, libfile)                      self.end_prefix("SLPlugin.app/Contents/Resources")                  # Qt4 codecs go to llplugin.  Not certain why but this is the first                  # location probed according to dtruss so we'll go with that. -                if self.prefix(src="../packages/plugins/codecs/", dst="llplugin/codecs"): +                if self.prefix(src=os.path.join(pkgdir, "llplugin/codecs/"), dst="llplugin/codecs"):                      self.path("libq*.dylib")                      self.end_prefix("llplugin/codecs")                  # Similarly for imageformats. -                if self.prefix(src="../packages/plugins/imageformats/", dst="llplugin/imageformats"): +                if self.prefix(src=os.path.join(pkgdir, "llplugin/imageformats/"), dst="llplugin/imageformats"):                      self.path("libq*.dylib")                      self.end_prefix("llplugin/imageformats")                  # SLPlugin plugins proper -                if self.prefix(src="", dst="llplugin"): -                    self.path2basename("../media_plugins/quicktime/" + self.args['configuration'], -                                       "media_plugin_quicktime.dylib") -                    self.path2basename("../media_plugins/webkit/" + self.args['configuration'], -                                       "media_plugin_webkit.dylib") +                if self.prefix(src=os.path.join(pkgdir, "llplugin"), dst="llplugin"): +                    self.path("media_plugin_quicktime.dylib") +                    self.path("media_plugin_webkit.dylib")                      self.end_prefix("llplugin")                  self.end_prefix("Resources") @@ -858,48 +813,6 @@ class Darwin_i386_Manifest(ViewerManifest):      def package_finish(self):          global CHANNEL_VENDOR_BASE -        # Sign the app if requested. -        if 'signature' in self.args: -            identity = self.args['signature'] -            if identity == '': -                identity = 'Developer ID Application' - -            # Look for an environment variable set via build.sh when running in Team City. -            try: -                build_secrets_checkout = os.environ['build_secrets_checkout'] -            except KeyError: -                pass -            else: -                # variable found so use it to unlock keyvchain followed by codesign -                home_path = os.environ['HOME'] -                keychain_pwd_path = os.path.join(build_secrets_checkout,'code-signing-osx','password.txt') -                keychain_pwd = open(keychain_pwd_path).read().rstrip() - -                self.run_command('security unlock-keychain -p "%s" "%s/Library/Keychains/viewer.keychain"' % ( keychain_pwd, home_path ) ) -                signed=False -                sign_attempts=3 -                sign_retry_wait=15 -                while (not signed) and (sign_attempts > 0): -                    try: -                        sign_attempts-=1; -                        self.run_command( -                           'codesign --verbose --force --keychain "%(home_path)s/Library/Keychains/viewer.keychain" --sign %(identity)r %(bundle)r' % { -                               'home_path' : home_path, -                               'identity': identity, -                               'bundle': self.get_dst_prefix() -                               }) -                        signed=True # if no exception was raised, the codesign worked -                    except ManifestError, err: -                        if sign_attempts: -                            print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" % sign_retry_wait -                            time.sleep(sign_retry_wait) -                            sign_retry_wait*=2 -                        else: -                            print >> sys.stderr, "Maximum codesign attempts exceeded; giving up" -                            raise - -        imagename="SecondLife_" + '_'.join(self.args['version']) -          # MBW -- If the mounted volume name changes, it breaks the .DS_Store's background image and icon positioning.          #  If we really need differently named volumes, we'll need to create multiple DS_Store file images, or use some other trick. @@ -981,6 +894,56 @@ class Darwin_i386_Manifest(ViewerManifest):              # Set the disk image root's custom icon bit              self.run_command('SetFile -a C %r' % volpath) + +            # Sign the app if requested;  +            # do this in the copy that's in the .dmg so that the extended attributes used by  +            # the signature are preserved; moving the files using python will leave them behind +            # and invalidate the signatures. +            if 'signature' in self.args: +                app_in_dmg=os.path.join(volpath,self.app_name()+".app") +                print "Attempting to sign '%s'" % app_in_dmg +                identity = self.args['signature'] +                if identity == '': +                    identity = 'Developer ID Application' + +                # Look for an environment variable set via build.sh when running in Team City. +                try: +                    build_secrets_checkout = os.environ['build_secrets_checkout'] +                except KeyError: +                    pass +                else: +                    # variable found so use it to unlock keychain followed by codesign +                    home_path = os.environ['HOME'] +                    keychain_pwd_path = os.path.join(build_secrets_checkout,'code-signing-osx','password.txt') +                    keychain_pwd = open(keychain_pwd_path).read().rstrip() + +                    self.run_command('security unlock-keychain -p "%s" "%s/Library/Keychains/viewer.keychain"' % ( keychain_pwd, home_path ) ) +                    signed=False +                    sign_attempts=3 +                    sign_retry_wait=15 +                    while (not signed) and (sign_attempts > 0): +                        try: +                            sign_attempts-=1; +                            self.run_command( +                               'codesign --verbose --deep --force --keychain "%(home_path)s/Library/Keychains/viewer.keychain" --sign %(identity)r %(bundle)r' % { +                                   'home_path' : home_path, +                                   'identity': identity, +                                   'bundle': app_in_dmg +                                   }) +                            signed=True # if no exception was raised, the codesign worked +                        except ManifestError, err: +                            if sign_attempts: +                                print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" % sign_retry_wait +                                time.sleep(sign_retry_wait) +                                sign_retry_wait*=2 +                            else: +                                print >> sys.stderr, "Maximum codesign attempts exceeded; giving up" +                                raise +                    self.run_command('spctl -a -texec -vv %(bundle)r' % { 'bundle': app_in_dmg }) + +            imagename="SecondLife_" + '_'.join(self.args['version']) + +          finally:              # Unmount the image even if exceptions from any of the above               self.run_command('hdiutil detach -force %r' % devfile) @@ -995,6 +958,11 @@ class Darwin_i386_Manifest(ViewerManifest):  class LinuxManifest(ViewerManifest):      def construct(self):          super(LinuxManifest, self).construct() + +        pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') +        relpkgdir = os.path.join(pkgdir, "lib", "release") +        debpkgdir = os.path.join(pkgdir, "lib", "debug") +          self.path("licenses-linux.txt","licenses.txt")          if self.prefix("linux_tools", dst=""):              self.path("client-readme.txt","README-linux.txt") @@ -1013,7 +981,7 @@ class LinuxManifest(ViewerManifest):          if self.prefix(src="", dst="bin"):              self.path("secondlife-bin","do-not-directly-run-secondlife-bin")              self.path("../linux_crash_logger/linux-crash-logger","linux-crash-logger.bin") -            self.path2basename("../llplugin/slplugin", "SLPlugin") +            self.path2basename(pkgdir, "SLPlugin")              self.path2basename("../viewer_components/updater/scripts/linux", "update_install")              self.end_prefix("bin") @@ -1033,9 +1001,9 @@ class LinuxManifest(ViewerManifest):              self.end_prefix(icon_path)          # plugins -        if self.prefix(src="", dst="bin/llplugin"): -            self.path2basename("../media_plugins/webkit", "libmedia_plugin_webkit.so") -            self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so") +        if self.prefix(src=os.path.join(pkgdir, "llplugin"), dst="bin/llplugin"): +            self.path("libmedia_plugin_webkit.so") +            self.path("libmedia_plugin_gstreamer.so")              self.end_prefix("bin/llplugin")          # llcommon @@ -1097,7 +1065,11 @@ class Linux_i686_Manifest(LinuxManifest):      def construct(self):          super(Linux_i686_Manifest, self).construct() -        if self.prefix("../packages/lib/release", dst="lib"): +        pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') +        relpkgdir = os.path.join(pkgdir, "lib", "release") +        debpkgdir = os.path.join(pkgdir, "lib", "debug") + +        if self.prefix(relpkgdir, dst="lib"):              self.path("libapr-1.so")              self.path("libapr-1.so.0")              self.path("libapr-1.so.0.4.5") @@ -1117,8 +1089,8 @@ class Linux_i686_Manifest(LinuxManifest):              self.path("libfusion-1.4.so.5")              self.path("libdirect-1.4.so.5*")              self.path("libhunspell-1.3.so*") -            self.path("libalut.so") -            self.path("libopenal.so", "libopenal.so.1") +            self.path("libalut.so*") +            self.path("libopenal.so*")              self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname              # KLUDGE: As of 2012-04-11, the 'fontconfig' package installs              # libfontconfig.so.1.4.4, along with symlinks libfontconfig.so.1 @@ -1160,10 +1132,10 @@ class Linux_i686_Manifest(LinuxManifest):              self.end_prefix("lib")              # Vivox runtimes -            if self.prefix(src="../packages/lib/release", dst="bin"): +            if self.prefix(src=relpkgdir, dst="bin"):                  self.path("SLVoice")                  self.end_prefix() -            if self.prefix(src="../packages/lib/release", dst="lib"): +            if self.prefix(src=relpkgdir, dst="lib"):                  self.path("libortp.so")                  self.path("libsndfile.so.1")                  #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib @@ -1172,7 +1144,7 @@ class Linux_i686_Manifest(LinuxManifest):                  self.end_prefix("lib")              # plugin runtime -            if self.prefix(src="../packages/lib/release", dst="lib"): +            if self.prefix(src=os.path.join(pkgdir, "lib"), dst="lib"):                  self.path("libQtCore.so*")                  self.path("libQtGui.so*")                  self.path("libQtNetwork.so*") @@ -1183,7 +1155,8 @@ class Linux_i686_Manifest(LinuxManifest):                  self.end_prefix("lib")              # For WebKit/Qt plugin runtimes (image format plugins) -            if self.prefix(src="../packages/plugins/imageformats", dst="bin/llplugin/imageformats"): +            if self.prefix(src=os.path.join(pkgdir, "llplugin", "imageformats"), +                           dst="bin/llplugin/imageformats"):                  self.path("libqgif.so")                  self.path("libqico.so")                  self.path("libqjpeg.so") @@ -1193,7 +1166,8 @@ class Linux_i686_Manifest(LinuxManifest):                  self.end_prefix("bin/llplugin/imageformats")              # For WebKit/Qt plugin runtimes (codec/character encoding plugins) -            if self.prefix(src="../packages/plugins/codecs", dst="bin/llplugin/codecs"): +            if self.prefix(src=os.path.join(pkgdir, "llplugin", "codecs"), +                           dst="bin/llplugin/codecs"):                  self.path("libqcncodecs.so")                  self.path("libqjpcodecs.so")                  self.path("libqkrcodecs.so") diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt index 62b1d9db62..01d1d830a2 100755 --- a/indra/test/CMakeLists.txt +++ b/indra/test/CMakeLists.txt @@ -1,6 +1,6 @@  # -*- cmake -*- -project (test) +project (lltest)  include(00-Common)  include(LLCommon) @@ -80,9 +80,9 @@ set_source_files_properties(${test_HEADER_FILES}  list(APPEND test_SOURCE_FILES ${test_HEADER_FILES}) -add_executable(test ${test_SOURCE_FILES}) +add_executable(lltest ${test_SOURCE_FILES}) -target_link_libraries(test +target_link_libraries(lltest      ${LLDATABASE_LIBRARIES}      ${LLINVENTORY_LIBRARIES}      ${LLMESSAGE_LIBRARIES} @@ -102,14 +102,14 @@ target_link_libraries(test      )  if (WINDOWS) -  set_target_properties(test +  set_target_properties(lltest            PROPERTIES             LINK_FLAGS "/NODEFAULTLIB:LIBCMT"            LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\""            )  endif (WINDOWS) -get_target_property(TEST_EXE test LOCATION) +set(TEST_EXE $<TARGET_FILE:lltest>)  SET_TEST_PATH(DYLD_LIBRARY_PATH) @@ -122,7 +122,7 @@ LL_TEST_COMMAND(command  ADD_CUSTOM_COMMAND(    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt    COMMAND ${command} -  DEPENDS test +  DEPENDS lltest    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}    COMMENT "C++ unit tests"    ) diff --git a/indra/test/llbuffer_tut.cpp b/indra/test/llbuffer_tut.cpp index a25fdebb7f..9b8aae6a73 100755 --- a/indra/test/llbuffer_tut.cpp +++ b/indra/test/llbuffer_tut.cpp @@ -27,6 +27,7 @@   */  #include <tut/tut.hpp> +  #include "linden_common.h"  #include "lltut.h"  #include "llbuffer.h" diff --git a/indra/test/llevents_tut.cpp b/indra/test/llevents_tut.cpp index a9114075fc..16edab6282 100755 --- a/indra/test/llevents_tut.cpp +++ b/indra/test/llevents_tut.cpp @@ -48,10 +48,10 @@  #include <boost/shared_ptr.hpp>  #include <boost/assign/list_of.hpp>  // other Linden headers +#include "tests/listener.h"             // must PRECEDE lltut.h  #include "lltut.h"  #include "catch_and_store_what_in.h"  #include "stringize.h" -#include "tests/listener.h"  using boost::assign::list_of; diff --git a/indra/test/llmessageconfig_tut.cpp b/indra/test/llmessageconfig_tut.cpp index 8088ce8558..df2151b1b1 100755 --- a/indra/test/llmessageconfig_tut.cpp +++ b/indra/test/llmessageconfig_tut.cpp @@ -68,7 +68,7 @@ namespace tut  		void writeConfigFile(const LLSD& config)  		{ -			llofstream file((mTestConfigDir + "/message.xml")); +			llofstream file((mTestConfigDir + "/message.xml").c_str());  			if (file.is_open())  			{  				LLSDSerialize::toPrettyXML(config, file); diff --git a/indra/test/llpermissions_tut.cpp b/indra/test/llpermissions_tut.cpp index 8d8d47a667..fa4b085fd3 100755 --- a/indra/test/llpermissions_tut.cpp +++ b/indra/test/llpermissions_tut.cpp @@ -28,7 +28,9 @@  #include <tut/tut.hpp>  #include "linden_common.h" +  #include "lltut.h" +  #include "message.h"  #include "llpermissions.h" diff --git a/indra/test/llsd_new_tut.cpp b/indra/test/llsd_new_tut.cpp index 03df1d339b..458df3361e 100755 --- a/indra/test/llsd_new_tut.cpp +++ b/indra/test/llsd_new_tut.cpp @@ -33,18 +33,7 @@  #include "llsdtraits.h"  #include "llstring.h" -#if LL_WINDOWS -#include <float.h> -namespace -{ -	int fpclassify(double x) -	{ -		return _fpclass(x); -	} -} -#else  using std::fpclassify; -#endif  namespace tut  { @@ -112,15 +101,15 @@ namespace tut  	SDTestGroup sdTestGroup("LLSD(new)"); -	template<> template<> -	void SDTestObject::test<1>() -		// construction and test of undefined -	{ -		SDCleanupCheck check; -		 -		LLSD u; -		ensure("is undefined", u.isUndefined()); -	} +	// template<> template<> +	// void SDTestObject::test<1>() +	// 	// construction and test of undefined +	// { +	// 	SDCleanupCheck check; +		 +	// 	LLSD u; +	// 	ensure("is undefined", u.isUndefined()); +	// }  	template<> template<>  	void SDTestObject::test<2>() @@ -277,8 +266,18 @@ namespace tut  		v = 0.5;		checkConversions("point5", v, true, 0, 0.5, "0.5");  		v = 0.9;		checkConversions("point9", v, true, 0, 0.9, "0.9");  		v = -3.9;		checkConversions("neg3dot9", v, true, -3, -3.9, "-3.9"); -		v = sqrt(-1.0);	checkConversions("NaN", v, false, 0, sqrt(-1.0), "nan"); -		 +		// Get rid of NaN test. First, some libraries don't reliably return +		// NaN for sqrt(-1.0) -- meaning that I don't even know how to +		// portably, reliably produce a NaN value. Second, we observe failures +		// on different platforms in the asString() test. But LLSD's +		// ImplReal::asString() does not itself recognize NaN! It merely +		// passes the value through to llformat(), which passes it through to +		// the library vsnprintf(). That is, even when we do produce NaN, +		// we're not testing any LLSD code: we're testing the local library's +		// vsnprintf() function, which (empirically) produces idiosyncratic +		// results. This is just not a good test case. +//		v = sqrt(-1.0);	checkConversions("NaN", v, false, 0, sqrt(-1.0), "nan"); +  		v = "";			checkConversions("empty", v, false, 0, 0.0, "");  		v = "0";		checkConversions("digit0", v, true, 0, 0.0, "0");  		v = "10";		checkConversions("digit10", v, true, 10, 10.0, "10"); diff --git a/indra/test/lltranscode_tut.cpp b/indra/test/lltranscode_tut.cpp index 2431afad27..3fce6e0e2b 100755 --- a/indra/test/lltranscode_tut.cpp +++ b/indra/test/lltranscode_tut.cpp @@ -49,9 +49,6 @@ namespace tut  	template<> template<>  	void LLTranscodeTestObject::test<1>()  	{ -#if LL_WINDOWS -		skip("Windows APR libs can't transcode."); -#endif  		// Test utf8  		std::stringstream input;  		std::stringstream output; diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp index c43a8f0c7d..5a8ee87afd 100755 --- a/indra/test/lltut.cpp +++ b/indra/test/lltut.cpp @@ -38,43 +38,44 @@  namespace tut  { -	void ensure_equals(const char* msg, const LLDate& actual, +	void ensure_equals(const std::string& msg, const LLDate& actual,  		const LLDate& expected)  	{  		ensure_equals(msg,  			actual.secondsSinceEpoch(), expected.secondsSinceEpoch());  	} -	void ensure_equals(const char* msg, const LLURI& actual, +	void ensure_equals(const std::string& msg, const LLURI& actual,  		const LLURI& expected)  	{  		ensure_equals(msg,  			actual.asString(), expected.asString());  	} -	void ensure_equals(const char* msg, -		const std::vector<U8>& actual, const std::vector<U8>& expected) +	// The lexical param types here intentionally diverge from the declaration +	// in our header file. In lltut.h, LLSD is only a forward-declared type; +	// we have no access to its LLSD::Binary nested type, and so must restate +	// it explicitly to declare this overload. However, an overload that does +	// NOT match LLSD::Binary does us no good whatsoever: it would never be +	// engaged. Stating LLSD::Binary for this definition at least means that +	// if the LLSD::Binary type ever diverges from what we expect in lltut.h, +	// that divergence will produce an error: no definition will match that +	// declaration. +	void ensure_equals(const std::string& msg, +		const LLSD::Binary& actual, const LLSD::Binary& expected)  	{ -		std::string s(msg); +		ensure_equals(msg + " size", actual.size(), expected.size()); -		ensure_equals(s + " size", actual.size(), expected.size()); -		 -		std::vector<U8>::const_iterator i, j; +		LLSD::Binary::const_iterator i, j;  		int k;  		for (i = actual.begin(), j = expected.begin(), k = 0;  			i != actual.end();  			++i, ++j, ++k)  		{ -			ensure_equals(s + " field", *i, *j); +			ensure_equals(msg + " field", *i, *j);  		}  	} -	void ensure_equals(const char* m, const LLSD& actual, -		const LLSD& expected) -    { -        ensure_equals(std::string(m), actual, expected); -    } -  	void ensure_equals(const std::string& msg, const LLSD& actual,  		const LLSD& expected)  	{ @@ -158,8 +159,8 @@ namespace tut  		if( actual.find(expectedStart, 0) != 0 )  		{  			std::stringstream ss; -			ss << msg << ": " << "expected to find " << expectedStart -				<< " at start of actual " << actual; +			ss << msg << ": " << "expected to find '" << expectedStart +			   << "' at start of actual '" << actual << "'";  			throw failure(ss.str().c_str());  		}  	} @@ -172,8 +173,8 @@ namespace tut  				!= (actual.size() - expectedEnd.size()) )  		{  			std::stringstream ss; -			ss << msg << ": " << "expected to find " << expectedEnd -				<< " at end of actual " << actual; +			ss << msg << ": " << "expected to find '" << expectedEnd +			   << "' at end of actual '" << actual << "'";  			throw failure(ss.str().c_str());  		}  	} @@ -184,8 +185,8 @@ namespace tut  		if( actual.find(expectedSubString, 0) == std::string::npos )  		{  			std::stringstream ss; -			ss << msg << ": " << "expected to find " << expectedSubString -				<< " in actual " << actual; +			ss << msg << ": " << "expected to find '" << expectedSubString +			   << "' in actual '" << actual << "'";  			throw failure(ss.str().c_str());  		}  	} diff --git a/indra/test/lltut.h b/indra/test/lltut.h index 243e869be7..9835565bb6 100755 --- a/indra/test/lltut.h +++ b/indra/test/lltut.h @@ -30,8 +30,6 @@  #define LL_LLTUT_H  #include "is_approx_equal_fraction.h" // instead of llmath.h - -#include <tut/tut.hpp>  #include <cstring>  class LLDate; @@ -40,6 +38,55 @@ class LLURI;  namespace tut  { +	void ensure_equals(const std::string& msg, +		const LLDate& actual, const LLDate& expected); + +	void ensure_equals(const std::string& msg, +		const LLURI& actual, const LLURI& expected); + +	// std::vector<U8> is the current definition of LLSD::Binary. Because +	// we're only forward-declaring LLSD in this header file, we can't +	// directly reference that nested type. If the build complains that +	// there's no definition for this declaration, it could be that +	// LLSD::Binary has changed, and that this declaration must be adjusted to +	// match. +	void ensure_equals(const std::string& msg, +		const std::vector<U8>& actual, const std::vector<U8>& expected); + +	void ensure_equals(const std::string& msg, +		const LLSD& actual, const LLSD& expected); + +	void ensure_starts_with(const std::string& msg, +		const std::string& actual, const std::string& expectedStart); + +	void ensure_ends_with(const std::string& msg, +		const std::string& actual, const std::string& expectedEnd); + +	void ensure_contains(const std::string& msg, +		const std::string& actual, const std::string& expectedSubString); + +	void ensure_does_not_contain(const std::string& msg, +		const std::string& actual, const std::string& expectedSubString); +} + +// This is an odd place to #include an important contributor -- but the usual +// rules are reversed here. Instead of the overloads above referencing tut.hpp +// features, we need calls in tut.hpp template functions to dispatch to our +// overloads declared above. + +// turn off warnings about unused functions from clang for tut package +#if __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-function" +#endif +#include <tut/tut.hpp> +#if __clang__ +#pragma clang diagnostic pop +#endif + +// The functions BELOW this point actually consume tut.hpp functionality. +namespace tut +{  	inline void ensure_approximately_equals(const char* msg, F64 actual, F64 expected, U32 frac_bits)  	{  		if(!is_approx_equal_fraction(actual, expected, frac_bits)) @@ -107,40 +154,6 @@ namespace tut  	{  		ensure_not_equals(NULL, actual, expected);  	} -	 -	 -	template <class T,class Q> -	void ensure_equals(const std::string& msg, -		const Q& actual,const T& expected) -		{ ensure_equals(msg.c_str(), actual, expected); } - -	void ensure_equals(const char* msg, -		const LLDate& actual, const LLDate& expected); - -	void ensure_equals(const char* msg, -		const LLURI& actual, const LLURI& expected); -		 -	void ensure_equals(const char* msg, -		const std::vector<U8>& actual, const std::vector<U8>& expected); - -	void ensure_equals(const char* msg, -		const LLSD& actual, const LLSD& expected); - -	void ensure_equals(const std::string& msg, -		const LLSD& actual, const LLSD& expected); -	 -	void ensure_starts_with(const std::string& msg, -		const std::string& actual, const std::string& expectedStart); - -	void ensure_ends_with(const std::string& msg, -		const std::string& actual, const std::string& expectedEnd); - -	void ensure_contains(const std::string& msg, -		const std::string& actual, const std::string& expectedSubString); - -	void ensure_does_not_contain(const std::string& msg, -		const std::string& actual, const std::string& expectedSubString);  } -  #endif // LL_LLTUT_H diff --git a/indra/test/message_tut.cpp b/indra/test/message_tut.cpp index 57e423e550..aa23699de0 100755 --- a/indra/test/message_tut.cpp +++ b/indra/test/message_tut.cpp @@ -119,9 +119,8 @@ namespace tut  		void writeConfigFile(const LLSD& config)  		{ -			std::ostringstream ostr; -			ostr << mTestConfigDir << mSep << "message.xml"; -			llofstream file(ostr.str()); +			std::string ostr(mTestConfigDir + mSep + "message.xml"); +			llofstream file(ostr.c_str());  			if (file.is_open())  			{  				LLSDSerialize::toPrettyXML(config, file); diff --git a/indra/test/namedtempfile.h b/indra/test/namedtempfile.h index 6069064627..7d59cad32c 100755 --- a/indra/test/namedtempfile.h +++ b/indra/test/namedtempfile.h @@ -17,8 +17,8 @@  #include "apr_file_io.h"  #include <string>  #include <boost/function.hpp> -#include <boost/lambda/lambda.hpp> -#include <boost/lambda/bind.hpp> +#include <boost/phoenix/core/argument.hpp> +#include <boost/phoenix/operator/bitwise.hpp>  #include <boost/noncopyable.hpp>  #include <iostream>  #include <sstream> @@ -34,19 +34,19 @@ public:      NamedTempFile(const std::string& pfx, const std::string& content, apr_pool_t* pool=gAPRPoolp):          mPool(pool)      { -        createFile(pfx, boost::lambda::_1 << content); +        createFile(pfx, boost::phoenix::placeholders::arg1 << content);      }      // Disambiguate when passing string literal      NamedTempFile(const std::string& pfx, const char* content, apr_pool_t* pool=gAPRPoolp):          mPool(pool)      { -        createFile(pfx, boost::lambda::_1 << content); +        createFile(pfx, boost::phoenix::placeholders::arg1 << content);      }      // Function that accepts an ostream ref and (presumably) writes stuff to      // it, e.g.: -    // (boost::lambda::_1 << "the value is " << 17 << '\n') +    // (boost::phoenix::placeholders::arg1 << "the value is " << 17 << '\n')      typedef boost::function<void(std::ostream&)> Streamer;      NamedTempFile(const std::string& pfx, const Streamer& func, apr_pool_t* pool=gAPRPoolp): diff --git a/indra/test_apps/llfbconnecttest/CMakeLists.txt b/indra/test_apps/llfbconnecttest/CMakeLists.txt index 512bf202ae..25aaebb783 100644 --- a/indra/test_apps/llfbconnecttest/CMakeLists.txt +++ b/indra/test_apps/llfbconnecttest/CMakeLists.txt @@ -109,27 +109,27 @@ else (DARWIN)    )  endif (DARWIN) -get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION) +set(BUILT_SLPLUGIN $<TARGET_FILE:SLPlugin>)  add_custom_command(TARGET llfbconnecttest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_SLPLUGIN}  ${PLUGINS_DESTINATION_DIR}    DEPENDS ${BUILT_SLPLUGIN}  ) -get_target_property(BUILT_LLCOMMON llcommon LOCATION) +set(BUILT_LLCOMMON $<TARGET_FILE:llcommon>)  add_custom_command(TARGET llfbconnecttest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON}  ${PLUGINS_DESTINATION_DIR}    DEPENDS ${BUILT_LLCOMMON}  ) -get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) +set(BUILT_WEBKIT_PLUGIN $<TARGET_FILE:media_plugin_webkit>)  add_custom_command(TARGET llfbconnecttest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN}  ${PLUGINS_DESTINATION_DIR}    DEPENDS ${BUILT_WEBKIT_PLUGIN}  )  # copy over bookmarks file if llfbconnecttest gets built -get_target_property(BUILT_LLFBCONNECTTEST llfbconnecttest LOCATION) +set(BUILT_LLFBCONNECTTEST $<TARGET_FILE:llfbconnecttest>)  add_custom_command(TARGET llfbconnecttest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/    DEPENDS ${BUILT_LLFBCONNECTTEST} diff --git a/indra/test_apps/llfbconnecttest/llfbconnecttest.h b/indra/test_apps/llfbconnecttest/llfbconnecttest.h index 6f442a55b3..77e4d096d0 100644 --- a/indra/test_apps/llfbconnecttest/llfbconnecttest.h +++ b/indra/test_apps/llfbconnecttest/llfbconnecttest.h @@ -144,43 +144,14 @@ class LLFBConnectTest : public LLPluginClassMediaOwner  		float mDistanceCameraToSelectedGeometry; -		int mIdControlAddPanel; -		int mIdControlRemPanel; -  		std::vector< std::pair< std::string, std::string > > mBookmarks;  		GLUI_Listbox* mBookmarkList;  		int mIdBookmarks;  		int mIdUrlEdit;  		GLUI_EditText* mUrlEdit; -        //int mIdUrlInitHistoryEdit; -		//GLUI_EditText* mUrlInitHistoryEdit;  		int mSelBookmark; -		//int mIdRandomPanelCount; -		//int mRandomPanelCount; -		//int mIdRandomBookmarks; -		//int mRandomBookmarks; -		//int mIdDisableTimeout; -		//int mDisableTimeout; -		//int mIdUsePluginReadThread; -		//int mUsePluginReadThread; -		//int mIdLargePanelSpacing; -		//int mLargePanelSpacing; -		//int mIdControlCrashPlugin; -		//int mIdControlHangPlugin; -		int mIdControlExitApp; -		//GLUI* mGluiMediaTimeControlWindow; -		//int mIdMediaTimeControlPlay; -		//int mIdMediaTimeControlLoop; -		//int mIdMediaTimeControlPause; -		//int mIdMediaTimeControlStop; -		//int mIdMediaTimeControlSeek; -		//int mIdMediaTimeControlVolume; -		//int mMediaTimeControlVolume; -		//int mIdMediaTimeControlSeekSeconds; -		//int mMediaTimeControlSeekSeconds; -		//int mIdMediaTimeControlRewind; -		//int mIdMediaTimeControlFastForward; +		int mIdControlExitApp;  		GLUI* mGluiMediaBrowserControlWindow;  		int mIdMediaBrowserControlBack; @@ -188,16 +159,11 @@ class LLFBConnectTest : public LLPluginClassMediaOwner  		int mIdMediaBrowserControlStop;  		int mIdMediaBrowserControlForward;  		GLUI_Button* mMediaBrowserControlForwardButton; -		bool mGluiMediaTimeControlWindowFlag;  		bool mGluiMediaBrowserControlWindowFlag;  		bool mMediaBrowserControlBackButtonFlag;  		bool mMediaBrowserControlForwardButtonFlag;  		int mIdMediaBrowserControlHome;  		int mIdMediaBrowserControlReload; -		int mIdMediaBrowserControlClearCache; -		int mIdMediaBrowserControlClearCookies; -		int mIdMediaBrowserControlEnableCookies; -		int mMediaBrowserControlEnableCookies;  		GLUI* mBottomGLUIWindow;  		GLUI_StaticText* mStatusText; diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt index 9d44563e26..0c8bdc464d 100755 --- a/indra/test_apps/llplugintest/CMakeLists.txt +++ b/indra/test_apps/llplugintest/CMakeLists.txt @@ -334,40 +334,40 @@ else (DARWIN)    )  endif (DARWIN) -get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION) +set(BUILT_SLPLUGIN $<TARGET_FILE:SLPlugin>)  add_custom_command(TARGET llmediaplugintest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_SLPLUGIN}  ${PLUGINS_DESTINATION_DIR}    DEPENDS ${BUILT_SLPLUGIN}  ) -get_target_property(BUILT_LLCOMMON llcommon LOCATION) +set(BUILT_LLCOMMON $<TARGET_FILE:llcommon>)  add_custom_command(TARGET llmediaplugintest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON}  ${PLUGINS_DESTINATION_DIR}    DEPENDS ${BUILT_LLCOMMON}  ) -get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) +set(BUILT_WEBKIT_PLUGIN $<TARGET_FILE:media_plugin_webkit>)  add_custom_command(TARGET llmediaplugintest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN}  ${PLUGINS_DESTINATION_DIR}    DEPENDS ${BUILT_WEBKIT_PLUGIN}  )  if (DARWIN OR WINDOWS) -  get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION) +  set(BUILT_QUICKTIME_PLUGIN $<TARGET_FILE:media_plugin_quicktime>)    add_custom_command(TARGET llmediaplugintest POST_BUILD      COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_QUICKTIME_PLUGIN}  ${PLUGINS_DESTINATION_DIR}      DEPENDS ${BUILT_QUICKTIME_PLUGIN}    )  endif (DARWIN OR WINDOWS) -get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION) +set(BUILT_EXAMPLE_PLUGIN $<TARGET_FILE:media_plugin_example>)  add_custom_command(TARGET llmediaplugintest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN}  ${PLUGINS_DESTINATION_DIR}    DEPENDS ${BUILT_EXAMPLE_PLUGIN}  )  # copy over bookmarks file if llmediaplugintest gets built -get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION) +set(BUILT_LLMEDIAPLUGINTEST $<TARGET_FILE:llmediaplugintest>)  add_custom_command(TARGET llmediaplugintest POST_BUILD    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/    DEPENDS ${BUILT_LLMEDIAPLUGINTEST} diff --git a/indra/tools/vstool/VSTool.exe b/indra/tools/vstool/VSTool.exe Binary files differindex 8be428614e..854290b90a 100755 --- a/indra/tools/vstool/VSTool.exe +++ b/indra/tools/vstool/VSTool.exe diff --git a/indra/tools/vstool/main.cs b/indra/tools/vstool/main.cs index cc73261e30..ef2e582b90 100755 --- a/indra/tools/vstool/main.cs +++ b/indra/tools/vstool/main.cs @@ -555,6 +555,10 @@ namespace VSTool                          version = "VC100";
                          break;
 +                    case "12.00":
 +                        version = "VC120";
 +                        break;
 +
                      default:
                          throw new ApplicationException("Unknown .sln version: " + format);
                  }
 @@ -595,6 +599,10 @@ namespace VSTool                      progid = "VisualStudio.DTE.10.0";
                      break;
 +                case "VC120":
 +                    progid = "VisualStudio.DTE.12.0";
 +                    break;
 +
                  default:
                      throw new ApplicationException("Can't handle VS version: " + version);
              }
 diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt index ce80d55829..c152f7c0a6 100755 --- a/indra/viewer_components/login/CMakeLists.txt +++ b/indra/viewer_components/login/CMakeLists.txt @@ -46,6 +46,7 @@ target_link_libraries(lllogin      ${LLMATH_LIBRARIES}      ${LLXML_LIBRARIES}      ${BOOST_CONTEXT_LIBRARY} +    ${BOOST_THREAD_LIBRARY}      ${BOOST_COROUTINE_LIBRARY}      ${BOOST_SYSTEM_LIBRARY}      ) @@ -57,7 +58,7 @@ if(LL_TESTS)    set_source_files_properties(      lllogin.cpp      PROPERTIES -    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_CONTEXT_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}" +    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_COROUTINE_LIBRARY};${BOOST_CONTEXT_LIBRARY};${BOOST_THREAD_LIBRARY};${BOOST_SYSTEM_LIBRARY}"      )    LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}") diff --git a/indra/viewer_components/updater/llupdatedownloader.cpp b/indra/viewer_components/updater/llupdatedownloader.cpp index c42112af80..f868e5cc2c 100755 --- a/indra/viewer_components/updater/llupdatedownloader.cpp +++ b/indra/viewer_components/updater/llupdatedownloader.cpp @@ -270,7 +270,7 @@ void LLUpdateDownloader::Implementation::resume(void)  	}  	mDownloadRecordPath = downloadMarkerPath(); -	llifstream dataStream(mDownloadRecordPath); +	llifstream dataStream(mDownloadRecordPath.c_str());  	if(!dataStream)  	{  		mClient.downloadError("no download marker"); @@ -362,7 +362,7 @@ size_t LLUpdateDownloader::Implementation::onHeader(void * buffer, size_t size)  			LL_INFOS("UpdaterService") << "download size is " << size << LL_ENDL;  			mDownloadData["size"] = LLSD(LLSD::Integer(size)); -			llofstream odataStream(mDownloadRecordPath); +			llofstream odataStream(mDownloadRecordPath.c_str());  			LLSDSerialize::toPrettyXML(mDownloadData, odataStream);  		} catch (std::exception const & e) {  			LL_WARNS("UpdaterService") << "unable to read content length (" @@ -513,7 +513,7 @@ void LLUpdateDownloader::Implementation::resumeDownloading(size_t startByte)  	}  	throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_HTTPHEADER, mHeaderList)); -	mDownloadStream.open(mDownloadData["path"].asString(), +	mDownloadStream.open(mDownloadData["path"].asString().c_str(),  						 std::ios_base::out | std::ios_base::binary | std::ios_base::app);  	start();  } @@ -534,10 +534,10 @@ void LLUpdateDownloader::Implementation::startDownloading(LLURI const & uri, std  		<< " from " << uri.asString() << LL_ENDL;  	LL_INFOS("UpdaterService") << "hash of file is " << hash << LL_ENDL; -	llofstream dataStream(mDownloadRecordPath); +	llofstream dataStream(mDownloadRecordPath.c_str());  	LLSDSerialize::toPrettyXML(mDownloadData, dataStream); -	mDownloadStream.open(filePath, std::ios_base::out | std::ios_base::binary); +	mDownloadStream.open(filePath.c_str(), std::ios_base::out | std::ios_base::binary);  	initializeCurlGet(uri.asString(), true);  	start();  } @@ -570,7 +570,7 @@ bool LLUpdateDownloader::Implementation::validateOrRemove(const std::string& fil  bool LLUpdateDownloader::Implementation::validateDownload(const std::string& filePath)  { -	llifstream fileStream(filePath, std::ios_base::in | std::ios_base::binary); +	llifstream fileStream(filePath.c_str(), std::ios_base::in | std::ios_base::binary);  	if(!fileStream)  	{  		LL_INFOS("UpdaterService") << "can't open " << filePath << ", invalid" << LL_ENDL; diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index cb3be5bbdc..c152493a51 100755 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -285,7 +285,7 @@ bool LLUpdaterServiceImpl::checkForInstall(bool launchInstaller)  {  	bool foundInstall = false; // return true if install is found. -	llifstream update_marker(update_marker_path(),  +	llifstream update_marker(update_marker_path().c_str(),   							 std::ios::in | std::ios::binary);  	if(update_marker.is_open()) @@ -365,7 +365,7 @@ bool LLUpdaterServiceImpl::checkForResume()  	std::string download_marker_path = mUpdateDownloader.downloadMarkerPath();  	if(LLFile::isfile(download_marker_path))  	{ -		llifstream download_marker_stream(download_marker_path,  +		llifstream download_marker_stream(download_marker_path.c_str(),   								 std::ios::in | std::ios::binary);  		if(download_marker_stream.is_open())  		{ @@ -460,7 +460,7 @@ void LLUpdaterServiceImpl::downloadComplete(LLSD const & data)  	// Save out the download data to the SecondLifeUpdateReady  	// marker file.  -	llofstream update_marker(update_marker_path()); +	llofstream update_marker(update_marker_path().c_str());  	LLSDSerialize::toPrettyXML(data, update_marker);  	LLSD event; @@ -558,7 +558,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)  			LL_DEBUGS("UpdaterService") << "found marker " << ll_install_failed_marker_path() << LL_ENDL;  			int requiredValue = 0;   			{ -				llifstream stream(ll_install_failed_marker_path()); +				llifstream stream(ll_install_failed_marker_path().c_str());  				stream >> requiredValue;  				if(stream.fail())  				{ diff --git a/scripts/automated_build_scripts/opensrc-build.sh b/scripts/automated_build_scripts/opensrc-build.sh deleted file mode 100755 index c1b592a972..0000000000 --- a/scripts/automated_build_scripts/opensrc-build.sh +++ /dev/null @@ -1,391 +0,0 @@ -#!/bin/sh - -# This is the build script used by Linden Lab's autmated build system. -# - -set -x - -export PATH=/bin:/usr/bin:$PATH -arch=`uname | cut -b-6` -here=`echo $0 | sed 's:[^/]*$:.:'` -year=`date +%Y` -branch=`svn info | grep '^URL:' | sed 's:.*/::'` -revision=`svn info | grep '^Revision:' | sed 's/.*: //'` - -[ x"$WGET_CACHE" = x ] && export WGET_CACHE=/var/tmp/parabuild/wget -[ x"$S3GET_URL" = x ]  && export S3GET_URL=http://viewer-source-downloads.s3.amazonaws.com/$year -[ x"$S3PUT_URL" = x ]  && export S3PUT_URL=https://s3.amazonaws.com/viewer-source-downloads/$year -[ x"$PUBLIC_URL" = x ] && export PUBLIC_URL=http://secondlife.com/developers/opensource/downloads/$year -[ x"$PUBLIC_EMAIL" = x ] && export PUBLIC_EMAIL=sldev-commits@lists.secondlife.com - -# Make sure command worked and bail out if not, reporting failure to parabuild -fail() -{ -  release_lock -  echo "BUILD FAILED" $@ -  exit 1 -} -   -pass()  -{  -  release_lock -  echo "BUILD SUCCESSFUL" -  exit 0 -} - -# Locking to avoid contention with u-s-c -LOCK_CREATE=/usr/bin/lockfile-create -LOCK_TOUCH=/usr/bin/lockfile-touch -LOCK_REMOVE=/usr/bin/lockfile-remove -LOCK_PROCESS= - -locking_available() -{ -  test -x "$LOCK_CREATE"\ -    -a -x "$LOCK_TOUCH"\ -    -a -x "$LOCK_REMOVE" -} - -acquire_lock() -{ -  if locking_available  -  then -    if "$LOCK_CREATE" /var/lock/update-system-config --retry 99 -    then -      "$LOCK_TOUCH" /var/lock/update-system-config & -      LOCK_PROCESS="$!" -    else -      fail acquire lock -    fi -  else -    true -  fi -} - -release_lock() -{ -  if locking_available -  then -    if test x"$LOCK_PROCESS" != x -    then -      kill "$LOCK_PROCESS" -      "$LOCK_REMOVE" /var/lock/update-system-config -    else -      echo No Lock Acquired >&2 -    fi -  else -    true -  fi -} - -get_asset() -{ -  mkdir -p "$WGET_CACHE" || fail creating WGET_CACHE -  local tarball=`basename "$1"` -  test -r "$WGET_CACHE/$tarball" || ( cd "$WGET_CACHE" && curl --location --remote-name "$1" || fail getting $1 ) -  case "$tarball" in -  *.zip) unzip -qq -d .. -o "$WGET_CACHE/$tarball" || fail unzip $tarball ;; -  *.tar.gz|*.tgz) tar -C .. -xzf  "$WGET_CACHE/$tarball" || fail untar $tarball ;; -  *) fail unrecognized filetype: $tarball ;; -  esac -} - -s3_available() -{ -  test -x "$helpers/s3get.sh" -a -x "$helpers/s3put.sh" -a -r "$helpers/s3curl.pl" -} - -build_dir_Darwin() -{ -  echo build-darwin-universal -} - -build_dir_Linux() -{ -  echo viewer-linux-i686-`echo $1 | tr A-Z a-z` -} - -build_dir_CYGWIN() -{ -  echo build-vc80 -} - -installer_Darwin() -{ -  ls -1td "`build_dir_Darwin Release`/newview/"*.dmg 2>/dev/null | sed 1q -} - -installer_Linux() -{ -  ls -1td "`build_dir_Linux Release`/newview/"*.tar.bz2 2>/dev/null | sed 1q -} - -installer_CYGWIN() -{ -  d=`build_dir_CYGWIN Release` -  p=`sed 's:.*=::' "$d/newview/Release/touched.bat"` -  echo "$d/newview/Release/$p" -} - -# deal with aborts etc.. -trap fail 1 2 3 14 15 - -# Check location -cd "$here/../.." - -test -x ../linden/scripts/automated_build_scripts/opensrc-build.sh\ - || fail 'The parent dir of your checkout needs to be named "linden"'  - -. doc/asset_urls.txt -get_asset "$SLASSET_ART" - - -# Set up platform specific stuff -case "$arch" in - -# Note that we can only build the "Release" variant for Darwin, because of a compiler bug: -# ld: bl out of range (-16777272 max is +/-16M) -#  from __static_initialization_and_destruction_0(int, int)at 0x033D319C -#  in __StaticInit of -#  indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/llvoicevisualizer.o -#  to ___cxa_atexit$island_2 at 0x023D50F8 -#  in __text of -#  indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/Second Life -#  in __static_initialization_and_destruction_0(int, int) -#  from indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/llvoicevisualizer.o - -Darwin) -  helpers=/usr/local/buildscripts/generic_vc -  variants="Release" -  cmake_generator="Xcode" -  fmod=fmodapi375mac -  fmod_tar="$fmod.zip" -  fmod_so=libfmod.a -  fmod_lib=lib -  target_dirs="libraries/universal-darwin/lib_debug -               libraries/universal-darwin/lib_release -               libraries/universal-darwin/lib_release_client" -  other_archs="$S3GET_URL/$branch/$revision/CYGWIN $S3GET_URL/$branch/$revision/Linux" -  mail="$helpers"/mail.py -  all_done="$helpers"/all_done.py -  get_asset "$SLASSET_LIBS_DARWIN" -  ;; - -CYGWIN) -  helpers=/cygdrive/c/buildscripts -  variants="Debug RelWithDebInfo Release" -  #variants="Release" -  cmake_generator="vc80" -  fmod=fmodapi375win -  fmod_tar=fmodapi375win.zip -  fmod_so=fmodvc.lib -  fmod_lib=lib -  target_dirs="libraries/i686-win32/lib/debug -               libraries/i686-win32/lib/release" -  other_archs="$S3GET_URL/$branch/$revision/Darwin $S3GET_URL/$branch/$revision/Linux" -  export PATH="/cygdrive/c/Python25:/cygdrive/c/Program Files/Cmake 2.6/bin":$PATH -  export PERL="/cygdrive/c/Perl/bin/perl.exe" -  export S3CURL="C:\\buildscripts\s3curl.pl" -  export CURL="C:\\cygwin\\bin\\curl.exe" -  mail="C:\\buildscripts\\mail.py" -  all_done="C:\\buildscripts\\all_done.py" -  get_asset "$SLASSET_LIBS_WIN32" -  ;; - -Linux) -  helpers=/var/opt/parabuild/buildscripts/generic_vc -  [ x"$CXX" = x ] && test -x /usr/bin/g++-4.1 && export CXX=/usr/bin/g++-4.1 -  acquire_lock -  variants="Debug RelWithDebInfo Release" -  #variants="Release" -  cmake_generator="Unix Makefiles" -  fmod=fmodapi375linux -  fmod_tar="$fmod".tar.gz -  fmod_so=libfmod-3.75.so -  fmod_lib=. -  target_dirs="libraries/i686-linux/lib_debug -               libraries/i686-linux/lib_release -               libraries/i686-linux/lib_release_client" -  other_archs="$S3GET_URL/$branch/$revision/Darwin $S3GET_URL/$branch/$revision/CYGWIN" -  mail="$helpers"/mail.py -  all_done="$helpers"/all_done.py -  # Change the DISTCC_DIR to be somewhere that the parabuild process can write to -  if test -r /etc/debian_version -  then -    [ x"$DISTCC_DIR" = x ] && export DISTCC_DIR=/var/tmp/parabuild -    case `cat /etc/debian_version` in -    3.*) [ x"$DISTCC_HOSTS" = x ]\ -         && export DISTCC_HOSTS="build-linux-1 -                                 build-linux-2 -                                 build-linux-3 -                                 build-linux-4 -                                 build-linux-5" ;; -    4.*) [ x"$DISTCC_HOSTS" = x ]\ -         && export DISTCC_HOSTS="build-linux-6 -                                 build-linux-7 -                                 build-linux-8 -                                 build-linux-9" ;; -    esac -  fi - -  get_asset "$SLASSET_LIBS_LINUXI386" -  ;; - -*) fail undefined $arch ;; -esac - -get_asset "http://www.fmod.org/index.php/release/version/$fmod_tar" - -# Special case for Mac... -case "$arch" in - -Darwin) -  if lipo -create -output "../$fmod"/api/$fmod_lib/libfmod-universal.a\ -     "../$fmod"/api/$fmod_lib/libfmod.a\ -     "../$fmod"/api/$fmod_lib/libfmodx86.a -  then -    mv "../$fmod"/api/$fmod_lib/libfmod.a "../$fmod"/api/$fmod_lib/libfmodppc.a -    mv "../$fmod"/api/$fmod_lib/libfmod-universal.a "../$fmod"/api/$fmod_lib/libfmod.a -    echo Created fat binary -  else -    fail running lipo -  fi -  ;; - -esac - -# ensure helpers are up to date -( cd "$helpers" && svn up ) - -# First, go into the directory where the code was checked out by Parabuild -cd indra - -# This is the way it works now, but it will soon work on a variant dependent way -for target_dir in $target_dirs -do -  mkdir -p "../$target_dir" -  cp -f "../../$fmod/api/$fmod_lib/$fmod_so"  "../$target_dir" -done -mkdir -p "../libraries/include" -cp -f "../../$fmod/api/inc/"*  "../libraries/include" - -# Special Windows case -test -r "../../$fmod/api/fmod.dll" && cp -f "../../$fmod/api/fmod.dll" newview - -# Now run the build command over all variants -succeeded=true -cp /dev/null build.log - -### TEST CODE - remove when done -### variants= -### echo "Artificial build failure to test notifications" > build.log -### succeeded=false -### END TEST CODE - -for variant in $variants -do -  build_dir=`build_dir_$arch $variant` -  rm -rf "$build_dir" -  # This is the way it will work in future -  #for target_dir in $target_dirs -  #do -  #  mkdir -p "$build_dir/$target_dir" -  #  cp "../../$fmod/api/$fmod_lib/$fmod_so"  "$build_dir/$target_dir" -  #done -  #mkdir -p "$build_dir/libraries/include" -  #cp "../../$fmod/api/inc/"*  "$build_dir/libraries/include" -  echo "==== $variant ====" >> build.log -  if ./develop.py \ -    --unattended \ -    --incredibuild \ -    -t $variant \ -    -G "$cmake_generator" \ -   configure \ -    -DPACKAGE:BOOL=ON >>build.log 2>&1 -  then -    if ./develop.py\ -         --unattended\ -         --incredibuild \ -         -t $variant\ -         -G "$cmake_generator" \ -       build package >>build.log 2>&1 -    then -      # run tests if needed -      true -    else -      succeeded=false -    fi -  else -    succeeded=false -  fi -done - -# check statuis and upload results to S3 -subject= -if $succeeded -then -  package=`installer_$arch` -  test -r "$package" || fail not found: $package -  package_file=`echo $package | sed 's:.*/::'` -  if s3_available -  then -    echo "$PUBLIC_URL/$branch/$revision/$package_file" > "$arch" -    echo "$PUBLIC_URL/$branch/$revision/good-build.$arch" >> "$arch" -    "$helpers/s3put.sh" "$package" "$S3PUT_URL/$branch/$revision/$package_file"    binary/octet-stream\ -	   || fail Uploading "$package" -    "$helpers/s3put.sh" build.log  "$S3PUT_URL/$branch/$revision/good-build.$arch" text/plain\ -	   || fail Uploading build.log -    "$helpers/s3put.sh" "$arch"    "$S3PUT_URL/$branch/$revision/$arch"            text/plain\ -	   || fail Uploading token file -    if python "$all_done"\ -          curl\ -         "$S3GET_URL/$branch/$revision/$arch"\ -          $other_archs > message -    then -      subject="Successful Build for $branch ($revision)" -    fi -  else -    true s3 is not available -  fi -else -  if s3_available -  then -    "$helpers/s3put.sh" build.log "$S3PUT_URL/$branch/$revision/failed-build.$arch" text/plain\ -	   || fail Uploading build.log -    subject="Failed Build for $branch ($revision) on $arch" -    cat >message <<EOF -Build for $branch ($revision) failed for $arch. -Please see the build log for details: - -$PUBLIC_URL/$branch/$revision/failed-build.$arch - -EOF -  else -    true s3 is not available -  fi -fi - -# We have something to say... -if [ x"$subject" != x ] -then -  # Extract change list since last build -  if [ x"$PARABUILD_CHANGE_LIST_NUMBER" = x ] -  then -    echo "No change information available" >> message -  elif [ x"$PARABUILD_PREVIOUS_CHANGE_LIST_NUMBER" = x ] -  then -    ( cd .. && svn log --verbose --stop-on-copy --limit 50 ) >>message -  else -    ( cd .. && svn log --verbose -r"$PARABUILD_PREVIOUS_CHANGE_LIST_NUMBER":"$PARABUILD_CHANGE_LIST_NUMBER" ) >>message -  fi -  # $PUBLIC_EMAIL can be a list, so no quotes -  python "$mail" "$subject" $PUBLIC_EMAIL <message -fi - -if $succeeded -then -  pass -else -  fail -fi - diff --git a/scripts/packages-formatter.py b/scripts/packages-formatter.py new file mode 100755 index 0000000000..4e66cf9ed4 --- /dev/null +++ b/scripts/packages-formatter.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +"""\ +This module formats the package version and copyright information for the +viewer and its dependent packages. + +$LicenseInfo:firstyear=2014&license=viewerlgpl$ +Second Life Viewer Source Code +Copyright (C) 2014, Linden Research, Inc. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; +version 2.1 of the License only. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + +Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA +$/LicenseInfo$ +""" +import os +import sys +import errno +import re +import subprocess + +_autobuild=os.getenv('AUTOBUILD', 'autobuild') + +pkg_line=re.compile('^([\w-]+):\s+(.*)$') + +def autobuild(*args): +    """ +    Launch autobuild with specified command-line arguments. +    Return its stdout pipe from which the caller can read. +    """ +    # subprocess wants a list, not a tuple +    command = [_autobuild] + list(args) +    try: +        child = subprocess.Popen(command, +                                 stdin=None, stdout=subprocess.PIPE, +                                 universal_newlines=True) +    except OSError as err: +        if err.errno != errno.ENOENT: +            # Don't attempt to interpret anything but ENOENT +            raise +        # Here it's ENOENT: subprocess can't find the autobuild executable. +        print >>sys.stderr, "packages-formatter on %s: can't run autobuild:\n%s\n%s" % \ +              (sys.platform, ' '.join(command), err) +        sys.exit(1) + +    # no exceptions yet, let caller read stdout +    return child.stdout + +version={} +versions=autobuild('install', '--versions') +for line in versions: +    pkg_info = pkg_line.match(line) +    if pkg_info: +        pkg = pkg_info.group(1) +        if pkg not in version: +            version[pkg] = pkg_info.group(2).strip() +        else: +            sys.exit("Duplicate version for %s" % pkg) +    else: +        sys.exit("Unrecognized --versions output: %s" % line) + +copyright={} +copyrights=autobuild('install', '--copyrights') +viewer_copyright = copyrights.readline() # first line is the copyright for the viewer itself +for line in copyrights: +    pkg_info = pkg_line.match(line) +    if pkg_info: +        pkg = pkg_info.group(1) +        if pkg not in copyright: +            copyright[pkg] = pkg_info.group(2).strip() +        else: +            sys.exit("Duplicate copyright for %s" % pkg) +    else: +        sys.exit("Unrecognized --copyrights output: %s" % line) + +print viewer_copyright +for pkg in sorted(version): +    print ': '.join([pkg, version[pkg]]) +    if pkg in copyright: +        print copyright[pkg] +    else: +        sys.exit("No copyright for %s" % pkg)  | 
