diff options
30 files changed, 3753 insertions, 3596 deletions
| diff --git a/autobuild.xml b/autobuild.xml index d908344df9..2c8a254a75 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1,2491 +1,2491 @@ -<?xml version="1.0" ?> -<llsd> -<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>7c546f54f6ed654f713c778af3925dd4</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/226566/arch/Darwin/installer/glod-1.0pre4-darwin-20110413.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>18c708163d2a669bc3c030b05b4ebe61</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/226657/arch/Linux/installer/glod-1.0pre4-linux-20110414.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c4ae6cddc04e0b2908a301726a53922c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/226194/arch/CYGWIN/installer/glod-1.0pre4-windows-20110408.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>SDL</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/SDL.txt</string> -        <key>name</key> -        <string>SDL</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>apr_suite</key> -      <map> -        <key>license</key> -        <string>apache</string> -        <key>license_file</key> -        <string>LICENSES/apr_suite.txt</string> -        <key>name</key> -        <string>apr_suite</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9868bfa0b6954e4884c49c6f30068c80</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-darwin-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ff62946c518a247c86e1066c1e9a5855</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-linux-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>73785c200a5b4ef74a1230b028bb680d</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-windows-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>ares</key> -      <map> -        <key>license</key> -        <string>c-ares</string> -        <key>license_file</key> -        <string>LICENSES/c-ares.txt</string> -        <key>name</key> -        <string>ares</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e6caaeea16131e1f2343ecd7765e3147</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0745872db83d45f4ab3bdc697d98e264</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1dcec6babd249a2597114d4ac226c461</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>boost</key> -      <map> -        <key>license</key> -        <string>boost</string> -        <key>license_file</key> -        <string>LICENSES/boost.txt</string> -        <key>name</key> -        <string>boost</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d98078791ce345bf6168ce9ba53ca2d7</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/222752/arch/Darwin/installer/boost-1.45.0-darwin-20110304.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a34e7fffdb94a6a4d8a2966b1f216da3</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-linux-20110310.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>98be22c8833aa2bca184b9fa09fbb82b</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-windows-20110124.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>colladadom</key> -      <map> -        <key>license</key> -        <string>scea</string> -        <key>license_file</key> -        <string>LICENSES/collada.txt</string> -        <key>name</key> -        <string>colladadom</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>480b27a0cb39a4adfcdeabef895de3e1</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/227230/arch/Darwin/installer/colladadom-2.2-darwin-20110420.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d05be8fc196e9ce7b6636b931cf13dff</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226716/arch/Linux/installer/colladadom-2.2-linux-20110415.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a9f548eb6f9aaf292508a8b09c7f2f73</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226584/arch/CYGWIN/installer/colladadom-2.2-windows-20110413.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>curl</key> -      <map> -        <key>license</key> -        <string>curl</string> -        <key>license_file</key> -        <string>LICENSES/curl.txt</string> -        <key>name</key> -        <string>curl</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>aaea644191807f51051cefa2fac11069</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-darwin-20110316.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>2d9377951d99a1aa4735cea8d4b5aa71</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-linux-20110316.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fea96aa2a7d513397317194f3d6c979b</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>db</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/db.txt</string> -        <key>name</key> -        <string>db</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>8f57c413e0786681cbcb9ed2fb8a6d37</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>dbusglib</key> -      <map> -        <key>license</key> -        <string>AFL2.1</string> -        <key>license_file</key> -        <string>LICENSES/dbus-glib.txt</string> -        <key>name</key> -        <string>dbusglib</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>94b058b9a81114dc4567bd78e4335425</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>elfio</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/elfio.txt</string> -        <key>name</key> -        <string>elfio</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>031e6315a5c0829c9b9a2ec18aeb7ae3</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>expat</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/expat.txt</string> -        <key>name</key> -        <string>expat</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>180e03d0be1f1acfc3244e78742d7bef</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> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9bd79781b58e556ab1c36084ec4a1c0c</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> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e72db1bda49b205ebdf4945d4ed2b8f8</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>fmod</key> -      <map> -        <key>license</key> -        <string>fmod</string> -        <key>license_file</key> -        <string>LICENSES/fmod.txt</string> -        <key>name</key> -        <string>fmod</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>61ead113e6479452e6b690c84b4e9d30</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0c61d643db54d2e5999be8254569d8b3</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d9a9a6ad86895353bcd63374a4c1a91d</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>fontconfig</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/fontconfig.txt</string> -        <key>name</key> -        <string>fontconfig</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d8b08b657247566bde5fd853c7622478</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>freeglut</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/freeglut.txt</string> -        <key>name</key> -        <string>freeglut</string> -        <key>platforms</key> -        <map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>825d5a9bafcc5bfe28dc4c1c4f87c576</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> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>freetype</key> -      <map> -        <key>license</key> -        <string>freetype</string> -        <key>license_file</key> -        <string>LICENSES/freetype.txt</string> -        <key>name</key> -        <string>freetype</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c0eacb6348e032fbc69cfdc4bd215ee4</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9f8a9dc39fd7c3da0fb3533782d1fddf</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/226814/arch/Linux/installer/freetype-2.3.9-linux-20110418.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>271349827b939406162ce42e42cd18e0</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glext</key> -      <map> -        <key>license</key> -        <string>glext</string> -        <key>license_file</key> -        <string>LICENSES/glext.txt</string> -        <key>name</key> -        <string>glext</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5de58ca0fe19abf68b25956762ee0d29</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5de58ca0fe19abf68b25956762ee0d29</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glh_linear</key> -      <map> -        <key>license</key> -        <string>glh_linear</string> -        <key>license_file</key> -        <string>LICENSES/glh_linear.txt</string> -        <key>name</key> -        <string>glh_linear</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>366f940f2634b0e05954646927620bfd</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>26f2df1f0b0fa01e94e0253e322f3583</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>57f8be28bbaa2505ae3b59deb2c77cdf</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glui</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/glui.txt</string> -        <key>name</key> -        <string>glui</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>bd2f84ef8bd308570e2e532a371dc2ef</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e006635a741420a15f40bbdac13bd8d7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>google_breakpad</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/google_breakpad.txt</string> -        <key>name</key> -        <string>google_breakpad</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>21babc394dbf8572830f2e85adec7b9f</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20110202.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>204b02a9480c411232255798839431a2</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20110311.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>627c51136e14e64c5d39933f3abd3bdf</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-windows-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>googlemock</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/googlemock.txt</string> -        <key>name</key> -        <string>googlemock</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>886ee428f058005ab7f90f61784ec9d9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>782ca04e56d8eab755adcae297cafa7c</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>212701468920519f3989677cea9ca4f1</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gmock-1.5.0-windows-20110224.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>gstreamer</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/gstreamer.txt</string> -        <key>name</key> -        <string>gstreamer</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ddbc0a64ad788107877fee777403592c</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>gtk-atk-pango-glib</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/gtk-atk-pango-glib.txt</string> -        <key>name</key> -        <string>gtk-atk-pango-glib</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>03694ade27f53199229c03cbbda89214</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.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> -      </map> -      <key>jpeglib</key> -      <map> -        <key>license</key> -        <string>jpeglib</string> -        <key>license_file</key> -        <string>LICENSES/jpeglib.txt</string> -        <key>name</key> -        <string>jpeglib</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>71bd6efbf508e1f2e7d98a6195a93e9e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>dcca1db348831cdb7c6b26dc4076c597</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> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a202ec58cef9097c94acfa958ed6da8d</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>jsoncpp</key> -      <map> -        <key>license</key> -        <string>jsoncpp</string> -        <key>license_file</key> -        <string>LICENSES/jsoncpp.txt</string> -        <key>name</key> -        <string>jsoncpp</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>de8b96120c274e052abb4f692861be46</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>840cd9455638c0ea52c613cfddd07d5b</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>afff2018e6a887c281b072eecdd9343e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>kdu</key> -      <map> -        <key>license</key> -        <string>kdu</string> -        <key>license_file</key> -        <string>LICENSES/kdu.txt</string> -        <key>name</key> -        <string>kdu</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d91e1f483209cd3eba04135c6a59e829</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/Darwin/installer/kdu-6.4.1-darwin-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fbf8a4f78dff986d7c16b3a0437e033e</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> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6cd9f36465ef73a3df34bf2b3bba2ced</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/CYGWIN/installer/kdu-6.4.1-windows-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>libpng</key> -      <map> -        <key>license</key> -        <string>libpng</string> -        <key>license_file</key> -        <string>LICENSES/libpng.txt</string> -        <key>name</key> -        <string>libpng</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6fe1adf12d98bce9111f60ee762007b9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0681ab7e1988dfdbdad7dd9edb7760ee</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>f194ba857ca8dd86483a3ef24535d0db</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libpng/rev/226532/arch/CYGWIN/installer/libpng-1.5.1-windows-20110413.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>libuuid</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/libuuid.txt</string> -        <key>name</key> -        <string>libuuid</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>873e8e99d29711df2efa30646dca1795</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>libxml</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/libxml.txt</string> -        <key>name</key> -        <string>libxml</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6414642528f42dac1cd9a012c99cd748</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>llconvexdecomposition</key> -      <map> -        <key>license</key> -        <string>havok</string> -        <key>license_file</key> -        <string>on_file</string> -        <key>name</key> -        <string>llconvexdecomposition</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6e45ad68506cd1ba49fd35a3201f0478</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Darwin/installer/llconvexdecomposition-0.1-darwin-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>00ff5144612c2e261a0811a4503ce3ba</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Linux/installer/llconvexdecomposition-0.1-linux-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a4635dcbbe0915ce023dd41d3b848d4c</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/CYGWIN/installer/llconvexdecomposition-0.1-windows-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>llconvexdecompositionstub</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/lgpl.txt</string> -        <key>name</key> -        <string>llconvexdecompositionstub</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>bc1388fc28dbb3bba1fe7cb8d09f49b4</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Darwin/installer/llconvexdecompositionstub-0.3-darwin-20110421.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3295bd4a0514b7c15dda9044f40c175e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Linux/installer/llconvexdecompositionstub-0.3-linux-20110422.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>92f1dff3249024c1534b55343ed79ea3</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/CYGWIN/installer/llconvexdecompositionstub-0.3-windows-20110421.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>llqtwebkit</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/llqtwebkit.txt</string> -        <key>name</key> -        <string>llqtwebkit</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>76c1015eafcba5ca9932c3009533b51c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225273/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110329.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c05a33ee8b6f253b5a744596dfc3707d</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1b1b8e104e39c542d69eb37b5ee81818</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225249/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110329.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>mesa</key> -      <map> -        <key>license</key> -        <string>mesa</string> -        <key>license_file</key> -        <string>LICENSES/mesa.txt</string> -        <key>name</key> -        <string>mesa</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1f600840463c7327ea17486821425750</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.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>c81bacf922bb3b540d92b660364c48ce</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-0.2-20101013.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> -      </map> -      <key>ogg-vorbis</key> -      <map> -        <key>license</key> -        <string>ogg-vorbis</string> -        <key>license_file</key> -        <string>LICENSES/ogg-vorbis.txt</string> -        <key>name</key> -        <string>ogg-vorbis</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e849bc2b779fb7cc5e81aeb021a542c0</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> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>71eaa462eb0bf8842277a3436483a354</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> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>291dbba89dd8162b76f2c2d82e908c6f</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> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>openSSL</key> -      <map> -        <key>license</key> -        <string>openSSL</string> -        <key>license_file</key> -        <string>LICENSES/openssl.txt</string> -        <key>name</key> -        <string>openSSL</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>facee34b8bd57ad602157e65a5af1a49</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3d40be8566fa4b9df9a38e2a0f9ea467</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>774c7f0a0312bee3054757a623e227bc</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>openal_soft</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/OPENAL.txt</string> -        <key>name</key> -        <string>openal_soft</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fccdca18a950ac9363c6fb39118b80e1</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> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>04df406f3e5d04cf176660bdac66c3a1</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> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -        <key>version</key> -        <string>3ad86a1c</string> -      </map> -      <key>openjpeg</key> -      <map> -        <key>license</key> -        <string>openjpeg</string> -        <key>license_file</key> -        <string>LICENSES/openjpeg.txt</string> -        <key>name</key> -        <string>openjpeg</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>4be51c7cca7d84831e30b63279df7ae5</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fb2382014c79e0049746e4e29bd834f9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ca5765af55f798724d601720afdf6953</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>pcre</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/pcre-license.txt</string> -        <key>name</key> -        <string>pcre</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a8e74694a0f4248228c13c845ed0a6f8</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Darwin/installer/pcre-7.6-darwin-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>bb0abe962b3b8208ed2dab0424aab33d</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2</string>               -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>quicktime</key> -      <map> -        <key>license</key> -        <string>quicktime</string> -        <key>license_file</key> -        <string>LICENSES/quicktime.txt</string> -        <key>name</key> -        <string>quicktime</string> -        <key>platforms</key> -        <map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>52e49ab6937b09882389da0dbaec17f5</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>slvoice</key> -      <map> -        <key>license</key> -        <string>vivox</string> -        <key>license_file</key> -        <string>LICENSES/slvoice.txt</string> -        <key>name</key> -        <string>slvoice</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e19576af3c0affc71293d8f0bcce2606</string> -              <key>url</key> -              <string> http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20110120.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>53fefed8120d7c6a0eb6778edae6fa32</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20110120.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>44f84b3b45f7067a104a7c34d50d62f0</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20110120.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>tcmalloc</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/google-perftools.txt</string> -        <key>name</key> -        <string>tcmalloc</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>dde928cb24d22a267004a8c17669ba65</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226426/arch/Linux/installer/google_perftools-1.7-linux-20110412.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>8308f7bd68bb7083655753b7abe7225f</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226287/arch/CYGWIN/installer/google_perftools-1.7-windows-20110411.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>tut</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/tut.txt</string> -        <key>name</key> -        <string>tut</string> -        <key>platforms</key> -        <map> -          <key>common</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5c6d3e606f027e78f056cb77b20f228e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>common</string> -          </map> -        </map> -      </map> -      <key>xmlrpc-epi</key> -      <map> -        <key>license</key> -        <string>xmlrpc-epi</string> -        <key>license_file</key> -        <string>LICENSES/xmlrpc-epi.txt</string> -        <key>name</key> -        <string>xmlrpc-epi</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a3e0fb4b4a51b01690a99747a1cca531</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>174ab797440157956eda7061dae37564</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5181d1a8f2516928ac064d72acf164a4</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>zlib</key> -      <map> -        <key>license</key> -        <string>zlib</string> -        <key>license_file</key> -        <string>LICENSES/zlib.txt</string> -        <key>name</key> -        <string>zlib</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>49b8de20f3bb43537f51311894a72de1</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>7b4cf3aa2c04937d0a20761516587896</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5852192646681817fc3c3a8c95e91c1e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -    </map> -    <key>package_description</key> -    <map> -      <key>name</key> -      <string>viewer_development</string> -      <key>platforms</key> -      <map> -        <key>common</key> -        <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> -              <map> -              </map> -              <key>configure</key> -              <map> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</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>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</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=RelWithDebInfo</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>RelWithDebInfoOS</string> -            </map> -            <key>Release</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=Release</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>Release</string> -            </map> -            <key>ReleaseOS</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=Release</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>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>common</string> -        </map> -        <key>darwin</key> -        <map> -          <key>build_directory</key> -          <string>build-darwin-i386</string> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>|</string> -                  <string>grep</string> -                  <string>-v</string> -                  <string>setenv</string> -                </array> -                <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>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> -              <map> -                <key>arguments</key> -                <array> -                  <string>|</string> -                  <string>grep</string> -                  <string>-v</string> -                  <string>setenv</string> -                </array> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration RelWithDebInfo</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>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration RelWithDebInfo</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>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>|</string> -                  <string>grep</string> -                  <string>-v</string> -                  <string>setenv</string> -                </array> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Release</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>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Release</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>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>darwin</string> -        </map> -        <key>linux</key> -        <map> -          <key>build_directory</key> -          <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 2</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> -              <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>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 2</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 2</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -            <key>default</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>name</key> -              <string>default</string> -            </map> -          </map> -          <key>name</key> -          <string>linux</string> -        </map> -        <key>windows</key> -        <map> -          <key>build_directory</key> -          <string>build-vc100</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>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</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=RelWithDebInfo|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>RelWithDebInfo</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                </array> -              </map> -              <key>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>msbuild.exe</string> -                <key>options</key> -                <array> -                  <string>/p:Configuration=RelWithDebInfo</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>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</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=Release|Win32"</string> -                  <string>"/CL_ADD=/m:1"</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>Release</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>Release</string> -            </map> -            <key>ReleaseOS</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=Release</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>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>windows</string> -        </map> -      </map> -    </map> -    <key>type</key> -    <string>autobuild</string> -    <key>version</key> -    <string>1.2</string> -  </map> -</llsd> +<?xml version="1.0" ?>
 +<llsd>
 +<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>930bdd987a321eda1838caba8cd6098f</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/230348/arch/Darwin/installer/glod-1.0pre4-darwin-20110519.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fb33b6cac2e6b98f93c5efa2af2e5a00</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/230348/arch/Linux/installer/glod-1.0pre4-linux-20110519.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>388cf0e292f756b4bb37696622f0bbc5</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/230348/arch/CYGWIN/installer/glod-1.0pre4-windows-20110519.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>SDL</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/SDL.txt</string>
 +        <key>name</key>
 +        <string>SDL</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>apr_suite</key>
 +      <map>
 +        <key>license</key>
 +        <string>apache</string>
 +        <key>license_file</key>
 +        <string>LICENSES/apr_suite.txt</string>
 +        <key>name</key>
 +        <string>apr_suite</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9868bfa0b6954e4884c49c6f30068c80</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-darwin-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ff62946c518a247c86e1066c1e9a5855</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-linux-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>73785c200a5b4ef74a1230b028bb680d</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-windows-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>ares</key>
 +      <map>
 +        <key>license</key>
 +        <string>c-ares</string>
 +        <key>license_file</key>
 +        <string>LICENSES/c-ares.txt</string>
 +        <key>name</key>
 +        <string>ares</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e6caaeea16131e1f2343ecd7765e3147</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0745872db83d45f4ab3bdc697d98e264</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>1dcec6babd249a2597114d4ac226c461</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>boost</key>
 +      <map>
 +        <key>license</key>
 +        <string>boost</string>
 +        <key>license_file</key>
 +        <string>LICENSES/boost.txt</string>
 +        <key>name</key>
 +        <string>boost</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d98078791ce345bf6168ce9ba53ca2d7</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/222752/arch/Darwin/installer/boost-1.45.0-darwin-20110304.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a34e7fffdb94a6a4d8a2966b1f216da3</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-linux-20110310.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>98be22c8833aa2bca184b9fa09fbb82b</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-windows-20110124.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>colladadom</key>
 +      <map>
 +        <key>license</key>
 +        <string>scea</string>
 +        <key>license_file</key>
 +        <string>LICENSES/collada.txt</string>
 +        <key>name</key>
 +        <string>colladadom</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>480b27a0cb39a4adfcdeabef895de3e1</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/227230/arch/Darwin/installer/colladadom-2.2-darwin-20110420.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d05be8fc196e9ce7b6636b931cf13dff</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226716/arch/Linux/installer/colladadom-2.2-linux-20110415.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a9f548eb6f9aaf292508a8b09c7f2f73</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226584/arch/CYGWIN/installer/colladadom-2.2-windows-20110413.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>curl</key>
 +      <map>
 +        <key>license</key>
 +        <string>curl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/curl.txt</string>
 +        <key>name</key>
 +        <string>curl</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>aaea644191807f51051cefa2fac11069</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-darwin-20110316.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>2d9377951d99a1aa4735cea8d4b5aa71</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-linux-20110316.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fea96aa2a7d513397317194f3d6c979b</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>db</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/db.txt</string>
 +        <key>name</key>
 +        <string>db</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>8f57c413e0786681cbcb9ed2fb8a6d37</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>dbusglib</key>
 +      <map>
 +        <key>license</key>
 +        <string>AFL2.1</string>
 +        <key>license_file</key>
 +        <string>LICENSES/dbus-glib.txt</string>
 +        <key>name</key>
 +        <string>dbusglib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>94b058b9a81114dc4567bd78e4335425</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>elfio</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/elfio.txt</string>
 +        <key>name</key>
 +        <string>elfio</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>031e6315a5c0829c9b9a2ec18aeb7ae3</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>expat</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/expat.txt</string>
 +        <key>name</key>
 +        <string>expat</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>180e03d0be1f1acfc3244e78742d7bef</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>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9bd79781b58e556ab1c36084ec4a1c0c</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>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e72db1bda49b205ebdf4945d4ed2b8f8</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>fmod</key>
 +      <map>
 +        <key>license</key>
 +        <string>fmod</string>
 +        <key>license_file</key>
 +        <string>LICENSES/fmod.txt</string>
 +        <key>name</key>
 +        <string>fmod</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>61ead113e6479452e6b690c84b4e9d30</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0c61d643db54d2e5999be8254569d8b3</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d9a9a6ad86895353bcd63374a4c1a91d</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>fontconfig</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/fontconfig.txt</string>
 +        <key>name</key>
 +        <string>fontconfig</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d8b08b657247566bde5fd853c7622478</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>freeglut</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/freeglut.txt</string>
 +        <key>name</key>
 +        <string>freeglut</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>825d5a9bafcc5bfe28dc4c1c4f87c576</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>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>freetype</key>
 +      <map>
 +        <key>license</key>
 +        <string>freetype</string>
 +        <key>license_file</key>
 +        <string>LICENSES/freetype.txt</string>
 +        <key>name</key>
 +        <string>freetype</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c0eacb6348e032fbc69cfdc4bd215ee4</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9f8a9dc39fd7c3da0fb3533782d1fddf</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/226814/arch/Linux/installer/freetype-2.3.9-linux-20110418.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>271349827b939406162ce42e42cd18e0</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glext</key>
 +      <map>
 +        <key>license</key>
 +        <string>glext</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glext.txt</string>
 +        <key>name</key>
 +        <string>glext</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5de58ca0fe19abf68b25956762ee0d29</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5de58ca0fe19abf68b25956762ee0d29</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glh_linear</key>
 +      <map>
 +        <key>license</key>
 +        <string>glh_linear</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glh_linear.txt</string>
 +        <key>name</key>
 +        <string>glh_linear</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>366f940f2634b0e05954646927620bfd</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>26f2df1f0b0fa01e94e0253e322f3583</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>57f8be28bbaa2505ae3b59deb2c77cdf</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glui</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glui.txt</string>
 +        <key>name</key>
 +        <string>glui</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>bd2f84ef8bd308570e2e532a371dc2ef</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e006635a741420a15f40bbdac13bd8d7</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>google_breakpad</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/google_breakpad.txt</string>
 +        <key>name</key>
 +        <string>google_breakpad</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>21babc394dbf8572830f2e85adec7b9f</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20110202.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>204b02a9480c411232255798839431a2</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20110311.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>627c51136e14e64c5d39933f3abd3bdf</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-windows-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>googlemock</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/googlemock.txt</string>
 +        <key>name</key>
 +        <string>googlemock</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>886ee428f058005ab7f90f61784ec9d9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>782ca04e56d8eab755adcae297cafa7c</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>212701468920519f3989677cea9ca4f1</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gmock-1.5.0-windows-20110224.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>gstreamer</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/gstreamer.txt</string>
 +        <key>name</key>
 +        <string>gstreamer</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ddbc0a64ad788107877fee777403592c</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>gtk-atk-pango-glib</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/gtk-atk-pango-glib.txt</string>
 +        <key>name</key>
 +        <string>gtk-atk-pango-glib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>03694ade27f53199229c03cbbda89214</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.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>
 +      </map>
 +      <key>jpeglib</key>
 +      <map>
 +        <key>license</key>
 +        <string>jpeglib</string>
 +        <key>license_file</key>
 +        <string>LICENSES/jpeglib.txt</string>
 +        <key>name</key>
 +        <string>jpeglib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>71bd6efbf508e1f2e7d98a6195a93e9e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>dcca1db348831cdb7c6b26dc4076c597</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>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a202ec58cef9097c94acfa958ed6da8d</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>jsoncpp</key>
 +      <map>
 +        <key>license</key>
 +        <string>jsoncpp</string>
 +        <key>license_file</key>
 +        <string>LICENSES/jsoncpp.txt</string>
 +        <key>name</key>
 +        <string>jsoncpp</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>de8b96120c274e052abb4f692861be46</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>840cd9455638c0ea52c613cfddd07d5b</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>afff2018e6a887c281b072eecdd9343e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>kdu</key>
 +      <map>
 +        <key>license</key>
 +        <string>kdu</string>
 +        <key>license_file</key>
 +        <string>LICENSES/kdu.txt</string>
 +        <key>name</key>
 +        <string>kdu</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d91e1f483209cd3eba04135c6a59e829</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/Darwin/installer/kdu-6.4.1-darwin-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fbf8a4f78dff986d7c16b3a0437e033e</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>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6cd9f36465ef73a3df34bf2b3bba2ced</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/CYGWIN/installer/kdu-6.4.1-windows-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libpng</key>
 +      <map>
 +        <key>license</key>
 +        <string>libpng</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libpng.txt</string>
 +        <key>name</key>
 +        <string>libpng</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6fe1adf12d98bce9111f60ee762007b9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0681ab7e1988dfdbdad7dd9edb7760ee</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>f194ba857ca8dd86483a3ef24535d0db</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libpng/rev/226532/arch/CYGWIN/installer/libpng-1.5.1-windows-20110413.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libuuid</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libuuid.txt</string>
 +        <key>name</key>
 +        <string>libuuid</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>873e8e99d29711df2efa30646dca1795</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libxml</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libxml.txt</string>
 +        <key>name</key>
 +        <string>libxml</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6414642528f42dac1cd9a012c99cd748</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>llconvexdecomposition</key>
 +      <map>
 +        <key>license</key>
 +        <string>havok</string>
 +        <key>license_file</key>
 +        <string>on_file</string>
 +        <key>name</key>
 +        <string>llconvexdecomposition</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6e45ad68506cd1ba49fd35a3201f0478</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Darwin/installer/llconvexdecomposition-0.1-darwin-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>00ff5144612c2e261a0811a4503ce3ba</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Linux/installer/llconvexdecomposition-0.1-linux-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a4635dcbbe0915ce023dd41d3b848d4c</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/CYGWIN/installer/llconvexdecomposition-0.1-windows-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>llconvexdecompositionstub</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/lgpl.txt</string>
 +        <key>name</key>
 +        <string>llconvexdecompositionstub</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>bc1388fc28dbb3bba1fe7cb8d09f49b4</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Darwin/installer/llconvexdecompositionstub-0.3-darwin-20110421.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3295bd4a0514b7c15dda9044f40c175e</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Linux/installer/llconvexdecompositionstub-0.3-linux-20110422.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>92f1dff3249024c1534b55343ed79ea3</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/CYGWIN/installer/llconvexdecompositionstub-0.3-windows-20110421.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>llqtwebkit</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/llqtwebkit.txt</string>
 +        <key>name</key>
 +        <string>llqtwebkit</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>76c1015eafcba5ca9932c3009533b51c</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225273/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110329.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c05a33ee8b6f253b5a744596dfc3707d</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>1b1b8e104e39c542d69eb37b5ee81818</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225249/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110329.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>mesa</key>
 +      <map>
 +        <key>license</key>
 +        <string>mesa</string>
 +        <key>license_file</key>
 +        <string>LICENSES/mesa.txt</string>
 +        <key>name</key>
 +        <string>mesa</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>1f600840463c7327ea17486821425750</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.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>c81bacf922bb3b540d92b660364c48ce</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-0.2-20101013.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>
 +      </map>
 +      <key>ogg-vorbis</key>
 +      <map>
 +        <key>license</key>
 +        <string>ogg-vorbis</string>
 +        <key>license_file</key>
 +        <string>LICENSES/ogg-vorbis.txt</string>
 +        <key>name</key>
 +        <string>ogg-vorbis</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e849bc2b779fb7cc5e81aeb021a542c0</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>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>71eaa462eb0bf8842277a3436483a354</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>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>291dbba89dd8162b76f2c2d82e908c6f</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>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>openSSL</key>
 +      <map>
 +        <key>license</key>
 +        <string>openSSL</string>
 +        <key>license_file</key>
 +        <string>LICENSES/openssl.txt</string>
 +        <key>name</key>
 +        <string>openSSL</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>facee34b8bd57ad602157e65a5af1a49</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3d40be8566fa4b9df9a38e2a0f9ea467</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>774c7f0a0312bee3054757a623e227bc</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>openal_soft</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/OPENAL.txt</string>
 +        <key>name</key>
 +        <string>openal_soft</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fccdca18a950ac9363c6fb39118b80e1</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>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>04df406f3e5d04cf176660bdac66c3a1</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>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +        <key>version</key>
 +        <string>3ad86a1c</string>
 +      </map>
 +      <key>openjpeg</key>
 +      <map>
 +        <key>license</key>
 +        <string>openjpeg</string>
 +        <key>license_file</key>
 +        <string>LICENSES/openjpeg.txt</string>
 +        <key>name</key>
 +        <string>openjpeg</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>4be51c7cca7d84831e30b63279df7ae5</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fb2382014c79e0049746e4e29bd834f9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ca5765af55f798724d601720afdf6953</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>pcre</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/pcre-license.txt</string>
 +        <key>name</key>
 +        <string>pcre</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a8e74694a0f4248228c13c845ed0a6f8</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Darwin/installer/pcre-7.6-darwin-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>bb0abe962b3b8208ed2dab0424aab33d</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2</string>              
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>quicktime</key>
 +      <map>
 +        <key>license</key>
 +        <string>quicktime</string>
 +        <key>license_file</key>
 +        <string>LICENSES/quicktime.txt</string>
 +        <key>name</key>
 +        <string>quicktime</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>52e49ab6937b09882389da0dbaec17f5</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>slvoice</key>
 +      <map>
 +        <key>license</key>
 +        <string>vivox</string>
 +        <key>license_file</key>
 +        <string>LICENSES/slvoice.txt</string>
 +        <key>name</key>
 +        <string>slvoice</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e19576af3c0affc71293d8f0bcce2606</string>
 +              <key>url</key>
 +              <string> http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20110120.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>53fefed8120d7c6a0eb6778edae6fa32</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20110120.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>44f84b3b45f7067a104a7c34d50d62f0</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20110120.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>tcmalloc</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/google-perftools.txt</string>
 +        <key>name</key>
 +        <string>tcmalloc</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>dde928cb24d22a267004a8c17669ba65</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226426/arch/Linux/installer/google_perftools-1.7-linux-20110412.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>8308f7bd68bb7083655753b7abe7225f</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226287/arch/CYGWIN/installer/google_perftools-1.7-windows-20110411.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>tut</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/tut.txt</string>
 +        <key>name</key>
 +        <string>tut</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>common</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5c6d3e606f027e78f056cb77b20f228e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>common</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>xmlrpc-epi</key>
 +      <map>
 +        <key>license</key>
 +        <string>xmlrpc-epi</string>
 +        <key>license_file</key>
 +        <string>LICENSES/xmlrpc-epi.txt</string>
 +        <key>name</key>
 +        <string>xmlrpc-epi</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a3e0fb4b4a51b01690a99747a1cca531</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>174ab797440157956eda7061dae37564</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5181d1a8f2516928ac064d72acf164a4</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>zlib</key>
 +      <map>
 +        <key>license</key>
 +        <string>zlib</string>
 +        <key>license_file</key>
 +        <string>LICENSES/zlib.txt</string>
 +        <key>name</key>
 +        <string>zlib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>49b8de20f3bb43537f51311894a72de1</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>7b4cf3aa2c04937d0a20761516587896</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5852192646681817fc3c3a8c95e91c1e</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +    </map>
 +    <key>package_description</key>
 +    <map>
 +      <key>name</key>
 +      <string>viewer_development</string>
 +      <key>platforms</key>
 +      <map>
 +        <key>common</key>
 +        <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>
 +              <map>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</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>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</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=RelWithDebInfo</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>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</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=Release</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>Release</string>
 +            </map>
 +            <key>ReleaseOS</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=Release</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>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>common</string>
 +        </map>
 +        <key>darwin</key>
 +        <map>
 +          <key>build_directory</key>
 +          <string>build-darwin-i386</string>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>|</string>
 +                  <string>grep</string>
 +                  <string>-v</string>
 +                  <string>setenv</string>
 +                </array>
 +                <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>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>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>|</string>
 +                  <string>grep</string>
 +                  <string>-v</string>
 +                  <string>setenv</string>
 +                </array>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration RelWithDebInfo</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>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration RelWithDebInfo</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>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>|</string>
 +                  <string>grep</string>
 +                  <string>-v</string>
 +                  <string>setenv</string>
 +                </array>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Release</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>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Release</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>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>darwin</string>
 +        </map>
 +        <key>linux</key>
 +        <map>
 +          <key>build_directory</key>
 +          <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 2</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>
 +              <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>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 2</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 12</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 2</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +            <key>default</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>name</key>
 +              <string>default</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>linux</string>
 +        </map>
 +        <key>windows</key>
 +        <map>
 +          <key>build_directory</key>
 +          <string>build-vc100</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>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</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=RelWithDebInfo|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>RelWithDebInfo</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                </array>
 +              </map>
 +              <key>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>msbuild.exe</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/p:Configuration=RelWithDebInfo</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>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</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=Release|Win32"</string>
 +                  <string>"/CL_ADD=/m:1"</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>Release</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>Release</string>
 +            </map>
 +            <key>ReleaseOS</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=Release</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>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>windows</string>
 +        </map>
 +      </map>
 +    </map>
 +    <key>type</key>
 +    <string>autobuild</string>
 +    <key>version</key>
 +    <string>1.2</string>
 +  </map>
 +</llsd>
 diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 794cdb83d5..57ac7a143f 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -991,6 +991,9 @@ void LLModel::normalizeVolumeFaces()  		scale.splat(1.f);  		scale.div(size); +		LLVector4a inv_scale(1.f); +		inv_scale.div(scale); +  		for (U32 i = 0; i < mVolumeFaces.size(); ++i)  		{  			LLVolumeFace& face = mVolumeFaces[i]; @@ -1007,10 +1010,14 @@ void LLModel::normalizeVolumeFaces()  			// For all the positions, we scale  			// the positions to fit within the unit cube.  			LLVector4a* pos = (LLVector4a*) face.mPositions; +			LLVector4a* norm = (LLVector4a*) face.mNormals; +  			for (U32 j = 0; j < face.mNumVertices; ++j)  			{  			 	pos[j].add(trans);  				pos[j].mul(scale); +				norm[j].mul(inv_scale); +				norm[j].normalize3();  			}  		} diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index f29ee0e57e..a460912e70 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -328,6 +328,7 @@ LLGLManager::LLGLManager() :  	mHasShaderObjects(FALSE),  	mHasVertexShader(FALSE),  	mHasFragmentShader(FALSE), +	mNumTextureImageUnits(0),  	mHasOcclusionQuery(FALSE),  	mHasOcclusionQuery2(FALSE),  	mHasPointParameters(FALSE), @@ -534,6 +535,13 @@ bool LLGLManager::initGL()  		return false;  	} +	if (mHasFragmentShader) +	{ +		GLint num_tex_image_units; +		glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &num_tex_image_units); +		mNumTextureImageUnits = num_tex_image_units; +	} +	  	setToDebugGPU();  	initGLStates(); @@ -878,11 +886,13 @@ void LLGLManager::initExtensions()  		LL_INFOS("RenderInit") << "Disabling mip-map generation for Intel GPUs" << LL_ENDL;  		mHasMipMapGeneration = FALSE;  	} +#if !LL_DARWIN  	if (mIsATI && mHasMipMapGeneration)  	{  		LL_INFOS("RenderInit") << "Disabling mip-map generation for ATI GPUs (performance opt)" << LL_ENDL;  		mHasMipMapGeneration = FALSE;  	} +#endif  	// Misc  	glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange); diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 3d002fd8c4..1d7ab188fc 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -91,6 +91,7 @@ public:  	BOOL mHasShaderObjects;  	BOOL mHasVertexShader;  	BOOL mHasFragmentShader; +	S32  mNumTextureImageUnits;  	BOOL mHasOcclusionQuery;  	BOOL mHasOcclusionQuery2;  	BOOL mHasPointParameters; diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 49e10c4790..c37139ac4c 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -119,14 +119,29 @@ void LLTexUnit::refreshState(void)  	gGL.flush();  	glActiveTextureARB(GL_TEXTURE0_ARB + mIndex); + +	// +	// Per apple spec, don't call glEnable/glDisable when index exceeds max texture units +	// http://www.mailinglistarchive.com/html/mac-opengl@lists.apple.com/2008-07/msg00653.html +	// +	bool enableDisable = (mIndex < gGLManager.mNumTextureUnits); +		  	if (mCurrTexType != TT_NONE)  	{ -		glEnable(sGLTextureType[mCurrTexType]); +		if (enableDisable) +		{ +			glEnable(sGLTextureType[mCurrTexType]); +		} +		  		glBindTexture(sGLTextureType[mCurrTexType], mCurrTexture);  	}  	else  	{ -		glDisable(GL_TEXTURE_2D); +		if (enableDisable) +		{ +			glDisable(GL_TEXTURE_2D); +		} +		  		glBindTexture(GL_TEXTURE_2D, 0);	  	} @@ -167,7 +182,11 @@ void LLTexUnit::enable(eTextureType type)  		mCurrTexType = type;  		gGL.flush(); -		glEnable(sGLTextureType[type]); +		 +		if (mIndex < gGLManager.mNumTextureUnits) +		{ +			glEnable(sGLTextureType[type]); +		}  	}  } @@ -180,7 +199,12 @@ void LLTexUnit::disable(void)  		activate();  		unbind(mCurrTexType);  		gGL.flush(); -		glDisable(sGLTextureType[mCurrTexType]); +		 +		if (mIndex < gGLManager.mNumTextureUnits) +		{ +			glDisable(sGLTextureType[mCurrTexType]); +		} +		  		mCurrTexType = TT_NONE;  	}  } diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index cd2556d435..da1e94df64 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -44,6 +44,7 @@ void check_framebuffer_status()  		case GL_FRAMEBUFFER_COMPLETE:  			break;  		default: +			llwarns << "check_framebuffer_status failed -- " << std::hex << status << llendl;  			ll_fail("check_framebuffer_status failed");	  			break;  		} diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index c5ddf31ac0..609fc4f14f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -23,8 +23,9 @@ uniform float sun_wash;  uniform int light_count; -uniform vec4 light[16]; -uniform vec4 light_col[16]; +#define MAX_LIGHT_COUNT		16 +uniform vec4 light[MAX_LIGHT_COUNT]; +uniform vec4 light_col[MAX_LIGHT_COUNT];  varying vec4 vary_fragcoord;  uniform vec2 screen_res; @@ -63,50 +64,56 @@ void main()  	float noise = texture2D(noiseMap, frag.xy/128.0).b;  	vec3 out_col = vec3(0,0,0);  	vec3 npos = normalize(-pos); -	 -	for (int i = 0; i < light_count; ++i) + +	// As of OSX 10.6.7 ATI Apple's crash when using a variable size loop +	for (int i = 0; i < MAX_LIGHT_COUNT; ++i)  	{ +		bool light_contrib = (i < light_count); +		  		vec3 lv = light[i].xyz-pos;  		float dist2 = dot(lv,lv);  		dist2 /= light[i].w;  		if (dist2 > 1.0)  		{ -			continue; +			light_contrib = false;  		}  		float da = dot(norm, lv);  		if (da < 0.0)  		{ -			continue; +			light_contrib = false;  		} -				 -		lv = normalize(lv); -		da = dot(norm, lv); -				 -		float fa = light_col[i].a+1.0; -		float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -		dist_atten *= noise; - -		float lit = da * dist_atten; -		vec3 col = light_col[i].rgb*lit*diff; -		//vec3 col = vec3(dist2, light_col[i].a, lit); -		 -		if (spec.a > 0.0) +		if (light_contrib)  		{ -			//vec3 ref = dot(pos+lv, norm); +			lv = normalize(lv); +			da = dot(norm, lv); +					 +			float fa = light_col[i].a+1.0; +			float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +			dist_atten *= noise; + +			float lit = da * dist_atten; -			float sa = dot(normalize(lv+npos),norm); +			vec3 col = light_col[i].rgb*lit*diff; +			//vec3 col = vec3(dist2, light_col[i].a, lit); -			if (sa > 0.0) +			if (spec.a > 0.0)  			{ -				sa = texture2D(lightFunc,vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); -				sa *= noise; -				col += da*sa*light_col[i].rgb*spec.rgb; +				//vec3 ref = dot(pos+lv, norm); +				 +				float sa = dot(normalize(lv+npos),norm); +				 +				if (sa > 0.0) +				{ +					sa = texture2D(lightFunc,vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); +					sa *= noise; +					col += da*sa*light_col[i].rgb*spec.rgb; +				}  			} +			 +			out_col += col;  		} -		 -		out_col += col;	  	}  	if (dot(out_col, out_col) <= 0.0) diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index c075c660f3..e2b979d9e9 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -281,6 +281,9 @@ RenderVBOEnable				1	0  list TexUnit8orLess  RenderDeferredSSAO			0	0 +list ATI +RenderDeferredSSAO			0	0 +  list Intel  RenderAnisotropic			1	0  RenderLocalLights			1	0 diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index c6b5a0113f..80085dad9d 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -394,7 +394,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi  	LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation  	LLVector3 object_extents;	  	const LLVector4a* oe4 = object->mDrawable->getSpatialExtents(); -	object_extents.set( oe4[1][0], oe4[1][1], oe4[1][2] ); +	LLVector4a size; +	size.setSub(oe4[1], oe4[0]); +	object_extents.set( size[0], size[1], size[2] );  	// make sure they object extents are non-zero  	object_extents.clamp(0.001f, F32_MAX); diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 3bdab75acf..d1bff9f423 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -1,807 +1,807 @@ -/**  - * @file llfeaturemanager.cpp - * @brief LLFeatureManager class implementation - * - * $LicenseInfo:firstyear=2003&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, 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$ - */ - -#include "llviewerprecompiledheaders.h" - -#include <iostream> -#include <fstream> - -#include <boost/regex.hpp> - -#include "llfeaturemanager.h" -#include "lldir.h" - -#include "llsys.h" -#include "llgl.h" -#include "llsecondlifeurls.h" - -#include "llappviewer.h" -#include "llhttpclient.h" -#include "llnotificationsutil.h" -#include "llviewercontrol.h" -#include "llworld.h" -#include "lldrawpoolterrain.h" -#include "llviewertexturelist.h" -#include "llversioninfo.h" -#include "llwindow.h" -#include "llui.h" -#include "llcontrol.h" -#include "llboost.h" -#include "llweb.h" - -#if LL_WINDOWS -#include "lldxhardware.h" -#endif - - -#if LL_DARWIN -const char FEATURE_TABLE_FILENAME[] = "featuretable_mac.txt"; -const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_mac.%s.txt"; -#elif LL_LINUX -const char FEATURE_TABLE_FILENAME[] = "featuretable_linux.txt"; -const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_linux.%s.txt"; -#elif LL_SOLARIS -const char FEATURE_TABLE_FILENAME[] = "featuretable_solaris.txt"; -const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_solaris.%s.txt"; -#else -const char FEATURE_TABLE_FILENAME[] = "featuretable%s.txt"; -const char FEATURE_TABLE_VER_FILENAME[] = "featuretable%s.%s.txt"; -#endif - -const char GPU_TABLE_FILENAME[] = "gpu_table.txt"; -const char GPU_TABLE_VER_FILENAME[] = "gpu_table.%s.txt"; - -LLFeatureInfo::LLFeatureInfo(const std::string& name, const BOOL available, const F32 level) -	: mValid(TRUE), mName(name), mAvailable(available), mRecommendedLevel(level) -{ -} - -LLFeatureList::LLFeatureList(const std::string& name) -	: mName(name) -{ -} - -LLFeatureList::~LLFeatureList() -{ -} - -void LLFeatureList::addFeature(const std::string& name, const BOOL available, const F32 level) -{ -	if (mFeatures.count(name)) -	{ -		LL_WARNS("RenderInit") << "LLFeatureList::Attempting to add preexisting feature " << name << LL_ENDL; -	} - -	LLFeatureInfo fi(name, available, level); -	mFeatures[name] = fi; -} - -BOOL LLFeatureList::isFeatureAvailable(const std::string& name) -{ -	if (mFeatures.count(name)) -	{ -		return mFeatures[name].mAvailable; -	} - -	LL_WARNS("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL; -	 -	// changing this to TRUE so you have to explicitly disable  -	// something for it to be disabled -	return TRUE; -} - -F32 LLFeatureList::getRecommendedValue(const std::string& name) -{ -	if (mFeatures.count(name) && isFeatureAvailable(name)) -	{ -		return mFeatures[name].mRecommendedLevel; -	} - -	LL_WARNS("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL; -	return 0; -} - -BOOL LLFeatureList::maskList(LLFeatureList &mask) -{ -	//llinfos << "Masking with " << mask.mName << llendl; -	// -	// Lookup the specified feature mask, and overlay it on top of the -	// current feature mask. -	// - -	LLFeatureInfo mask_fi; - -	feature_map_t::iterator feature_it; -	for (feature_it = mask.mFeatures.begin(); feature_it != mask.mFeatures.end(); ++feature_it) -	{ -		mask_fi = feature_it->second; -		// -		// Look for the corresponding feature -		// -		if (!mFeatures.count(mask_fi.mName)) -		{ -			LL_WARNS("RenderInit") << "Feature " << mask_fi.mName << " in mask not in top level!" << LL_ENDL; -			continue; -		} - -		LLFeatureInfo &cur_fi = mFeatures[mask_fi.mName]; -		if (mask_fi.mAvailable && !cur_fi.mAvailable) -		{ -			LL_WARNS("RenderInit") << "Mask attempting to reenabling disabled feature, ignoring " << cur_fi.mName << LL_ENDL; -			continue; -		} -		cur_fi.mAvailable = mask_fi.mAvailable; -		cur_fi.mRecommendedLevel = llmin(cur_fi.mRecommendedLevel, mask_fi.mRecommendedLevel); -		LL_DEBUGS("RenderInit") << "Feature mask " << mask.mName -				<< " Feature " << mask_fi.mName -				<< " Mask: " << mask_fi.mRecommendedLevel -				<< " Now: " << cur_fi.mRecommendedLevel << LL_ENDL; -	} - -	LL_DEBUGS("RenderInit") << "After applying mask " << mask.mName << std::endl; -		// Will conditionally call dump only if the above message will be logged, thanks  -		// to it being wrapped by the LL_DEBUGS and LL_ENDL macros. -		dump(); -	LL_CONT << LL_ENDL; - -	return TRUE; -} - -void LLFeatureList::dump() -{ -	LL_DEBUGS("RenderInit") << "Feature list: " << mName << LL_ENDL; -	LL_DEBUGS("RenderInit") << "--------------" << LL_ENDL; - -	LLFeatureInfo fi; -	feature_map_t::iterator feature_it; -	for (feature_it = mFeatures.begin(); feature_it != mFeatures.end(); ++feature_it) -	{ -		fi = feature_it->second; -		LL_DEBUGS("RenderInit") << fi.mName << "\t\t" << fi.mAvailable << ":" << fi.mRecommendedLevel << LL_ENDL; -	} -	LL_DEBUGS("RenderInit") << LL_ENDL; -} - -LLFeatureList *LLFeatureManager::findMask(const std::string& name) -{ -	if (mMaskList.count(name)) -	{ -		return mMaskList[name]; -	} - -	return NULL; -} - -BOOL LLFeatureManager::maskFeatures(const std::string& name) -{ -	LLFeatureList *maskp = findMask(name); -	if (!maskp) -	{ - 		LL_DEBUGS("RenderInit") << "Unknown feature mask " << name << LL_ENDL; -		return FALSE; -	} -	LL_INFOS("RenderInit") << "Applying GPU Feature list: " << name << LL_ENDL; -	return maskList(*maskp); -} - -BOOL LLFeatureManager::loadFeatureTables() -{ -	// *TODO - if I or anyone else adds something else to the skipped list -	// make this data driven.  Put it in the feature table and parse it -	// correctly -	mSkippedFeatures.insert("RenderAnisotropic"); -	mSkippedFeatures.insert("RenderGamma"); -	mSkippedFeatures.insert("RenderVBOEnable"); -	mSkippedFeatures.insert("RenderFogRatio"); - -	// first table is install with app -	std::string app_path = gDirUtilp->getAppRODataDir(); -	app_path += gDirUtilp->getDirDelimiter(); - -	std::string filename; -	std::string http_filename;  -#if LL_WINDOWS -	std::string os_string = LLAppViewer::instance()->getOSInfo().getOSStringSimple(); -	if (os_string.find("Microsoft Windows XP") == 0) -	{ -		filename = llformat(FEATURE_TABLE_FILENAME, "_xp"); -		http_filename = llformat(FEATURE_TABLE_VER_FILENAME, "_xp", LLVersionInfo::getVersion().c_str()); -	} -	else -	{ -		filename = llformat(FEATURE_TABLE_FILENAME, ""); -		http_filename = llformat(FEATURE_TABLE_VER_FILENAME, "", LLVersionInfo::getVersion().c_str()); -	} -#else -	filename = FEATURE_TABLE_FILENAME; -	http_filename = llformat(FEATURE_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str()); -#endif - -	app_path += filename; - -	 -	// second table is downloaded with HTTP -	std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename); - -	// use HTTP table if it exists -	std::string path; -	if (gDirUtilp->fileExists(http_path)) -	{ -		path = http_path; -	} -	else -	{ -		path = app_path; -	} - -	 -	return parseFeatureTable(path); -} - - -BOOL LLFeatureManager::parseFeatureTable(std::string filename) -{ -	llinfos << "Looking for feature table in " << filename << llendl; - -	llifstream file; -	std::string name; -	U32		version; -	 -	file.open(filename); 	 /*Flawfinder: ignore*/ - -	if (!file) -	{ -		LL_WARNS("RenderInit") << "Unable to open feature table " << filename << LL_ENDL; -		return FALSE; -	} - -	// Check file version -	file >> name; -	file >> version; -	if (name != "version") -	{ -		LL_WARNS("RenderInit") << filename << " does not appear to be a valid feature table!" << LL_ENDL; -		return FALSE; -	} - -	mTableVersion = version; - -	LLFeatureList *flp = NULL; -	while (file >> name) -	{ -		char buffer[MAX_STRING];		 /*Flawfinder: ignore*/ -		 -		if (name.substr(0,2) == "//") -		{ -			// This is a comment. -			file.getline(buffer, MAX_STRING); -			continue; -		} - -		if (name == "list") -		{ -			if (flp) -			{ -				//flp->dump(); -			} -			// It's a new mask, create it. -			file >> name; -			if (mMaskList.count(name)) -			{ -				LL_ERRS("RenderInit") << "Overriding mask " << name << ", this is invalid!" << LL_ENDL; -			} - -			flp = new LLFeatureList(name); -			mMaskList[name] = flp; -		} -		else -		{ -			if (!flp) -			{ -				LL_ERRS("RenderInit") << "Specified parameter before <list> keyword!" << LL_ENDL; -				return FALSE; -			} -			S32 available; -			F32 recommended; -			file >> available >> recommended; -			flp->addFeature(name, available, recommended); -		} -	} -	file.close(); - -	return TRUE; -} - -void LLFeatureManager::loadGPUClass() -{ -	// defaults -	mGPUClass = GPU_CLASS_UNKNOWN; -	mGPUString = gGLManager.getRawGLString(); -	mGPUSupported = FALSE; - -	// first table is in the app dir -	std::string app_path = gDirUtilp->getAppRODataDir(); -	app_path += gDirUtilp->getDirDelimiter(); -	app_path += GPU_TABLE_FILENAME; -	 -	// second table is downloaded with HTTP -	std::string http_filename = llformat(GPU_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str()); -	std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename); - -	// use HTTP table if it exists -	std::string path; -	if (gDirUtilp->fileExists(http_path)) -	{ -		path = http_path; -	} -	else -	{ -		path = app_path; -	} - -	parseGPUTable(path); -} - -	 -void LLFeatureManager::parseGPUTable(std::string filename) -{ -	llifstream file; -		 -	file.open(filename); - -	if (!file) -	{ -		LL_WARNS("RenderInit") << "Unable to open GPU table: " << filename << "!" << LL_ENDL; -		return; -	} - -	std::string rawRenderer = gGLManager.getRawGLString(); -	std::string renderer = rawRenderer; -	for (std::string::iterator i = renderer.begin(); i != renderer.end(); ++i) -	{ -		*i = tolower(*i); -	} - -	bool gpuFound; -	U32 lineNumber; -	for (gpuFound = false, lineNumber = 0; !gpuFound && !file.eof(); lineNumber++) -	{ -		char buffer[MAX_STRING];		 /*Flawfinder: ignore*/ -		buffer[0] = 0; - -		file.getline(buffer, MAX_STRING); -		 -		if (strlen(buffer) >= 2 && 	 /*Flawfinder: ignore*/ -			buffer[0] == '/' &&  -			buffer[1] == '/') -		{ -			// This is a comment. -			continue; -		} - -		if (strlen(buffer) == 0)	 /*Flawfinder: ignore*/ -		{ -			// This is a blank line -			continue; -		} - -		// setup the tokenizer -		std::string buf(buffer); -		std::string cls, label, expr, supported; -		boost_tokenizer tokens(buf, boost::char_separator<char>("\t\n")); -		boost_tokenizer::iterator token_iter = tokens.begin(); - -		// grab the label, pseudo regular expression, and class -		if(token_iter != tokens.end()) -		{ -			label = *token_iter++; -		} -		if(token_iter != tokens.end()) -		{ -			expr = *token_iter++; -		} -		if(token_iter != tokens.end()) -		{ -			cls = *token_iter++; -		} -		if(token_iter != tokens.end()) -		{ -			supported = *token_iter++; -		} - -		if (label.empty() || expr.empty() || cls.empty() || supported.empty()) -		{ -			LL_WARNS("RenderInit") << "invald gpu_table.txt:" << lineNumber << ": '" << buffer << "'" << LL_ENDL; -			continue; -		} -	 -		for (U32 i = 0; i < expr.length(); i++)	 /*Flawfinder: ignore*/ -		{ -			expr[i] = tolower(expr[i]); -		} - -		// run the regular expression against the renderer -		boost::regex re(expr.c_str()); -		if(boost::regex_search(renderer, re)) -		{ -			// if we found it, stop! -			gpuFound = true; -			mGPUString = label; -			mGPUClass = (EGPUClass) strtol(cls.c_str(), NULL, 10); -			mGPUSupported = (BOOL) strtol(supported.c_str(), NULL, 10); -		} -	} -	file.close(); - -	if ( gpuFound ) -	{ -		LL_INFOS("RenderInit") << "GPU '" << rawRenderer << "' recognized as '" << mGPUString << "'" << LL_ENDL; -		if (!mGPUSupported) -		{ -			LL_INFOS("RenderInit") << "GPU '" << mGPUString << "' is not supported." << LL_ENDL; -		} -	} -	else -	{ -		LL_WARNS("RenderInit") << "GPU '" << rawRenderer << "' not recognized" << LL_ENDL; -	} -} - -// responder saves table into file -class LLHTTPFeatureTableResponder : public LLHTTPClient::Responder -{ -public: - -	LLHTTPFeatureTableResponder(std::string filename) : -		mFilename(filename) -	{ -	} - -	 -	virtual void completedRaw(U32 status, const std::string& reason, -							  const LLChannelDescriptors& channels, -							  const LLIOPipe::buffer_ptr_t& buffer) -	{ -		if (isGoodStatus(status)) -		{ -			// write to file - -			llinfos << "writing feature table to " << mFilename << llendl; -			 -			S32 file_size = buffer->countAfter(channels.in(), NULL); -			if (file_size > 0) -			{ -				// read from buffer -				U8* copy_buffer = new U8[file_size]; -				buffer->readAfter(channels.in(), NULL, copy_buffer, file_size); - -				// write to file -				LLAPRFile out(mFilename, LL_APR_WB); -				out.write(copy_buffer, file_size); -				out.close(); -			} -		} -		 -	} -	 -private: -	std::string mFilename; -}; - -void fetch_feature_table(std::string table) -{ -	const std::string base       = gSavedSettings.getString("FeatureManagerHTTPTable"); - -#if LL_WINDOWS -	std::string os_string = LLAppViewer::instance()->getOSInfo().getOSStringSimple(); -	std::string filename; -	if (os_string.find("Microsoft Windows XP") == 0) -	{ -		filename = llformat(table.c_str(), "_xp", LLVersionInfo::getVersion().c_str()); -	} -	else -	{ -		filename = llformat(table.c_str(), "", LLVersionInfo::getVersion().c_str()); -	} -#else -	const std::string filename   = llformat(table.c_str(), LLVersionInfo::getVersion().c_str()); -#endif - -	const std::string url        = base + "/" + filename; - -	const std::string path       = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename); - -	llinfos << "LLFeatureManager fetching " << url << " into " << path << llendl; -	 -	LLHTTPClient::get(url, new LLHTTPFeatureTableResponder(path)); -} - -void fetch_gpu_table(std::string table) -{ -	const std::string base       = gSavedSettings.getString("FeatureManagerHTTPTable"); - -	const std::string filename   = llformat(table.c_str(), LLVersionInfo::getVersion().c_str()); - -	const std::string url        = base + "/" + filename; - -	const std::string path       = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename); - -	llinfos << "LLFeatureManager fetching " << url << " into " << path << llendl; -	 -	LLHTTPClient::get(url, new LLHTTPFeatureTableResponder(path)); -} - -// fetch table(s) from a website (S3) -void LLFeatureManager::fetchHTTPTables() -{ -	fetch_feature_table(FEATURE_TABLE_VER_FILENAME); -	fetch_gpu_table(GPU_TABLE_VER_FILENAME); -} - - -void LLFeatureManager::cleanupFeatureTables() -{ -	std::for_each(mMaskList.begin(), mMaskList.end(), DeletePairedPointer()); -	mMaskList.clear(); -} - -void LLFeatureManager::init() -{ -	// load the tables -	loadFeatureTables(); - -	// get the gpu class -	loadGPUClass(); - -	// apply the base masks, so we know if anything is disabled -	applyBaseMasks(); -} - -void LLFeatureManager::applyRecommendedSettings() -{ -	// apply saved settings -	// cap the level at 2 (high) -	S32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_2)); - -	llinfos << "Applying Recommended Features" << llendl; - -	setGraphicsLevel(level, false); -	gSavedSettings.setU32("RenderQualityPerformance", level); - -	// now apply the tweaks to draw distance -	// these are double negatives, because feature masks only work by -	// downgrading values, so i needed to make a true value go to false -	// for certain cards, thus the awkward name, "Disregard..." -	if(!gSavedSettings.getBOOL("Disregard96DefaultDrawDistance")) -	{ -		gSavedSettings.setF32("RenderFarClip", 96.0f); -	} -	else if(!gSavedSettings.getBOOL("Disregard128DefaultDrawDistance")) -	{ -		gSavedSettings.setF32("RenderFarClip", 128.0f); -	} -} - -void LLFeatureManager::applyFeatures(bool skipFeatures) -{ -	// see featuretable.txt / featuretable_linux.txt / featuretable_mac.txt - -#ifndef LL_RELEASE_FOR_DOWNLOAD -	dump(); -#endif - -	// scroll through all of these and set their corresponding control value -	for(feature_map_t::iterator mIt = mFeatures.begin();  -		mIt != mFeatures.end();  -		++mIt) -	{ -		// skip features you want to skip -		// do this for when you don't want to change certain settings -		if(skipFeatures) -		{ -			if(mSkippedFeatures.find(mIt->first) != mSkippedFeatures.end()) -			{ -				continue; -			} -		} - -		// get the control setting -		LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first); -		if(ctrl == NULL) -		{ -			llwarns << "AHHH! Control setting " << mIt->first << " does not exist!" << llendl; -			continue; -		} - -		// handle all the different types -		if(ctrl->isType(TYPE_BOOLEAN)) -		{ -			gSavedSettings.setBOOL(mIt->first, (BOOL)getRecommendedValue(mIt->first)); -		} -		else if (ctrl->isType(TYPE_S32)) -		{ -			gSavedSettings.setS32(mIt->first, (S32)getRecommendedValue(mIt->first)); -		} -		else if (ctrl->isType(TYPE_U32)) -		{ -			gSavedSettings.setU32(mIt->first, (U32)getRecommendedValue(mIt->first)); -		} -		else if (ctrl->isType(TYPE_F32)) -		{ -			gSavedSettings.setF32(mIt->first, (F32)getRecommendedValue(mIt->first)); -		} -		else -		{ -			llwarns << "AHHH! Control variable is not a numeric type!" << llendl; -		} -	} -} - -void LLFeatureManager::setGraphicsLevel(S32 level, bool skipFeatures) -{ -	applyBaseMasks(); - -	switch (level) -	{ -		case 0: -			maskFeatures("Low");			 -			break; -		case 1: -			maskFeatures("Mid"); -			break; -		case 2: -			maskFeatures("High"); -			break; -		case 3: -			maskFeatures("Ultra"); -			break; -		default: -			maskFeatures("Low"); -			break; -	} - -	applyFeatures(skipFeatures); -} - -void LLFeatureManager::applyBaseMasks() -{ -	// reapply masks -	mFeatures.clear(); - -	LLFeatureList* maskp = findMask("all"); -	if(maskp == NULL) -	{ -		LL_WARNS("RenderInit") << "AHH! No \"all\" in feature table!" << LL_ENDL; -		return; -	} - -	mFeatures = maskp->getFeatures(); - -	// mask class -	if (mGPUClass >= 0 && mGPUClass < 4) -	{ -		const char* class_table[] = -		{ -			"Class0", -			"Class1", -			"Class2", -			"Class3" -		}; - -		LL_INFOS("RenderInit") << "Setting GPU Class to " << class_table[mGPUClass] << LL_ENDL; -		maskFeatures(class_table[mGPUClass]); -	} -	else -	{ -		LL_INFOS("RenderInit") << "Setting GPU Class to Unknown" << LL_ENDL; -		maskFeatures("Unknown"); -	} - -	// now all those wacky ones -	if (!gGLManager.mHasFragmentShader) -	{ -		maskFeatures("NoPixelShaders"); -	} -	if (!gGLManager.mHasVertexShader) -	{ -		maskFeatures("NoVertexShaders"); -	} -	if (gGLManager.mIsNVIDIA) -	{ -		maskFeatures("NVIDIA"); -	} -	if (gGLManager.mIsGF2or4MX) -	{ -		maskFeatures("GeForce2"); -	} -	if (gGLManager.mIsATI) -	{ -		maskFeatures("ATI"); -	} -	if (gGLManager.mHasATIMemInfo && gGLManager.mVRAM < 256) -	{ -		maskFeatures("ATIVramLT256"); -	} -	if (gGLManager.mATIOldDriver) -	{ -		maskFeatures("ATIOldDriver"); -	} -	if (gGLManager.mIsGFFX) -	{ -		maskFeatures("GeForceFX"); -	} -	if (gGLManager.mIsIntel) -	{ -		maskFeatures("Intel"); -	} -	if (gGLManager.mGLVersion < 1.5f) -	{ -		maskFeatures("OpenGLPre15"); -	} -	if (gGLManager.mGLVersion < 3.f) -	{ -		maskFeatures("OpenGLPre30"); -	} -	if (gGLManager.mNumTextureUnits <= 8) -	{ -		maskFeatures("TexUnit8orLess"); -	} - -	// now mask by gpu string -	// Replaces ' ' with '_' in mGPUString to deal with inability for parser to handle spaces -	std::string gpustr = mGPUString; -	for (std::string::iterator iter = gpustr.begin(); iter != gpustr.end(); ++iter) -	{ -		if (*iter == ' ') -		{ -			*iter = '_'; -		} -	} - -	//llinfos << "Masking features from gpu table match: " << gpustr << llendl; -	maskFeatures(gpustr); - -	// now mask cpu type ones -	if (gSysMemory.getPhysicalMemoryClamped() <= 256*1024*1024) -	{ -		maskFeatures("RAM256MB"); -	} -	 -#if LL_SOLARIS && defined(__sparc) 	//  even low MHz SPARCs are fast -#error The 800 is hinky. Would something like a LL_MIN_MHZ make more sense here? -	if (gSysCPU.getMHz() < 800) -#else -	if (gSysCPU.getMHz() < 1100) -#endif -	{ -		maskFeatures("CPUSlow"); -	} - -	if (isSafe()) -	{ -		maskFeatures("safe"); -	} -} +/** 
 + * @file llfeaturemanager.cpp
 + * @brief LLFeatureManager class implementation
 + *
 + * $LicenseInfo:firstyear=2003&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, 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$
 + */
 +
 +#include "llviewerprecompiledheaders.h"
 +
 +#include <iostream>
 +#include <fstream>
 +
 +#include <boost/regex.hpp>
 +
 +#include "llfeaturemanager.h"
 +#include "lldir.h"
 +
 +#include "llsys.h"
 +#include "llgl.h"
 +#include "llsecondlifeurls.h"
 +
 +#include "llappviewer.h"
 +#include "llhttpclient.h"
 +#include "llnotificationsutil.h"
 +#include "llviewercontrol.h"
 +#include "llworld.h"
 +#include "lldrawpoolterrain.h"
 +#include "llviewertexturelist.h"
 +#include "llversioninfo.h"
 +#include "llwindow.h"
 +#include "llui.h"
 +#include "llcontrol.h"
 +#include "llboost.h"
 +#include "llweb.h"
 +
 +#if LL_WINDOWS
 +#include "lldxhardware.h"
 +#endif
 +
 +
 +#if LL_DARWIN
 +const char FEATURE_TABLE_FILENAME[] = "featuretable_mac.txt";
 +const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_mac.%s.txt";
 +#elif LL_LINUX
 +const char FEATURE_TABLE_FILENAME[] = "featuretable_linux.txt";
 +const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_linux.%s.txt";
 +#elif LL_SOLARIS
 +const char FEATURE_TABLE_FILENAME[] = "featuretable_solaris.txt";
 +const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_solaris.%s.txt";
 +#else
 +const char FEATURE_TABLE_FILENAME[] = "featuretable%s.txt";
 +const char FEATURE_TABLE_VER_FILENAME[] = "featuretable%s.%s.txt";
 +#endif
 +
 +const char GPU_TABLE_FILENAME[] = "gpu_table.txt";
 +const char GPU_TABLE_VER_FILENAME[] = "gpu_table.%s.txt";
 +
 +LLFeatureInfo::LLFeatureInfo(const std::string& name, const BOOL available, const F32 level)
 +	: mValid(TRUE), mName(name), mAvailable(available), mRecommendedLevel(level)
 +{
 +}
 +
 +LLFeatureList::LLFeatureList(const std::string& name)
 +	: mName(name)
 +{
 +}
 +
 +LLFeatureList::~LLFeatureList()
 +{
 +}
 +
 +void LLFeatureList::addFeature(const std::string& name, const BOOL available, const F32 level)
 +{
 +	if (mFeatures.count(name))
 +	{
 +		LL_WARNS("RenderInit") << "LLFeatureList::Attempting to add preexisting feature " << name << LL_ENDL;
 +	}
 +
 +	LLFeatureInfo fi(name, available, level);
 +	mFeatures[name] = fi;
 +}
 +
 +BOOL LLFeatureList::isFeatureAvailable(const std::string& name)
 +{
 +	if (mFeatures.count(name))
 +	{
 +		return mFeatures[name].mAvailable;
 +	}
 +
 +	LL_WARNS("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL;
 +	
 +	// changing this to TRUE so you have to explicitly disable 
 +	// something for it to be disabled
 +	return TRUE;
 +}
 +
 +F32 LLFeatureList::getRecommendedValue(const std::string& name)
 +{
 +	if (mFeatures.count(name) && isFeatureAvailable(name))
 +	{
 +		return mFeatures[name].mRecommendedLevel;
 +	}
 +
 +	LL_WARNS("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL;
 +	return 0;
 +}
 +
 +BOOL LLFeatureList::maskList(LLFeatureList &mask)
 +{
 +	//llinfos << "Masking with " << mask.mName << llendl;
 +	//
 +	// Lookup the specified feature mask, and overlay it on top of the
 +	// current feature mask.
 +	//
 +
 +	LLFeatureInfo mask_fi;
 +
 +	feature_map_t::iterator feature_it;
 +	for (feature_it = mask.mFeatures.begin(); feature_it != mask.mFeatures.end(); ++feature_it)
 +	{
 +		mask_fi = feature_it->second;
 +		//
 +		// Look for the corresponding feature
 +		//
 +		if (!mFeatures.count(mask_fi.mName))
 +		{
 +			LL_WARNS("RenderInit") << "Feature " << mask_fi.mName << " in mask not in top level!" << LL_ENDL;
 +			continue;
 +		}
 +
 +		LLFeatureInfo &cur_fi = mFeatures[mask_fi.mName];
 +		if (mask_fi.mAvailable && !cur_fi.mAvailable)
 +		{
 +			LL_WARNS("RenderInit") << "Mask attempting to reenabling disabled feature, ignoring " << cur_fi.mName << LL_ENDL;
 +			continue;
 +		}
 +		cur_fi.mAvailable = mask_fi.mAvailable;
 +		cur_fi.mRecommendedLevel = llmin(cur_fi.mRecommendedLevel, mask_fi.mRecommendedLevel);
 +		LL_DEBUGS("RenderInit") << "Feature mask " << mask.mName
 +				<< " Feature " << mask_fi.mName
 +				<< " Mask: " << mask_fi.mRecommendedLevel
 +				<< " Now: " << cur_fi.mRecommendedLevel << LL_ENDL;
 +	}
 +
 +	LL_DEBUGS("RenderInit") << "After applying mask " << mask.mName << std::endl;
 +		// Will conditionally call dump only if the above message will be logged, thanks 
 +		// to it being wrapped by the LL_DEBUGS and LL_ENDL macros.
 +		dump();
 +	LL_CONT << LL_ENDL;
 +
 +	return TRUE;
 +}
 +
 +void LLFeatureList::dump()
 +{
 +	LL_DEBUGS("RenderInit") << "Feature list: " << mName << LL_ENDL;
 +	LL_DEBUGS("RenderInit") << "--------------" << LL_ENDL;
 +
 +	LLFeatureInfo fi;
 +	feature_map_t::iterator feature_it;
 +	for (feature_it = mFeatures.begin(); feature_it != mFeatures.end(); ++feature_it)
 +	{
 +		fi = feature_it->second;
 +		LL_DEBUGS("RenderInit") << fi.mName << "\t\t" << fi.mAvailable << ":" << fi.mRecommendedLevel << LL_ENDL;
 +	}
 +	LL_DEBUGS("RenderInit") << LL_ENDL;
 +}
 +
 +LLFeatureList *LLFeatureManager::findMask(const std::string& name)
 +{
 +	if (mMaskList.count(name))
 +	{
 +		return mMaskList[name];
 +	}
 +
 +	return NULL;
 +}
 +
 +BOOL LLFeatureManager::maskFeatures(const std::string& name)
 +{
 +	LLFeatureList *maskp = findMask(name);
 +	if (!maskp)
 +	{
 + 		LL_DEBUGS("RenderInit") << "Unknown feature mask " << name << LL_ENDL;
 +		return FALSE;
 +	}
 +	LL_INFOS("RenderInit") << "Applying GPU Feature list: " << name << LL_ENDL;
 +	return maskList(*maskp);
 +}
 +
 +BOOL LLFeatureManager::loadFeatureTables()
 +{
 +	// *TODO - if I or anyone else adds something else to the skipped list
 +	// make this data driven.  Put it in the feature table and parse it
 +	// correctly
 +	mSkippedFeatures.insert("RenderAnisotropic");
 +	mSkippedFeatures.insert("RenderGamma");
 +	mSkippedFeatures.insert("RenderVBOEnable");
 +	mSkippedFeatures.insert("RenderFogRatio");
 +
 +	// first table is install with app
 +	std::string app_path = gDirUtilp->getAppRODataDir();
 +	app_path += gDirUtilp->getDirDelimiter();
 +
 +	std::string filename;
 +	std::string http_filename; 
 +#if LL_WINDOWS
 +	std::string os_string = LLAppViewer::instance()->getOSInfo().getOSStringSimple();
 +	if (os_string.find("Microsoft Windows XP") == 0)
 +	{
 +		filename = llformat(FEATURE_TABLE_FILENAME, "_xp");
 +		http_filename = llformat(FEATURE_TABLE_VER_FILENAME, "_xp", LLVersionInfo::getVersion().c_str());
 +	}
 +	else
 +	{
 +		filename = llformat(FEATURE_TABLE_FILENAME, "");
 +		http_filename = llformat(FEATURE_TABLE_VER_FILENAME, "", LLVersionInfo::getVersion().c_str());
 +	}
 +#else
 +	filename = FEATURE_TABLE_FILENAME;
 +	http_filename = llformat(FEATURE_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str());
 +#endif
 +
 +	app_path += filename;
 +
 +	
 +	// second table is downloaded with HTTP
 +	std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename);
 +
 +	// use HTTP table if it exists
 +	std::string path;
 +	if (gDirUtilp->fileExists(http_path))
 +	{
 +		path = http_path;
 +	}
 +	else
 +	{
 +		path = app_path;
 +	}
 +
 +	
 +	return parseFeatureTable(path);
 +}
 +
 +
 +BOOL LLFeatureManager::parseFeatureTable(std::string filename)
 +{
 +	llinfos << "Looking for feature table in " << filename << llendl;
 +
 +	llifstream file;
 +	std::string name;
 +	U32		version;
 +	
 +	file.open(filename); 	 /*Flawfinder: ignore*/
 +
 +	if (!file)
 +	{
 +		LL_WARNS("RenderInit") << "Unable to open feature table " << filename << LL_ENDL;
 +		return FALSE;
 +	}
 +
 +	// Check file version
 +	file >> name;
 +	file >> version;
 +	if (name != "version")
 +	{
 +		LL_WARNS("RenderInit") << filename << " does not appear to be a valid feature table!" << LL_ENDL;
 +		return FALSE;
 +	}
 +
 +	mTableVersion = version;
 +
 +	LLFeatureList *flp = NULL;
 +	while (file >> name)
 +	{
 +		char buffer[MAX_STRING];		 /*Flawfinder: ignore*/
 +		
 +		if (name.substr(0,2) == "//")
 +		{
 +			// This is a comment.
 +			file.getline(buffer, MAX_STRING);
 +			continue;
 +		}
 +
 +		if (name == "list")
 +		{
 +			if (flp)
 +			{
 +				//flp->dump();
 +			}
 +			// It's a new mask, create it.
 +			file >> name;
 +			if (mMaskList.count(name))
 +			{
 +				LL_ERRS("RenderInit") << "Overriding mask " << name << ", this is invalid!" << LL_ENDL;
 +			}
 +
 +			flp = new LLFeatureList(name);
 +			mMaskList[name] = flp;
 +		}
 +		else
 +		{
 +			if (!flp)
 +			{
 +				LL_ERRS("RenderInit") << "Specified parameter before <list> keyword!" << LL_ENDL;
 +				return FALSE;
 +			}
 +			S32 available;
 +			F32 recommended;
 +			file >> available >> recommended;
 +			flp->addFeature(name, available, recommended);
 +		}
 +	}
 +	file.close();
 +
 +	return TRUE;
 +}
 +
 +void LLFeatureManager::loadGPUClass()
 +{
 +	// defaults
 +	mGPUClass = GPU_CLASS_UNKNOWN;
 +	mGPUString = gGLManager.getRawGLString();
 +	mGPUSupported = FALSE;
 +
 +	// first table is in the app dir
 +	std::string app_path = gDirUtilp->getAppRODataDir();
 +	app_path += gDirUtilp->getDirDelimiter();
 +	app_path += GPU_TABLE_FILENAME;
 +	
 +	// second table is downloaded with HTTP
 +	std::string http_filename = llformat(GPU_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str());
 +	std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename);
 +
 +	// use HTTP table if it exists
 +	std::string path;
 +	if (gDirUtilp->fileExists(http_path))
 +	{
 +		path = http_path;
 +	}
 +	else
 +	{
 +		path = app_path;
 +	}
 +
 +	parseGPUTable(path);
 +}
 +
 +	
 +void LLFeatureManager::parseGPUTable(std::string filename)
 +{
 +	llifstream file;
 +		
 +	file.open(filename);
 +
 +	if (!file)
 +	{
 +		LL_WARNS("RenderInit") << "Unable to open GPU table: " << filename << "!" << LL_ENDL;
 +		return;
 +	}
 +
 +	std::string rawRenderer = gGLManager.getRawGLString();
 +	std::string renderer = rawRenderer;
 +	for (std::string::iterator i = renderer.begin(); i != renderer.end(); ++i)
 +	{
 +		*i = tolower(*i);
 +	}
 +
 +	bool gpuFound;
 +	U32 lineNumber;
 +	for (gpuFound = false, lineNumber = 0; !gpuFound && !file.eof(); lineNumber++)
 +	{
 +		char buffer[MAX_STRING];		 /*Flawfinder: ignore*/
 +		buffer[0] = 0;
 +
 +		file.getline(buffer, MAX_STRING);
 +		
 +		if (strlen(buffer) >= 2 && 	 /*Flawfinder: ignore*/
 +			buffer[0] == '/' && 
 +			buffer[1] == '/')
 +		{
 +			// This is a comment.
 +			continue;
 +		}
 +
 +		if (strlen(buffer) == 0)	 /*Flawfinder: ignore*/
 +		{
 +			// This is a blank line
 +			continue;
 +		}
 +
 +		// setup the tokenizer
 +		std::string buf(buffer);
 +		std::string cls, label, expr, supported;
 +		boost_tokenizer tokens(buf, boost::char_separator<char>("\t\n"));
 +		boost_tokenizer::iterator token_iter = tokens.begin();
 +
 +		// grab the label, pseudo regular expression, and class
 +		if(token_iter != tokens.end())
 +		{
 +			label = *token_iter++;
 +		}
 +		if(token_iter != tokens.end())
 +		{
 +			expr = *token_iter++;
 +		}
 +		if(token_iter != tokens.end())
 +		{
 +			cls = *token_iter++;
 +		}
 +		if(token_iter != tokens.end())
 +		{
 +			supported = *token_iter++;
 +		}
 +
 +		if (label.empty() || expr.empty() || cls.empty() || supported.empty())
 +		{
 +			LL_WARNS("RenderInit") << "invald gpu_table.txt:" << lineNumber << ": '" << buffer << "'" << LL_ENDL;
 +			continue;
 +		}
 +	
 +		for (U32 i = 0; i < expr.length(); i++)	 /*Flawfinder: ignore*/
 +		{
 +			expr[i] = tolower(expr[i]);
 +		}
 +
 +		// run the regular expression against the renderer
 +		boost::regex re(expr.c_str());
 +		if(boost::regex_search(renderer, re))
 +		{
 +			// if we found it, stop!
 +			gpuFound = true;
 +			mGPUString = label;
 +			mGPUClass = (EGPUClass) strtol(cls.c_str(), NULL, 10);
 +			mGPUSupported = (BOOL) strtol(supported.c_str(), NULL, 10);
 +		}
 +	}
 +	file.close();
 +
 +	if ( gpuFound )
 +	{
 +		LL_INFOS("RenderInit") << "GPU '" << rawRenderer << "' recognized as '" << mGPUString << "'" << LL_ENDL;
 +		if (!mGPUSupported)
 +		{
 +			LL_INFOS("RenderInit") << "GPU '" << mGPUString << "' is not supported." << LL_ENDL;
 +		}
 +	}
 +	else
 +	{
 +		LL_WARNS("RenderInit") << "GPU '" << rawRenderer << "' not recognized" << LL_ENDL;
 +	}
 +}
 +
 +// responder saves table into file
 +class LLHTTPFeatureTableResponder : public LLHTTPClient::Responder
 +{
 +public:
 +
 +	LLHTTPFeatureTableResponder(std::string filename) :
 +		mFilename(filename)
 +	{
 +	}
 +
 +	
 +	virtual void completedRaw(U32 status, const std::string& reason,
 +							  const LLChannelDescriptors& channels,
 +							  const LLIOPipe::buffer_ptr_t& buffer)
 +	{
 +		if (isGoodStatus(status))
 +		{
 +			// write to file
 +
 +			llinfos << "writing feature table to " << mFilename << llendl;
 +			
 +			S32 file_size = buffer->countAfter(channels.in(), NULL);
 +			if (file_size > 0)
 +			{
 +				// read from buffer
 +				U8* copy_buffer = new U8[file_size];
 +				buffer->readAfter(channels.in(), NULL, copy_buffer, file_size);
 +
 +				// write to file
 +				LLAPRFile out(mFilename, LL_APR_WB);
 +				out.write(copy_buffer, file_size);
 +				out.close();
 +			}
 +		}
 +		
 +	}
 +	
 +private:
 +	std::string mFilename;
 +};
 +
 +void fetch_feature_table(std::string table)
 +{
 +	const std::string base       = gSavedSettings.getString("FeatureManagerHTTPTable");
 +
 +#if LL_WINDOWS
 +	std::string os_string = LLAppViewer::instance()->getOSInfo().getOSStringSimple();
 +	std::string filename;
 +	if (os_string.find("Microsoft Windows XP") == 0)
 +	{
 +		filename = llformat(table.c_str(), "_xp", LLVersionInfo::getVersion().c_str());
 +	}
 +	else
 +	{
 +		filename = llformat(table.c_str(), "", LLVersionInfo::getVersion().c_str());
 +	}
 +#else
 +	const std::string filename   = llformat(table.c_str(), LLVersionInfo::getVersion().c_str());
 +#endif
 +
 +	const std::string url        = base + "/" + filename;
 +
 +	const std::string path       = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename);
 +
 +	llinfos << "LLFeatureManager fetching " << url << " into " << path << llendl;
 +	
 +	LLHTTPClient::get(url, new LLHTTPFeatureTableResponder(path));
 +}
 +
 +void fetch_gpu_table(std::string table)
 +{
 +	const std::string base       = gSavedSettings.getString("FeatureManagerHTTPTable");
 +
 +	const std::string filename   = llformat(table.c_str(), LLVersionInfo::getVersion().c_str());
 +
 +	const std::string url        = base + "/" + filename;
 +
 +	const std::string path       = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename);
 +
 +	llinfos << "LLFeatureManager fetching " << url << " into " << path << llendl;
 +	
 +	LLHTTPClient::get(url, new LLHTTPFeatureTableResponder(path));
 +}
 +
 +// fetch table(s) from a website (S3)
 +void LLFeatureManager::fetchHTTPTables()
 +{
 +	fetch_feature_table(FEATURE_TABLE_VER_FILENAME);
 +	fetch_gpu_table(GPU_TABLE_VER_FILENAME);
 +}
 +
 +
 +void LLFeatureManager::cleanupFeatureTables()
 +{
 +	std::for_each(mMaskList.begin(), mMaskList.end(), DeletePairedPointer());
 +	mMaskList.clear();
 +}
 +
 +void LLFeatureManager::init()
 +{
 +	// load the tables
 +	loadFeatureTables();
 +
 +	// get the gpu class
 +	loadGPUClass();
 +
 +	// apply the base masks, so we know if anything is disabled
 +	applyBaseMasks();
 +}
 +
 +void LLFeatureManager::applyRecommendedSettings()
 +{
 +	// apply saved settings
 +	// cap the level at 2 (high)
 +	S32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_2));
 +
 +	llinfos << "Applying Recommended Features" << llendl;
 +
 +	setGraphicsLevel(level, false);
 +	gSavedSettings.setU32("RenderQualityPerformance", level);
 +
 +	// now apply the tweaks to draw distance
 +	// these are double negatives, because feature masks only work by
 +	// downgrading values, so i needed to make a true value go to false
 +	// for certain cards, thus the awkward name, "Disregard..."
 +	if(!gSavedSettings.getBOOL("Disregard96DefaultDrawDistance"))
 +	{
 +		gSavedSettings.setF32("RenderFarClip", 96.0f);
 +	}
 +	else if(!gSavedSettings.getBOOL("Disregard128DefaultDrawDistance"))
 +	{
 +		gSavedSettings.setF32("RenderFarClip", 128.0f);
 +	}
 +}
 +
 +void LLFeatureManager::applyFeatures(bool skipFeatures)
 +{
 +	// see featuretable.txt / featuretable_linux.txt / featuretable_mac.txt
 +
 +#ifndef LL_RELEASE_FOR_DOWNLOAD
 +	dump();
 +#endif
 +
 +	// scroll through all of these and set their corresponding control value
 +	for(feature_map_t::iterator mIt = mFeatures.begin(); 
 +		mIt != mFeatures.end(); 
 +		++mIt)
 +	{
 +		// skip features you want to skip
 +		// do this for when you don't want to change certain settings
 +		if(skipFeatures)
 +		{
 +			if(mSkippedFeatures.find(mIt->first) != mSkippedFeatures.end())
 +			{
 +				continue;
 +			}
 +		}
 +
 +		// get the control setting
 +		LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first);
 +		if(ctrl == NULL)
 +		{
 +			llwarns << "AHHH! Control setting " << mIt->first << " does not exist!" << llendl;
 +			continue;
 +		}
 +
 +		// handle all the different types
 +		if(ctrl->isType(TYPE_BOOLEAN))
 +		{
 +			gSavedSettings.setBOOL(mIt->first, (BOOL)getRecommendedValue(mIt->first));
 +		}
 +		else if (ctrl->isType(TYPE_S32))
 +		{
 +			gSavedSettings.setS32(mIt->first, (S32)getRecommendedValue(mIt->first));
 +		}
 +		else if (ctrl->isType(TYPE_U32))
 +		{
 +			gSavedSettings.setU32(mIt->first, (U32)getRecommendedValue(mIt->first));
 +		}
 +		else if (ctrl->isType(TYPE_F32))
 +		{
 +			gSavedSettings.setF32(mIt->first, (F32)getRecommendedValue(mIt->first));
 +		}
 +		else
 +		{
 +			llwarns << "AHHH! Control variable is not a numeric type!" << llendl;
 +		}
 +	}
 +}
 +
 +void LLFeatureManager::setGraphicsLevel(S32 level, bool skipFeatures)
 +{
 +	applyBaseMasks();
 +
 +	switch (level)
 +	{
 +		case 0:
 +			maskFeatures("Low");			
 +			break;
 +		case 1:
 +			maskFeatures("Mid");
 +			break;
 +		case 2:
 +			maskFeatures("High");
 +			break;
 +		case 3:
 +			maskFeatures("Ultra");
 +			break;
 +		default:
 +			maskFeatures("Low");
 +			break;
 +	}
 +
 +	applyFeatures(skipFeatures);
 +}
 +
 +void LLFeatureManager::applyBaseMasks()
 +{
 +	// reapply masks
 +	mFeatures.clear();
 +
 +	LLFeatureList* maskp = findMask("all");
 +	if(maskp == NULL)
 +	{
 +		LL_WARNS("RenderInit") << "AHH! No \"all\" in feature table!" << LL_ENDL;
 +		return;
 +	}
 +
 +	mFeatures = maskp->getFeatures();
 +
 +	// mask class
 +	if (mGPUClass >= 0 && mGPUClass < 4)
 +	{
 +		const char* class_table[] =
 +		{
 +			"Class0",
 +			"Class1",
 +			"Class2",
 +			"Class3"
 +		};
 +
 +		LL_INFOS("RenderInit") << "Setting GPU Class to " << class_table[mGPUClass] << LL_ENDL;
 +		maskFeatures(class_table[mGPUClass]);
 +	}
 +	else
 +	{
 +		LL_INFOS("RenderInit") << "Setting GPU Class to Unknown" << LL_ENDL;
 +		maskFeatures("Unknown");
 +	}
 +
 +	// now all those wacky ones
 +	if (!gGLManager.mHasFragmentShader)
 +	{
 +		maskFeatures("NoPixelShaders");
 +	}
 +	if (!gGLManager.mHasVertexShader)
 +	{
 +		maskFeatures("NoVertexShaders");
 +	}
 +	if (gGLManager.mIsNVIDIA)
 +	{
 +		maskFeatures("NVIDIA");
 +	}
 +	if (gGLManager.mIsGF2or4MX)
 +	{
 +		maskFeatures("GeForce2");
 +	}
 +	if (gGLManager.mIsATI)
 +	{
 +		maskFeatures("ATI");
 +	}
 +	if (gGLManager.mHasATIMemInfo && gGLManager.mVRAM < 256)
 +	{
 +		maskFeatures("ATIVramLT256");
 +	}
 +	if (gGLManager.mATIOldDriver)
 +	{
 +		maskFeatures("ATIOldDriver");
 +	}
 +	if (gGLManager.mIsGFFX)
 +	{
 +		maskFeatures("GeForceFX");
 +	}
 +	if (gGLManager.mIsIntel)
 +	{
 +		maskFeatures("Intel");
 +	}
 +	if (gGLManager.mGLVersion < 1.5f)
 +	{
 +		maskFeatures("OpenGLPre15");
 +	}
 +	if (gGLManager.mGLVersion < 3.f)
 +	{
 +		maskFeatures("OpenGLPre30");
 +	}
 +	if (gGLManager.mNumTextureImageUnits <= 8)
 +	{
 +		maskFeatures("TexUnit8orLess");
 +	}
 +
 +	// now mask by gpu string
 +	// Replaces ' ' with '_' in mGPUString to deal with inability for parser to handle spaces
 +	std::string gpustr = mGPUString;
 +	for (std::string::iterator iter = gpustr.begin(); iter != gpustr.end(); ++iter)
 +	{
 +		if (*iter == ' ')
 +		{
 +			*iter = '_';
 +		}
 +	}
 +
 +	//llinfos << "Masking features from gpu table match: " << gpustr << llendl;
 +	maskFeatures(gpustr);
 +
 +	// now mask cpu type ones
 +	if (gSysMemory.getPhysicalMemoryClamped() <= 256*1024*1024)
 +	{
 +		maskFeatures("RAM256MB");
 +	}
 +	
 +#if LL_SOLARIS && defined(__sparc) 	//  even low MHz SPARCs are fast
 +#error The 800 is hinky. Would something like a LL_MIN_MHZ make more sense here?
 +	if (gSysCPU.getMHz() < 800)
 +#else
 +	if (gSysCPU.getMHz() < 1100)
 +#endif
 +	{
 +		maskFeatures("CPUSlow");
 +	}
 +
 +	if (isSafe())
 +	{
 +		maskFeatures("safe");
 +	}
 +}
 diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index 2c4153688a..a9f52282a5 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -131,7 +131,7 @@ void LLFirstUse::notMoving(bool enable)  // static  void LLFirstUse::viewPopup(bool enable)  { -	firstUseNotification("FirstViewPopup", enable, "HintView", LLSD(), LLSD().with("target", "view_popup").with("direction", "right")); +//	firstUseNotification("FirstViewPopup", enable, "HintView", LLSD(), LLSD().with("target", "view_popup").with("direction", "right"));  }  // static diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index e8da1aa42c..9dd5269a6b 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -98,7 +98,8 @@  #include "llvfile.h"  #include "llvfs.h"  #include "llcallbacklist.h" - +#include "llviewerobjectlist.h" +#include "llanimationstates.h"  #include "glod/glod.h"  //static @@ -381,12 +382,6 @@ LLFloaterModelPreview::~LLFloaterModelPreview()  {  	sInstance = NULL; -	if ( mModelPreview && mModelPreview->getResetJointFlag() ) -	{		 -		gAgentAvatarp->resetJointPositions(); -	} - -	  	if ( mModelPreview )  	{  		delete mModelPreview; @@ -1577,7 +1572,7 @@ bool LLModelLoader::doLoadModel()  									{  										//llinfos<<"joint "<<lookingForJoint.c_str()<<llendl;  										LLMatrix4 jointTransform = mJointList[lookingForJoint]; -										LLJoint* pJoint = gAgentAvatarp->getJoint( lookingForJoint ); +										LLJoint* pJoint = mPreview->getPreviewAvatar()->getJoint( lookingForJoint );  										if ( pJoint )  										{     											pJoint->storeCurrentXform( jointTransform.getTranslation() );												 @@ -2597,6 +2592,7 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	mLoading = false;  	mLoadState = LLModelLoader::STARTING;  	mGroup = 0; +	mLODFrozen = false;  	mBuildShareTolerance = 0.f;  	mBuildQueueMode = GLOD_QUEUE_GREEDY;  	mBuildBorderMode = GLOD_BORDER_UNLOCK; @@ -2605,6 +2601,13 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	for (U32 i = 0; i < LLModel::NUM_LODS; ++i)  	{  		mRequestedTriangleCount[i] = 0; +		mRequestedCreaseAngle[i] = -1.f; +		mRequestedLoDMode[i] = 0; +		mRequestedErrorThreshold[i] = 0.f; +		mRequestedBuildOperator[i] = 0; +		mRequestedQueueMode[i] = 0; +		mRequestedBorderMode[i] = 0; +		mRequestedShareTolerance[i] = 0.f;  	}  	mViewOption["show_textures"] = false; @@ -2649,6 +2652,8 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	mMasterLegacyJointList.push_front("mHipLeft");  	mMasterLegacyJointList.push_front("mKneeLeft");  	mMasterLegacyJointList.push_front("mFootLeft"); + +	createPreviewAvatar();  }  LLModelPreview::~LLModelPreview() @@ -2702,7 +2707,7 @@ U32 LLModelPreview::calcResourceCost()  	if ( mFMP && mFMP->childGetValue("upload_joints").asBoolean() )  	{ -		gAgentAvatarp->setPelvisOffset( mPelvisZOffset ); +		getPreviewAvatar()->setPelvisOffset( mPelvisZOffset );  	}  	F32 streaming_cost = 0.f; @@ -3247,6 +3252,8 @@ void LLModelPreview::generateNormals()  	F32 angle_cutoff = mFMP->childGetValue("crease_angle").asReal(); +	mRequestedCreaseAngle[which_lod] = angle_cutoff; +  	angle_cutoff *= DEG_TO_RAD;  	if (which_lod == 3 && !mBaseModel.empty()) @@ -3266,7 +3273,7 @@ void LLModelPreview::generateNormals()  	mVertexBuffer[which_lod].clear();  	refresh(); - +	updateStatusMessages();  }  void LLModelPreview::clearMaterials() @@ -3342,6 +3349,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		lod_mode = iface->getFirstSelectedIndex();  	} +	mRequestedLoDMode[mPreviewLOD] = lod_mode;  	F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold").asReal(); @@ -3365,6 +3373,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		build_operator = iface->getFirstSelectedIndex();  	} +	mRequestedBuildOperator[mPreviewLOD] = build_operator;   	if (build_operator == 0)  	{ @@ -3381,6 +3390,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		queue_mode = iface->getFirstSelectedIndex();  	} +	mRequestedQueueMode[mPreviewLOD] = queue_mode;  	if (queue_mode == 0)  	{ @@ -3402,6 +3412,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		border_mode = iface->getFirstSelectedIndex();  	} +	mRequestedBorderMode[mPreviewLOD] = border_mode;  	if (border_mode == 0)  	{ @@ -3437,6 +3448,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  		mBuildShareTolerance = share_tolerance;  		object_dirty = true;  	} +	mRequestedShareTolerance[mPreviewLOD] = share_tolerance;  	if (mGroup == 0)  	{ @@ -3545,6 +3557,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  		U32 submeshes = 0;  		mRequestedTriangleCount[lod] = triangle_count; +		mRequestedErrorThreshold[lod] = lod_error_threshold;  		glodGroupParameteri(mGroup, GLOD_ADAPT_MODE, lod_mode);  		stop_gloderror(); @@ -3832,6 +3845,18 @@ void LLModelPreview::updateStatusMessages()  		}  	} + +	//make sure no hulls have more than 256 points in them +	for (U32 i = 0; upload_ok && i < mModel[LLModel::LOD_PHYSICS].size(); ++i) +	{ +		LLModel* mdl = mModel[LLModel::LOD_PHYSICS][i]; + +		for (U32 j = 0; upload_ok && j < mdl->mPhysics.mHull.size(); ++j) +		{ +			upload_ok = upload_ok && mdl->mPhysics.mHull[i].size() <= 256; +		} +	} +  	bool errorStateFromLoader = getLoadState() >= LLModelLoader::ERROR_PARSING ? true : false;  	bool skinAndRigOk = true; @@ -3855,6 +3880,10 @@ void LLModelPreview::updateStatusMessages()  	{  		mFMP->childEnable("ok_btn");  	} +	else +	{ +		mFMP->childDisable("ok_btn"); +	}  	//add up physics triangles etc  	S32 start = 0; @@ -4021,6 +4050,9 @@ void LLModelPreview::updateStatusMessages()  		{	// auto generate, also the default case for wizard which has no radio selection  			fmp->mLODMode[mPreviewLOD] = 1; +			//don't actually regenerate lod when refreshing UI +			mLODFrozen = true; +  			for (U32 i = 0; i < num_file_controls; ++i)  			{  				mFMP->childDisable(file_controls[i]); @@ -4033,20 +4065,21 @@ void LLModelPreview::updateStatusMessages()  			//if (threshold)  			{	 -				U32 lod_mode = 0; -				LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode"); -				if (iface) -				{ -					lod_mode = iface->getFirstSelectedIndex(); -				} -  				LLSpinCtrl* threshold = mFMP->getChild<LLSpinCtrl>("lod_error_threshold");  				LLSpinCtrl* limit = mFMP->getChild<LLSpinCtrl>("lod_triangle_limit");  				limit->setMaxValue(mMaxTriangleLimit); -				limit->setValue(mRequestedTriangleCount[mPreviewLOD]); +				limit->forceSetValue(mRequestedTriangleCount[mPreviewLOD]); + +				threshold->forceSetValue(mRequestedErrorThreshold[mPreviewLOD]); -				if (lod_mode == 0) +				mFMP->getChild<LLComboBox>("lod_mode")->selectNthItem(mRequestedLoDMode[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("build_operator")->selectNthItem(mRequestedBuildOperator[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("queue_mode")->selectNthItem(mRequestedQueueMode[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("border_mode")->selectNthItem(mRequestedBorderMode[mPreviewLOD]); +				mFMP->getChild<LLSpinCtrl>("share_tolerance")->setValue(mRequestedShareTolerance[mPreviewLOD]); + +				if (mRequestedLoDMode[mPreviewLOD] == 0)  				{  					limit->setVisible(true);  					threshold->setVisible(false); @@ -4060,6 +4093,8 @@ void LLModelPreview::updateStatusMessages()  					threshold->setVisible(true);  				}  			} + +			mLODFrozen = false;  		}  	} @@ -4075,6 +4110,20 @@ void LLModelPreview::updateStatusMessages()  		mFMP->childDisable("physics_file");  		mFMP->childDisable("physics_browse");  	} + +	LLSpinCtrl* crease = mFMP->getChild<LLSpinCtrl>("crease_angle"); +	 +	if (mRequestedCreaseAngle[mPreviewLOD] == -1.f) +	{ +		mFMP->childSetColor("crease_label", LLColor4::grey); +		crease->forceSetValue(75.f); +	} +	else +	{ +		mFMP->childSetColor("crease_label", LLColor4::white); +		crease->forceSetValue(mRequestedCreaseAngle[mPreviewLOD]); +	} +  }  void LLModelPreview::setPreviewTarget(F32 distance) @@ -4241,42 +4290,6 @@ void LLModelPreview::update()  }  //----------------------------------------------------------------------------- -// changeAvatarsJointPositions() -//----------------------------------------------------------------------------- -void LLModelPreview::changeAvatarsJointPositions( LLModel* pModel ) -{ -	if ( mMasterJointList.empty() ) -	{ -		return; -	} - -	std::vector<std::string> :: const_iterator jointListItBegin = pModel->mSkinInfo.mJointNames.begin(); -	std::vector<std::string> :: const_iterator jointListItEnd = pModel->mSkinInfo.mJointNames.end(); - -	S32 index = 0; -	for ( ; jointListItBegin!=jointListItEnd; ++jointListItBegin, ++index ) -	{	 -		std::string elem = *jointListItBegin; -		//llinfos<<"joint "<<elem<<llendl; - -		S32 matrixCnt = pModel->mSkinInfo.mAlternateBindMatrix.size(); -		if ( matrixCnt < 1 ) -		{ -			llinfos<<"Total WTF moment :"<<matrixCnt<<llendl; -		} -		else -		{ -			LLMatrix4 jointTransform = pModel->mSkinInfo.mAlternateBindMatrix[index]; - -			LLJoint* pJoint = gAgentAvatarp->getJoint( elem ); -			if ( pJoint ) -			{    -				pJoint->storeCurrentXform( jointTransform.getTranslation() );												 -			}	 -		} -	} -} -//-----------------------------------------------------------------------------  // getTranslationForJointOffset()  //-----------------------------------------------------------------------------  LLVector3 LLModelPreview::getTranslationForJointOffset( std::string joint ) @@ -4290,6 +4303,30 @@ LLVector3 LLModelPreview::getTranslationForJointOffset( std::string joint )  	return LLVector3(0.0f,0.0f,0.0f);								  }  //----------------------------------------------------------------------------- +// createPreviewAvatar +//----------------------------------------------------------------------------- +void LLModelPreview::createPreviewAvatar( void ) +{ +	mPreviewAvatar = (LLVOAvatar*)gObjectList.createObjectViewer( LL_PCODE_LEGACY_AVATAR, gAgent.getRegion() ); +	if ( mPreviewAvatar ) +	{ +		mPreviewAvatar->createDrawable( &gPipeline ); +		mPreviewAvatar->mIsDummy = TRUE; +		mPreviewAvatar->mSpecialRenderMode = 1; +		mPreviewAvatar->setPositionAgent( LLVector3::zero ); +		mPreviewAvatar->slamPosition(); +		mPreviewAvatar->updateJointLODs(); +		mPreviewAvatar->updateGeometry( mPreviewAvatar->mDrawable ); +		mPreviewAvatar->startMotion( ANIM_AGENT_STAND ); +		mPreviewAvatar->hideSkirt(); +	} +	else +	{ +		llinfos<<"Failed to create preview avatar for upload model window"<<llendl; +	} +} + +//-----------------------------------------------------------------------------  // render()  //-----------------------------------------------------------------------------  BOOL LLModelPreview::render() @@ -4403,25 +4440,6 @@ BOOL LLModelPreview::render()  	mFMP->childSetEnabled("upload_joints", upload_skin); -	//poke at avatar when we upload custom joints -	/*	 -	if ( upload_joints ) -	{ -		for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) -		{ -			for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) -			{ -				LLModelInstance& instance = *model_iter; -				LLModel* model = instance.mModel; -				if ( !model->mSkinWeights.empty() ) -				{ -					changeAvatarsJointPositions( model ); -				} -			} -		} -	} -	*/ -	  	F32 explode = mFMP->childGetValue("physics_explode").asReal();  	glClear(GL_DEPTH_BUFFER_BIT); @@ -4441,7 +4459,7 @@ BOOL LLModelPreview::render()  	if (skin_weight)  	{ -		target_pos = gAgentAvatarp->getPositionAgent(); +		target_pos = getPreviewAvatar()->getPositionAgent();  		z_near = 0.01f;  		z_far = 1024.f;  		mCameraDistance = 16.f; @@ -4661,8 +4679,7 @@ BOOL LLModelPreview::render()  		}  		else  		{ -			LLVOAvatarSelf* avatar = gAgentAvatarp; -			target_pos = avatar->getPositionAgent(); +			target_pos = getPreviewAvatar()->getPositionAgent();  			LLViewerCamera::getInstance()->setOriginAndLookAt(  															  target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + offset) * av_rot),		// camera @@ -4671,7 +4688,7 @@ BOOL LLModelPreview::render()  			if (joint_positions)  			{ -				avatar->renderCollisionVolumes(); +				getPreviewAvatar()->renderCollisionVolumes();  			}  			for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) @@ -4702,7 +4719,7 @@ BOOL LLModelPreview::render()  							LLMatrix4 mat[64];  							for (U32 j = 0; j < model->mSkinInfo.mJointNames.size(); ++j)  							{ -								LLJoint* joint = avatar->getJoint(model->mSkinInfo.mJointNames[j]); +								LLJoint* joint = getPreviewAvatar()->getJoint(model->mSkinInfo.mJointNames[j]);  								if (joint)  								{  									mat[j] = model->mSkinInfo.mInvBindMatrix[j]; @@ -4925,9 +4942,12 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture  void LLModelPreview::onLODParamCommit(bool enforce_tri_limit)  { -	genLODs(mPreviewLOD, 3, enforce_tri_limit); -	updateStatusMessages(); -	refresh(); +	if (!mLODFrozen) +	{ +		genLODs(mPreviewLOD, 3, enforce_tri_limit); +		updateStatusMessages(); +		refresh(); +	}  }  LLFloaterModelPreview::DecompRequest::DecompRequest(const std::string& stage, LLModel* mdl) diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 4d8b46807f..f6d4a08d1f 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -341,6 +341,9 @@ public:  	LLVector3 getTranslationForJointOffset( std::string joint ); +	void		createPreviewAvatar( void ); +	LLVOAvatar* getPreviewAvatar( void ) { return mPreviewAvatar; } +   protected:  	friend class LLModelLoader;  	friend class LLFloaterModelPreview; @@ -373,13 +376,20 @@ public:  	std::map<std::string, bool> mViewOption;  	//GLOD object parameters (must rebuild object if these change) +	bool mLODFrozen;  	F32 mBuildShareTolerance;  	U32 mBuildQueueMode;  	U32 mBuildOperator;  	U32 mBuildBorderMode; +	U32 mRequestedLoDMode[LLModel::NUM_LODS];  	S32 mRequestedTriangleCount[LLModel::NUM_LODS]; +	F32 mRequestedErrorThreshold[LLModel::NUM_LODS]; +	U32 mRequestedBuildOperator[LLModel::NUM_LODS]; +	U32 mRequestedQueueMode[LLModel::NUM_LODS]; +	U32 mRequestedBorderMode[LLModel::NUM_LODS]; +	F32 mRequestedShareTolerance[LLModel::NUM_LODS]; +	F32 mRequestedCreaseAngle[LLModel::NUM_LODS]; -	  	LLModelLoader* mModelLoader;  	LLModelLoader::scene mScene[LLModel::NUM_LODS]; @@ -415,6 +425,7 @@ public:  	std::deque<std::string> mMasterLegacyJointList;  	std::deque<std::string> mJointsFromNode;  	JointTransformMap		mJointTransformMap; +	LLPointer<LLVOAvatar>	mPreviewAvatar;  };  #endif  // LL_LLFLOATERMODELPREVIEW_H diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 34fda49375..fc6976755f 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -590,6 +590,11 @@ bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region)  	getChildView("im_btn")->setEnabled(allow_modify);  	getChildView("manage_telehub_btn")->setEnabled(allow_modify); +	const bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") &&  +		gAgent.getRegion() && +		!gAgent.getRegion()->getCapability("GetMesh").empty(); +	getChildView("mesh_rez_enabled_check")->setVisible(enable_mesh); +	getChildView("mesh_rez_enabled_check")->setEnabled(getChildView("mesh_rez_enabled_check")->getEnabled() && enable_mesh);  	// Data gets filled in by processRegionInfo  	return LLPanelRegionInfo::refreshFromRegion(region); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 0a1eadf4d0..d9a58d56fe 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -85,6 +85,8 @@ U32 LLMeshRepository::sPeakKbps = 0;  const U32 MAX_TEXTURE_UPLOAD_RETRIES = 5; +void dumpLLSDToFile(const LLSD& content, std::string filename); +  std::string header_lod[] =   {  	"lowest_lod", @@ -489,15 +491,36 @@ public:  		mThread(thread)  	{  	} -	virtual void completedRaw(U32 status, const std::string& reason, -							  const LLChannelDescriptors& channels, -							  const LLIOPipe::buffer_ptr_t& buffer) +	virtual void completed(U32 status, +						   const std::string& reason, +						   const LLSD& content)  	{ -		assert_main_thread(); +		//assert_main_thread();  		llinfos << "completed" << llendl;  		mThread->mPendingUploads--; +		dumpLLSDToFile(content,"whole_model_response.xml"); + +		mThread->mWholeModelUploadURL = content["uploader"].asString();  +	} +}; + +class LLWholeModelUploadResponder: public LLCurl::Responder +{ +	LLMeshUploadThread* mThread; +public: +	LLWholeModelUploadResponder(LLMeshUploadThread* thread): +		mThread(thread) +	{ +	} +	virtual void completed(U32 status, +						   const std::string& reason, +						   const LLSD& content) +	{ +		//assert_main_thread(); +		llinfos << "upload completed" << llendl; +		mThread->mPendingUploads--; +		dumpLLSDToFile(content,"whole_model_upload_response.xml");  	} -	  };  LLMeshRepoThread::LLMeshRepoThread() @@ -1261,7 +1284,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,  	mUploadObjectAssetCapability = gAgent.getRegion()->getCapability("UploadObjectAsset");  	mNewInventoryCapability = gAgent.getRegion()->getCapability("NewFileAgentInventoryVariablePrice"); -	mWholeModelUploadCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory"); +	mWholeModelFeeCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");  	mOrigin += gAgent.getAtAxis() * scale.magVec();  } @@ -1363,10 +1386,10 @@ void LLMeshUploadThread::run()  	}  } -#if 0 -void dumpLLSDToFile(LLSD& content, std::string& filename) +#if 1 +void dumpLLSDToFile(const LLSD& content, std::string filename)  { -	std::ofstream of(filename); +	std::ofstream of(filename.c_str());  	LLSDSerialize::toPrettyXML(content,of);  }  #endif @@ -1374,9 +1397,10 @@ void dumpLLSDToFile(LLSD& content, std::string& filename)  void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  {  	// TODO where do textures go? -	 +  	LLSD result; +	LLSD res;  	result["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);  	result["asset_type"] = "mesh";  	result["inventory_type"] = "object"; @@ -1385,9 +1409,9 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  	// TODO "optional" fields from the spec -	LLSD res;  	res["mesh_list"] = LLSD::emptyArray(); -	res["texture_list"] = LLSD::emptyArray(); +// TODO Textures +	//res["texture_list"] = LLSD::emptyArray();  	S32 mesh_num = 0;  	S32 texture_num = 0; @@ -1433,10 +1457,15 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  		LLQuaternion rot;  		LLMatrix4 transformation = instance.mTransform;  		decomposeMeshMatrix(transformation,pos,rot,scale); -		 + +#if 0  		mesh_entry["childpos"] = ll_sd_from_vector3(pos);  		mesh_entry["childrot"] = ll_sd_from_quaternion(rot);  		mesh_entry["scale"] = ll_sd_from_vector3(scale); +#endif +		mesh_entry["position"] = ll_sd_from_vector3(LLVector3()); +		mesh_entry["rotation"] = ll_sd_from_quaternion(rot); +		mesh_entry["scale"] = ll_sd_from_vector3(scale);  		// TODO should be binary.  		std::string str = ostr.str(); @@ -1480,9 +1509,8 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  	}  	result["asset_resources"] = res; -#if 0	 -	std::string name("whole_model.xml"); -	dumpLLSDToFile(result,name); +#if 1	 +	dumpLLSDToFile(result,"whole_model.xml");  #endif  	dest = result; @@ -1541,9 +1569,24 @@ void LLMeshUploadThread::doWholeModelUpload()  	mPendingUploads++;  	LLCurlRequest::headers_t headers; -	mCurlRequest->post(mWholeModelUploadCapability, headers, model_data.asString(), +	mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,  					   new LLWholeModelFeeResponder(this)); +	do +	{ +		mCurlRequest->process(); +	} while (mCurlRequest->getQueued() > 0); + +	mCurlRequest->post(mWholeModelUploadURL, headers, model_data["asset_resources"], new LLWholeModelUploadResponder(this)); +	 +	do +	{ +		mCurlRequest->process(); +	} while (mCurlRequest->getQueued() > 0); + +	delete mCurlRequest; +	mCurlRequest = NULL; +  	// Currently a no-op.  	mFinished = true;  } diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 802e3e1aba..f859e29c07 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -387,7 +387,8 @@ public:  	LLHost			mHost;  	std::string		mUploadObjectAssetCapability;  	std::string		mNewInventoryCapability; -	std::string		mWholeModelUploadCapability; +	std::string		mWholeModelFeeCapability; +	std::string		mWholeModelUploadURL;  	std::queue<LLMeshUploadData> mUploadQ;  	std::queue<LLMeshUploadData> mConfirmedQ; diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 64af6c2157..34a92cd0ac 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -33,11 +33,9 @@  #include "lleconomy.h"  #include "llerror.h"  #include "llfontgl.h" -#include "llmaterialtable.h"  #include "llpermissionsflags.h"  #include "llstring.h"  #include "llvolume.h" -#include "material_codes.h"  #include "m3math.h"  // project includes @@ -57,7 +55,6 @@  #include "lltool.h"  #include "lltoolcomp.h"  #include "lltoolmgr.h" -#include "lltrans.h"  #include "llui.h"  #include "llviewerobject.h"  #include "llviewerregion.h" @@ -101,17 +98,6 @@ BOOL	LLPanelObject::postBuild()  {  	setMouseOpaque(FALSE); -	std::map<std::string, std::string> material_name_map; -	material_name_map["Stone"]= LLTrans::getString("Stone"); -	material_name_map["Metal"]= LLTrans::getString("Metal");	 -	material_name_map["Glass"]= LLTrans::getString("Glass");	 -	material_name_map["Wood"]= LLTrans::getString("Wood");	 -	material_name_map["Flesh"]= LLTrans::getString("Flesh"); -	material_name_map["Plastic"]= LLTrans::getString("Plastic"); -	material_name_map["Rubber"]= LLTrans::getString("Rubber");	 -	material_name_map["Light"]= LLTrans::getString("Light");		 -	 -	LLMaterialTable::basic.initTableTransNames(material_name_map);  	//--------------------------------------------------------  	// Top  	//-------------------------------------------------------- @@ -166,22 +152,6 @@ BOOL	LLPanelObject::postBuild()  	//-------------------------------------------------------- -	// material type popup -	mComboMaterial = getChild<LLComboBox>("material"); -	childSetCommitCallback("material",onCommitMaterial,this); -	mComboMaterial->removeall(); - -	for (LLMaterialTable::info_list_t::iterator iter = LLMaterialTable::basic.mMaterialInfoList.begin(); -		 iter != LLMaterialTable::basic.mMaterialInfoList.end(); ++iter) -	{ -		LLMaterialInfo* minfop = *iter; -		if (minfop->mMCode != LL_MCODE_LIGHT) -		{ -			mComboMaterial->add(minfop->mName);   -		} -	} -	mComboMaterialItemCount = mComboMaterial->getItemCount(); -  	// Base Type  	mComboBaseType = getChild<LLComboBox>("comboBaseType");  	childSetCommitCallback("comboBaseType",onCommitParametric,this); @@ -309,7 +279,6 @@ BOOL	LLPanelObject::postBuild()  LLPanelObject::LLPanelObject()  :	LLPanel(), -	mComboMaterialItemCount(0),  	mIsPhysical(FALSE),  	mIsTemporary(FALSE),  	mIsPhantom(FALSE), @@ -527,43 +496,6 @@ void LLPanelObject::getState( )  	mCheckCastShadows->setEnabled( roots_selected==1 && editable );  #endif -	// Update material part -	// slightly inefficient - materials are unique per object, not per TE -	U8 material_code = 0; -	struct f : public LLSelectedTEGetFunctor<U8> -	{ -		U8 get(LLViewerObject* object, S32 te) -		{ -			return object->getMaterial(); -		} -	} func; -	bool material_same = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_code ); -	std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright"); -	if (editable && single_volume && material_same) -	{ -		mComboMaterial->setEnabled( TRUE ); -		if (material_code == LL_MCODE_LIGHT) -		{ -			if (mComboMaterial->getItemCount() == mComboMaterialItemCount) -			{ -				mComboMaterial->add(LEGACY_FULLBRIGHT_DESC); -			} -			mComboMaterial->setSimple(LEGACY_FULLBRIGHT_DESC); -		} -		else -		{ -			if (mComboMaterial->getItemCount() != mComboMaterialItemCount) -			{ -				mComboMaterial->remove(LEGACY_FULLBRIGHT_DESC); -			} -			 -			mComboMaterial->setSimple(std::string(LLMaterialTable::basic.getName(material_code))); -		} -	} -	else -	{ -		mComboMaterial->setEnabled( FALSE ); -	}  	//----------------------------------------------------------------------------  	S32 selected_item	= MI_BOX; @@ -1095,12 +1027,9 @@ void LLPanelObject::getState( )  	mCtrlSculptTexture->setVisible(sculpt_texture_visible);  	mLabelSculptType->setVisible(sculpt_texture_visible);  	mCtrlSculptType->setVisible(sculpt_texture_visible); -	mCtrlSculptMirror->setVisible(sculpt_texture_visible); -	mCtrlSculptInvert->setVisible(sculpt_texture_visible);  	// sculpt texture -  	if (selected_item == MI_SCULPT)  	{ @@ -1145,7 +1074,7 @@ void LLPanelObject::getState( )  			if (mCtrlSculptMirror)  			{  				mCtrlSculptMirror->set(sculpt_mirror); -				mCtrlSculptMirror->setEnabled(editable); +				mCtrlSculptMirror->setEnabled(editable && !isMesh);  			}  			if (mCtrlSculptInvert) @@ -1166,6 +1095,9 @@ void LLPanelObject::getState( )  		mSculptTextureRevert = LLUUID::null;		  	} +	mCtrlSculptMirror->setVisible(sculpt_texture_visible && !isMesh); +	mCtrlSculptInvert->setVisible(sculpt_texture_visible && !isMesh); +  	//----------------------------------------------------------------------------  	mObject = objectp; @@ -1245,25 +1177,6 @@ void LLPanelObject::sendCastShadows()  }  // static -void LLPanelObject::onCommitMaterial( LLUICtrl* ctrl, void* userdata ) -{ -	//LLPanelObject* self = (LLPanelObject*) userdata; -	LLComboBox* box = (LLComboBox*) ctrl; - -	if (box) -	{ -		// apply the currently selected material to the object -		const std::string& material_name = box->getSimple(); -		std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright"); -		if (material_name != LEGACY_FULLBRIGHT_DESC) -		{ -			U8 material_code = LLMaterialTable::basic.getMCode(material_name); -			LLSelectMgr::getInstance()->selectionSetMaterial(material_code); -		} -	} -} - -// static  void LLPanelObject::onCommitParametric( LLUICtrl* ctrl, void* userdata )  {  	LLPanelObject* self = (LLPanelObject*) userdata; @@ -1937,7 +1850,6 @@ void LLPanelObject::clearCtrls()  	mCheckCastShadows->set(FALSE);  	mCheckCastShadows->setEnabled( FALSE );  #endif -	mComboMaterial	->setEnabled( FALSE );  	// Disable text labels  	mLabelPosition	->setEnabled( FALSE );  	mLabelSize		->setEnabled( FALSE ); diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h index e2f2a4400d..475dfdaedb 100644 --- a/indra/newview/llpanelobject.h +++ b/indra/newview/llpanelobject.h @@ -66,7 +66,6 @@ public:  	static void 	onCommitPhantom(		LLUICtrl* ctrl, void* userdata);  	static void 	onCommitCastShadows(	LLUICtrl* ctrl, void* userdata);  	static void 	onCommitPhysics(		LLUICtrl* ctrl, void* userdata); -	static void 	onCommitMaterial(		LLUICtrl* ctrl, void* userdata);  	static void 	onCommitParametric(LLUICtrl* ctrl, void* userdata); @@ -94,10 +93,6 @@ protected:  	void 			getVolumeParams(LLVolumeParams& volume_params);  protected: -	S32				mComboMaterialItemCount; - -	LLComboBox*		mComboMaterial; -	  	// Per-object options  	LLComboBox*		mComboBaseType; diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index c443814c89..ebddaa90bc 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -59,6 +59,7 @@  #include "lltool.h"  #include "lltoolcomp.h"  #include "lltoolmgr.h" +#include "lltrans.h"  #include "llui.h"  #include "llviewerobject.h"  #include "llviewerregion.h" @@ -156,6 +157,34 @@ BOOL	LLPanelVolume::postBuild()  		mSpinPhysicsRestitution = getChild<LLSpinCtrl>("Physics Restitution");  		mSpinPhysicsRestitution->setCommitCallback(boost::bind(&LLPanelVolume::sendPhysicsRestitution, this, _1, mSpinPhysicsRestitution));  	} + +	std::map<std::string, std::string> material_name_map; +	material_name_map["Stone"]= LLTrans::getString("Stone"); +	material_name_map["Metal"]= LLTrans::getString("Metal");	 +	material_name_map["Glass"]= LLTrans::getString("Glass");	 +	material_name_map["Wood"]= LLTrans::getString("Wood");	 +	material_name_map["Flesh"]= LLTrans::getString("Flesh"); +	material_name_map["Plastic"]= LLTrans::getString("Plastic"); +	material_name_map["Rubber"]= LLTrans::getString("Rubber");	 +	material_name_map["Light"]= LLTrans::getString("Light");		 +	 +	LLMaterialTable::basic.initTableTransNames(material_name_map); + +	// material type popup +	mComboMaterial = getChild<LLComboBox>("material"); +	childSetCommitCallback("material",onCommitMaterial,this); +	mComboMaterial->removeall(); + +	for (LLMaterialTable::info_list_t::iterator iter = LLMaterialTable::basic.mMaterialInfoList.begin(); +		 iter != LLMaterialTable::basic.mMaterialInfoList.end(); ++iter) +	{ +		LLMaterialInfo* minfop = *iter; +		if (minfop->mMCode != LL_MCODE_LIGHT) +		{ +			mComboMaterial->add(minfop->mName);   +		} +	} +	mComboMaterialItemCount = mComboMaterial->getItemCount();  	// Start with everyone disabled  	clearCtrls(); @@ -164,7 +193,8 @@ BOOL	LLPanelVolume::postBuild()  }  LLPanelVolume::LLPanelVolume() -	: LLPanel() +	: LLPanel(), +	  mComboMaterialItemCount(0)  {  	setMouseOpaque(FALSE); @@ -379,6 +409,46 @@ void LLPanelVolume::getState( )  		getChildView("FlexForceZ")->setEnabled(false);  	} +	// Material properties + +	// Update material part +	// slightly inefficient - materials are unique per object, not per TE +	U8 material_code = 0; +	struct f : public LLSelectedTEGetFunctor<U8> +	{ +		U8 get(LLViewerObject* object, S32 te) +		{ +			return object->getMaterial(); +		} +	} func; +	bool material_same = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_code ); +	std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright"); +	if (editable && single_volume && material_same) +	{ +		mComboMaterial->setEnabled( TRUE ); +		if (material_code == LL_MCODE_LIGHT) +		{ +			if (mComboMaterial->getItemCount() == mComboMaterialItemCount) +			{ +				mComboMaterial->add(LEGACY_FULLBRIGHT_DESC); +			} +			mComboMaterial->setSimple(LEGACY_FULLBRIGHT_DESC); +		} +		else +		{ +			if (mComboMaterial->getItemCount() != mComboMaterialItemCount) +			{ +				mComboMaterial->remove(LEGACY_FULLBRIGHT_DESC); +			} +			 +			mComboMaterial->setSimple(std::string(LLMaterialTable::basic.getName(material_code))); +		} +	} +	else +	{ +		mComboMaterial->setEnabled( FALSE ); +	} +  	// Physics properties  	mSpinPhysicsGravity->set(objectp->getPhysicsGravity()); @@ -467,7 +537,6 @@ void LLPanelVolume::refresh()  	getChildView("label physicsshapetype")->setVisible(enable_mesh);  	getChildView("Physics Shape Type Combo Ctrl")->setVisible(enable_mesh);  	getChildView("Physics Gravity")->setVisible(enable_mesh); -	getChildView("Physics Material Override")->setVisible(enable_mesh);  	getChildView("Physics Friction")->setVisible(enable_mesh);  	getChildView("Physics Density")->setVisible(enable_mesh);  	getChildView("Physics Restitution")->setVisible(enable_mesh); @@ -522,6 +591,8 @@ void LLPanelVolume::clearCtrls()  	mSpinPhysicsFriction->setEnabled(FALSE);  	mSpinPhysicsDensity->setEnabled(FALSE);  	mSpinPhysicsRestitution->setEnabled(FALSE); + +	mComboMaterial->setEnabled( FALSE );  }  // @@ -674,6 +745,25 @@ void LLPanelVolume::onLightSelectTexture(const LLSD& data)  }  // static +void LLPanelVolume::onCommitMaterial( LLUICtrl* ctrl, void* userdata ) +{ +	//LLPanelObject* self = (LLPanelObject*) userdata; +	LLComboBox* box = (LLComboBox*) ctrl; + +	if (box) +	{ +		// apply the currently selected material to the object +		const std::string& material_name = box->getSimple(); +		std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright"); +		if (material_name != LEGACY_FULLBRIGHT_DESC) +		{ +			U8 material_code = LLMaterialTable::basic.getMCode(material_name); +			LLSelectMgr::getInstance()->selectionSetMaterial(material_code); +		} +	} +} + +// static  void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata )  {  	LLPanelVolume* self = (LLPanelVolume*) userdata; diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h index 776a2c1f4a..0ef47db0d9 100644 --- a/indra/newview/llpanelvolume.h +++ b/indra/newview/llpanelvolume.h @@ -63,8 +63,8 @@ public:  	static void 	onCommitLight(			LLUICtrl* ctrl, void* userdata);  	static void 	onCommitIsFlexible(		LLUICtrl* ctrl, void* userdata);  	static void 	onCommitFlexible(		LLUICtrl* ctrl, void* userdata); -  	static void     onCommitPhysicsParam(       LLUICtrl* ctrl, void* userdata); +	static void 	onCommitMaterial(		LLUICtrl* ctrl, void* userdata);  	void		onLightCancelColor(const LLSD& data);  	void		onLightSelectColor(const LLSD& data); @@ -104,6 +104,10 @@ protected:  	LLSpinCtrl*		mSpinForce[3];  */ +	S32			mComboMaterialItemCount; +	LLComboBox*		mComboMaterial; +	 +  	LLColor4		mLightSavedColor;  	LLUUID			mLightSavedTexture;  	LLPointer<LLViewerObject> mObject; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 9b264b81c7..8fa4065fa6 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -1997,7 +1997,7 @@ void LLSelectMgr::selectionSetPhysicsType(U8 type)  			if (object->permModify())  			{  				object->setPhysicsShapeType(mType); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} @@ -2016,7 +2016,7 @@ void LLSelectMgr::selectionSetFriction(F32 friction)  			if (object->permModify())  			{  				object->setPhysicsFriction(mFriction); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} @@ -2035,7 +2035,7 @@ void LLSelectMgr::selectionSetGravity(F32 gravity )  			if (object->permModify())  			{  				object->setPhysicsGravity(mGravity); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} @@ -2054,7 +2054,7 @@ void LLSelectMgr::selectionSetDensity(F32 density )  			if (object->permModify())  			{  				object->setPhysicsDensity(mDensity); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} @@ -2073,7 +2073,7 @@ void LLSelectMgr::selectionSetRestitution(F32 restitution)  			if (object->permModify())  			{  				object->setPhysicsRestitution(mRestitution); -				object->updateFlags(); +				object->updateFlags(TRUE);  			}  			return true;  		} diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 6d493bfcd5..f5fee662e6 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -5282,7 +5282,7 @@ bool LLViewerObject::specialHoverCursor() const  			|| (mClickAction != 0);  } -void LLViewerObject::updateFlags() +void LLViewerObject::updateFlags(BOOL physics_changed)  {  	LLViewerRegion* regionp = getRegion();  	if(!regionp) return; @@ -5295,12 +5295,15 @@ void LLViewerObject::updateFlags()  	gMessageSystem->addBOOL("IsTemporary", flagTemporaryOnRez() );  	gMessageSystem->addBOOL("IsPhantom", flagPhantom() );  	gMessageSystem->addBOOL("CastsShadows", flagCastShadows() ); -	gMessageSystem->nextBlock("ExtraPhysics"); -	gMessageSystem->addU8("PhysicsShapeType", getPhysicsShapeType() ); -	gMessageSystem->addF32("Density", getPhysicsDensity() ); -	gMessageSystem->addF32("Friction", getPhysicsFriction() ); -	gMessageSystem->addF32("Restitution", getPhysicsRestitution() ); -	gMessageSystem->addF32("GravityMultiplier", getPhysicsGravity() ); +	if (physics_changed) +	{ +		gMessageSystem->nextBlock("ExtraPhysics"); +		gMessageSystem->addU8("PhysicsShapeType", getPhysicsShapeType() ); +		gMessageSystem->addF32("Density", getPhysicsDensity() ); +		gMessageSystem->addF32("Friction", getPhysicsFriction() ); +		gMessageSystem->addF32("Restitution", getPhysicsRestitution() ); +		gMessageSystem->addF32("GravityMultiplier", getPhysicsGravity() ); +	}  	gMessageSystem->sendReliable( regionp->getHost() );  } diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index e417343bec..21198f7dd1 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -488,7 +488,7 @@ public:  	void			setRegion(LLViewerRegion *regionp);  	virtual void	updateRegion(LLViewerRegion *regionp); -	void updateFlags(); +	void updateFlags(BOOL physics_changed = FALSE);  	BOOL setFlags(U32 flag, BOOL state);  	void setPhysicsShapeType(U8 type);  	void setPhysicsGravity(F32 gravity); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f64eb89866..845a87b8cf 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -625,8 +625,14 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  		mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);  		addDeferredAttachments(mDeferredScreen); -		mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		 +		mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +		 +#if LL_DARWIN +		// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO +		mEdgeMap.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +#else  		mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +#endif  		if (shadow_detail > 0 || ssao)  		{ //only need mDeferredLight[0] for shadows OR ssao @@ -651,7 +657,12 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  			mDeferredLight[2].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);  			for (U32 i = 0; i < 2; i++)  			{ +#if LL_DARWIN +				// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO +				mGIMapPost[i].allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +#else  				mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +#endif  			}  		}  		else @@ -666,8 +677,12 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  		F32 scale = gSavedSettings.getF32("RenderShadowResolutionScale"); +#if LL_DARWIN +		U32 shadow_fmt = 0; +#else  		//HACK: make alpha masking work on ATI depth shadows (work around for ATI driver bug)  		U32 shadow_fmt = gGLManager.mIsATI ? GL_ALPHA : 0; +#endif  		if (shadow_detail > 0)  		{ //allocate 4 sun shadow maps diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index d08c3e7078..dce55dae12 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -26,7 +26,7 @@    <text left="15" bottom="25" follows="top|left" height="15" name="name_label">      Name:    </text> -  <line_editor bottom_delta="20" follows="top|left|right" height="19"  +  <line_editor bottom_delta="20" follows="top|left|right" height="19" max_length_bytes="64"   	     name="description_form" prevalidate_callback="ascii" width="290" />    <text bottom_delta="20" left="15" follows="left|top" height="15" name="lod_label"> @@ -219,7 +219,7 @@        <text left="10" top_pad="35" follows="top|left" width="240" height="15">          Generate Normals        </text> -      <text left="35" top_pad="5" follows="top|left" width="100" height="15"> +      <text left="35" top_pad="5" follows="top|left" width="100" height="15" name="crease_label">          Crease Angle:        </text>        <spinner follows="top|left" left_pad="5" min_val="0" max_val="180" value="75" width="60" height="20" name="crease_angle"/>   diff --git a/indra/newview/skins/default/xui/en/floater_model_wizard.xml b/indra/newview/skins/default/xui/en/floater_model_wizard.xml index 92d57b20be..47b2e5fd79 100644 --- a/indra/newview/skins/default/xui/en/floater_model_wizard.xml +++ b/indra/newview/skins/default/xui/en/floater_model_wizard.xml @@ -572,9 +572,9 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se  		 bg_opaque_color="DkGray2"  		 background_visible="true"  		 background_opaque="true"> -      <text top="25" left="30" text_color="White" font="SansSerifSmallBold" width="300" height="4">Performance</text> +      <text top="15" left="20" text_color="White" font="SansSerifSmallBold" width="110" height="30" wrap="true" halign="center">Higher Performance</text>        <text top="45" left="10" halign="center" width="130" word_wrap="true"   font="SansSerifSmall" height="80">Faster rendering but less detailed; lowers Resource (prim) cost.</text> -      <text top="25" left="390" text_color="White" font="SansSerifSmallBold" width="300" height="4">Accuracy</text> +      <text top="15" left="372" text_color="White" font="SansSerifSmallBold" width="90" height="30" wrap="true" halign="center">Higher Accuracy</text>        <text top="45" left="360" halign="center" width="130" word_wrap="true"   font="SansSerifSmall" height="80">More detailed model but slower; increases Resource (prim) cost.</text>        <slider diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 05d47506db..40bf7bfed7 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -1608,41 +1608,6 @@ even though the user gets a free copy.                   name="Sculpted"                   value="Sculpted" />              </combo_box> -            <combo_box -             height="19" -             layout="topleft" -             name="material" -             top_pad="5" -             width="150"> -                <combo_box.item -                 label="Stone" -                 name="Stone" -                 value="Stone" /> -                <combo_box.item -                 label="Metal" -                 name="Metal" -                 value="Metal" /> -                <combo_box.item -                 label="Glass" -                 name="Glass" -                 value="Glass" /> -                <combo_box.item -                 label="Wood" -                 name="Wood" -                 value="Wood" /> -                <combo_box.item -                 label="Flesh" -                 name="Flesh" -                 value="Flesh" /> -                <combo_box.item -                 label="Plastic" -                 name="Plastic" -                 value="Plastic" /> -                <combo_box.item -                 label="Rubber" -                 name="Rubber" -                 value="Rubber" /> -            </combo_box>              <text               type="string"               length="1" @@ -2426,6 +2391,41 @@ even though the user gets a free copy.  			   name="Physics Shape Type Combo Ctrl"  			   tool_tip="Choose the physics shape type"  			   width="108"/> +            <combo_box +             height="19" +             layout="topleft" +             name="material" +             top_pad="5" +             width="150"> +                <combo_box.item +                 label="Stone" +                 name="Stone" +                 value="Stone" /> +                <combo_box.item +                 label="Metal" +                 name="Metal" +                 value="Metal" /> +                <combo_box.item +                 label="Glass" +                 name="Glass" +                 value="Glass" /> +                <combo_box.item +                 label="Wood" +                 name="Wood" +                 value="Wood" /> +                <combo_box.item +                 label="Flesh" +                 name="Flesh" +                 value="Flesh" /> +                <combo_box.item +                 label="Plastic" +                 name="Plastic" +                 value="Plastic" /> +                <combo_box.item +                 label="Rubber" +                 name="Rubber" +                 value="Rubber" /> +            </combo_box>              <spinner               follows="left|top" @@ -2441,16 +2441,6 @@ even though the user gets a free copy.               top_pad="10"               width="132" /> -            <check_box -             height="19" -             label="Override material" -             layout="topleft" -             left_delta="0" -             name="Physics Material Override" -             tool_tip="Override Material" -             top_pad="10" -             width="132" /> -              <spinner               follows="left|top"               height="19" diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml index 484af63097..b36b82ebd8 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml @@ -42,7 +42,7 @@                      <menu_item_call.on_enable                       function="File.EnableUpload" />                  </menu_item_call> -		            <menu_item_call +		<menu_item_call                   label="Model..."                   layout="topleft"                   name="Upload Model"> @@ -54,6 +54,18 @@                  <menu_item_call.on_visible                  function="File.VisibleUploadModel"/>                  </menu_item_call> +              <menu_item_call +                label="Model Wizard..." +                layout="topleft" +                name="Upload Model Wizard"> +                <menu_item_call.on_click +                 function="Floater.Show" +                 parameter="upload_model_wizard" /> +                <menu_item_call.on_enable +                 function="File.EnableUploadModel" /> +                <menu_item_call.on_visible +                function="File.VisibleUploadModel"/> +	      </menu_item_call>                  <menu_item_call                   label="Bulk (L$[COST] per file)..."                   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml index e0d9f3f714..3f9195d092 100644 --- a/indra/newview/skins/default/xui/en/panel_region_general.xml +++ b/indra/newview/skins/default/xui/en/panel_region_general.xml @@ -134,6 +134,7 @@       top="190"       width="80" />  	<check_box +     visible="FALSE"       height="20"       label="Allow Mesh Objects"       layout="topleft" diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester index 52b1c8f31d..52b1c8f31d 100755..100644 --- a/scripts/gpu_table_tester +++ b/scripts/gpu_table_tester | 
