diff options
author | Oz Linden <oz@lindenlab.com> | 2011-04-01 17:39:08 -0400 |
---|---|---|
committer | Oz Linden <oz@lindenlab.com> | 2011-04-01 17:39:08 -0400 |
commit | 1664c9dc678f7aca9c2bbf38d28e00550e03c4dd (patch) | |
tree | 9a51b54cd3a500e066c25e2c6180dd343ec639d9 | |
parent | 2deea7c9d162b9bcae29e73fca8eebd26460fbf8 (diff) | |
parent | f12d79907c7f002666291ab23dbb01ba715fa2c1 (diff) |
merge out end-of-develop.py tag from viewer-development
137 files changed, 6680 insertions, 4606 deletions
@@ -11,7 +11,10 @@ syntax: glob *.DS_Store LICENSES indra/.distcc -indra/build-darwin-* +build-linux-* +build-darwin-* +build-vc80/ +build-vc100/ indra/build-vc[0-9]* indra/CMakeFiles indra/lib/mono/1.0/*.dll diff --git a/BuildParams b/BuildParams index 8e8ffeb447..9f962d45d3 100644 --- a/BuildParams +++ b/BuildParams @@ -67,7 +67,6 @@ viewer-pre-release.login_channel = "Second Life Release" viewer-pre-release.build_debug_release_separately = true viewer-pre-release.build_viewer_update_version_manager = true viewer-pre-release.release-viewer.jira = DRTVWR-39 - # ======================================= # brad # ======================================== @@ -156,6 +155,7 @@ media.build_viewer_update_version_manager = false # ================ oz-viewer-devreview.build_debug_release_separately = true +viewer-devreview.build_debug_release_separately = true oz_viewer-poreview.build_debug_release_separately = true oz-project-1.build_debug_release_separately = true oz-project-2.build_debug_release_separately = true @@ -193,5 +193,23 @@ viewer-asset-delivery-metrics.email = monty@lindenlab.com viewer-asset-delivery-metrics.build_server = false viewer-asset-delivery-metrics.build_server_tests = false +#============================================================================== +# autobuild viewers +#============================================================================== +viewer-autobuild2010.build_debug_release_separately = true +viewer-autobuild2010.viewer_channel = "Project Viewer - VS2010" +viewer-autobuild2010.login_channel = "Project Viewer - VS2010" +viewer-autobuild2010.viewer_grid = agni +viewer-autobuild2010.build_link_parallel = false + +#======================================== +# VS2010 +#======================================== +viewer-vs2010.viewer_channel = "Project Viewer - VS2010" +viewer-vs2010.login_channel = "Project Viewer - VS2010" +viewer-vs2010.viewer_grid = agni +viewer-vs2010.build_debug_release_separately = true +viewer-vs2010.build_viewer_update_version_manager = false +viewer-vs2010.build_link_parallel = false # eof diff --git a/autobuild.xml b/autobuild.xml new file mode 100644 index 0000000000..4951be63bc --- /dev/null +++ b/autobuild.xml @@ -0,0 +1,2863 @@ +<?xml version="1.0" ?> +<llsd> +<map> + <key>installables</key> + <map> + <key>GL</key> + <map> + <key>license</key> + <string>GL</string> + <key>license_file</key> + <string>LICENSES/GL.txt</string> + <key>name</key> + <string>GL</string> + <key>platforms</key> + <map> + <key>darwin</key> + <map> + <key>archive</key> + <map> + <key>hash</key> + <string>0b7c1d43dc2b39301fef6c05948fb826</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-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>d85d88088360aee5b67105ad93b5ad16</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-linux-20100929.tar.bz2</string> + </map> + <key>name</key> + <string>linux</string> + </map> + <key>windows</key> + <map> + <key>archive</key> + <map> + <key>hash</key> + <string>f8d98cbe78d5aafbc7aaabf840325aaf</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-0.0.0-windows-20110303.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>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.amazonaws.com/viewer-source-downloads/install_pkgs/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.amazonaws.com/viewer-source-downloads/install_pkgs/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.amazonaws.com/viewer-source-downloads/install_pkgs/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>9b58d1a9c15807a1301e42a313641010</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-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>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>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-perftools</key> + <map> + <key>license</key> + <string>bsd</string> + <key>license_file</key> + <string>LICENSES/google-perftools.txt</string> + <key>name</key> + <string>google-perftools</string> + <key>platforms</key> + <map> + <key>linux</key> + <map> + <key>archive</key> + <map> + <key>hash</key> + <string>cf513fc2eec4a414cc804cf408932a45</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_perftools-1.7-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>8108bffe1c814be9d035b47dac3d4541</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google-perftools-1.0-windows-20101001b.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/gmock.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.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.amazonaws.com/viewer-source-downloads/install_pkgs/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.amazonaws.com/viewer-source-downloads/install_pkgs/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.amazonaws.com/viewer-source-downloads/install_pkgs/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>735a955e6442733e2342ab12c1087488</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-windows-20110221.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>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>57f32a1a670f06a4dc036eb1164ad9d7</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-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>17c000ceef32c0623d038b4c73791bee</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-linux-20110307.tar.bz2</string> + </map> + <key>name</key> + <string>linux</string> + </map> + <key>windows</key> + <map> + <key>archive</key> + <map> + <key>hash</key> + <string>c8fccf7eeb25fd45cb7e04399c0b83ee</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-windows-20110222.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>cc159598ef3fcd34fd33a8a0ef846165</string> + <key>url</key> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/223711/arch/Linux/installer/openssl-0.9.8q-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>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>pth</key> + <map> + <key>license</key> + <string>lgpl</string> + <key>license_file</key> + <string>LICENSES/pth.txt</string> + <key>name</key> + <string>pth</string> + <key>platforms</key> + <map> + <key>darwin</key> + <map> + <key>archive</key> + <map> + <key>hash</key> + <string>2172379794217d0ffba0db09b2ac17bf</string> + <key>url</key> + <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-darwin-20110303.tar.bz2</string> + </map> + <key>name</key> + <string>darwin</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>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>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>Debug</string> + </map> + <key>OpenSourceDebug</key> + <map> + <key>configure</key> + <map> + <key>command</key> + <string>cmake</string> + <key>options</key> + <array> + <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string> + <string>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>OpenSourceDebug</string> + </map> + <key>OpenSourceRelWithDebInfo</key> + <map> + <key>configure</key> + <map> + <key>command</key> + <string>cmake</string> + <key>options</key> + <array> + <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string> + <string>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>OpenSourceRelWithDebInfo</string> + </map> + <key>OpenSourceRelease</key> + <map> + <key>configure</key> + <map> + <key>command</key> + <string>cmake</string> + <key>options</key> + <array> + <string>-DCMAKE_BUILD_TYPE:STRING=Release</string> + <string>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>OpenSourceRelease</string> + </map> + <key>OpenSourceStandAloneDebug</key> + <map> + <key>configure</key> + <map> + <key>command</key> + <string>cmake</string> + <key>options</key> + <array> + <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string> + <string>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneDebug</string> + </map> + <key>OpenSourceStandAloneRelWithDebInfo</key> + <map> + <key>configure</key> + <map> + <key>command</key> + <string>cmake</string> + <key>options</key> + <array> + <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string> + <string>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneRelWithDebInfo</string> + </map> + <key>OpenSourceStandAloneRelease</key> + <map> + <key>configure</key> + <map> + <key>command</key> + <string>cmake</string> + <key>options</key> + <array> + <string>-DCMAKE_BUILD_TYPE:STRING=Release</string> + <string>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneRelease</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>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>RelWithDebInfo</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>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>Release</string> + </map> + <!-- OPEN-1 WORKAROUND begin - to be removed when VC express is detected correctly --> + <key>VCexpressRelWithDebInfo</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>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>VCexpressRelWithDebInfo</string> + </map> + <!-- OPEN-1 WORKAROUND end --> + <!-- OPEN-1a WORKAROUND begin - to be removed when VC 2010 is detected correctly --> + <key>VC10msbuildRelWithDebInfo</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>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>VC10msbuildRelWithDebInfo</string> + </map> + <!-- OPEN-1a WORKAROUND end --> + <!-- OPEN-1a Release WORKAROUND begin - to be removed when VC 2010 is detected correctly --> + <key>VC10msbuildRelease</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>-DUNATTENDED:BOOL=OFF</string> + <string>-DWORD_SIZE:STRING=32</string> + <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> + </array> + </map> + <key>name</key> + <string>VC10msbuildRelease</string> + </map> + <!-- OPEN-1a Release WORKAROUND end --> + </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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>name</key> + <string>Debug</string> + </map> + <key>OpenSourceDebug</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>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>'Xcode'</string> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceDebug</string> + </map> + <key>OpenSourceRelWithDebInfo</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>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>'Xcode'</string> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceRelWithDebInfo</string> + </map> + <key>OpenSourceRelease</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>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>'Xcode'</string> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceRelease</string> + </map> + <key>OpenSourceStandAloneDebug</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>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>'Xcode'</string> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneDebug</string> + </map> + <key>OpenSourceStandAloneRelWithDebInfo</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>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>'Xcode'</string> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneRelWithDebInfo</string> + </map> + <key>OpenSourceStandAloneRelease</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>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>'Xcode'</string> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneRelease</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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>default</key> + <string>True</string> + <key>name</key> + <string>RelWithDebInfo</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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>name</key> + <string>Release</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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>name</key> + <string>Debug</string> + </map> + <key>OpenSourceDebug</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> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceDebug</string> + </map> + <key>OpenSourceRelWithDebInfo</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> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceRelWithDebInfo</string> + </map> + <key>OpenSourceRelease</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> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceRelease</string> + </map> + <key>OpenSourceStandAloneDebug</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> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneDebug</string> + </map> + <key>OpenSourceStandAloneRelWithDebInfo</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> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneRelWithDebInfo</string> + </map> + <key>OpenSourceStandAloneRelease</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> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneRelease</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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>default</key> + <string>True</string> + <key>name</key> + <string>RelWithDebInfo</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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>name</key> + <string>Release</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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>name</key> + <string>Debug</string> + </map> + <key>OpenSourceDebug</key> + <map> + <key>build</key> + <map> + <key>arguments</key> + <array> + <string>SecondLife.sln</string> + </array> + <key>command</key> + <string>devenv.com</string> + <key>options</key> + <array> + <string>/build</string> + <string>Debug</string> + </array> + </map> + <key>configure</key> + <map> + <key>arguments</key> + <array> + <string>..\indra</string> + <string>&&</string> + <string>..\indra\tools\vstool\VSTool.exe</string> + <string>--solution</string> + <string>SecondLife.sln</string> + <string>--config</string> + <string>Debug</string> + <string>--startup</string> + <string>secondlife-bin</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>"Visual Studio 10"</string> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceDebug</string> + </map> + <key>OpenSourceRelWithDebInfo</key> + <map> + <key>build</key> + <map> + <key>arguments</key> + <array> + <string>SecondLife.sln</string> + </array> + <key>command</key> + <string>devenv.com</string> + <key>options</key> + <array> + <string>/build</string> + <string>RelWithDebInfo</string> + </array> + </map> + <key>configure</key> + <map> + <key>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>"Visual Studio 10"</string> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceRelWithDebInfo</string> + </map> + <key>OpenSourceRelease</key> + <map> + <key>build</key> + <map> + <key>arguments</key> + <array> + <string>SecondLife.sln</string> + </array> + <key>command</key> + <string>devenv.com</string> + <key>options</key> + <array> + <string>/build</string> + <string>Release</string> + </array> + </map> + <key>configure</key> + <map> + <key>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>"Visual Studio 10"</string> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceRelease</string> + </map> + <key>OpenSourceStandAloneDebug</key> + <map> + <key>build</key> + <map> + <key>arguments</key> + <array> + <string>SecondLife.sln</string> + </array> + <key>command</key> + <string>devenv.com</string> + <key>options</key> + <array> + <string>/build</string> + <string>Debug</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> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneDebug</string> + </map> + <key>OpenSourceStandAloneRelWithDebInfo</key> + <map> + <key>build</key> + <map> + <key>arguments</key> + <array> + <string>SecondLife.sln</string> + </array> + <key>command</key> + <string>devenv.com</string> + <key>options</key> + <array> + <string>/build</string> + <string>RelWithDebInfo</string> + </array> + </map> + <key>configure</key> + <map> + <key>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>"Visual Studio 10"</string> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneRelWithDebInfo</string> + </map> + <key>OpenSourceStandAloneRelease</key> + <map> + <key>build</key> + <map> + <key>arguments</key> + <array> + <string>SecondLife.sln</string> + </array> + <key>command</key> + <string>devenv.com</string> + <key>options</key> + <array> + <string>/build</string> + <string>Release</string> + </array> + </map> + <key>configure</key> + <map> + <key>arguments</key> + <array> + <string>../indra</string> + </array> + <key>options</key> + <array> + <string>-G</string> + <string>"Visual Studio 10"</string> + <string>-DSTANDALONE:BOOL=TRUE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>OpenSourceStandAloneRelease</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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>default</key> + <string>True</string> + <key>name</key> + <string>RelWithDebInfo</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> + <string>-DSTANDALONE:BOOL=OFF</string> + <string>-DINSTALL_PROPRIETARY=TRUE</string> + <string>-DFMOD=TRUE</string> + </array> + </map> + <key>name</key> + <string>Release</string> + </map> + <!-- OPEN-1 WORKAROUND begin - to be removed when VC express is detected correctly --> + <key>VCexpressRelWithDebInfo</key> + <map> + <key>build</key> + <map> + <key>arguments</key> + <array> + <string>"RelWithDebInfo|Win32"</string> + </array> + <key>command</key> + <string>vcbuild.exe</string> + <key>options</key> + <array> + <string>/u</string> + <string>SecondLife.sln</string> + </array> + </map> + <key>configure</key> + <map> + <key>options</key> + <array> + <string>-G</string> + <string>"Visual Studio 10"</string> + <string>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>VCexpressRelWithDebInfo</string> + </map> + <!-- OPEN-1 WORKAROUND end --> + <!-- OPEN-1a WORKAROUND begin - to be removed when VC 2010 is detected correctly --> + <key>VC10msbuildRelWithDebInfo</key> + <map> + <key>build</key> + <map> + <key>command</key> + <string>msbuild.exe</string> + <key>options</key> + <array> + <string>SecondLife.sln</string> + <string>/verbosity:minimal</string> + <string>/t:build</string> + <string>/p:Configuration=RelWithDebInfo</string> + <string>/p:Platform=Win32</string> + <string>/p:"VCBuildAdditionalOptions= /useenv"</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>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>VC10msbuildRelWithDebInfo</string> + </map> + <!-- OPEN-1a WORKAROUND end --> + <!-- OPEN-1a Release WORKAROUND begin - to be removed when VC 2010 is detected correctly --> + <key>VC10msbuildRelease</key> + <map> + <key>build</key> + <map> + <key>command</key> + <string>msbuild.exe</string> + <key>options</key> + <array> + <string>SecondLife.sln</string> + <string>/t:build</string> + <string>/p:Configuration=Release</string> + <string>/p:Platform=Win32</string> + <string>/p:"VCBuildAdditionalOptions= /useenv"</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>-DSTANDALONE:BOOL=FALSE</string> + <string>-DINSTALL_PROPRIETARY=FALSE</string> + <string>-DFMOD=FALSE</string> + </array> + </map> + <key>name</key> + <string>VC10msbuildRelease</string> + </map> + <!-- OPEN-1a WORKAROUND end --> + </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> @@ -22,12 +22,12 @@ build_dir_Darwin() build_dir_Linux() { - echo viewer-linux-i686-$(echo $1 | tr A-Z a-z) + echo build-linux-i686 } build_dir_CYGWIN() { - echo build-vc80 + echo build-vc100 } installer_Darwin() @@ -50,25 +50,10 @@ installer_CYGWIN() pre_build() { local variant="$1" - local build_dir="$2" begin_section "Pre$variant" - #export PATH="/cygdrive/c/Program Files/Microsoft Visual Studio 8/Common7/IDE/:$PATH" + "$AUTOBUILD" configure -c $variant -- -DPACKAGE:BOOL=ON -DRELEASE_CRASH_REPORTING:BOOL=ON -DUSE_PRECOMPILED_HEADERS=FALSE "-DVIEWER_CHANNEL:STRING=\"$viewer_channel\"" "-DVIEWER_LOGIN_CHANNEL:STRING=\"$viewer_login_channel\"" [ -n "$master_message_template_checkout" ] && [ -r "$master_message_template_checkout/message_template.msg" ]\ && template_verifier_master_url="-DTEMPLATE_VERIFIER_MASTER_URL=file://$master_message_template_checkout/message_template.msg" - python develop.py \ - --incredibuild \ - --unattended \ - -t $variant \ - -G "$cmake_generator" \ - configure \ - -DGRID:STRING="$viewer_grid" \ - -DVIEWER_CHANNEL:STRING="$viewer_channel" \ - -DVIEWER_LOGIN_CHANNEL:STRING="$login_channel" \ - -DINSTALL_PROPRIETARY:BOOL=ON \ - -DRELEASE_CRASH_REPORTING:BOOL=ON \ - -DLOCALIZESETUP:BOOL=ON \ - -DPACKAGE:BOOL=ON \ - -DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \ -DLL_TESTS:BOOL="$run_tests" \ -DTEMPLATE_VERIFIER_OPTIONS:STRING="$template_verifier_options" $template_verifier_master_url end_section "Pre$variant" @@ -77,23 +62,10 @@ pre_build() build() { local variant="$1" - local build_dir="$2" if $build_viewer then begin_section "Viewer$variant" - if python develop.py \ - --incredibuild \ - --unattended \ - -t $variant \ - -G "$cmake_generator" \ - build package -# && \ -# python develop.py \ -# --incredibuild \ -# --unattended \ -# -t $variant \ -# -G "$cmake_generator" \ -# build package + if "$AUTOBUILD" build --no-configure -c $variant then echo true >"$build_dir"/build_ok else @@ -113,6 +85,7 @@ build_docs() end_section Docs } + # Check to see if we were invoked from the wrapper, if not, re-exec ourselves from there if [ "x$arch" = x ] then @@ -120,15 +93,11 @@ then if [ -x "$top/../buildscripts/hg/bin/build.sh" ] then exec "$top/../buildscripts/hg/bin/build.sh" "$top" - elif [ -r "$top/README" ] - then - cat "$top/README" - exit 1 else cat <<EOF This script, if called in a development environment, requires that the branch independent build script repository be checked out next to this repository. -This repository is located at http://hg.secondlife.com/buildscripts +This repository is located at http://hg.lindenlab.com/parabuild/buildscripts EOF exit 1 fi @@ -141,7 +110,7 @@ eval '$build_'"$arch" || pass # File no longer exists in code-sep branch, so let's make sure it exists in order to use it. if test -f scripts/update_version_files.py ; then begin_section UpdateVer - scripts/update_version_files.py \ + python scripts/update_version_files.py \ --channel="$viewer_channel" \ --server_channel="$server_channel" \ --revision=$revision \ @@ -152,10 +121,53 @@ fi # Now retrieve the version for use in the version manager # First three parts only, $revision will be appended automatically. -build_viewer_update_version_manager_version=`scripts/get_version.py --viewer-version | sed 's/\.[0-9]*$//'` +build_viewer_update_version_manager_version=`python scripts/get_version.py --viewer-version | sed 's/\.[0-9]*$//'` + +if [ -z "$AUTOBUILD" ] +then + export autobuild_dir="$here/../../../autobuild/bin/" + if [ -d "$autobuild_dir" ] + then + export AUTOBUILD="$autobuild_dir"autobuild + if [ -x "$AUTOBUILD" ] + then + # *HACK - bash doesn't know how to pass real pathnames to native windows python + case "$arch" in + CYGWIN) AUTOBUILD=$(cygpath -u $AUTOBUILD.cmd) ;; + esac + else + record_failure "Not executable: $AUTOBUILD" + exit 1 + fi + else + record_failure "Not found: $autobuild_dir" + exit 1 + fi +fi + +# load autbuild provided shell functions and variables +# Merov: going back to the previous code that passes even if it fails catching a failure +# TODO: use the correct code here under and fix the llbase import in python code +#if "$AUTOBUILD" source_environment > source_environment +#then +# . source_environment +#else + # dump environment variables for debugging +# env|sort +# record_failure "autobuild source_environment failed" +# cat source_environment >&3 +# exit 1 +#fi +eval "$("$AUTOBUILD" source_environment)" + +# dump environment variables for debugging +env|sort + + +# Install packages. +"$AUTOBUILD" install --skip-license-check # Now run the build -cd indra succeeded=true build_processes= last_built_variant= @@ -172,59 +184,11 @@ do build_dir_stubs="$build_dir/win_setup/$variant" rm -rf "$build_dir" mkdir -p "$build_dir" + mkdir -p "$build_dir/tmp" + #export TMP="$build_dir/tmp" if pre_build "$variant" "$build_dir" >> "$build_log" 2>&1 then - if $build_coverity - then - mkdir -p "$build_dir/cvbuild" - coverity_config=`cygpath --windows "$coverity_dir/config/coverity_config.xml"` - coverity_tmpdir=`cygpath --windows "$build_dir/cvbuild"` - coverity_root=`cygpath --windows "$top/latest"` - case "$variant" in - Release) - begin_section Coverity - begin_section CovBuild - "$coverity_dir"/bin/cov-build\ - --verbose 4 \ - --config "$coverity_config"\ - --dir "$coverity_tmpdir"\ - python develop.py -t $variant -G "$cmake_generator" build "$coverity_product"\ - >> "$build_log" 2>&1\ - &&\ - end_section CovBuild\ - &&\ - begin_section CovAnalyze\ - &&\ - "$coverity_dir"/bin/cov-analyze\ - --security\ - --concurrency\ - --dir "$coverity_tmpdir"\ - >> "$build_log" 2>&1\ - &&\ - end_section CovAnalyze\ - &&\ - begin_section CovCommit\ - &&\ - "$coverity_dir"/bin/cov-commit-defects\ - --stream "$coverity_product"\ - --dir "$coverity_tmpdir"\ - --host "$coverity_server"\ - --strip-path "$coverity_root"\ - --target "$branch/$arch"\ - --version "$revision"\ - --description "$repo: $variant $revision"\ - --user admin --password coverity\ - >> "$build_log" 2>&1\ - || record_failure "Coverity Build Failed" - # since any step could have failed, rely on the enclosing block to close any pending sub-blocks - end_section Coverity - ;; - esac - if test -r "$build_dir"/cvbuild/build-log.txt - then - upload_item log "$build_dir"/cvbuild/build-log.txt text/plain - fi - elif $build_link_parallel + if $build_link_parallel then begin_section BuildParallel ( build "$variant" "$build_dir" > "$build_dir/build.log" 2>&1 ) & @@ -232,10 +196,7 @@ do end_section BuildParallel else begin_section "Build$variant" - build "$variant" "$build_dir" >> "$build_log" 2>&1 - begin_section Tests - grep --line-buffered "^##teamcity" "$build_log" - end_section Tests + build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | grep --line-buffered "^##teamcity" if `cat "$build_dir/build_ok"` then echo so far so good. @@ -264,15 +225,13 @@ then begin_section "Build$variant" build_dir=`build_dir_$arch $variant` build_dir_stubs="$build_dir/win_setup/$variant" + tee -a $build_log < "$build_dir/build.log" | grep --line-buffered "^##teamcity" if `cat "$build_dir/build_ok"` then echo so far so good. else record_failure "Parallel build of \"$variant\" failed." fi - begin_section Tests - tee -a $build_log < "$build_dir/build.log" | grep --line-buffered "^##teamcity" - end_section Tests end_section "Build$variant" done end_section WaitParallel diff --git a/doc/contributions.txt b/doc/contributions.txt index 870fee9260..305c78c91e 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1,8 +1,7 @@ Linden Lab would like to acknowledge source code contributions from the following residents. The Second Life resident name is given below, along with the issue identifier corresponding to the patches we've -received from them. To see more about these contributions, visit the -browsable version: http://wiki.secondlife.com/wiki/Source_contributions +received from them. Able Whitman VWR-650 @@ -412,9 +411,13 @@ Jonathan Yap VWR-24347 STORM-975 STORM-1019 + STORM-844 + STORM-643 STORM-1020 STORM-1064 + STORM-960 STORM-1077 + STORM-953 Kage Pixel VWR-11 Ken March @@ -575,6 +578,10 @@ Nicholaz Beresford VWR-2412 VWR-2682 VWR-2684 +Nicky Perian + OPEN-1 + OPEN-1087 + STORM-1090 Nounouch Hapmouche VWR-238 Patric Mills @@ -839,6 +846,8 @@ Whoops Babii Wilton Lundquist VWR-7682 WolfPup Lowenhar + OPEN-1 + OPEN-37 SNOW-622 SNOW-772 STORM-102 diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index 7ba43f4b13..310e6cbdd4 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -103,7 +103,7 @@ if (VIEWER) endif (VIEWER) # Linux builds the viewer and server in 2 separate projects -# In order for ./develop.py build server to work on linux, +# In order for build server to work on linux, # the viewer project needs a server target. # This is not true for mac and windows. if (LINUX) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index dbe0cf5cd0..15b827b217 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -7,10 +7,10 @@ include(Variables) # Portable compilation flags. set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1") set(CMAKE_CXX_FLAGS_RELEASE - "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DNDEBUG") + "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -DNDEBUG") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO - "-DLL_RELEASE=1 -D_SECURE_SCL=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1") + "-DLL_RELEASE=1 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1") # Configure crash reporting set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds") @@ -36,13 +36,13 @@ if (WINDOWS) # Don't build DLLs. set(BUILD_SHARED_LIBS OFF) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP" + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP -D_SCL_SECURE_NO_WARNINGS=1" CACHE STRING "C++ compiler debug options" FORCE) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO - "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob2" + "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob2 -D_SECURE_STL=0" CACHE STRING "C++ compiler release-with-debug options" FORCE) set(CMAKE_CXX_FLAGS_RELEASE - "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2" + "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" CACHE STRING "C++ compiler release options" FORCE) set(CMAKE_CXX_STANDARD_LIBRARIES "") @@ -59,18 +59,9 @@ if (WINDOWS) /Zc:forScope /nologo /Oy- - ) - - if(MSVC80 OR MSVC90) - set(CMAKE_CXX_FLAGS_RELEASE - "${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" - CACHE STRING "C++ compiler release options" FORCE) - - add_definitions( /Zc:wchar_t- ) - endif (MSVC80 OR MSVC90) - + # Are we using the crummy Visual Studio KDU build workaround? if (NOT VS_DISABLE_FATAL_WARNINGS) add_definitions(/WX) diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 180504d286..daafa00fe2 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -32,27 +32,21 @@ else (STANDALONE) ) elseif (DARWIN) if (LLCOMMON_LINK_SHARED) - set(APR_selector "0.3.7.dylib") - set(APRUTIL_selector "0.3.8.dylib") + set(APR_selector "0.dylib") + set(APRUTIL_selector "0.dylib") else (LLCOMMON_LINK_SHARED) set(APR_selector "a") set(APRUTIL_selector "a") endif (LLCOMMON_LINK_SHARED) - set(APR_LIBRARIES - debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapr-1.${APR_selector} - optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.${APR_selector} - ) - set(APRUTIL_LIBRARIES - debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.${APRUTIL_selector} - optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.${APRUTIL_selector} - ) + set(APR_LIBRARIES libapr-1.${APR_selector}) + set(APRUTIL_LIBRARIES libaprutil-1.${APRUTIL_selector}) set(APRICONV_LIBRARIES iconv) else (WINDOWS) set(APR_LIBRARIES apr-1) set(APRUTIL_LIBRARIES aprutil-1) set(APRICONV_LIBRARIES iconv) endif (WINDOWS) - set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/apr-1) + set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1) if (LINUX) if (VIEWER) diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake index e3ca0fd77d..57b53f46ff 100644 --- a/indra/cmake/BerkeleyDB.cmake +++ b/indra/cmake/BerkeleyDB.cmake @@ -8,7 +8,8 @@ if (STANDALONE) else (STANDALONE) if (LINUX) # Need to add dependency pthread explicitely to support ld.gold. - set(DB_LIBRARIES db-4.2 pthread) + use_prebuilt_binary(db) + set(DB_LIBRARIES db-5.1 pthread) else (LINUX) set(DB_LIBRARIES db-4.2) endif (LINUX) diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake index 7ce57a5572..2135f0584c 100644 --- a/indra/cmake/Boost.cmake +++ b/indra/cmake/Boost.cmake @@ -10,23 +10,15 @@ if (STANDALONE) set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt) set(BOOST_REGEX_LIBRARY boost_regex-mt) set(BOOST_SIGNALS_LIBRARY boost_signals-mt) + set(BOOST_SYSTEM_LIBRARY boost_system-mt) + set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt) else (STANDALONE) use_prebuilt_binary(boost) set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) if (WINDOWS) - set(BOOST_VERSION 1_39) - if (MSVC71) - set(BOOST_PROGRAM_OPTIONS_LIBRARY - optimized libboost_program_options-vc71-mt-s-${BOOST_VERSION} - debug libboost_program_options-vc71-mt-sgd-${BOOST_VERSION}) - set(BOOST_REGEX_LIBRARY - optimized libboost_regex-vc71-mt-s-${BOOST_VERSION} - debug libboost_regex-vc71-mt-sgd-${BOOST_VERSION}) - set(BOOST_SIGNALS_LIBRARY - optimized libboost_signals-vc71-mt-s-${BOOST_VERSION} - debug libboost_signals-vc71-mt-sgd-${BOOST_VERSION}) - else (MSVC71) + set(BOOST_VERSION 1_45) + if(MSVC80) set(BOOST_PROGRAM_OPTIONS_LIBRARY optimized libboost_program_options-vc80-mt-${BOOST_VERSION} debug libboost_program_options-vc80-mt-gd-${BOOST_VERSION}) @@ -36,14 +28,31 @@ else (STANDALONE) set(BOOST_SIGNALS_LIBRARY optimized libboost_signals-vc80-mt-${BOOST_VERSION} debug libboost_signals-vc80-mt-gd-${BOOST_VERSION}) - endif (MSVC71) - elseif (DARWIN) - set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-xgcc40-mt) - set(BOOST_REGEX_LIBRARY boost_regex-xgcc40-mt) - set(BOOST_SIGNALS_LIBRARY boost_signals-xgcc40-mt) - elseif (LINUX) - set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-gcc41-mt) - set(BOOST_REGEX_LIBRARY boost_regex-gcc41-mt) - set(BOOST_SIGNALS_LIBRARY boost_signals-gcc41-mt) + set(BOOST_SYSTEM_LIBRARY + optimized libboost_system-vc80-mt-${BOOST_VERSION} + debug libboost_system-vc80-mt-gd-${BOOST_VERSION}) + set(BOOST_FILESYSTEM_LIBRARY + optimized libboost_filesystem-vc80-mt-${BOOST_VERSION} + debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION}) + else(MSVC80) + # MSVC 10.0 config + set(BOOST_PROGRAM_OPTIONS_LIBRARY + optimized libboost_program_options-vc100-mt-${BOOST_VERSION} + debug libboost_program_options-vc100-mt-gd-${BOOST_VERSION}) + set(BOOST_REGEX_LIBRARY + optimized libboost_regex-vc100-mt-${BOOST_VERSION} + debug libboost_regex-vc100-mt-gd-${BOOST_VERSION}) + set(BOOST_SYSTEM_LIBRARY + optimized libboost_system-vc100-mt-${BOOST_VERSION} + debug libboost_system-vc100-mt-gd-${BOOST_VERSION}) + set(BOOST_FILESYSTEM_LIBRARY + optimized libboost_filesystem-vc100-mt-${BOOST_VERSION} + debug libboost_filesystem-vc100-mt-gd-${BOOST_VERSION}) + endif (MSVC80) + elseif (DARWIN OR LINUX) + set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options) + set(BOOST_REGEX_LIBRARY boost_regex) + set(BOOST_SYSTEM_LIBRARY boost_system) + set(BOOST_FILESYSTEM_LIBRARY boost_filesystem) endif (WINDOWS) endif (STANDALONE) diff --git a/indra/cmake/CARes.cmake b/indra/cmake/CARes.cmake index 1850b706ac..b0dac5b12f 100644 --- a/indra/cmake/CARes.cmake +++ b/indra/cmake/CARes.cmake @@ -13,10 +13,7 @@ else (STANDALONE) if (WINDOWS) set(CARES_LIBRARIES areslib) elseif (DARWIN) - set(CARES_LIBRARIES - optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libcares.a - debug ${ARCH_PREBUILT_DIRS_DEBUG}/libcares.a - ) + set(CARES_LIBRARIES cares) else (WINDOWS) set(CARES_LIBRARIES cares) endif (WINDOWS) diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 3f421b270b..89c1c3691a 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -20,7 +20,6 @@ set(cmake_SOURCE_FILES CSharpMacros.cmake DBusGlib.cmake DirectX.cmake - ELFIO.cmake EXPAT.cmake FindAPR.cmake FindBerkeleyDB.cmake @@ -29,7 +28,6 @@ set(cmake_SOURCE_FILES FindFMOD.cmake FindGooglePerfTools.cmake FindMono.cmake - FindMT.cmake FindMySQL.cmake FindOpenJPEG.cmake FindXmlRpcEpi.cmake @@ -85,7 +83,6 @@ source_group("Shared Rules" FILES ${cmake_SOURCE_FILES}) set(master_SOURCE_FILES ../CMakeLists.txt - ../develop.py ) if (SERVER) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 1b08c3fd2e..4698116022 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -5,6 +5,7 @@ # VisualStudio. include(CMakeCopyIfDifferent) +include(Linking) ################################################################### # set up platform specific lists of files that need to be copied @@ -16,7 +17,7 @@ if(WINDOWS) #******************************* # VIVOX - *NOTE: no debug version - set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") + set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") set(vivox_files SLVoice.exe libsndfile-1.dll @@ -30,24 +31,24 @@ if(WINDOWS) #******************************* # Misc shared libs - # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables - # or ARCH_PREBUILT_DIRS - set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") + set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}") set(debug_files openjpegd.dll libapr-1.dll libaprutil-1.dll libapriconv-1.dll + ssleay32.dll + libeay32.dll ) - # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables - # or ARCH_PREBUILT_DIRS - set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") + set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") set(release_files openjpeg.dll libapr-1.dll libaprutil-1.dll libapriconv-1.dll + ssleay32.dll + libeay32.dll ) if(USE_GOOGLE_PERFTOOLS) @@ -121,6 +122,62 @@ if (MSVC80) set(third_party_targets ${third_party_targets} ${out_targets}) endif (EXISTS ${release_msvc8_redist_path}) +elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010 + FIND_PATH(debug_msvc10_redist_path msvcr100d.dll + PATHS + ${MSVC_DEBUG_REDIST_PATH} + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC100.DebugCRT + NO_DEFAULT_PATH + NO_DEFAULT_PATH + ) + + if(EXISTS ${debug_msvc10_redist_path}) + set(debug_msvc10_files + msvcr100d.dll + msvcp100d.dll + ) + + copy_if_different( + ${debug_msvc10_redist_path} + "${SHARED_LIB_STAGING_DIR_DEBUG}" + out_targets + ${debug_msvc10_files} + ) + set(third_party_targets ${third_party_targets} ${out_targets}) + + endif () + + FIND_PATH(release_msvc10_redist_path msvcr100.dll + PATHS + ${MSVC_REDIST_PATH} + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC100.CRT + NO_DEFAULT_PATH + NO_DEFAULT_PATH + ) + + if(EXISTS ${release_msvc10_redist_path}) + set(release_msvc10_files + msvcr100.dll + msvcp100.dll + ) + + copy_if_different( + ${release_msvc10_redist_path} + "${SHARED_LIB_STAGING_DIR_RELEASE}" + out_targets + ${release_msvc10_files} + ) + set(third_party_targets ${third_party_targets} ${out_targets}) + + copy_if_different( + ${release_msvc10_redist_path} + "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" + out_targets + ${release_msvc10_files} + ) + set(third_party_targets ${third_party_targets} ${out_targets}) + + endif () endif (MSVC80) elseif(DARWIN) @@ -128,7 +185,7 @@ elseif(DARWIN) set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Resources") set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release/Resources") - set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/universal-darwin") + set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") set(vivox_files SLVoice libsndfile.dylib @@ -137,20 +194,16 @@ elseif(DARWIN) libvivoxplatform.dylib libvivoxsdk.dylib ) - # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables - # or ARCH_PREBUILT_DIRS - set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_debug") + set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}") set(debug_files ) - # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables - # or ARCH_PREBUILT_DIRS - set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release") + set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") set(release_files - libapr-1.0.3.7.dylib + libapr-1.0.dylib libapr-1.dylib - libaprutil-1.0.3.8.dylib + libaprutil-1.0.dylib libaprutil-1.dylib - libexpat.0.5.0.dylib + libexpat.1.5.2.dylib libexpat.dylib libllqtwebkit.dylib libndofdev.dylib @@ -167,7 +220,7 @@ elseif(LINUX) set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}") set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}") - set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") + set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") set(vivox_files libsndfile.so.1 libortp.so @@ -178,20 +231,20 @@ elseif(LINUX) ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables # or ARCH_PREBUILT_DIRS - set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_debug") + set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}") set(debug_files ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables # or ARCH_PREBUILT_DIRS - set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_release_client") + set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") # *FIX - figure out what to do with duplicate libalut.so here -brad set(release_files libapr-1.so.0 libaprutil-1.so.0 libatk-1.0.so libbreakpad_client.so.0 - libcrypto.so.0.9.7 - libdb-4.2.so + libcrypto.so.0.9.8 + libdb-5.1.so libexpat.so libexpat.so.1 libgmock_main.so @@ -203,10 +256,11 @@ elseif(LINUX) libopenal.so libopenjpeg.so libssl.so - libstacktrace.so libtcmalloc.so - libuuid.so.1 - libssl.so.0.9.7 + libuuid.so.16 + libuuid.so.16.0.22 + libssl.so.0.9.8 + libfontconfig.so.1.4.4 ) if (FMOD) diff --git a/indra/cmake/DBusGlib.cmake b/indra/cmake/DBusGlib.cmake index cfc4ccd404..83c08d3350 100644 --- a/indra/cmake/DBusGlib.cmake +++ b/indra/cmake/DBusGlib.cmake @@ -10,7 +10,7 @@ elseif (LINUX) use_prebuilt_binary(dbusglib) set(DBUSGLIB_FOUND ON FORCE BOOL) set(DBUSGLIB_INCLUDE_DIRS - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0 + ${LIBS_PREBUILT_DIR}/include/dbus ) # We don't need to explicitly link against dbus-glib itself, because # the viewer probes for the system's copy at runtime. diff --git a/indra/cmake/DirectX.cmake b/indra/cmake/DirectX.cmake index 29724ee2fc..b2a18805d4 100644 --- a/indra/cmake/DirectX.cmake +++ b/indra/cmake/DirectX.cmake @@ -3,6 +3,7 @@ if (VIEWER AND WINDOWS) find_path(DIRECTX_INCLUDE_DIR dxdiag.h "$ENV{DXSDK_DIR}/Include" + "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2009)/Include" "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Include" "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Include" "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Include" @@ -24,6 +25,7 @@ if (VIEWER AND WINDOWS) find_path(DIRECTX_LIBRARY_DIR dxguid.lib "$ENV{DXSDK_DIR}/Lib/x86" + "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2009)/Lib/x86" "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Lib/x86" "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Lib/x86" "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Lib/x86" diff --git a/indra/cmake/ELFIO.cmake b/indra/cmake/ELFIO.cmake deleted file mode 100644 index e51993b0f7..0000000000 --- a/indra/cmake/ELFIO.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# -*- cmake -*- -include(Prebuilt) - -set(ELFIO_FIND_QUIETLY ON) - -if (STANDALONE) - include(FindELFIO) -elseif (LINUX) - use_prebuilt_binary(elfio) - set(ELFIO_LIBRARIES ELFIO) - set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) - set(ELFIO_FOUND "YES") -endif (STANDALONE) - -if (ELFIO_FOUND) - add_definitions(-DLL_ELFBIN=1) -else (ELFIO_FOUND) - set(ELFIO_INCLUDE_DIR "") -endif (ELFIO_FOUND) diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake index dcf44cd642..cb5124812d 100644..100755 --- a/indra/cmake/FMOD.cmake +++ b/indra/cmake/FMOD.cmake @@ -1,26 +1,39 @@ # -*- cmake -*- -set(FMOD ON CACHE BOOL "Use FMOD sound library.") +# FMOD can be set when launching the make using the argument -DFMOD:BOOL=ON +# When building using proprietary binaries though (i.e. having access to LL private servers), +# we always build with FMOD. +# Open source devs should use the -DFMOD:BOOL=ON then if they want to build with FMOD, whether +# they are using STANDALONE or not. +if (INSTALL_PROPRIETARY) + set(FMOD ON CACHE BOOL "Use FMOD sound library.") +endif (INSTALL_PROPRIETARY) if (FMOD) if (STANDALONE) + # In that case, we use the version of the library installed on the system set(FMOD_FIND_REQUIRED ON) include(FindFMOD) else (STANDALONE) - if (INSTALL_PROPRIETARY) - include(Prebuilt) - use_prebuilt_binary(fmod) - endif (INSTALL_PROPRIETARY) - - if (WINDOWS) - set(FMOD_LIBRARY fmod) - elseif (DARWIN) - set(FMOD_LIBRARY fmod) - elseif (LINUX) - set(FMOD_LIBRARY fmod-3.75) - endif (WINDOWS) - - SET(FMOD_LIBRARIES ${FMOD_LIBRARY}) - set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) + if (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) + # If the path have been specified in the arguments, use that + set(FMOD_LIBRARIES ${FMOD_LIBRARY}) + MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}") + else (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) + # If not, we're going to try to get the package listed in autobuild.xml + # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL) + # as accessing the private LL location will fail if you don't have the credential + include(Prebuilt) + use_prebuilt_binary(fmod) + if (WINDOWS) + set(FMOD_LIBRARY fmod) + elseif (DARWIN) + set(FMOD_LIBRARY fmod) + elseif (LINUX) + set(FMOD_LIBRARY fmod-3.75) + endif (WINDOWS) + set(FMOD_LIBRARIES ${FMOD_LIBRARY}) + set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) + endif (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) endif (STANDALONE) endif (FMOD) diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake new file mode 100644 index 0000000000..45db2b6ed0 --- /dev/null +++ b/indra/cmake/FindAutobuild.cmake @@ -0,0 +1,41 @@ +# -*- cmake -*- +# +# Find the autobuild tool +# +# Output variables: +# +# AUTOBUILD_EXECUTABLE - path to autobuild or pautobuild executable + +# *TODO - if cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var +# update this to check for that case + +IF (NOT AUTOBUILD_EXECUTABLE) + IF(WIN32) + SET(AUTOBUILD_EXE_NAMES autobuild.cmd autobuild.exe) + ELSE(WIN32) + SET(AUTOBUILD_EXE_NAMES autobuild) + ENDIF(WIN32) + + SET(AUTOBUILD_EXECUTABLE) + FIND_PROGRAM( + AUTOBUILD_EXECUTABLE + NAMES ${AUTOBUILD_EXE_NAMES} + PATHS + ENV PATH + ${CMAKE_SOURCE_DIR}/.. + ${CMAKE_SOURCE_DIR}/../.. + ${CMAKE_SOURCE_DIR}/../../.. + PATH_SUFFIXES "/autobuild/bin/" + ) + + IF (AUTOBUILD_EXECUTABLE) + GET_FILENAME_COMPONENT(_autobuild_name ${AUTOBUILD_EXECUTABLE} NAME_WE) + MESSAGE(STATUS "Using autobuild at: ${AUTOBUILD_EXECUTABLE}") + ELSE (AUTOBUILD_EXECUTABLE) + IF (AUTOBUILD_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find autobuild executable") + ENDIF (AUTOBUILD_FIND_REQUIRED) + ENDIF (AUTOBUILD_EXECUTABLE) + + MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE) +ENDIF (NOT AUTOBUILD_EXECUTABLE) diff --git a/indra/cmake/FindFMOD.cmake b/indra/cmake/FindFMOD.cmake index e60b386027..1ebbc8c96e 100644 --- a/indra/cmake/FindFMOD.cmake +++ b/indra/cmake/FindFMOD.cmake @@ -11,7 +11,7 @@ FIND_PATH(FMOD_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod) -SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmod-3.75) +SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmodex fmod-3.75) FIND_LIBRARY(FMOD_LIBRARY NAMES ${FMOD_NAMES} PATH_SUFFIXES fmod diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake index 5f1aa26e89..43a9d282d0 100644 --- a/indra/cmake/FreeType.cmake +++ b/indra/cmake/FreeType.cmake @@ -9,7 +9,7 @@ else (STANDALONE) use_prebuilt_binary(freetype) if (LINUX) set(FREETYPE_INCLUDE_DIRS - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + ${LIBS_PREBUILT_DIR}/include) else (LINUX) set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) endif (LINUX) diff --git a/indra/cmake/GStreamer010Plugin.cmake b/indra/cmake/GStreamer010Plugin.cmake index 0ca432da18..d2d0699bcd 100644 --- a/indra/cmake/GStreamer010Plugin.cmake +++ b/indra/cmake/GStreamer010Plugin.cmake @@ -13,9 +13,9 @@ elseif (LINUX) set(GSTREAMER010_FOUND ON FORCE BOOL) set(GSTREAMER010_PLUGINS_BASE_FOUND ON FORCE BOOL) set(GSTREAMER010_INCLUDE_DIRS - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/gstreamer-0.10 - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0 - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/libxml2 + ${LIBS_PREBUILT_DIR}/include/gstreamer-0.10 + ${LIBS_PREBUILT_DIR}/include/glib-2.0 + ${LIBS_PREBUILT_DIR}/include/libxml2 ) # We don't need to explicitly link against gstreamer itself, because # LLMediaImplGStreamer probes for the system's copy at runtime. diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index 946fc6b375..6c784a3a76 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -4,7 +4,6 @@ include(Prebuilt) if (STANDALONE) include(FindGooglePerfTools) else (STANDALONE) - use_prebuilt_binary(google) if (WINDOWS) use_prebuilt_binary(google-perftools) set(TCMALLOC_LIBRARIES @@ -13,11 +12,11 @@ else (STANDALONE) set(GOOGLE_PERFTOOLS_FOUND "YES") endif (WINDOWS) if (LINUX) + use_prebuilt_binary(google-perftools) set(TCMALLOC_LIBRARIES tcmalloc) - set(STACKTRACE_LIBRARIES stacktrace) set(PROFILER_LIBRARIES profiler) set(GOOGLE_PERFTOOLS_INCLUDE_DIR - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + ${LIBS_PREBUILT_DIR}/include) set(GOOGLE_PERFTOOLS_FOUND "YES") endif (LINUX) endif (STANDALONE) diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake index 9514d59f64..4f99efd602 100644 --- a/indra/cmake/JPEG.cmake +++ b/indra/cmake/JPEG.cmake @@ -12,10 +12,7 @@ else (STANDALONE) if (LINUX) set(JPEG_LIBRARIES jpeg) elseif (DARWIN) - set(JPEG_LIBRARIES - optimized ${ARCH_PREBUILT_DIRS_RELEASE}/liblljpeg.a - debug ${ARCH_PREBUILT_DIRS_DEBUG}/liblljpeg.a - ) + set(JPEG_LIBRARIES jpeg) elseif (WINDOWS) set(JPEG_LIBRARIES jpeglib) endif (LINUX) diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake index 7dd565be7c..499b00fb44 100644 --- a/indra/cmake/JsonCpp.cmake +++ b/indra/cmake/JsonCpp.cmake @@ -11,12 +11,12 @@ else (STANDALONE) use_prebuilt_binary(jsoncpp) if (WINDOWS) set(JSONCPP_LIBRARIES - debug json_vc80d - optimized json_vc80) + debug json_vc100debug_libmt.lib + optimized json_vc100_libmt) elseif (DARWIN) - set(JSONCPP_LIBRARIES json_mac-universal-gcc_libmt) + set(JSONCPP_LIBRARIES libjson_linux-gcc-4.0.1_libmt.a) elseif (LINUX) - set(JSONCPP_LIBRARIES jsoncpp) + set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a) endif (WINDOWS) - set(JSONCPP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/jsoncpp) + set(JSONCPP_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json") endif (STANDALONE) diff --git a/indra/cmake/LLKDU.cmake b/indra/cmake/LLKDU.cmake index f5cbad03a6..e478b01f84 100644 --- a/indra/cmake/LLKDU.cmake +++ b/indra/cmake/LLKDU.cmake @@ -1,20 +1,21 @@ # -*- cmake -*- -include(Prebuilt) -# USE_KDU can be set when launching cmake or develop.py as an option using the argument -DUSE_KDU:BOOL=ON -# When building using proprietary binaries though (i.e. having access to LL private servers), we always build with KDU -if (INSTALL_PROPRIETARY AND NOT STANDALONE) - set(USE_KDU ON) -endif (INSTALL_PROPRIETARY AND NOT STANDALONE) +# USE_KDU can be set when launching cmake as an option using the argument -DUSE_KDU:BOOL=ON +# When building using proprietary binaries though (i.e. having access to LL private servers), +# we always build with KDU +if (INSTALL_PROPRIETARY) + set(USE_KDU ON CACHE BOOL "Use Kakadu library.") +endif (INSTALL_PROPRIETARY) if (USE_KDU) + include(Prebuilt) use_prebuilt_binary(kdu) if (WINDOWS) set(KDU_LIBRARY kdu.lib) else (WINDOWS) set(KDU_LIBRARY libkdu.a) endif (WINDOWS) - set(KDU_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/kdu) + set(KDU_INCLUDE_DIR ${AUTOBUILD_INSTALL_DIR}/include/kdu) set(LLKDU_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llkdu) set(LLKDU_LIBRARIES llkdu) endif (USE_KDU) diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake index a5b9cf47a4..b4bb9a078a 100644 --- a/indra/cmake/LLWindow.cmake +++ b/indra/cmake/LLWindow.cmake @@ -18,7 +18,7 @@ else (STANDALONE) use_prebuilt_binary(SDL) set (SDL_FOUND TRUE) set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux) - set (SDL_LIBRARY SDL) + set (SDL_LIBRARY SDL directfb fusion direct) endif (LINUX AND VIEWER) endif (STANDALONE) diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index bca99caf2a..07db6ab257 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -1,32 +1,43 @@ # -*- cmake -*- +include(Variables) + + if (NOT STANDALONE) + set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib) + set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release) + set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug) if (WINDOWS) - set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib) - set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release) - set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug) - set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs") - set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged executables") + set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) + set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) elseif (LINUX) - if (VIEWER) - set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client) - else (VIEWER) - set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release) - endif (VIEWER) - set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS}) - set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS}) - set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib CACHE FILEPATH "Location of staged .sos") - set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin CACHE FILEPATH "Location of staged executables") + set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib) + set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin) elseif (DARWIN) - set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release) - set(ARCH_PREBUILT_DIRS ${ARCH_PREBUILT_DIRS_RELEASE}) - set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS_RELEASE}) - set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs") - set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)" CACHE FILEPATH "Location of staged executables") + set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) + set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)") endif (WINDOWS) endif (NOT STANDALONE) -link_directories(${ARCH_PREBUILT_DIRS}) +# Autobuild packages must provide 'release' versions of libraries, but may provide versions for +# specific build types. AUTOBUILD_LIBS_INSTALL_DIRS lists first the build type directory and then +# the 'release' directory (as a default fallback). +# *NOTE - we have to take special care to use CMAKE_CFG_INTDIR on IDE generators (like mac and +# windows) and CMAKE_BUILD_TYPE on Makefile based generators (like linux). The reason for this is +# that CMAKE_BUILD_TYPE is essentially meaningless at configuration time for IDE generators and +# CMAKE_CFG_INTDIR is meaningless at build time for Makefile generators +if(WINDOWS OR DARWIN) + # the cmake xcode and VS generators implicitly append ${CMAKE_CFG_INTDIR} to the library paths for us + # fortunately both windows and darwin are case insensitive filesystems so this works. + set(AUTOBUILD_LIBS_INSTALL_DIRS "${AUTOBUILD_INSTALL_DIR}/lib/") +else(WINDOWS OR DARWIN) + # else block is for linux and any other makefile based generators + string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER) + set(AUTOBUILD_LIBS_INSTALL_DIRS ${AUTOBUILD_INSTALL_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER}) +endif(WINDOWS OR DARWIN) + +list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE}) +link_directories(${AUTOBUILD_LIBS_INSTALL_DIRS}) if (LINUX) set(DL_LIBRARY dl) diff --git a/indra/cmake/MonoEmbed.cmake b/indra/cmake/MonoEmbed.cmake index 0f1f23309c..30890aed21 100644 --- a/indra/cmake/MonoEmbed.cmake +++ b/indra/cmake/MonoEmbed.cmake @@ -37,9 +37,9 @@ IF (DARWIN) ELSE (DARWIN) - SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) SET(GLIB_2_0_PLATFORM_INCLUDE_DIR - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0) + ${LIBS_PREBUILT_DIR}/include/glib-2.0) SET(GLIB_2_0_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/glib-2.0) INCLUDE_DIRECTORIES( diff --git a/indra/cmake/MySQL.cmake b/indra/cmake/MySQL.cmake index e591fbc3d8..218482449d 100644 --- a/indra/cmake/MySQL.cmake +++ b/indra/cmake/MySQL.cmake @@ -7,7 +7,7 @@ use_prebuilt_binary(mysql) if (LINUX) if (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1") set(MYSQL_LIBRARIES mysqlclient) - set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) else (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1") # Use the native MySQL library on a 64-bit system. set(MYSQL_FIND_QUIETLY ON) @@ -16,9 +16,9 @@ if (LINUX) endif (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1") elseif (WINDOWS) set(MYSQL_LIBRARIES mysqlclient) - set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) elseif (DARWIN) - set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) set(MYSQL_LIBRARIES optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libmysqlclient.a debug ${ARCH_PREBUILT_DIRS_DEBUG}/libmysqlclient.a diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake index d01c680ed1..a3e1fb924e 100644 --- a/indra/cmake/OPENAL.cmake +++ b/indra/cmake/OPENAL.cmake @@ -9,18 +9,26 @@ else (LINUX) endif (LINUX) if (OPENAL) + set(OPENAL_LIB_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/AL") if (STANDALONE) include(FindPkgConfig) include(FindOpenAL) pkg_check_modules(OPENAL_LIB REQUIRED openal) pkg_check_modules(FREEALUT_LIB REQUIRED freealut) else (STANDALONE) - use_prebuilt_binary(openal-soft) + use_prebuilt_binary(openal_soft) endif (STANDALONE) - set(OPENAL_LIBRARIES - openal - alut + if(WINDOWS) + set(OPENAL_LIBRARIES + OpenAL32 + alut ) + else() + set(OPENAL_LIBRARIES + openal + alut + ) + endif() endif (OPENAL) if (OPENAL) diff --git a/indra/cmake/OpenGL.cmake b/indra/cmake/OpenGL.cmake index 6a2b6811af..661666f00d 100644 --- a/indra/cmake/OpenGL.cmake +++ b/indra/cmake/OpenGL.cmake @@ -5,5 +5,5 @@ if (NOT STANDALONE) use_prebuilt_binary(GL) # possible glh_linear should have its own .cmake file instead use_prebuilt_binary(glh_linear) - set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) endif (NOT STANDALONE) diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake index 81584c09ea..5982ee9a49 100644 --- a/indra/cmake/OpenSSL.cmake +++ b/indra/cmake/OpenSSL.cmake @@ -13,11 +13,11 @@ else (STANDALONE) else (WINDOWS) set(OPENSSL_LIBRARIES ssl) endif (WINDOWS) - set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) endif (STANDALONE) if (LINUX) set(CRYPTO_LIBRARIES crypto) elseif (DARWIN) - set(CRYPTO_LIBRARIES llcrypto) + set(CRYPTO_LIBRARIES crypto) endif (LINUX) diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake index f6522d9e2f..913c575672 100644 --- a/indra/cmake/PNG.cmake +++ b/indra/cmake/PNG.cmake @@ -8,6 +8,14 @@ if (STANDALONE) include(FindPNG) else (STANDALONE) use_prebuilt_binary(libpng) - set(PNG_LIBRARIES png12) - set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng12) + if (WINDOWS) + set(PNG_LIBRARIES libpng15) + set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15) + elseif(DARWIN) + set(PNG_LIBRARIES png15) + set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15) + else() + set(PNG_LIBRARIES png15) + set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15) + endif() endif (STANDALONE) diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake index a91519278c..1b60d176f1 100644 --- a/indra/cmake/Prebuilt.cmake +++ b/indra/cmake/Prebuilt.cmake @@ -1,36 +1,31 @@ # -*- cmake -*- -include(Python) -include(FindSCP) +include(FindAutobuild) macro (use_prebuilt_binary _binary) - if (NOT STANDALONE) + if (NOT DEFINED STANDALONE_${_binary}) + set(STANDALONE_${_binary} ${STANDALONE}) + endif (NOT DEFINED STANDALONE_${_binary}) + + if (NOT STANDALONE_${_binary}) if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) if(INSTALL_PROPRIETARY) include(FindSCP) - if(DEBUG_PREBUILT) - message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. --scp=${SCP_EXECUTABLE} ${_binary}") - endif(DEBUG_PREBUILT) - execute_process(COMMAND ${PYTHON_EXECUTABLE} - install.py - --install-dir=${CMAKE_SOURCE_DIR}/.. - --scp=${SCP_EXECUTABLE} - ${_binary} - WORKING_DIRECTORY ${SCRIPTS_DIR} - RESULT_VARIABLE ${_binary}_installed - ) - else(INSTALL_PROPRIETARY) - if(DEBUG_PREBUILT) - message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. ${_binary}") - endif(DEBUG_PREBUILT) - execute_process(COMMAND ${PYTHON_EXECUTABLE} - install.py - --install-dir=${CMAKE_SOURCE_DIR}/.. - ${_binary} - WORKING_DIRECTORY ${SCRIPTS_DIR} - RESULT_VARIABLE ${_binary}_installed - ) endif(INSTALL_PROPRIETARY) + if(DEBUG_PREBUILT) + message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install + --install-dir=${AUTOBUILD_INSTALL_DIR} + --skip-license-check + ${_binary} ") + endif(DEBUG_PREBUILT) + execute_process(COMMAND "${AUTOBUILD_EXECUTABLE}" + install + --install-dir=${AUTOBUILD_INSTALL_DIR} + --skip-license-check + ${_binary} + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + RESULT_VARIABLE ${_binary}_installed + ) file(WRITE ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${${_binary}_installed}") else(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) set(${_binary}_installed 0) @@ -40,5 +35,5 @@ macro (use_prebuilt_binary _binary) "Failed to download or unpack prebuilt '${_binary}'." " Process returned ${${_binary}_installed}.") endif (NOT ${_binary}_installed EQUAL 0) - endif (NOT STANDALONE) + endif (NOT STANDALONE_${_binary}) endmacro (use_prebuilt_binary _binary) diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake index 02f432e3c1..012f4e20d8 100644 --- a/indra/cmake/QuickTimePlugin.cmake +++ b/indra/cmake/QuickTimePlugin.cmake @@ -33,7 +33,7 @@ elseif (WINDOWS) endif (DEBUG_QUICKTIME_LIBRARY AND RELEASE_QUICKTIME_LIBRARY) include_directories( - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/quicktime + ${LIBS_PREBUILT_DIR}/include/quicktime "${QUICKTIME_SDK_DIR}\\CIncludes" ) endif (DARWIN) diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake index f529f5b644..91e5258fb7 100644 --- a/indra/cmake/UI.cmake +++ b/indra/cmake/UI.cmake @@ -51,11 +51,11 @@ else (STANDALONE) endif (LINUX) include_directories ( - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include + ${LIBS_PREBUILT_DIR}/include ${LIBS_PREBUILT_DIR}/include ) foreach(include ${${LL_ARCH}_INCLUDES}) - include_directories(${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/${include}) + include_directories(${LIBS_PREBUILT_DIR}/include/${include}) endforeach(include) endif (STANDALONE) diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index 0d7156b91d..77dd34d122 100644 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -17,6 +17,10 @@ # Relative and absolute paths to subtrees. +if(NOT DEFINED COMMON_CMAKE_DIR) + set(COMMON_CMAKE_DIR "${CMAKE_SOURCE_DIR}/cmake") +endif(NOT DEFINED COMMON_CMAKE_DIR) + set(LIBS_CLOSED_PREFIX) set(LIBS_OPEN_PREFIX) set(LIBS_SERVER_PREFIX) @@ -26,24 +30,40 @@ set(VIEWER_PREFIX) set(INTEGRATION_TESTS_PREFIX) set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation") -set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX}) -set(LIBS_OPEN_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX}) +if(LIBS_CLOSED_DIR) + file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR) +else(LIBS_CLOSED_DIR) + set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX}) +endif(LIBS_CLOSED_DIR) +if(LIBS_COMMON_DIR) + file(TO_CMAKE_PATH "${LIBS_COMMON_DIR}" LIBS_COMMON_DIR) +else(LIBS_COMMON_DIR) + set(LIBS_COMMON_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX}) +endif(LIBS_COMMON_DIR) +set(LIBS_OPEN_DIR ${LIBS_COMMON_DIR}) + set(LIBS_SERVER_DIR ${CMAKE_SOURCE_DIR}/${LIBS_SERVER_PREFIX}) set(SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/${SCRIPTS_PREFIX}) set(SERVER_DIR ${CMAKE_SOURCE_DIR}/${SERVER_PREFIX}) set(VIEWER_DIR ${CMAKE_SOURCE_DIR}/${VIEWER_PREFIX}) -set(LIBS_PREBUILT_DIR ${CMAKE_SOURCE_DIR}/../libraries CACHE PATH +set(AUTOBUILD_INSTALL_DIR ${CMAKE_BINARY_DIR}/packages) + +set(LIBS_PREBUILT_DIR ${AUTOBUILD_INSTALL_DIR} CACHE PATH "Location of prebuilt libraries.") if (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake) # We use this as a marker that you can try to use the proprietary libraries. set(INSTALL_PROPRIETARY ON CACHE BOOL "Install proprietary binaries") endif (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake) - set(TEMPLATE_VERIFIER_OPTIONS "" CACHE STRING "Options for scripts/template_verifier.py") set(TEMPLATE_VERIFIER_MASTER_URL "http://bitbucket.org/lindenlab/master-message-template/raw/tip/message_template.msg" CACHE STRING "Location of the master message template") +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING + "Build type. One of: Debug Release RelWithDebInfo" FORCE) +endif (NOT CMAKE_BUILD_TYPE) + if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") set(WINDOWS ON BOOL FORCE) set(ARCH i686) @@ -56,20 +76,19 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(LINUX ON BOOl FORCE) # If someone has specified a word size, use that to determine the - # architecture. Otherwise, let the compiler specify the word size. - # Using uname will break under chroots and other cross arch compiles. RC + # architecture. Otherwise, let the architecture specify the word size. if (WORD_SIZE EQUAL 32) set(ARCH i686) elseif (WORD_SIZE EQUAL 64) set(ARCH x86_64) else (WORD_SIZE EQUAL 32) - if(CMAKE_SIZEOF_VOID_P MATCHES 4) - set(ARCH i686) - set(WORD_SIZE 32) - else(CMAKE_SIZEOF_VOID_P MATCHES 4) - set(ARCH x86_64) + execute_process(COMMAND uname -m COMMAND sed s/i.86/i686/ + OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + if (ARCH STREQUAL x86_64) set(WORD_SIZE 64) - endif(CMAKE_SIZEOF_VOID_P MATCHES 4) + else (ARCH STREQUAL x86_64) + set(WORD_SIZE 32) + endif (ARCH STREQUAL x86_64) endif (WORD_SIZE EQUAL 32) set(LL_ARCH ${ARCH}_linux) @@ -78,25 +97,12 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(DARWIN 1) - - # NOTE: If specifying a different SDK with CMAKE_OSX_SYSROOT at configure - # time you should also specify CMAKE_OSX_DEPLOYMENT_TARGET explicitly, - # otherwise CMAKE_OSX_SYSROOT will be overridden here. We can't just check - # for it being unset, as it gets set to the system default :( - - # Default to building against the 10.4 SDK if no deployment target is - # specified. - if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) - # NOTE: setting -isysroot is NOT adequate: http://lists.apple.com/archives/Xcode-users/2007/Oct/msg00696.html - # see http://public.kitware.com/Bug/view.php?id=9959 + poppy - set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) - set(CMAKE_OSX_DEPLOYMENT_TARGET 10.4) - endif (NOT CMAKE_OSX_DEPLOYMENT_TARGET) - - # GCC 4.2 is incompatible with the MacOSX 10.4 SDK - if (${CMAKE_OSX_SYSROOT} MATCHES "10.4u") - set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.0") - endif (${CMAKE_OSX_SYSROOT} MATCHES "10.4u") + + # To support a different SDK update these Xcode settings: + set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5) + set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) + set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.2") + set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "DWARF with dSYM File") # NOTE: To attempt an i386/PPC Universal build, add this on the configure line: # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc' @@ -127,6 +133,7 @@ set(VIEWER ON CACHE BOOL "Build Second Life viewer.") set(VIEWER_CHANNEL "LindenDeveloper" CACHE STRING "Viewer Channel Name") set(VIEWER_LOGIN_CHANNEL ${VIEWER_CHANNEL} CACHE STRING "Fake login channel for A/B Testing") +set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside") set(STANDALONE OFF CACHE BOOL "Do not use Linden-supplied prebuilt libraries.") if (NOT STANDALONE AND EXISTS ${CMAKE_SOURCE_DIR}/llphysics) @@ -143,6 +150,7 @@ For more information, please see JIRA DEV-14943 - Cmake Linux cannot build both endif (LINUX AND SERVER AND VIEWER) -set(USE_PRECOMPILED_HEADERS ON CACHE BOOL "Enable use of precompiled header directives where supported.") +set(USE_PRECOMPILED_HEADERS OFF CACHE BOOL "Enable use of precompiled header directives where supported.") source_group("CMake Rules" FILES CMakeLists.txt) + diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake index 1f5b0f5d84..0f5a81c020 100644 --- a/indra/cmake/WebKitLibPlugin.cmake +++ b/indra/cmake/WebKitLibPlugin.cmake @@ -62,16 +62,13 @@ elseif (LINUX) else (STANDALONE) set(WEBKIT_PLUGIN_LIBRARIES llqtwebkit - - qgif - qjpeg - QtWebKit QtOpenGL QtNetwork QtGui QtCore - + qgif + qjpeg jpeg fontconfig X11 diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake index 107d1926ba..5bd4848245 100644 --- a/indra/cmake/XmlRpcEpi.cmake +++ b/indra/cmake/XmlRpcEpi.cmake @@ -9,7 +9,10 @@ if (STANDALONE) else (STANDALONE) use_prebuilt_binary(xmlrpc-epi) if (WINDOWS) - set(XMLRPCEPI_LIBRARIES xmlrpcepi) + set(XMLRPCEPI_LIBRARIES + debug xmlrpc-epid + optimized xmlrpc-epi + ) else (WINDOWS) set(XMLRPCEPI_LIBRARIES xmlrpc-epi) endif (WINDOWS) diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py index 320a9be8ab..320a9be8ab 100644..100755 --- a/indra/cmake/run_build_test.py +++ b/indra/cmake/run_build_test.py diff --git a/indra/develop.py b/indra/develop.py deleted file mode 100755 index d9a66352f3..0000000000 --- a/indra/develop.py +++ /dev/null @@ -1,863 +0,0 @@ -#!/usr/bin/env python -"""\ -@file develop.py -@authors Bryan O'Sullivan, Mark Palange, Aaron Brashears -@brief Fire and forget script to appropriately configure cmake for SL. - -$LicenseInfo:firstyear=2007&license=viewerlgpl$ -Second Life Viewer Source Code -Copyright (C) 2007-2011, Linden Research, Inc. - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; -version 2.1 of the License only. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -$/LicenseInfo$ -""" - - -import errno -import getopt -import os -import random -import re -import shutil -import socket -import sys -import commands -import subprocess - -class CommandError(Exception): - pass - - -def mkdir(path): - try: - os.mkdir(path) - return path - except OSError, err: - if err.errno != errno.EEXIST or not os.path.isdir(path): - raise - -def getcwd(): - cwd = os.getcwd() - if 'a' <= cwd[0] <= 'z' and cwd[1] == ':': - # CMake wants DOS drive letters to be in uppercase. The above - # condition never asserts on platforms whose full path names - # always begin with a slash, so we don't need to test whether - # we are running on Windows. - cwd = cwd[0].upper() + cwd[1:] - return cwd - -def quote(opts): - return '"' + '" "'.join([ opt.replace('"', '') for opt in opts ]) + '"' - -class PlatformSetup(object): - generator = None - build_types = {} - for t in ('Debug', 'Release', 'RelWithDebInfo'): - build_types[t.lower()] = t - - build_type = build_types['relwithdebinfo'] - standalone = 'OFF' - unattended = 'OFF' - universal = 'OFF' - project_name = 'SecondLife' - distcc = True - cmake_opts = [] - word_size = 32 - using_express = False - - def __init__(self): - self.script_dir = os.path.realpath( - os.path.dirname(__import__(__name__).__file__)) - - def os(self): - '''Return the name of the OS.''' - - raise NotImplemented('os') - - def arch(self): - '''Return the CPU architecture.''' - - return None - - def platform(self): - '''Return a stringified two-tuple of the OS name and CPU - architecture.''' - - ret = self.os() - if self.arch(): - ret += '-' + self.arch() - return ret - - def build_dirs(self): - '''Return the top-level directories in which builds occur. - - This can return more than one directory, e.g. if doing a - 32-bit viewer and server build on Linux.''' - - return ['build-' + self.platform()] - - def cmake_commandline(self, src_dir, build_dir, opts, simple): - '''Return the command line to run cmake with.''' - - args = dict( - dir=src_dir, - generator=self.generator, - opts=quote(opts), - standalone=self.standalone, - unattended=self.unattended, - word_size=self.word_size, - type=self.build_type.upper(), - ) - #if simple: - # return 'cmake %(opts)s %(dir)r' % args - return ('cmake -DCMAKE_BUILD_TYPE:STRING=%(type)s ' - '-DSTANDALONE:BOOL=%(standalone)s ' - '-DUNATTENDED:BOOL=%(unattended)s ' - '-DWORD_SIZE:STRING=%(word_size)s ' - '-G %(generator)r %(opts)s %(dir)r' % args) - - def run_cmake(self, args=[]): - '''Run cmake.''' - - # do a sanity check to make sure we have a generator - if not hasattr(self, 'generator'): - raise "No generator available for '%s'" % (self.__name__,) - cwd = getcwd() - created = [] - try: - for d in self.build_dirs(): - simple = True - if mkdir(d): - created.append(d) - simple = False - try: - os.chdir(d) - cmd = self.cmake_commandline(cwd, d, args, simple) - print 'Running %r in %r' % (cmd, d) - self.run(cmd, 'cmake') - finally: - os.chdir(cwd) - except: - # If we created a directory in which to run cmake and - # something went wrong, the directory probably just - # contains garbage, so delete it. - os.chdir(cwd) - for d in created: - print 'Cleaning %r' % d - shutil.rmtree(d) - raise - - def parse_build_opts(self, arguments): - opts, targets = getopt.getopt(arguments, 'o:', ['option=']) - build_opts = [] - for o, a in opts: - if o in ('-o', '--option'): - build_opts.append(a) - return build_opts, targets - - def run_build(self, opts, targets): - '''Build the default targets for this platform.''' - - raise NotImplemented('run_build') - - def cleanup(self): - '''Delete all build directories.''' - - cleaned = 0 - for d in self.build_dirs(): - if os.path.isdir(d): - print 'Cleaning %r' % d - shutil.rmtree(d) - cleaned += 1 - if not cleaned: - print 'Nothing to clean up!' - - def is_internal_tree(self): - '''Indicate whether we are building in an internal source tree.''' - - return os.path.isdir(os.path.join(self.script_dir, 'newsim')) - - def find_in_path(self, name, defval=None, basename=False): - for ext in self.exe_suffixes: - name_ext = name + ext - if os.sep in name_ext: - path = os.path.abspath(name_ext) - if os.access(path, os.X_OK): - return [basename and os.path.basename(path) or path] - for p in os.getenv('PATH', self.search_path).split(os.pathsep): - path = os.path.join(p, name_ext) - if os.access(path, os.X_OK): - return [basename and os.path.basename(path) or path] - if defval: - return [defval] - return [] - - -class UnixSetup(PlatformSetup): - '''Generic Unixy build instructions.''' - - search_path = '/usr/bin:/usr/local/bin' - exe_suffixes = ('',) - - def __init__(self): - super(UnixSetup, self).__init__() - self.generator = 'Unix Makefiles' - - def os(self): - return 'unix' - - def arch(self): - cpu = os.uname()[-1] - if cpu.endswith('386'): - cpu = 'i386' - elif cpu.endswith('86'): - cpu = 'i686' - elif cpu in ('athlon',): - cpu = 'i686' - elif cpu == 'Power Macintosh': - cpu = 'ppc' - elif cpu == 'x86_64' and self.word_size == 32: - cpu = 'i686' - return cpu - - def run(self, command, name=None): - '''Run a program. If the program fails, raise an exception.''' - sys.stdout.flush() - ret = os.system(command) - if ret: - if name is None: - name = command.split(None, 1)[0] - if os.WIFEXITED(ret): - st = os.WEXITSTATUS(ret) - if st == 127: - event = 'was not found' - else: - event = 'exited with status %d' % st - elif os.WIFSIGNALED(ret): - event = 'was killed by signal %d' % os.WTERMSIG(ret) - else: - event = 'died unexpectedly (!?) with 16-bit status %d' % ret - raise CommandError('the command %r %s' % - (name, event)) - - -class LinuxSetup(UnixSetup): - def __init__(self): - super(LinuxSetup, self).__init__() - try: - self.debian_sarge = open('/etc/debian_version').read().strip() == '3.1' - except: - self.debian_sarge = False - - def os(self): - return 'linux' - - def build_dirs(self): - # Only build the server code if we have it. - platform_build = '%s-%s' % (self.platform(), self.build_type.lower()) - - if self.arch() == 'i686' and self.is_internal_tree(): - return ['viewer-' + platform_build, 'server-' + platform_build] - elif self.arch() == 'x86_64' and self.is_internal_tree(): - # the viewer does not build in 64bit -- kdu5 issues - # we can either use openjpeg, or overhaul our viewer to handle kdu5 or higher - # doug knows about kdu issues - return ['server-' + platform_build] - else: - return ['viewer-' + platform_build] - - def cmake_commandline(self, src_dir, build_dir, opts, simple): - args = dict( - dir=src_dir, - generator=self.generator, - opts=quote(opts), - standalone=self.standalone, - unattended=self.unattended, - type=self.build_type.upper(), - project_name=self.project_name, - word_size=self.word_size, - ) - if not self.is_internal_tree(): - args.update({'cxx':'g++', 'server':'OFF', 'viewer':'ON'}) - else: - if self.distcc: - distcc = self.find_in_path('distcc') - baseonly = True - else: - distcc = [] - baseonly = False - if 'server' in build_dir: - gcc = distcc + self.find_in_path( - self.debian_sarge and 'g++-3.3' or 'g++-4.1', - 'g++', baseonly) - args.update({'cxx': ' '.join(gcc), 'server': 'ON', - 'viewer': 'OFF'}) - else: - gcc41 = distcc + self.find_in_path('g++-4.1', 'g++', baseonly) - args.update({'cxx': ' '.join(gcc41), - 'server': 'OFF', - 'viewer': 'ON'}) - cmd = (('cmake -DCMAKE_BUILD_TYPE:STRING=%(type)s ' - '-G %(generator)r -DSERVER:BOOL=%(server)s ' - '-DVIEWER:BOOL=%(viewer)s -DSTANDALONE:BOOL=%(standalone)s ' - '-DUNATTENDED:BOOL=%(unattended)s ' - '-DWORD_SIZE:STRING=%(word_size)s ' - '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' - '%(opts)s %(dir)r') - % args) - if 'CXX' not in os.environ: - args.update({'cmd':cmd}) - cmd = ('CXX=%(cxx)r %(cmd)s' % args) - return cmd - - def run_build(self, opts, targets): - job_count = None - - for i in range(len(opts)): - if opts[i].startswith('-j'): - try: - job_count = int(opts[i][2:]) - except ValueError: - try: - job_count = int(opts[i+1]) - except ValueError: - job_count = True - - def get_cpu_count(): - count = 0 - for line in open('/proc/cpuinfo'): - if re.match(r'processor\s*:', line): - count += 1 - return count - - def localhost(): - count = get_cpu_count() - return 'localhost/' + str(count), count - - def get_distcc_hosts(): - try: - hosts = [] - name = os.getenv('DISTCC_DIR', '/etc/distcc') + '/hosts' - for l in open(name): - l = l[l.find('#')+1:].strip() - if l: hosts.append(l) - return hosts - except IOError: - return (os.getenv('DISTCC_HOSTS', '').split() or - [localhost()[0]]) - - def count_distcc_hosts(): - cpus = 0 - hosts = 0 - for host in get_distcc_hosts(): - m = re.match(r'.*/(\d+)', host) - hosts += 1 - cpus += m and int(m.group(1)) or 1 - return hosts, cpus - - def mk_distcc_hosts(basename, range, num_cpus): - '''Generate a list of LL-internal machines to build on.''' - loc_entry, cpus = localhost() - hosts = [loc_entry] - dead = [] - stations = [s for s in xrange(range) if s not in dead] - random.shuffle(stations) - hosts += ['%s%d.lindenlab.com/%d,lzo' % (basename, s, num_cpus) for s in stations] - cpus += 2 * len(stations) - return ' '.join(hosts), cpus - - if job_count is None: - hosts, job_count = count_distcc_hosts() - hostname = socket.gethostname() - if hosts == 1: - if hostname.startswith('station'): - hosts, job_count = mk_distcc_hosts('station', 36, 2) - os.environ['DISTCC_HOSTS'] = hosts - if hostname.startswith('eniac'): - hosts, job_count = mk_distcc_hosts('eniac', 71, 2) - os.environ['DISTCC_HOSTS'] = hosts - if hostname.startswith('build'): - max_jobs = 6 - else: - max_jobs = 12 - if job_count > max_jobs: - job_count = max_jobs; - opts.extend(['-j', str(job_count)]) - - if targets: - targets = ' '.join(targets) - else: - targets = 'all' - - for d in self.build_dirs(): - cmd = 'make -C %r %s %s' % (d, ' '.join(opts), targets) - print 'Running %r' % cmd - self.run(cmd) - - -class DarwinSetup(UnixSetup): - def __init__(self): - super(DarwinSetup, self).__init__() - self.generator = 'Xcode' - - def os(self): - return 'darwin' - - def arch(self): - if self.universal == 'ON': - return 'universal' - else: - return UnixSetup.arch(self) - - def cmake_commandline(self, src_dir, build_dir, opts, simple): - args = dict( - dir=src_dir, - generator=self.generator, - opts=quote(opts), - standalone=self.standalone, - word_size=self.word_size, - unattended=self.unattended, - project_name=self.project_name, - universal=self.universal, - type=self.build_type.upper(), - ) - if self.universal == 'ON': - args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386;ppc\'' - #if simple: - # return 'cmake %(opts)s %(dir)r' % args - return ('cmake -G %(generator)r ' - '-DCMAKE_BUILD_TYPE:STRING=%(type)s ' - '-DSTANDALONE:BOOL=%(standalone)s ' - '-DUNATTENDED:BOOL=%(unattended)s ' - '-DWORD_SIZE:STRING=%(word_size)s ' - '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' - '%(universal)s ' - '%(opts)s %(dir)r' % args) - - def run_build(self, opts, targets): - cwd = getcwd() - if targets: - targets = ' '.join(['-target ' + repr(t) for t in targets]) - else: - targets = '' - cmd = ('xcodebuild -configuration %s %s %s | grep -v "^[[:space:]]*setenv" ; exit ${PIPESTATUS[0]}' % - (self.build_type, ' '.join(opts), targets)) - for d in self.build_dirs(): - try: - os.chdir(d) - print 'Running %r in %r' % (cmd, d) - self.run(cmd) - finally: - os.chdir(cwd) - - -class WindowsSetup(PlatformSetup): - gens = { - 'vc71' : { - 'gen' : r'Visual Studio 7 .NET 2003', - 'ver' : r'7.1' - }, - 'vc80' : { - 'gen' : r'Visual Studio 8 2005', - 'ver' : r'8.0' - }, - 'vc90' : { - 'gen' : r'Visual Studio 9 2008', - 'ver' : r'9.0' - } - } - gens['vs2003'] = gens['vc71'] - gens['vs2005'] = gens['vc80'] - gens['vs2008'] = gens['vc90'] - - search_path = r'C:\windows' - exe_suffixes = ('.exe', '.bat', '.com') - - def __init__(self): - super(WindowsSetup, self).__init__() - self._generator = None - self.incredibuild = False - - def _get_generator(self): - if self._generator is None: - for version in 'vc80 vc90 vc71'.split(): - if self.find_visual_studio(version): - self._generator = version - print 'Building with ', self.gens[version]['gen'] - break - else: - print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions' - for version in 'vc80 vc90 vc71'.split(): - if self.find_visual_studio_express(version): - self._generator = version - self.using_express = True - print 'Building with ', self.gens[version]['gen'] , "Express edition" - break - else: - print >> sys.stderr, 'Cannot find any Visual Studio installation' - sys.exit(1) - return self._generator - - def _set_generator(self, gen): - self._generator = gen - - generator = property(_get_generator, _set_generator) - - def os(self): - return 'win32' - - def build_dirs(self): - return ['build-' + self.generator] - - def cmake_commandline(self, src_dir, build_dir, opts, simple): - args = dict( - dir=src_dir, - generator=self.gens[self.generator.lower()]['gen'], - opts=quote(opts), - standalone=self.standalone, - unattended=self.unattended, - project_name=self.project_name, - word_size=self.word_size, - ) - #if simple: - # return 'cmake %(opts)s "%(dir)s"' % args - return ('cmake -G "%(generator)s" ' - '-DSTANDALONE:BOOL=%(standalone)s ' - '-DUNATTENDED:BOOL=%(unattended)s ' - '-DWORD_SIZE:STRING=%(word_size)s ' - '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' - '%(opts)s "%(dir)s"' % args) - - def get_HKLM_registry_value(self, key_str, value_str): - import _winreg - reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE) - key = _winreg.OpenKey(reg, key_str) - value = _winreg.QueryValueEx(key, value_str)[0] - print 'Found: %s' % value - return value - - def find_visual_studio(self, gen=None): - if gen is None: - gen = self._generator - gen = gen.lower() - value_str = (r'EnvironmentDirectory') - key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' % - self.gens[gen]['ver']) - print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' % - (key_str, value_str)) - try: - return self.get_HKLM_registry_value(key_str, value_str) - except WindowsError, err: - key_str = (r'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%s\Setup\VS' % - self.gens[gen]['ver']) - - try: - return self.get_HKLM_registry_value(key_str, value_str) - except: - print >> sys.stderr, "Didn't find ", self.gens[gen]['gen'] - - return '' - - def find_visual_studio_express(self, gen=None): - if gen is None: - gen = self._generator - gen = gen.lower() - try: - import _winreg - key_str = (r'SOFTWARE\Microsoft\VCEXpress\%s\Setup\VC' % - self.gens[gen]['ver']) - value_str = (r'ProductDir') - print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' % - (key_str, value_str)) - print key_str - - reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE) - key = _winreg.OpenKey(reg, key_str) - value = _winreg.QueryValueEx(key, value_str)[0]+"IDE" - print 'Found: %s' % value - return value - except WindowsError, err: - print >> sys.stderr, "Didn't find ", self.gens[gen]['gen'] - return '' - - def get_build_cmd(self): - if self.incredibuild: - config = self.build_type - if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0' ]: - config = '\"%s|Win32\"' % config - - executable = 'buildconsole' - cmd = "%(bin)s %(prj)s.sln /build /cfg=%(cfg)s" % {'prj': self.project_name, 'cfg': config, 'bin': executable} - return (executable, cmd) - - environment = self.find_visual_studio() - if environment == '': - environment = self.find_visual_studio_express() - if environment == '': - print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio installation." - else: - build_dirs=self.build_dirs(); - print >> sys.stderr, "\nSolution generation complete, it can can now be found in:", build_dirs[0] - print >> sys.stderr, "\nPlease see https://wiki.secondlife.com/wiki/Microsoft_Visual_Studio#Extra_steps_for_Visual_Studio_Express_editions for express specific information" - exit(0) - - # devenv.com is CLI friendly, devenv.exe... not so much. - executable = '%sdevenv.com' % (self.find_visual_studio(),) - cmd = ('"%s" %s.sln /build %s' % - (executable, self.project_name, self.build_type)) - return (executable, cmd) - - def run(self, command, name=None, retry_on=None, retries=1): - '''Run a program. If the program fails, raise an exception.''' - assert name is not None, 'On windows an executable path must be given in name. [DEV-44838]' - if os.path.isfile(name): - path = name - else: - path = self.find_in_path(name)[0] - while retries: - retries = retries - 1 - print "develop.py tries to run:", command - ret = subprocess.call(command, executable=path) - print "got ret", ret, "from", command - if ret == 0: - break - else: - error = 'exited with status %d' % ret - if retry_on is not None and retry_on == ret: - print "Retrying... the command %r %s" % (name, error) - else: - raise CommandError('the command %r %s' % (name, error)) - - def run_cmake(self, args=[]): - '''Override to add the vstool.exe call after running cmake.''' - PlatformSetup.run_cmake(self, args) - if self.unattended == 'OFF': - if self.using_express == False: - self.run_vstool() - - def run_vstool(self): - for build_dir in self.build_dirs(): - stamp = os.path.join(build_dir, 'vstool.txt') - try: - prev_build = open(stamp).read().strip() - except IOError: - prev_build = '' - if prev_build == self.build_type: - # Only run vstool if the build type has changed. - continue - executable = os.path.join('tools','vstool','VSTool.exe') - vstool_cmd = (executable + - ' --solution ' + - os.path.join(build_dir,'SecondLife.sln') + - ' --config ' + self.build_type + - ' --startup secondlife-bin') - print 'Running %r in %r' % (vstool_cmd, getcwd()) - self.run(vstool_cmd, name=executable) - print >> open(stamp, 'w'), self.build_type - - def run_build(self, opts, targets): - for t in targets: - assert t.strip(), 'Unexpected empty targets: ' + repr(targets) - cwd = getcwd() - executable, build_cmd = self.get_build_cmd() - - for d in self.build_dirs(): - try: - os.chdir(d) - if targets: - for t in targets: - cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts)) - print 'Running %r in %r' % (cmd, d) - self.run(cmd, name=executable, retry_on=4, retries=3) - else: - cmd = '%s %s' % (build_cmd, ' '.join(opts)) - print 'Running %r in %r' % (cmd, d) - self.run(cmd, name=executable, retry_on=4, retries=3) - finally: - os.chdir(cwd) - -class CygwinSetup(WindowsSetup): - def __init__(self): - super(CygwinSetup, self).__init__() - self.generator = 'vc80' - - def cmake_commandline(self, src_dir, build_dir, opts, simple): - dos_dir = commands.getoutput("cygpath -w %s" % src_dir) - args = dict( - dir=dos_dir, - generator=self.gens[self.generator.lower()]['gen'], - opts=quote(opts), - standalone=self.standalone, - unattended=self.unattended, - project_name=self.project_name, - word_size=self.word_size, - ) - #if simple: - # return 'cmake %(opts)s "%(dir)s"' % args - return ('cmake -G "%(generator)s" ' - '-DUNATTENDED:BOOl=%(unattended)s ' - '-DSTANDALONE:BOOL=%(standalone)s ' - '-DWORD_SIZE:STRING=%(word_size)s ' - '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' - '%(opts)s "%(dir)s"' % args) - -setup_platform = { - 'darwin': DarwinSetup, - 'linux2': LinuxSetup, - 'win32' : WindowsSetup, - 'cygwin' : CygwinSetup - } - - -usage_msg = ''' -Usage: develop.py [options] [command [command-options]] - -Options: - -h | --help print this help message - --standalone build standalone, without Linden prebuild libraries - --unattended build unattended, do not invoke any tools requiring - a human response - --universal build a universal binary on Mac OS X (unsupported) - -t | --type=NAME build type ("Debug", "Release", or "RelWithDebInfo") - -m32 | -m64 build architecture (32-bit or 64-bit) - -N | --no-distcc disable use of distcc - -G | --generator=NAME generator name - Windows: VC71 or VS2003 (default), VC80 (VS2005) or - VC90 (VS2008) - Mac OS X: Xcode (default), Unix Makefiles - Linux: Unix Makefiles (default), KDevelop3 - -p | --project=NAME set the root project name. (Doesn't effect makefiles) - -Commands: - build configure and build default target - clean delete all build directories, does not affect sources - configure configure project by running cmake (default if none given) - printbuilddirs print the build directory that will be used - -Command-options for "configure": - We use cmake variables to change the build configuration. - -DSERVER:BOOL=OFF Don't configure simulator/dataserver/etc - -DVIEWER:BOOL=OFF Don't configure the viewer - -DPACKAGE:BOOL=ON Create "package" target to make installers - -DLOCALIZESETUP:BOOL=ON Create one win_setup target per supported language - -Examples: - Set up a viewer-only project for your system: - develop.py configure -DSERVER:BOOL=OFF - - Set up a Visual Studio 2005 project with "package" target: - develop.py -G vc80 configure -DPACKAGE:BOOL=ON -''' - -def main(arguments): - setup = setup_platform[sys.platform]() - try: - opts, args = getopt.getopt( - arguments, - '?hNt:p:G:m:', - ['help', 'standalone', 'no-distcc', 'unattended', 'universal', 'type=', 'incredibuild', 'generator=', 'project=']) - except getopt.GetoptError, err: - print >> sys.stderr, 'Error:', err - print >> sys.stderr, """ -Note: You must pass -D options to cmake after the "configure" command -For example: develop.py configure -DSERVER:BOOL=OFF""" - print >> sys.stderr, usage_msg.strip() - sys.exit(1) - - for o, a in opts: - if o in ('-?', '-h', '--help'): - print usage_msg.strip() - sys.exit(0) - elif o in ('--standalone',): - setup.standalone = 'ON' - elif o in ('--unattended',): - setup.unattended = 'ON' - elif o in ('--universal',): - setup.universal = 'ON' - elif o in ('-m',): - if a in ('32', '64'): - setup.word_size = int(a) - else: - print >> sys.stderr, 'Error: unknown word size', repr(a) - print >> sys.stderr, 'Supported word sizes: 32, 64' - sys.exit(1) - elif o in ('-t', '--type'): - try: - setup.build_type = setup.build_types[a.lower()] - except KeyError: - print >> sys.stderr, 'Error: unknown build type', repr(a) - print >> sys.stderr, 'Supported build types:' - types = setup.build_types.values() - types.sort() - for t in types: - print ' ', t - sys.exit(1) - elif o in ('-G', '--generator'): - setup.generator = a - elif o in ('-N', '--no-distcc'): - setup.distcc = False - elif o in ('-p', '--project'): - setup.project_name = a - elif o in ('--incredibuild'): - setup.incredibuild = True - else: - print >> sys.stderr, 'INTERNAL ERROR: unhandled option', repr(o) - sys.exit(1) - if not args: - setup.run_cmake() - return - try: - cmd = args.pop(0) - if cmd in ('cmake', 'configure'): - setup.run_cmake(args) - elif cmd == 'build': - if os.getenv('DISTCC_DIR') is None: - distcc_dir = os.path.join(getcwd(), '.distcc') - if not os.path.exists(distcc_dir): - os.mkdir(distcc_dir) - print "setting DISTCC_DIR to %s" % distcc_dir - os.environ['DISTCC_DIR'] = distcc_dir - else: - print "DISTCC_DIR is set to %s" % os.getenv('DISTCC_DIR') - for d in setup.build_dirs(): - if not os.path.exists(d): - raise CommandError('run "develop.py cmake" first') - setup.run_cmake() - opts, targets = setup.parse_build_opts(args) - setup.run_build(opts, targets) - elif cmd == 'clean': - if args: - raise CommandError('clean takes no arguments') - setup.cleanup() - elif cmd == 'printbuilddirs': - for d in setup.build_dirs(): - print >> sys.stdout, d - else: - print >> sys.stderr, 'Error: unknown subcommand', repr(cmd) - print >> sys.stderr, "(run 'develop.py --help' for help)" - sys.exit(1) - except getopt.GetoptError, err: - print >> sys.stderr, 'Error with %r subcommand: %s' % (cmd, err) - sys.exit(1) - - -if __name__ == '__main__': - try: - main(sys.argv[1:]) - except CommandError, err: - print >> sys.stderr, 'Error:', err - sys.exit(1) diff --git a/indra/integration_tests/CMakeLists.txt b/indra/integration_tests/CMakeLists.txt index 5935f23fe9..ced2b3dbcf 100644 --- a/indra/integration_tests/CMakeLists.txt +++ b/indra/integration_tests/CMakeLists.txt @@ -1,4 +1,8 @@ # -*- cmake -*- - add_subdirectory(llui_libtest) -add_subdirectory(llimage_libtest) +IF (LLIMAGE_LIBTEST) + MESSAGE(STATUS "Build llimage_libtest") + add_subdirectory(llimage_libtest) +ELSE (LLIMAGE_LIBTEST) + MESSAGE(STATUS "Skip llimage_libtest") +ENDIF (LLIMAGE_LIBTEST) diff --git a/indra/integration_tests/llimage_libtest/CMakeLists.txt b/indra/integration_tests/llimage_libtest/CMakeLists.txt index f59440be6b..a687e60610 100644 --- a/indra/integration_tests/llimage_libtest/CMakeLists.txt +++ b/indra/integration_tests/llimage_libtest/CMakeLists.txt @@ -6,19 +6,15 @@ project (llimage_libtest) include(00-Common) include(LLCommon) -include(Linking) -include(LLSharedLibs) include(LLImage) include(LLImageJ2COJ) include(LLKDU) -include(LLMath) include(LLVFS) include_directories( ${LLCOMMON_INCLUDE_DIRS} ${LLVFS_INCLUDE_DIRS} ${LLIMAGE_INCLUDE_DIRS} - ${LLMATH_INCLUDE_DIRS} ) set(llimage_libtest_SOURCE_FILES @@ -53,9 +49,9 @@ if (DARWIN) find_library(COREFOUNDATION_LIBRARY CoreFoundation) set(OS_LIBRARIES ${COREFOUNDATION_LIBRARY}) elseif (WINDOWS) -# set(OS_LIBRARIES) + set(OS_LIBRARIES) elseif (LINUX) -# set(OS_LIBRARIES) + set(OS_LIBRARIES) else (DARWIN) message(FATAL_ERROR "Unknown platform") endif (DARWIN) @@ -102,20 +98,20 @@ add_custom_command(TARGET llimage_libtest POST_BUILD if (DARWIN) # Copy the required libraries to the package app add_custom_command(TARGET llimage_libtest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libapr-1.0.3.7.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR} - DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libapr-1.0.3.7.dylib + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libapr-1.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR} + DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libapr-1.0.dylib ) - add_custom_command(TARGET llimage_libtest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libaprutil-1.0.3.8.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR} - DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libaprutil-1.0.3.8.dylib + add_custom_command(TARGET llimage_libtest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libaprutil-1.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR} + DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libaprutil-1.0.dylib ) add_custom_command(TARGET llimage_libtest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexception_handler.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR} - DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexception_handler.dylib + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexception_handler.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR} + DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexception_handler.dylib ) add_custom_command(TARGET llimage_libtest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexpat.0.5.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR} - DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexpat.0.5.0.dylib + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexpat.1.5.2.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR} + DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexpat.1.5.2.dylib ) endif (DARWIN) @@ -127,5 +123,3 @@ endif (WINDOWS) # *NOTE: This could be removed, or only built by TeamCity, if the build # and link times become too long. add_dependencies(viewer llimage_libtest) - -ll_deploy_sharedlibs_command(llimage_libtest) diff --git a/indra/integration_tests/llui_libtest/CMakeLists.txt b/indra/integration_tests/llui_libtest/CMakeLists.txt index e0772e55ca..df47167154 100644 --- a/indra/integration_tests/llui_libtest/CMakeLists.txt +++ b/indra/integration_tests/llui_libtest/CMakeLists.txt @@ -91,14 +91,14 @@ if (WINDOWS) # Copy over OpenJPEG.dll # *NOTE: On Windows with VS2005, only the first comment prints set(OPENJPEG_RELEASE - "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/openjpeg.dll") + "${ARCH_PREBUILT_DIRS_RELEASE}/openjpeg.dll") add_custom_command( TARGET llui_libtest POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${OPENJPEG_RELEASE} ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Copying OpenJPEG DLLs to binary directory" ) set(OPENJPEG_DEBUG - "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/openjpegd.dll") + "${ARCH_PREBUILT_DIRS_DEBUG}/openjpegd.dll") add_custom_command( TARGET llui_libtest POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${OPENJPEG_DEBUG} ${CMAKE_CURRENT_BINARY_DIR} diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt index 21ec622819..632e5d46e3 100644 --- a/indra/llaudio/CMakeLists.txt +++ b/indra/llaudio/CMakeLists.txt @@ -24,6 +24,7 @@ include_directories( ${VORBIS_INCLUDE_DIRS} ${OPENAL_LIB_INCLUDE_DIRS} ${FREEAULT_LIB_INCLUDE_DIRS} + ${FMOD_INCLUDE_DIR} ) set(llaudio_SOURCE_FILES diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 01dfd03c18..f0b44f97d2 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -680,4 +680,10 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid) return FALSE; } - +#if LL_DARWIN || LL_LINUX +// HACK: to fool the compiler into not emitting unused warnings. +namespace { + const ov_callbacks callback_array[4] = {OV_CALLBACKS_DEFAULT, OV_CALLBACKS_NOCLOSE, OV_CALLBACKS_STREAMONLY, + OV_CALLBACKS_STREAMONLY_NOCLOSE}; +} +#endif diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp index e352045291..34a057dcc0 100644 --- a/indra/llaudio/llaudioengine_openal.cpp +++ b/indra/llaudio/llaudioengine_openal.cpp @@ -32,6 +32,8 @@ #include "lllistener_openal.h" +const float LLAudioEngine_OpenAL::WIND_BUFFER_SIZE_SEC = 0.05f; + LLAudioEngine_OpenAL::LLAudioEngine_OpenAL() : mWindGen(NULL), diff --git a/indra/llaudio/llaudioengine_openal.h b/indra/llaudio/llaudioengine_openal.h index 258febb1a8..6639d9dfe6 100644 --- a/indra/llaudio/llaudioengine_openal.h +++ b/indra/llaudio/llaudioengine_openal.h @@ -67,7 +67,7 @@ class LLAudioEngine_OpenAL : public LLAudioEngine int mNumEmptyWindALBuffers; static const int MAX_NUM_WIND_BUFFERS = 80; - static const float WIND_BUFFER_SIZE_SEC = 0.05f; // 1/20th sec + static const float WIND_BUFFER_SIZE_SEC; // 1/20th sec }; class LLAudioChannelOpenAL : public LLAudioChannel diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 9342a22d46..6439ac3349 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -12,6 +12,7 @@ include(LLSharedLibs) include(GoogleBreakpad) include(GooglePerfTools) include(Copy3rdPartyLibs) +include(ZLIB) include_directories( ${EXPAT_INCLUDE_DIRS} diff --git a/indra/llcommon/tests/lldependencies_test.cpp b/indra/llcommon/tests/lldependencies_test.cpp index e40743ccf7..5395d785b6 100644 --- a/indra/llcommon/tests/lldependencies_test.cpp +++ b/indra/llcommon/tests/lldependencies_test.cpp @@ -258,10 +258,10 @@ namespace tut ++const_iterator; ensure_equals(const_iterator->first, "def"); ensure_equals(const_iterator->second, 2); - NameIndexDeps::node_range node_range(nideps.get_node_range()); - ensure_equals(instance_from_range<std::vector<int> >(node_range), make< std::vector<int> >(list_of(1)(2)(3))); - *node_range.begin() = 0; - *node_range.begin() = 1; +// NameIndexDeps::node_range node_range(nideps.get_node_range()); +// ensure_equals(instance_from_range<std::vector<int> >(node_range), make< std::vector<int> >(list_of(1)(2)(3))); +// *node_range.begin() = 0; +// *node_range.begin() = 1; NameIndexDeps::const_node_range const_node_range(const_nideps.get_node_range()); ensure_equals(instance_from_range<std::vector<int> >(const_node_range), make< std::vector<int> >(list_of(1)(2)(3))); NameIndexDeps::const_key_range const_key_range(const_nideps.get_key_range()); @@ -278,8 +278,8 @@ namespace tut def); ensure_equals(instance_from_range<StringList>(const_nideps.get_after_range(const_nideps.get_range().begin())), def); - ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_node_range().begin())), - def); +// ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_node_range().begin())), +// def); ensure_equals(instance_from_range<StringList>(const_nideps.get_after_range(const_nideps.get_node_range().begin())), def); ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_key_range().begin())), diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp index 1ef8fc9712..09a20231de 100644 --- a/indra/llcommon/tests/llerror_test.cpp +++ b/indra/llcommon/tests/llerror_test.cpp @@ -48,7 +48,10 @@ namespace { static bool fatalWasCalled; void fatalCall(const std::string&) { fatalWasCalled = true; } +} +namespace tut +{ class TestRecorder : public LLError::Recorder { public: @@ -56,7 +59,7 @@ namespace ~TestRecorder() { LLError::removeRecorder(this); } void recordMessage(LLError::ELevel level, - const std::string& message) + const std::string& message) { mMessages.push_back(message); } @@ -66,12 +69,12 @@ namespace void setWantsTime(bool t) { mWantsTime = t; } bool wantsTime() { return mWantsTime; } - + std::string message(int n) { std::ostringstream test_name; test_name << "testing message " << n << ", not enough messages"; - + tut::ensure(test_name.str(), n < countMessages()); return mMessages[n]; } @@ -82,10 +85,7 @@ namespace bool mWantsTime; }; -} - -namespace tut -{ + struct ErrorTestData { TestRecorder mRecorder; @@ -381,7 +381,7 @@ namespace } typedef std::string (*LogFromFunction)(bool); - void testLogName(TestRecorder& recorder, LogFromFunction f, + void testLogName(tut::TestRecorder& recorder, LogFromFunction f, const std::string& class_name = "") { recorder.clearMessages(); diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 770443da1d..7b4c7d6a48 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -452,7 +452,7 @@ namespace tut checkRoundTrip(msg + " nested arrays", v); v = LLSD::emptyMap(); - fillmap(v, 10, 6); // 10^6 maps + fillmap(v, 10, 3); // 10^6 maps checkRoundTrip(msg + " many nested maps", v); } diff --git a/indra/llkdu/CMakeLists.txt b/indra/llkdu/CMakeLists.txt index 7ed1c6c694..046629b514 100644 --- a/indra/llkdu/CMakeLists.txt +++ b/indra/llkdu/CMakeLists.txt @@ -19,6 +19,7 @@ include_directories( ${LLCOMMON_INCLUDE_DIRS} ${LLIMAGE_INCLUDE_DIRS} ${KDU_INCLUDE_DIR} + ${LLKDU_INCLUDE_DIRS} ${LLMATH_INCLUDE_DIRS} ) @@ -49,6 +50,15 @@ if (USE_KDU) SET(llkdu_TEST_SOURCE_FILES llimagej2ckdu.cpp ) + SET(llkdu_test_additional_HEADER_FILES + llimagej2ckdu.h + llkdumem.h + lltut.h + ) + SET(llkdu_test_additional_INCLUDE_DIRS + ${KDU_INCLUDE_DIR} + ${LLKDU_INCLUDE_DIRS} + ) LL_ADD_PROJECT_UNIT_TESTS(llkdu "${llkdu_TEST_SOURCE_FILES}") endif (LL_TESTS) diff --git a/indra/llkdu/tests/llimagej2ckdu_test.cpp b/indra/llkdu/tests/llimagej2ckdu_test.cpp index 1ccee4bb64..7ac24a969a 100644 --- a/indra/llkdu/tests/llimagej2ckdu_test.cpp +++ b/indra/llkdu/tests/llimagej2ckdu_test.cpp @@ -27,10 +27,10 @@ #include "linden_common.h" // Class to test -#include "../llimagej2ckdu.h" -#include "../llkdumem.h" +#include "llimagej2ckdu.h" +#include "llkdumem.h" // Tut header -#include "../test/lltut.h" +#include "lltut.h" // ------------------------------------------------------------------------------------------- // Stubbing: Declarations required to link and run the class being tested diff --git a/indra/llmath/tests/m3math_test.cpp b/indra/llmath/tests/m3math_test.cpp index e4d31996a3..1ca2b005d9 100644 --- a/indra/llmath/tests/m3math_test.cpp +++ b/indra/llmath/tests/m3math_test.cpp @@ -37,6 +37,16 @@ #include "../test/lltut.h" +#if LL_WINDOWS +// disable unreachable code warnings caused by usage of skip. +#pragma warning(disable: 4702) +#endif + +#if LL_WINDOWS +// disable unreachable code warnings caused by usage of skip. +#pragma warning(disable: 4702) +#endif + namespace tut { struct m3math_test @@ -277,19 +287,21 @@ namespace tut LLVector3 llvec2(1, 2, 0); LLVector3 llvec3(2, 4, 2); + skip("This test fails depending on architecture. Need to fix comparison operation, is_approx_equal, to work on more than one platform."); + llmat_obj.setRows(llvec1, llvec2, llvec3); llmat_obj.orthogonalize(); ensure("LLMatrix3::orthogonalize failed ", - is_approx_equal(0.19611613f, llmat_obj.mMatrix[0][0]) && + is_approx_equal(0.19611614f, llmat_obj.mMatrix[0][0]) && is_approx_equal(0.78446454f, llmat_obj.mMatrix[0][1]) && - is_approx_equal(0.58834839f, llmat_obj.mMatrix[0][2]) && - is_approx_equal(0.47628206f, llmat_obj.mMatrix[1][0]) && - is_approx_equal(0.44826555f, llmat_obj.mMatrix[1][1]) && - is_approx_equal(-0.75644791f, llmat_obj.mMatrix[1][2]) && - is_approx_equal(-0.85714287f, llmat_obj.mMatrix[2][0]) && + is_approx_equal(0.58834841f, llmat_obj.mMatrix[0][2]) && + is_approx_equal(0.47628204f, llmat_obj.mMatrix[1][0]) && + is_approx_equal(0.44826545f, llmat_obj.mMatrix[1][1]) && + is_approx_equal(-0.75644795f, llmat_obj.mMatrix[1][2]) && + is_approx_equal(-0.85714286f, llmat_obj.mMatrix[2][0]) && is_approx_equal(0.42857143f, llmat_obj.mMatrix[2][1]) && - is_approx_equal(-0.28571427f, llmat_obj.mMatrix[2][2])); + is_approx_equal(-0.28571429f, llmat_obj.mMatrix[2][2])); } //test case for adjointTranspose() fn. diff --git a/indra/llmath/v3math.cpp b/indra/llmath/v3math.cpp index fd08df02d8..18b15e08c4 100644 --- a/indra/llmath/v3math.cpp +++ b/indra/llmath/v3math.cpp @@ -134,6 +134,21 @@ BOOL LLVector3::clampLength( F32 length_limit ) return changed; } +BOOL LLVector3::clamp(const LLVector3 &min_vec, const LLVector3 &max_vec) +{ + BOOL ret = FALSE; + + if (mV[0] < min_vec[0]) { mV[0] = min_vec[0]; ret = TRUE; } + if (mV[1] < min_vec[1]) { mV[1] = min_vec[1]; ret = TRUE; } + if (mV[2] < min_vec[2]) { mV[2] = min_vec[2]; ret = TRUE; } + + if (mV[0] > max_vec[0]) { mV[0] = max_vec[0]; ret = TRUE; } + if (mV[1] > max_vec[1]) { mV[1] = max_vec[1]; ret = TRUE; } + if (mV[2] > max_vec[2]) { mV[2] = max_vec[2]; ret = TRUE; } + + return ret; +} + // Sets all values to absolute value of their original values // Returns TRUE if data changed diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h index ef002fe9f2..4b3efe7394 100644 --- a/indra/llmath/v3math.h +++ b/indra/llmath/v3math.h @@ -69,6 +69,7 @@ class LLVector3 inline BOOL isFinite() const; // checks to see if all values of LLVector3 are finite BOOL clamp(F32 min, F32 max); // Clamps all values to (min,max), returns TRUE if data changed + BOOL clamp(const LLVector3 &min_vec, const LLVector3 &max_vec); // Scales vector by another vector BOOL clampLength( F32 length_limit ); // Scales vector to limit length to a value void quantize16(F32 lowerxy, F32 upperxy, F32 lowerz, F32 upperz); // changes the vector to reflect quatization diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt index 1cad0f6d22..c5f82cf052 100644 --- a/indra/llmessage/CMakeLists.txt +++ b/indra/llmessage/CMakeLists.txt @@ -10,7 +10,9 @@ include(LLMath) include(LLMessage) include(LLVFS) include(LLAddBuildTest) +include(Python) include(Tut) +include(Python) include_directories (${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp index 705473b0c0..eadf83c428 100644 --- a/indra/llmessage/tests/llhost_test.cpp +++ b/indra/llmessage/tests/llhost_test.cpp @@ -151,6 +151,7 @@ namespace tut template<> template<> void host_object::test<9>() { + skip("this test is flaky, but we should figure out why..."); // skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\""); std::string hostStr = "lindenlab.com"; LLHost host; diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp index b84e696e2d..91c8a37022 100644 --- a/indra/llrender/llfontfreetype.cpp +++ b/indra/llrender/llfontfreetype.cpp @@ -482,7 +482,7 @@ void LLFontFreetype::renderGlyph(U32 glyph_index) const if (mFTFace == NULL) return; - int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT ); + int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_FORCE_AUTOHINT ); llassert(!error); error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode); diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp index 095447ec66..ac2412c928 100644 --- a/indra/llui/tests/llurlentry_stub.cpp +++ b/indra/llui/tests/llurlentry_stub.cpp @@ -193,8 +193,8 @@ LLFontGL* LLFontGL::getFontDefault() return NULL; } -char const* const _PREHASH_AgentData = 0; // never dereferenced during this test -char const* const _PREHASH_AgentID = 0; // never dereferenced during this test +char const* const _PREHASH_AgentData = (char *)"AgentData"; +char const* const _PREHASH_AgentID = (char *)"AgentID"; LLHost LLHost::invalid(INVALID_PORT,INVALID_HOST_IP_ADDRESS); diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp index 33718e520d..4e2a55f4b3 100644 --- a/indra/llvfs/lldir_win32.cpp +++ b/indra/llvfs/lldir_win32.cpp @@ -81,10 +81,11 @@ LLDir_Win32::LLDir_Win32() // fprintf(stderr, "mTempDir = <%s>",mTempDir); -#if 1 - // Don't use the real app path for now, as we'll have to add parsing to detect if - // we're in a developer tree, which has a different structure from the installed product. + // Set working directory, for LLDir::getWorkingDir() + GetCurrentDirectory(MAX_PATH, w_str); + mWorkingDir = utf16str_to_utf8str(llutf16string(w_str)); + // Set the executable directory S32 size = GetModuleFileName(NULL, w_str, MAX_PATH); if (size) { @@ -100,32 +101,35 @@ LLDir_Win32::LLDir_Win32() { mExecutableFilename = mExecutablePathAndName; } - GetCurrentDirectory(MAX_PATH, w_str); - mWorkingDir = utf16str_to_utf8str(llutf16string(w_str)); } else { fprintf(stderr, "Couldn't get APP path, assuming current directory!"); - GetCurrentDirectory(MAX_PATH, w_str); - mExecutableDir = utf16str_to_utf8str(llutf16string(w_str)); + mExecutableDir = mWorkingDir; // Assume it's the current directory } -#else - GetCurrentDirectory(MAX_PATH, w_str); - mExecutableDir = utf16str_to_utf8str(llutf16string(w_str)); -#endif - if (mExecutableDir.find("indra") == std::string::npos) + // mAppRODataDir = "."; + + // Determine the location of the App-Read-Only-Data + // Try the working directory then the exe's dir. + mAppRODataDir = mWorkingDir; + + +// if (mExecutableDir.find("indra") == std::string::npos) + + // *NOTE:Mani - It is a mistake to put viewer specific code in + // the LLDir implementation. The references to 'skins' and + // 'llplugin' need to go somewhere else. + // alas... this also gets called during static initialization + // time due to the construction of gDirUtil in lldir.cpp. + if(! LLFile::isdir(mAppRODataDir + mDirDelimiter + "skins")) { - // Running from installed directory. Make sure current - // directory isn't something crazy (e.g. if invoking from - // command line). - SetCurrentDirectory(utf8str_to_utf16str(mExecutableDir).c_str()); - GetCurrentDirectory(MAX_PATH, w_str); - mWorkingDir = utf16str_to_utf8str(llutf16string(w_str)); + // What? No skins in the working dir? + // Try the executable's directory. + mAppRODataDir = mExecutableDir; } - mAppRODataDir = mWorkingDir; llinfos << "mAppRODataDir = " << mAppRODataDir << llendl; @@ -249,7 +253,7 @@ BOOL LLDir_Win32::getNextFileInDir(const std::string &dirname, const std::string if (pathname != mCurrentDir) { // different dir specified, close old search - if (mCurrentDir[0]) + if (!mCurrentDir.empty()) { FindClose(mDirSearch_h); } diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp new file mode 100644 index 0000000000..5536ed8f69 --- /dev/null +++ b/indra/llvfs/lldiriterator.cpp @@ -0,0 +1,203 @@ +/** + * @file lldiriterator.cpp + * @brief Iterator through directory entries matching the search pattern. + * + * $LicenseInfo:firstyear=2010&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 "lldiriterator.h" + +#include <boost/filesystem.hpp> +#include <boost/regex.hpp> + +namespace fs = boost::filesystem; + +static std::string glob_to_regex(const std::string& glob); + +class LLDirIterator::Impl +{ +public: + Impl(const std::string &dirname, const std::string &mask); + ~Impl(); + + bool next(std::string &fname); + +private: + boost::regex mFilterExp; + fs::directory_iterator mIter; + bool mIsValid; +}; + +LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask) + : mIsValid(false) +{ + fs::path dir_path(dirname); + + // Check if path exists. + if (!fs::exists(dir_path)) + { + llerrs << "Invalid path: \"" << dir_path.string() << "\"" << llendl; + return; + } + + // Initialize the directory iterator for the given path. + try + { + mIter = fs::directory_iterator(dir_path); + } + catch (fs::basic_filesystem_error<fs::path>& e) + { + llerrs << e.what() << llendl; + return; + } + + // Convert the glob mask to a regular expression + std::string exp = glob_to_regex(mask); + + // Initialize boost::regex with the expression converted from + // the glob mask. + // An exception is thrown if the expression is not valid. + try + { + mFilterExp.assign(exp); + } + catch (boost::regex_error& e) + { + llerrs << "\"" << exp << "\" is not a valid regular expression: " + << e.what() << llendl; + return; + } + + mIsValid = true; +} + +LLDirIterator::Impl::~Impl() +{ +} + +bool LLDirIterator::Impl::next(std::string &fname) +{ + fname = ""; + + if (!mIsValid) + { + llerrs << "The iterator is not correctly initialized." << llendl; + return false; + } + + fs::directory_iterator end_itr; // default construction yields past-the-end + bool found = false; + while (mIter != end_itr && !found) + { + boost::smatch match; + std::string name = mIter->path().filename(); + if (found = boost::regex_match(name, match, mFilterExp)) + { + fname = name; + } + + ++mIter; + } + + return found; +} + +std::string glob_to_regex(const std::string& glob) +{ + std::string regex; + regex.reserve(glob.size()<<1); + S32 braces = 0; + bool escaped = false; + bool square_brace_open = false; + + for (std::string::const_iterator i = glob.begin(); i != glob.end(); ++i) + { + char c = *i; + + switch (c) + { + case '.': + regex+="\\."; + break; + case '*': + if (glob.begin() == i) + { + regex+="[^.].*"; + } + else + { + regex+= escaped ? "*" : ".*"; + } + break; + case '?': + regex+= escaped ? '?' : '.'; + break; + case '{': + braces++; + regex+='('; + break; + case '}': + if (!braces) + { + llerrs << "glob_to_regex: Closing brace without an equivalent opening brace: " << glob << llendl; + } + + regex+=')'; + braces--; + break; + case ',': + regex+= braces ? '|' : c; + break; + case '!': + regex+= square_brace_open ? '^' : c; + break; + default: + regex+=c; + break; + } + + escaped = ('\\' == c); + square_brace_open = ('[' == c); + } + + if (braces) + { + llerrs << "glob_to_regex: Unterminated brace expression: " << glob << llendl; + } + + return regex; +} + +LLDirIterator::LLDirIterator(const std::string &dirname, const std::string &mask) +{ + mImpl = new Impl(dirname, mask); +} + +LLDirIterator::~LLDirIterator() +{ + delete mImpl; +} + +bool LLDirIterator::next(std::string &fname) +{ + return mImpl->next(fname); +} diff --git a/indra/llvfs/lldiriterator.h b/indra/llvfs/lldiriterator.h new file mode 100644 index 0000000000..0b48be41b3 --- /dev/null +++ b/indra/llvfs/lldiriterator.h @@ -0,0 +1,87 @@ +/** + * @file lldiriterator.h + * @brief Iterator through directory entries matching the search pattern. + * + * $LicenseInfo:firstyear=2010&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$ + */ + +#ifndef LL_LLDIRITERATOR_H +#define LL_LLDIRITERATOR_H + +#include "linden_common.h" + +/** + * Class LLDirIterator + * + * Iterates through directory entries matching the search pattern. + */ +class LLDirIterator +{ +public: + /** + * Constructs LLDirIterator object to search for glob pattern + * matches in a directory. + * + * @param dirname - name of a directory to search in. + * @param mask - search pattern, a glob expression + * + * Wildcards supported in glob expressions: + * -------------------------------------------------------------- + * | Wildcard | Matches | + * -------------------------------------------------------------- + * | * |zero or more characters | + * | ? |exactly one character | + * | [abcde] |exactly one character listed | + * | [a-e] |exactly one character in the given range | + * | [!abcde] |any character that is not listed | + * | [!a-e] |any character that is not in the given range | + * | {abc,xyz} |exactly one entire word in the options given | + * -------------------------------------------------------------- + */ + LLDirIterator(const std::string &dirname, const std::string &mask); + + ~LLDirIterator(); + + /** + * Searches for the next directory entry matching the glob mask + * specified upon iterator construction. + * Returns true if a match is found, sets fname + * parameter to the name of the matched directory entry and + * increments the iterator position. + * + * Typical usage: + * <code> + * LLDirIterator iter(directory, pattern); + * if ( iter.next(scanResult) ) + * </code> + * + * @param fname - name of the matched directory entry. + * @return true if a match is found, false otherwise. + */ + bool next(std::string &fname); + +protected: + class Impl; + Impl* mImpl; +}; + +#endif //LL_LLDIRITERATOR_H diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt index 4d2677fd91..9d174ef1cd 100644 --- a/indra/llwindow/CMakeLists.txt +++ b/indra/llwindow/CMakeLists.txt @@ -30,6 +30,7 @@ include_directories( ${LLVFS_INCLUDE_DIRS} ${LLWINDOW_INCLUDE_DIRS} ${LLXML_INCLUDE_DIRS} + ${DIRECTX_INCLUDE_DIR} ) set(llwindow_SOURCE_FILES diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index 8fe9f5ed29..188c9e1950 100644 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -8,8 +8,11 @@ FS (f|F) %n 4000 %p 5000 +%top { + #include "linden_common.h" +} + %{ -#include "linden_common.h" // Deal with the fact that lex/yacc generates unreachable code #ifdef LL_WINDOWS #pragma warning (disable : 4018) // warning C4018: signed/unsigned mismatch diff --git a/indra/mac_updater/CMakeLists.txt b/indra/mac_updater/CMakeLists.txt index a4a6b50c6c..00dcedecaa 100644 --- a/indra/mac_updater/CMakeLists.txt +++ b/indra/mac_updater/CMakeLists.txt @@ -5,6 +5,7 @@ project(mac_updater) include(00-Common) include(OpenSSL) include(CURL) +include(CARes) include(LLCommon) include(LLVFS) include(Linking) @@ -12,6 +13,8 @@ include(Linking) include_directories( ${LLCOMMON_INCLUDE_DIRS} ${LLVFS_INCLUDE_DIRS} + ${CURL_INCLUDE_DIRS} + ${CARES_INCLUDE_DIRS} ) set(mac_updater_SOURCE_FILES @@ -53,6 +56,7 @@ target_link_libraries(mac-updater ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARIES} ${CURL_LIBRARIES} + ${CARES_LIBRARIES} ${LLCOMMON_LIBRARIES} ) diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp index 5d19e8a889..809f66cb1d 100644 --- a/indra/mac_updater/mac_updater.cpp +++ b/indra/mac_updater/mac_updater.cpp @@ -1230,20 +1230,14 @@ void *updatethreadproc(void*) // Move work directory to the trash if(tempDir[0] != 0) { -// chdir("/"); -// FSDeleteObjects(tempDirRef); - llinfos << "Moving work directory to the trash." << llendl; - err = FSMoveObject(&tempDirRef, &trashFolderRef, NULL); + FSRef trashRef; + OSStatus err = FSMoveObjectToTrashSync(&tempDirRef, &trashRef, 0); if(err != noErr) { llwarns << "failed to move files to trash, (error code " << err << ")" << llendl; } - -// snprintf(temp, sizeof(temp), "rm -rf '%s'", tempDir); -// printf("%s\n", temp); -// system(temp); } if(!gCancelled && !gFailure && (target[0] != 0)) diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt index 3b1f679540..b36291f0e8 100644 --- a/indra/media_plugins/webkit/CMakeLists.txt +++ b/indra/media_plugins/webkit/CMakeLists.txt @@ -121,8 +121,8 @@ if (DARWIN) add_custom_command( TARGET media_plugin_webkit POST_BUILD # OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ - DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib + COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ + DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ) endif (DARWIN) diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index d6f8ae3e16..e24ee6629e 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -1231,7 +1231,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) std::string url = message_in.getValue("url"); if ( 404 == code ) // browser lib only supports 404 right now { - LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url ); +#if LLQTWEBKIT_API_VERSION < 8 + LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url ); +#endif }; } else if(message_name == "set_user_agent") diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index bb4d9d8625..32d3a31786 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -9,7 +9,7 @@ include(DBusGlib) include(DirectX) include(OpenSSL) include(DragDrop) -include(ELFIO) +include(EXPAT) include(FMOD) include(OPENAL) include(FindOpenGL) @@ -44,11 +44,11 @@ include(CMakeCopyIfDifferent) include_directories( ${DBUSGLIB_INCLUDE_DIRS} - ${ELFIO_INCLUDE_DIR} ${JSONCPP_INCLUDE_DIRS} ${LLAUDIO_INCLUDE_DIRS} ${LLCHARACTER_INCLUDE_DIRS} ${LLCOMMON_INCLUDE_DIRS} + ${FMOD_INCLUDE_DIR} ${LLIMAGE_INCLUDE_DIRS} ${LLKDU_INCLUDE_DIRS} ${LLINVENTORY_INCLUDE_DIRS} @@ -66,6 +66,7 @@ include_directories( ${LSCRIPT_INCLUDE_DIRS}/lscript_compile ${LLLOGIN_INCLUDE_DIRS} ${UPDATER_INCLUDE_DIRS} + ${OPENAL_LIB_INCLUDE_DIRS} ) set(viewer_SOURCE_FILES @@ -379,6 +380,7 @@ set(viewer_SOURCE_FILES llparcelselection.cpp llparticipantlist.cpp llpatchvertexarray.cpp + llphysicsmotion.cpp llplacesinventorybridge.cpp llplacesinventorypanel.cpp llpopupview.cpp @@ -401,6 +403,7 @@ set(viewer_SOURCE_FILES llscreenchannel.cpp llscriptfloater.cpp llscrollingpanelparam.cpp + llscrollingpanelparambase.cpp llsearchcombobox.cpp llsearchhistory.cpp llsecapi.cpp @@ -914,6 +917,7 @@ set(viewer_HEADER_FILES llparcelselection.h llparticipantlist.h llpatchvertexarray.h + llphysicsmotion.h llplacesinventorybridge.h llplacesinventorypanel.h llpolymesh.h @@ -938,6 +942,7 @@ set(viewer_HEADER_FILES llscreenchannel.h llscriptfloater.h llscrollingpanelparam.h + llscrollingpanelparambase.h llsearchcombobox.h llsearchhistory.h llsecapi.h @@ -1291,8 +1296,6 @@ if (WINDOWS) if (INTEL_MEMOPS_LIBRARY) list(APPEND viewer_LIBRARIES ${INTEL_MEMOPS_LIBRARY}) endif (INTEL_MEMOPS_LIBRARY) - - use_prebuilt_binary(dbghelp) endif (WINDOWS) # Add the xui files. This is handy for searching for xui elements @@ -1434,19 +1437,13 @@ set(PACKAGE ON CACHE BOOL "Add a package target that builds an installer package.") if (WINDOWS) - if(MSVC71) - set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map /MAPINFO:LINES") - else(MSVC71) - set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map") - endif(MSVC71) - set_target_properties(${VIEWER_BINARY_NAME} PROPERTIES # *TODO -reenable this once we get server usage sorted out #LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:\"__tcmalloc\"" LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS" LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO" - LINK_FLAGS_RELEASE ${release_flags} + LINK_FLAGS_RELEASE "" ) if(USE_PRECOMPILED_HEADERS) set_target_properties( @@ -1489,15 +1486,12 @@ if (WINDOWS) ${SHARED_LIB_STAGING_DIR}/Release/fmod.dll ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/fmod.dll ${SHARED_LIB_STAGING_DIR}/Debug/fmod.dll - ${SHARED_LIB_STAGING_DIR}/Release/msvcr80.dll - ${SHARED_LIB_STAGING_DIR}/Release/msvcp80.dll - ${SHARED_LIB_STAGING_DIR}/Release/Microsoft.VC80.CRT.manifest - ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcr80.dll - ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcp80.dll - ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest - ${SHARED_LIB_STAGING_DIR}/Debug/msvcr80d.dll - ${SHARED_LIB_STAGING_DIR}/Debug/msvcp80d.dll - ${SHARED_LIB_STAGING_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest + ${SHARED_LIB_STAGING_DIR}/Release/msvcr100.dll + ${SHARED_LIB_STAGING_DIR}/Release/msvcp100.dll + ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcr100.dll + ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcp100.dll + ${SHARED_LIB_STAGING_DIR}/Debug/msvcr100d.dll + ${SHARED_LIB_STAGING_DIR}/Debug/msvcp100d.dll ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/SLVoice.exe ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/vivoxsdk.dll ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/ortp.dll @@ -1509,7 +1503,6 @@ if (WINDOWS) ${CMAKE_CURRENT_SOURCE_DIR}/licenses-win32.txt ${CMAKE_CURRENT_SOURCE_DIR}/featuretable.txt ${CMAKE_CURRENT_SOURCE_DIR}/featuretable_xp.txt - ${CMAKE_CURRENT_SOURCE_DIR}/dbghelp.dll ${ARCH_PREBUILT_DIRS_RELEASE}/libeay32.dll ${ARCH_PREBUILT_DIRS_RELEASE}/qtcore4.dll ${ARCH_PREBUILT_DIRS_RELEASE}/qtgui4.dll @@ -1689,8 +1682,8 @@ target_link_libraries(${VIEWER_BINARY_NAME} ${SMARTHEAP_LIBRARY} ${UI_LIBRARIES} ${WINDOWS_LIBRARIES} + ${EXPAT_LIBRARIES} ${XMLRPCEPI_LIBRARIES} - ${ELFIO_LIBRARIES} ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARIES} ${LLLOGIN_LIBRARIES} @@ -1846,7 +1839,9 @@ if (PACKAGE) if (WINDOWS) set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}") set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-windows.tar.bz2") - set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX} slplugin.exe") + # slplugin.exe failing symbols dump - need to debug, might have to do with updated version of google breakpad + # set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX} slplugin.exe") + set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX}") set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}") set(VIEWER_COPY_MANIFEST copy_w_viewer_manifest) endif (WINDOWS) @@ -1880,7 +1875,7 @@ if (PACKAGE) "${VIEWER_DIST_DIR}" "${VIEWER_EXE_GLOBS}" "${VIEWER_LIB_GLOB}" - "${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/bin/dump_syms" + "${AUTOBUILD_INSTALL_DIR}/bin/dump_syms" "${VIEWER_SYMBOL_FILE}" DEPENDS generate_breakpad_symbols.py VERBATIM) diff --git a/indra/newview/app_settings/high_graphics.xml b/indra/newview/app_settings/high_graphics.xml index 4da2b0fd00..4e137d971a 100644 --- a/indra/newview/app_settings/high_graphics.xml +++ b/indra/newview/app_settings/high_graphics.xml @@ -4,6 +4,8 @@ <RenderAvatarCloth value="FALSE"/> <!--Default for now--> <RenderAvatarLODFactor value="1.0"/> + <!--Default for now--> + <RenderAvatarPhysicsLODFactor value="0.9"/> <!--NO SHADERS--> <RenderAvatarVP value="TRUE"/> <!--Short Range--> diff --git a/indra/newview/app_settings/low_graphics.xml b/indra/newview/app_settings/low_graphics.xml index 136087f69b..79463b475c 100644 --- a/indra/newview/app_settings/low_graphics.xml +++ b/indra/newview/app_settings/low_graphics.xml @@ -5,6 +5,8 @@ <!--Default for now--> <RenderAvatarLODFactor value="0.5"/> <!--Default for now--> + <RenderAvatarPhysicsLODFactor value="0.0"/> + <!--Default for now--> <RenderAvatarMaxVisible value="3"/> <!--NO SHADERS--> <RenderAvatarVP value="FALSE"/> diff --git a/indra/newview/app_settings/mid_graphics.xml b/indra/newview/app_settings/mid_graphics.xml index c150a87cdf..ab1e2a2e1c 100644 --- a/indra/newview/app_settings/mid_graphics.xml +++ b/indra/newview/app_settings/mid_graphics.xml @@ -4,6 +4,8 @@ <RenderAvatarCloth value="FALSE"/> <!--Default for now--> <RenderAvatarLODFactor value="0.5"/> + <!--Default for now--> + <RenderAvatarPhysicsLODFactor value="0.75"/> <!--NO SHADERS--> <RenderAvatarVP value="TRUE"/> <!--Short Range--> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 14f1b3c4ba..dd85c5cb86 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -641,7 +641,28 @@ <key>Value</key> <integer>10</integer> </map> - + <key>AvatarPhysics</key> + <map> + <key>Comment</key> + <string>Enable avatar physics.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>AvatarPhysicsTest</key> + <map> + <key>Comment</key> + <string>Simulate continuous physics behavior on all nearby avatars.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>AvatarSex</key> <map> <key>Comment</key> @@ -653,6 +674,7 @@ <key>Value</key> <integer>0</integer> </map> + <key>BackgroundYieldTime</key> <map> <key>Comment</key> @@ -6800,6 +6822,17 @@ <key>Value</key> <integer>12</integer> </map> + <key>RenderAvatarPhysicsLODFactor</key> + <map> + <key>Comment</key> + <string>Controls level of detail of avatar physics (such as breast physics).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <integer>1.0</integer> + </map> <key>RenderAvatarVP</key> <map> <key>Comment</key> diff --git a/indra/newview/app_settings/ultra_graphics.xml b/indra/newview/app_settings/ultra_graphics.xml index e7dce3b989..e1f3ca5769 100644 --- a/indra/newview/app_settings/ultra_graphics.xml +++ b/indra/newview/app_settings/ultra_graphics.xml @@ -4,6 +4,8 @@ <RenderAvatarCloth value="TRUE"/> <!--Default for now--> <RenderAvatarLODFactor value="1.0"/> + <!--Default for now--> + <RenderAvatarPhysicsLODFactor value="1.0"/> <!--NO SHADERS--> <RenderAvatarVP value="TRUE"/> <!--Short Range--> diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index a9b4ff02c5..4585ba658c 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -612,7 +612,7 @@ id="36" group="0" name="Shoulders" - label="Shoulders" + label="Shoulders" wearable="shape" edit_group="shape_torso" edit_group_order="4" @@ -4040,26 +4040,6 @@ scale="0.0 0.0 0.01" pos="0 0 -0.01"/> </param_morph> - - </param> - - <param - id="507" - group="0" - sex="female" - name="Breast_Gravity" - label="Breast Buoyancy" - wearable="shape" - edit_group="shape_torso" - edit_group_order="7" - label_min="Less Gravity" - label_max="More Gravity" - value_default="0" - value_min="-1.5" - value_max="2" - camera_elevation=".3" - camera_distance=".8"> - <param_morph /> </param> <param @@ -4113,25 +4093,6 @@ </param> <param - id="684" - group="0" - sex="female" - name="Breast_Female_Cleavage" - label="Breast Cleavage" - wearable="shape" - edit_group="shape_torso" - edit_group_order="8" - label_min="Separate" - label_max="Join" - value_default="0" - value_min="-.3" - value_max="1.3" - camera_elevation=".3" - camera_distance=".8"> - <param_morph /> - </param> - - <param id="685" group="0" sex="male" @@ -4328,8 +4289,52 @@ </param> <!-- + ############# + # physics morphs (not user controlled) + ############# + --> + <param + id="1200" + group="1" + sex="female" + name="Breast_Gravity" + wearable="shape" + edit_group="driven" + value_default="0" + value_min="-1.5" + value_max="2"> + <param_morph /> + </param> + + <param + id="1201" + group="1" + sex="female" + name="Breast_Female_Cleavage" + wearable="shape" + edit_group="driven" + value_default="0" + value_min="-.3" + value_max="1.3"> + <param_morph /> + </param> + + <param + id="1204" + group="1" + name="Belly_Physics_Torso_UpDown_Driven" + wearable="physics" + edit_group="driven" + value_default="0" + value_min="-1" + value_max="1"> + <param_morph /> + </param> + + <!-- #end morph targets --> + </mesh> <mesh @@ -4390,6 +4395,7 @@ <param_morph /> </param> + <param id="151" group="1" @@ -4829,8 +4835,49 @@ </param> <!-- + ############# + # physics morphs (not user controlled) + ############# + --> + <param + id="1202" + group="1" + name="Belly_Physics_Legs_UpDown_Driven" + wearable="physics" + edit_group="driven" + value_min="-1" + value_max="1"> + <param_morph /> + </param> + + + <param + id="1205" + group="1" + name="Butt_Physics_UpDown_Driven" + wearable="physics" + edit_group="driven" + value_default="0"> + <param_morph /> + </param> + + <param + id="1206" + group="1" + name="Butt_Physics_LeftRight_Driven" + wearable="physics" + edit_group="driven" + value_default="0" + value_min="-2" + value_max="2"> + <param_morph /> + </param> + + + <!-- #end morph targets --> + </mesh> <mesh @@ -9074,12 +9121,13 @@ render_pass="bump"> <!-- =========================================================== --> <driver_parameters> + <param id="828" group="0" name="Loose Upper Clothing" label="Shirt Fit" - show_simple="true" + show_simple="true" wearable="shirt" edit_group="shirt" edit_group_order="4" @@ -11631,6 +11679,524 @@ render_pass="bump"> </param_driver> </param> + <!-- ==PHYSICS PARAMETERS======================================= --> + + <param + id="507" + group="0" + sex="female" + name="Breast_Physics_UpDown_Controller" + label="Breast Physics UpDown Controller" + wearable="shape" + edit_group="shape_torso" + edit_group_order="7" + value_default="0" + value_min="-1.5" + value_max="2" + camera_elevation=".3" + camera_distance=".8"> + <param_driver> + <driven + id="1200" /> + </param_driver> + </param> + + <param + id="684" + group="0" + sex="female" + name="Breast_Physics_InOut_Controller" + label="Breast Physics InOut Controller" + wearable="shape" + edit_group="shape_torso" + edit_group_order="8" + value_default="0" + value_min="-.3" + value_max="1.3"> + <param_driver> + <driven + id="1201" /> + </param_driver> + </param> + + <param + id="1120" + group="1" + wearable="physics" + name="Belly_Physics_UpDown_Controller" + label="Belly Physics UpDown Controller" + value_min="-1" + value_max="1" + value_default="0"> + <param_driver> + <driven + id="1202" /> + <driven + id="1203" /> + <driven + id="1204" /> + </param_driver> + </param> + + <param + id="1100" + group="1" + wearable="shape" + name="Butt_Physics_UpDown_Controller" + label="Butt Physics UpDown Controller" + value_min="-1" + value_max="1" + value_default="0"> + <param_driver> + <driven + id="1205" /> + </param_driver> + </param> + + <param + id="1101" + group="1" + wearable="shape" + name="Butt_Physics_LeftRight_Controller" + label="Butt Physics LeftRight Controller" + value_min="-1" + value_max="1" + value_default="0"> + <param_driver> + <driven + id="1206" /> + </param_driver> + </param> + + <param + id="1110" + group="0" + sex="female" + name="Breast_Physics_Mass" + label="Breast Physics Mass" + wearable="physics" + edit_group="physics_advanced" + value_default=".1" + value_min=".1" + value_max="1"> + <param_driver /> + </param> + <param + id="1111" + group="0" + sex="female" + name="Breast_Physics_Smoothing" + label="Breast Physics Smoothing" + wearable="physics" + edit_group="physics_advanced" + value_default="2" + value_min="1" + value_max="10"> + <param_driver /> + </param> + <param + id="1112" + group="0" + sex="female" + name="Breast_Physics_Gravity" + label="Breast Physics Gravity" + wearable="physics" + edit_group="physics_advanced" + value_default="0" + value_min="0" + value_max=".1"> + <param_driver /> + </param> + + <param + id="1113" + group="0" + sex="female" + name="Breast_Physics_UpDown_Max_Velocity" + label="Breast Physics UpDown Max Speed" + wearable="physics" + edit_group="physics_breasts_updown" + value_default="0" + value_min="0" + value_max="10"> + <param_driver /> + </param> + <param + id="1114" + group="0" + sex="female" + name="Breast_Physics_UpDown_Spring" + label="Breast Physics UpDown Spring" + wearable="physics" + edit_group="physics_breasts_updown" + value_default=".1" + value_min="0" + value_max="1"> + <param_driver /> + </param> + <param + id="1115" + group="0" + sex="female" + name="Breast_Physics_UpDown_Gain" + label="Breast Physics UpDown Gain" + wearable="physics" + edit_group="physics_breasts_updown" + value_default="10" + value_min="1" + value_max="100"> + <param_driver /> + </param> + <param + id="1116" + group="0" + sex="female" + name="Breast_Physics_UpDown_Damping" + label="Breast Physics UpDown Damping" + wearable="physics" + edit_group="physics_breasts_updown" + value_default=".05" + value_min="0" + value_max=".1" + camera_elevation=".3" + camera_distance=".8"> + <param_driver /> + </param> + <param + id="1117" + group="0" + sex="female" + name="Breast_Physics_UpDown_Drag" + label="Breast Physics UpDown Drag" + wearable="physics" + edit_group="physics_advanced" + value_default=".15" + value_min="0" + value_max=".5"> + <param_driver /> + </param> + + <param + id="1118" + group="0" + sex="female" + name="Breast_Physics_InOut_Max_Velocity" + label="Breast Physics InOut Max Speed" + wearable="physics" + edit_group="physics_breasts_inout" + value_default="0" + value_min="0" + value_max="10"> + <param_driver /> + </param> + <param + id="1119" + group="0" + sex="female" + name="Breast_Physics_InOut_Spring" + label="Breast Physics InOut Spring" + wearable="physics" + edit_group="physics_breasts_inout" + value_default=".1" + value_min="0" + value_max="1"> + <param_driver /> + </param> + <param + id="1120" + group="0" + sex="female" + name="Breast_Physics_InOut_Gain" + label="Breast Physics InOut Gain" + wearable="physics" + edit_group="physics_breasts_inout" + value_default="10" + value_min="1" + value_max="100"> + <param_driver /> + </param> + <param + id="1121" + group="0" + sex="female" + name="Breast_Physics_InOut_Damping" + label="Breast Physics InOut Damping" + wearable="physics" + edit_group="physics_breasts_inout" + value_default=".05" + value_min="0" + value_max=".1"> + <param_driver /> + </param> + <param + id="1122" + group="0" + sex="female" + name="Breast_Physics_InOut_Drag" + label="Breast Physics InOut Drag" + wearable="physics" + edit_group="physics_advanced" + value_default=".15" + value_min="0" + value_max=".5"> + <param_driver /> + </param> + + <param + id="1130" + group="0" + name="Belly_Physics_Mass" + label="Belly Physics Mass" + wearable="physics" + edit_group="physics_advanced" + value_default=".1" + value_min=".1" + value_max="1"> + <param_driver /> + </param> + <param + id="1131" + group="0" + name="Belly_Physics_Smoothing" + label="Belly Physics Smoothing" + wearable="physics" + edit_group="physics_advanced" + value_default="2" + value_min="1" + value_max="10"> + <param_driver /> + </param> + <param + id="1132" + group="0" + name="Belly_Physics_Gravity" + label="Belly Physics Gravity" + wearable="physics" + edit_group="physics_advanced" + value_default="0" + value_min="0" + value_max=".1"> + <param_driver /> + </param> + <param + id="1133" + group="0" + name="Belly_Physics_UpDown_Max_Velocity" + label="Belly Physics UpDown Max Speed" + wearable="physics" + edit_group="physics_belly_updown" + value_default="0" + value_min="0" + value_max="10"> + <param_driver /> + </param> + <param + id="1134" + group="0" + name="Belly_Physics_UpDown_Spring" + label="Belly Physics UpDown Spring" + wearable="physics" + edit_group="physics_belly_updown" + value_default=".1" + value_min="0" + value_max="1"> + <param_driver /> + </param> + <param + id="1135" + group="0" + name="Belly_Physics_UpDown_Gain" + label="Belly Physics UpDown Gain" + wearable="physics" + edit_group="physics_belly_updown" + value_default="10" + value_min="1" + value_max="100"> + <param_driver /> + </param> + <param + id="1136" + group="0" + name="Belly_Physics_UpDown_Damping" + label="Belly Physics UpDown Damping" + wearable="physics" + edit_group="physics_belly_updown" + value_default=".05" + value_min="0" + value_max=".1"> + <param_driver /> + </param> + <param + id="1137" + group="0" + name="Belly_Physics_UpDown_Drag" + label="Belly Physics UpDown Drag" + wearable="physics" + edit_group="physics_advanced" + value_default=".15" + value_min="0" + value_max=".5"> + <param_driver /> + </param> + + <param + id="1140" + group="0" + name="Butt_Physics_Mass" + label="Butt Physics Mass" + wearable="physics" + edit_group="physics_advanced" + value_default=".1" + value_min=".1" + value_max="1"> + <param_driver /> + </param> + <param + id="1141" + group="0" + name="Butt_Physics_Smoothing" + label="Butt Physics Smoothing" + wearable="physics" + edit_group="physics_advanced" + value_default="2" + value_min="1" + value_max="10"> + <param_driver /> + </param> + <param + id="1142" + group="0" + name="Butt_Physics_Gravity" + label="Butt Physics Gravity" + wearable="physics" + edit_group="physics_advanced" + value_default="0" + value_min="0" + value_max=".1"> + <param_driver /> + </param> + <param + id="1143" + group="0" + name="Butt_Physics_UpDown_Max_Velocity" + label="Butt Physics UpDown Max Speed" + wearable="physics" + edit_group="physics_butt_updown" + value_default="0" + value_min="0" + value_max="10"> + <param_driver /> + </param> + <param + id="1144" + group="0" + name="Butt_Physics_UpDown_Spring" + label="Butt Physics UpDown Spring" + wearable="physics" + edit_group="physics_butt_updown" + value_default=".1" + value_min="0" + value_max="1"> + <param_driver /> + </param> + <param + id="1145" + group="0" + name="Butt_Physics_UpDown_Gain" + label="Butt Physics UpDown Gain" + wearable="physics" + edit_group="physics_butt_updown" + value_default="10" + value_min="1" + value_max="100"> + <param_driver /> + </param> + <param + id="1146" + group="0" + name="Butt_Physics_UpDown_Damping" + label="Butt Physics UpDown Damping" + wearable="physics" + edit_group="physics_butt_updown" + value_default=".05" + value_min="0" + value_max=".1"> + <param_driver /> + </param> + <param + id="1147" + group="0" + name="Butt_Physics_UpDown_Drag" + label="Butt Physics UpDown Drag" + wearable="physics" + edit_group="physics_advanced" + value_default=".15" + value_min="0" + value_max=".5"> + <param_driver /> + </param> + + <param + id="1148" + group="0" + name="Butt_Physics_LeftRight_Max_Velocity" + label="Butt Physics LeftRight Max Speed" + wearable="physics" + edit_group="physics_butt_leftright" + value_default="0" + value_min="0" + value_max="10"> + <param_driver /> + </param> + <param + id="1149" + group="0" + name="Butt_Physics_LeftRight_Spring" + label="Butt Physics LeftRight Spring" + wearable="physics" + edit_group="physics_butt_leftright" + value_default=".1" + value_min="0" + value_max="1"> + <param_driver /> + </param> + <param + id="1150" + group="0" + name="Butt_Physics_LeftRight_Gain" + label="Butt Physics LeftRight Gain" + wearable="physics" + edit_group="physics_butt_leftright" + value_default="10" + value_min="1" + value_max="100"> + <param_driver /> + </param> + <param + id="1151" + group="0" + name="Butt_Physics_LeftRight_Damping" + label="Butt Physics LeftRight Damping" + wearable="physics" + edit_group="physics_butt_leftright" + value_default=".05" + value_min="0" + value_max=".1"> + <param_driver /> + </param> + <param + id="1152" + group="0" + name="Butt_Physics_LeftRight_Drag" + label="Butt Physics LeftRight Drag" + wearable="physics" + edit_group="physics_advanced" + value_default=".15" + value_min="0" + value_max=".5"> + <param_driver /> + </param> + </driver_parameters> diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index a82c3da4c5..15ad330418 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -26,6 +26,7 @@ list all RenderAnisotropic 1 1 RenderAvatarCloth 1 1 RenderAvatarLODFactor 1 1.0 +RenderAvatarPhysicsLODFactor 1 1.0 RenderAvatarMaxVisible 1 12 RenderAvatarVP 1 1 RenderCubeMap 1 1 @@ -71,6 +72,7 @@ list Low RenderAnisotropic 1 0 RenderAvatarCloth 1 0 RenderAvatarLODFactor 1 0 +RenderAvatarPhysicsLODFactor 1 0 RenderAvatarMaxVisible 1 3 RenderAvatarVP 1 0 RenderFarClip 1 64 @@ -101,6 +103,7 @@ list Mid RenderAnisotropic 1 0 RenderAvatarCloth 1 0 RenderAvatarLODFactor 1 0.5 +RenderAvatarPhysicsLODFactor 1 0.75 RenderAvatarVP 1 1 RenderFarClip 1 96 RenderFlexTimeFactor 1 1.0 @@ -129,6 +132,7 @@ list High RenderAnisotropic 1 1 RenderAvatarCloth 1 0 RenderAvatarLODFactor 1 1.0 +RenderAvatarPhysicsLODFactor 1 0.9 RenderAvatarVP 1 1 RenderFarClip 1 128 RenderFlexTimeFactor 1 1.0 diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 055be4cae2..d426afb17c 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -821,7 +821,7 @@ void LLAgentWearables::popWearable(const LLWearableType::EType type, U32 index) } } -U32 LLAgentWearables::getWearableIndex(LLWearable *wearable) +U32 LLAgentWearables::getWearableIndex(const LLWearable *wearable) const { if (wearable == NULL) { @@ -2045,8 +2045,9 @@ void LLAgentWearables::editWearable(const LLUUID& item_id) return; } + const BOOL disable_camera_switch = LLWearableType::getDisableCameraSwitch(wearable->getType()); LLPanel* panel = LLSideTray::getInstance()->getPanel("sidepanel_appearance"); - LLSidepanelAppearance::editWearable(wearable, panel); + LLSidepanelAppearance::editWearable(wearable, panel, disable_camera_switch); } // Request editing the item after it gets worn. diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index d7e77a5a5b..3ef50f14da 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -124,7 +124,7 @@ public: void setWearableOutfit(const LLInventoryItem::item_array_t& items, const LLDynamicArray< LLWearable* >& wearables, BOOL remove); void setWearableName(const LLUUID& item_id, const std::string& new_name); void addLocalTextureObject(const LLWearableType::EType wearable_type, const LLVOAvatarDefines::ETextureIndex texture_type, U32 wearable_index); - U32 getWearableIndex(LLWearable *wearable); + U32 getWearableIndex(const LLWearable *wearable) const; protected: void setWearableFinal(LLInventoryItem* new_item, LLWearable* new_wearable, bool do_append = false); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f6fe7ecd01..cfb5853cfd 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -498,6 +498,7 @@ static void settings_to_globals() LLVolumeImplFlexible::sUpdateFactor = gSavedSettings.getF32("RenderFlexTimeFactor"); LLVOTree::sTreeFactor = gSavedSettings.getF32("RenderTreeLODFactor"); LLVOAvatar::sLODFactor = gSavedSettings.getF32("RenderAvatarLODFactor"); + LLVOAvatar::sPhysicsLODFactor = gSavedSettings.getF32("RenderAvatarPhysicsLODFactor"); LLVOAvatar::sMaxVisible = (U32)gSavedSettings.getS32("RenderAvatarMaxVisible"); LLVOAvatar::sVisibleInFirstPerson = gSavedSettings.getBOOL("FirstPersonAvatarVisible"); // clamp auto-open time to some minimum usable value diff --git a/indra/newview/llbreastmotion.cpp b/indra/newview/llbreastmotion.cpp new file mode 100644 index 0000000000..7c205a8b9f --- /dev/null +++ b/indra/newview/llbreastmotion.cpp @@ -0,0 +1,402 @@ +/** + * @file llbreastmotion.cpp + * @brief Implementation of LLBreastMotion class. + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +//----------------------------------------------------------------------------- +// Header Files +//----------------------------------------------------------------------------- +#include "llviewerprecompiledheaders.h" +#include "linden_common.h" + +#include "m3math.h" +#include "v3dmath.h" + +#include "llbreastmotion.h" +#include "llcharacter.h" +#include "llviewercontrol.h" +#include "llviewervisualparam.h" +#include "llvoavatarself.h" + +#define MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION 0.f; + +#define N_PARAMS 2 + +// User-set params +static const std::string breast_param_names_user[N_PARAMS] = +{ + "Breast_Female_Cleavage_Driver", + "Breast_Gravity_Driver" +}; + +// Params driven by this algorithm +static const std::string breast_param_names_driven[N_PARAMS] = +{ + "Breast_Female_Cleavage", + "Breast_Gravity" +}; + + + +LLBreastMotion::LLBreastMotion(const LLUUID &id) : + LLMotion(id), + mCharacter(NULL) +{ + mName = "breast_motion"; + mChestState = new LLJointState; + + mBreastMassParam = (F32)1.0; + mBreastDragParam = LLVector3((F32)0.1, (F32)0.1, (F32)0.1); + mBreastSmoothingParam = (U32)2; + mBreastGravityParam = (F32)0.0; + + mBreastSpringParam = LLVector3((F32)3.0, (F32)0.0, (F32)3.0); + mBreastGainParam = LLVector3((F32)50.0, (F32)0.0, (F32)50.0); + mBreastDampingParam = LLVector3((F32)0.3, (F32)0.0, (F32)0.3); + mBreastMaxVelocityParam = LLVector3((F32)10.0, (F32)0.0, (F32)10.0); + + mBreastParamsUser[0] = mBreastParamsUser[1] = mBreastParamsUser[2] = NULL; + mBreastParamsDriven[0] = mBreastParamsDriven[1] = mBreastParamsDriven[2] = NULL; + + mCharLastPosition_world_pt = LLVector3(0,0,0); + mCharLastVelocity_local_vec = LLVector3(0,0,0); + mCharLastAcceleration_local_vec = LLVector3(0,0,0); + mBreastLastPosition_local_pt = LLVector3(0,0,0); + mBreastLastUpdatePosition_local_pt = LLVector3(0,0,0); + mBreastVelocity_local_vec = LLVector3(0,0,0); +} + +LLBreastMotion::~LLBreastMotion() +{ +} + +BOOL LLBreastMotion::onActivate() +{ + return TRUE; +} + +void LLBreastMotion::onDeactivate() +{ +} + +LLMotion::LLMotionInitStatus LLBreastMotion::onInitialize(LLCharacter *character) +{ + mCharacter = character; + + if (!mChestState->setJoint(character->getJoint("mChest"))) + { + return STATUS_FAILURE; + } + + mChestState->setUsage(LLJointState::ROT); + addJointState( mChestState ); + + for (U32 i=0; i < N_PARAMS; i++) + { + mBreastParamsUser[i] = NULL; + mBreastParamsDriven[i] = NULL; + mBreastParamsMin[i] = 0; + mBreastParamsMax[i] = 0; + if (breast_param_names_user[i] != "" && breast_param_names_driven[i] != "") + { + mBreastParamsUser[i] = (LLViewerVisualParam*)mCharacter->getVisualParam(breast_param_names_user[i].c_str()); + mBreastParamsDriven[i] = (LLViewerVisualParam*)mCharacter->getVisualParam(breast_param_names_driven[i].c_str()); + if (mBreastParamsDriven[i]) + { + mBreastParamsMin[i] = mBreastParamsDriven[i]->getMinWeight(); + mBreastParamsMax[i] = mBreastParamsDriven[i]->getMaxWeight(); + } + } + } + + mTimer.reset(); + return STATUS_SUCCESS; +} + +F32 LLBreastMotion::getMinPixelArea() +{ + return MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION; +} + + +F32 LLBreastMotion::calculateTimeDelta() +{ + const F32 time = mTimer.getElapsedTimeF32(); + const F32 time_delta = time - mLastTime; + mLastTime = time; + return time_delta; +} + +// Local space means "parameter space". +LLVector3 LLBreastMotion::toLocal(const LLVector3 &world_vector) +{ + LLVector3 local_vec(0,0,0); + + LLJoint *chest_joint = mChestState->getJoint(); + const LLQuaternion world_rot = chest_joint->getWorldRotation(); + + // Cleavage + LLVector3 breast_dir_world_vec = LLVector3(-1,0,0) * world_rot; // -1 b/c cleavage param changes opposite to direction + breast_dir_world_vec.normalize(); + local_vec[0] = world_vector * breast_dir_world_vec; + + // Up-Down Bounce + LLVector3 breast_up_dir_world_vec = LLVector3(0,0,1) * world_rot; + breast_up_dir_world_vec.normalize(); + local_vec[1] = world_vector * breast_up_dir_world_vec; + + return local_vec; +} + +LLVector3 LLBreastMotion::calculateVelocity_local(const F32 time_delta) +{ + LLJoint *chest_joint = mChestState->getJoint(); + const LLVector3 world_pos_pt = chest_joint->getWorldPosition(); + const LLQuaternion world_rot = chest_joint->getWorldRotation(); + const LLVector3 last_world_pos_pt = mCharLastPosition_world_pt; + const LLVector3 char_velocity_world_vec = (world_pos_pt-last_world_pos_pt) / time_delta; + const LLVector3 char_velocity_local_vec = toLocal(char_velocity_world_vec); + + return char_velocity_local_vec; +} + +LLVector3 LLBreastMotion::calculateAcceleration_local(const LLVector3 &new_char_velocity_local_vec, + const F32 time_delta) +{ + LLVector3 char_acceleration_local_vec = new_char_velocity_local_vec - mCharLastVelocity_local_vec; + + char_acceleration_local_vec = + char_acceleration_local_vec * 1.0/mBreastSmoothingParam + + mCharLastAcceleration_local_vec * (mBreastSmoothingParam-1.0)/mBreastSmoothingParam; + + mCharLastAcceleration_local_vec = char_acceleration_local_vec; + + return char_acceleration_local_vec; +} + +BOOL LLBreastMotion::onUpdate(F32 time, U8* joint_mask) +{ + // Skip if disabled globally. + if (!gSavedSettings.getBOOL("AvatarPhysics")) + { + return TRUE; + } + + // Higher LOD is better. This controls the granularity + // and frequency of updates for the motions. + const F32 lod_factor = LLVOAvatar::sPhysicsLODFactor; + if (lod_factor == 0) + { + return TRUE; + } + + if (mCharacter->getSex() != SEX_FEMALE) return TRUE; + const F32 time_delta = calculateTimeDelta(); + if (time_delta < .01 || time_delta > 10.0) return TRUE; + + + //////////////////////////////////////////////////////////////////////////////// + // Get all parameters and settings + // + + mBreastMassParam = mCharacter->getVisualParamWeight("Breast_Physics_Mass"); + mBreastSmoothingParam = (U32)(mCharacter->getVisualParamWeight("Breast_Physics_Smoothing")); + mBreastGravityParam = mCharacter->getVisualParamWeight("Breast_Physics_Gravity"); + + mBreastSpringParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Spring"); + mBreastGainParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Gain"); + mBreastDampingParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Damping"); + mBreastMaxVelocityParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Max_Velocity"); + mBreastDragParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Drag"); + + mBreastSpringParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Spring"); + mBreastGainParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Gain"); + mBreastDampingParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Damping"); + mBreastMaxVelocityParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Max_Velocity"); + mBreastDragParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Drag"); + + + // Get the current morph parameters. + LLVector3 breast_user_local_pt(0,0,0); + for (U32 i=0; i < N_PARAMS; i++) + { + if (mBreastParamsUser[i] != NULL) + { + breast_user_local_pt[i] = mBreastParamsUser[i]->getWeight(); + } + } + + LLVector3 breast_current_local_pt = mBreastLastPosition_local_pt; + + // + // End parameters and settings + //////////////////////////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////////////////////////// + // Calculate velocity and acceleration in parameter space. + // + + const LLVector3 char_velocity_local_vec = calculateVelocity_local(time_delta); + const LLVector3 char_acceleration_local_vec = calculateAcceleration_local(char_velocity_local_vec, time_delta); + mCharLastVelocity_local_vec = char_velocity_local_vec; + + LLJoint *chest_joint = mChestState->getJoint(); + mCharLastPosition_world_pt = chest_joint->getWorldPosition(); + + // + // End velocity and acceleration + //////////////////////////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////////////////////////// + // Calculate the total force + // + + // Spring force is a restoring force towards the original user-set breast position. + // F = kx + const LLVector3 spring_length_local = breast_current_local_pt-breast_user_local_pt; + LLVector3 force_spring_local_vec = -spring_length_local; force_spring_local_vec *= mBreastSpringParam; + + // Acceleration is the force that comes from the change in velocity of the torso. + // F = ma + mg + LLVector3 force_accel_local_vec = char_acceleration_local_vec * mBreastMassParam; + const LLVector3 force_gravity_local_vec = toLocal(LLVector3(0,0,1))* mBreastGravityParam * mBreastMassParam; + force_accel_local_vec += force_gravity_local_vec; + force_accel_local_vec *= mBreastGainParam; + + // Damping is a restoring force that opposes the current velocity. + // F = -kv + LLVector3 force_damping_local_vec = -mBreastDampingParam; + force_damping_local_vec *= mBreastVelocity_local_vec; + + // Drag is a force imparted by velocity, intuitively it is similar to wind resistance. + // F = .5v*v + LLVector3 force_drag_local_vec = .5*char_velocity_local_vec; + force_drag_local_vec *= char_velocity_local_vec; + force_drag_local_vec *= mBreastDragParam[0]; + + LLVector3 force_net_local_vec = + force_accel_local_vec + + force_gravity_local_vec + + force_spring_local_vec + + force_damping_local_vec + + force_drag_local_vec; + + // + // End total force + //////////////////////////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////////////////////////// + // Calculate new params + // + + // Calculate the new acceleration based on the net force. + // a = F/m + LLVector3 acceleration_local_vec = force_net_local_vec / mBreastMassParam; + mBreastVelocity_local_vec += acceleration_local_vec; + mBreastVelocity_local_vec.clamp(-mBreastMaxVelocityParam*100.0, mBreastMaxVelocityParam*100.0); + + // Temporary debugging setting to cause all avatars to move, for profiling purposes. + if (gSavedSettings.getBOOL("AvatarPhysicsTest")) + { + mBreastVelocity_local_vec[0] = sin(mTimer.getElapsedTimeF32()*4.0)*5.0; + mBreastVelocity_local_vec[1] = sin(mTimer.getElapsedTimeF32()*3.0)*5.0; + } + // Calculate the new parameters and clamp them to the min/max ranges. + LLVector3 new_local_pt = breast_current_local_pt + mBreastVelocity_local_vec*time_delta; + new_local_pt.clamp(mBreastParamsMin,mBreastParamsMax); + + // Set the new parameters. + for (U32 i=0; i < 3; i++) + { + // If the param is disabled, just set the param to the user value. + if (mBreastMaxVelocityParam[i] == 0) + { + new_local_pt[i] = breast_user_local_pt[i]; + } + if (mBreastParamsDriven[i]) + { + mCharacter->setVisualParamWeight(mBreastParamsDriven[i], + new_local_pt[i], + FALSE); + } + } + + mBreastLastPosition_local_pt = new_local_pt; + + // + // End calculate new params + //////////////////////////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////////////////////////// + // Conditionally update the visual params + // + + // Updating the visual params (i.e. what the user sees) is fairly expensive. + // So only update if the params have changed enough, and also take into account + // the graphics LOD settings. + + // For non-self, if the avatar is small enough visually, then don't update. + const BOOL is_self = (dynamic_cast<LLVOAvatarSelf *>(this) != NULL); + if (!is_self) + { + const F32 area_for_max_settings = 0.0; + const F32 area_for_min_settings = 1400.0; + + const F32 area_for_this_setting = area_for_max_settings + (area_for_min_settings-area_for_max_settings)*(1.0-lod_factor); + const F32 pixel_area = fsqrtf(mCharacter->getPixelArea()); + if (pixel_area < area_for_this_setting) + { + return TRUE; + } + } + + // If the parameter hasn't changed enough, then don't update. + LLVector3 position_diff = mBreastLastUpdatePosition_local_pt-new_local_pt; + for (U32 i=0; i < 3; i++) + { + const F32 min_delta = (1.0-lod_factor)*(mBreastParamsMax[i]-mBreastParamsMin[i])/2.0; + if (llabs(position_diff[i]) > min_delta) + { + mCharacter->updateVisualParams(); + mBreastLastUpdatePosition_local_pt = new_local_pt; + return TRUE; + } + } + + // + // End update visual params + //////////////////////////////////////////////////////////////////////////////// + + return TRUE; +} diff --git a/indra/newview/llbreastmotion.h b/indra/newview/llbreastmotion.h new file mode 100644 index 0000000000..8578d4ad1a --- /dev/null +++ b/indra/newview/llbreastmotion.h @@ -0,0 +1,160 @@ +/** + * @file llbreastmotion.h + * @brief Implementation of LLBreastMotion class. + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLBREASTMOTION_H +#define LL_LLBREASTMOTION_H + +//----------------------------------------------------------------------------- +// Header files +//----------------------------------------------------------------------------- +#include "llmotion.h" +#include "llframetimer.h" + +#define BREAST_MOTION_FADEIN_TIME 1.0f +#define BREAST_MOTION_FADEOUT_TIME 1.0f + +class LLViewerVisualParam; + +//----------------------------------------------------------------------------- +// class LLBreastMotion +//----------------------------------------------------------------------------- +class LLBreastMotion : + public LLMotion +{ +public: + // Constructor + LLBreastMotion(const LLUUID &id); + + // Destructor + virtual ~LLBreastMotion(); + +public: + //------------------------------------------------------------------------- + // functions to support MotionController and MotionRegistry + //------------------------------------------------------------------------- + + // static constructor + // all subclasses must implement such a function and register it + static LLMotion *create(const LLUUID &id) { return new LLBreastMotion(id); } + +public: + //------------------------------------------------------------------------- + // animation callbacks to be implemented by subclasses + //------------------------------------------------------------------------- + + // motions must specify whether or not they loop + virtual BOOL getLoop() { return TRUE; } + + // motions must report their total duration + virtual F32 getDuration() { return 0.0; } + + // motions must report their "ease in" duration + virtual F32 getEaseInDuration() { return BREAST_MOTION_FADEIN_TIME; } + + // motions must report their "ease out" duration. + virtual F32 getEaseOutDuration() { return BREAST_MOTION_FADEOUT_TIME; } + + // called to determine when a motion should be activated/deactivated based on avatar pixel coverage + virtual F32 getMinPixelArea(); + + // motions must report their priority + virtual LLJoint::JointPriority getPriority() { return LLJoint::MEDIUM_PRIORITY; } + + virtual LLMotionBlendType getBlendType() { return ADDITIVE_BLEND; } + + // run-time (post constructor) initialization, + // called after parameters have been set + // must return true to indicate success and be available for activation + virtual LLMotionInitStatus onInitialize(LLCharacter *character); + + // called when a motion is activated + // must return TRUE to indicate success, or else + // it will be deactivated + virtual BOOL onActivate(); + + // called per time step + // must return TRUE while it is active, and + // must return FALSE when the motion is completed. + virtual BOOL onUpdate(F32 time, U8* joint_mask); + + // called when a motion is deactivated + virtual void onDeactivate(); + +protected: + LLVector3 toLocal(const LLVector3 &world_vector); + LLVector3 calculateVelocity_local(const F32 time_delta); + LLVector3 calculateAcceleration_local(const LLVector3 &new_char_velocity_local_vec, + const F32 time_delta); + F32 calculateTimeDelta(); +private: + //------------------------------------------------------------------------- + // joint states to be animated + //------------------------------------------------------------------------- + LLPointer<LLJointState> mChestState; + LLCharacter* mCharacter; + + + //------------------------------------------------------------------------- + // miscellaneous parameters + //------------------------------------------------------------------------- + LLViewerVisualParam *mBreastParamsUser[3]; + LLViewerVisualParam *mBreastParamsDriven[3]; + LLVector3 mBreastParamsMin; + LLVector3 mBreastParamsMax; + + LLVector3 mCharLastPosition_world_pt; // Last position of the avatar + LLVector3 mCharLastVelocity_local_vec; // How fast the character is moving + LLVector3 mCharLastAcceleration_local_vec; // Change in character velocity + + LLVector3 mBreastLastPosition_local_pt; // Last parameters for breast + LLVector3 mBreastVelocity_local_vec; // How fast the breast params are moving + LLVector3 mBreastLastUpdatePosition_local_pt; // Last parameters when visual update was sent + + + F32 mBreastMassParam; + F32 mBreastGravityParam; + U32 mBreastSmoothingParam; + + LLVector3 mBreastSpringParam; + LLVector3 mBreastDampingParam; + LLVector3 mBreastGainParam; + LLVector3 mBreastMaxVelocityParam; + LLVector3 mBreastDragParam; + + LLFrameTimer mTimer; + F32 mLastTime; + + U32 mFileTicks; +}; + +#endif // LL_LLBREASTMOTION_H + diff --git a/indra/newview/lldriverparam.h b/indra/newview/lldriverparam.h index a0e45cf5e5..fb1b44458c 100644 --- a/indra/newview/lldriverparam.h +++ b/indra/newview/lldriverparam.h @@ -30,6 +30,7 @@ #include "llviewervisualparam.h" #include "llwearabletype.h" +class LLPhysicsMotion; class LLVOAvatar; class LLWearable; @@ -76,6 +77,7 @@ protected: class LLDriverParam : public LLViewerVisualParam { + friend class LLPhysicsMotion; // physics motion needs to access driven params directly. public: LLDriverParam(LLVOAvatar *avatarp); LLDriverParam(LLWearable *wearablep); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 724096b443..ffbb0efad3 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1200,6 +1200,7 @@ void LLFloaterPreference::refresh() updateSliderText(getChild<LLSliderCtrl>("FlexibleMeshDetail", true), getChild<LLTextBox>("FlexibleMeshDetailText", true)); updateSliderText(getChild<LLSliderCtrl>("TreeMeshDetail", true), getChild<LLTextBox>("TreeMeshDetailText", true)); updateSliderText(getChild<LLSliderCtrl>("AvatarMeshDetail", true), getChild<LLTextBox>("AvatarMeshDetailText", true)); + updateSliderText(getChild<LLSliderCtrl>("AvatarPhysicsDetail", true), getChild<LLTextBox>("AvatarPhysicsDetailText", true)); updateSliderText(getChild<LLSliderCtrl>("TerrainMeshDetail", true), getChild<LLTextBox>("TerrainMeshDetailText", true)); updateSliderText(getChild<LLSliderCtrl>("RenderPostProcess", true), getChild<LLTextBox>("PostProcessText", true)); updateSliderText(getChild<LLSliderCtrl>("SkyMeshDetail", true), getChild<LLTextBox>("SkyMeshDetailText", true)); diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 19f6038b56..87d048c15b 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -223,7 +223,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) columns[3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); columns[3]["font"] = "SANSSERIF"; columns[4]["column"] = "time"; - columns[4]["value"] = formatted_time((time_t)time_stamp); + columns[4]["type"] = "date"; + columns[4]["value"] = LLDate((time_t)time_stamp); columns[4]["font"] = "SANSSERIF"; if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 7546c070ea..ce936a9924 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -52,6 +52,7 @@ #include <boost/regex.hpp> #if LL_MSVC +#pragma warning(push) // disable boost::lexical_cast warning #pragma warning (disable:4702) #endif diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 4c2e0fa709..622a5607df 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4674,10 +4674,18 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) else { items.push_back(std::string("Wearable And Object Wear")); - items.push_back(std::string("Wearable Add")); disabled_items.push_back(std::string("Take Off")); disabled_items.push_back(std::string("Wearable Edit")); } + + if (LLWearableType::getAllowMultiwear(mWearableType)) + { + items.push_back(std::string("Wearable Add")); + if (gAgentWearables.getWearableCount(mWearableType) > 0) + { + disabled_items.push_back(std::string("Wearable Add")); + } + } break; default: break; diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp index 3f4f33e88d..95dea219a8 100644 --- a/indra/newview/llinventoryicon.cpp +++ b/indra/newview/llinventoryicon.cpp @@ -82,6 +82,8 @@ LLIconDictionary::LLIconDictionary() addEntry(LLInventoryIcon::ICONNAME_ANIMATION, new IconEntry("Inv_Animation")); addEntry(LLInventoryIcon::ICONNAME_GESTURE, new IconEntry("Inv_Gesture")); + addEntry(LLInventoryIcon::ICONNAME_CLOTHING_PHYSICS, new IconEntry("Inv_Physics")); + addEntry(LLInventoryIcon::ICONNAME_LINKITEM, new IconEntry("Inv_LinkItem")); addEntry(LLInventoryIcon::ICONNAME_LINKFOLDER, new IconEntry("Inv_LinkFolder")); diff --git a/indra/newview/llinventoryicon.h b/indra/newview/llinventoryicon.h index 9a2cc08095..694b56d572 100644 --- a/indra/newview/llinventoryicon.h +++ b/indra/newview/llinventoryicon.h @@ -66,9 +66,11 @@ public: ICONNAME_CLOTHING_SKIRT, ICONNAME_CLOTHING_ALPHA, ICONNAME_CLOTHING_TATTOO, - + ICONNAME_ANIMATION, ICONNAME_GESTURE, + + ICONNAME_CLOTHING_PHYSICS, ICONNAME_LINKITEM, ICONNAME_LINKFOLDER, diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index 9adf374c71..2df683861a 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -41,6 +41,7 @@ #include <boost/regex/v4/match_results.hpp> #if LL_MSVC +#pragma warning(push) // disable warning about boost::lexical_cast unreachable code // when it fails to parse the string #pragma warning (disable:4702) diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 4a74b7925c..4db9a154ea 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -94,7 +94,13 @@ enum ESubpart { SUBPART_UNDERPANTS, SUBPART_SKIRT, SUBPART_ALPHA, - SUBPART_TATTOO + SUBPART_TATTOO, + SUBPART_PHYSICS_BREASTS_UPDOWN, + SUBPART_PHYSICS_BREASTS_INOUT, + SUBPART_PHYSICS_BELLY_UPDOWN, + SUBPART_PHYSICS_BUTT_UPDOWN, + SUBPART_PHYSICS_BUTT_LEFTRIGHT, + SUBPART_PHYSICS_ADVANCED, }; using namespace LLVOAvatarDefines; @@ -218,7 +224,7 @@ LLEditWearableDictionary::Wearables::Wearables() // note the subpart that is listed first is treated as "default", regardless of what order is in enum. // Please match the order presented in XUI. -Nyx // this will affect what camera angle is shown when first editing a wearable - addEntry(LLWearableType::WT_SHAPE, new WearableEntry(LLWearableType::WT_SHAPE,"edit_shape_title","shape_desc_text",0,0,9, SUBPART_SHAPE_WHOLE, SUBPART_SHAPE_HEAD, SUBPART_SHAPE_EYES, SUBPART_SHAPE_EARS, SUBPART_SHAPE_NOSE, SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS )); + addEntry(LLWearableType::WT_SHAPE, new WearableEntry(LLWearableType::WT_SHAPE,"edit_shape_title","shape_desc_text",0,0,9, SUBPART_SHAPE_WHOLE, SUBPART_SHAPE_HEAD, SUBPART_SHAPE_EYES, SUBPART_SHAPE_EARS, SUBPART_SHAPE_NOSE, SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS)); addEntry(LLWearableType::WT_SKIN, new WearableEntry(LLWearableType::WT_SKIN,"edit_skin_title","skin_desc_text",0,3,4, TEX_HEAD_BODYPAINT, TEX_UPPER_BODYPAINT, TEX_LOWER_BODYPAINT, SUBPART_SKIN_COLOR, SUBPART_SKIN_FACEDETAIL, SUBPART_SKIN_MAKEUP, SUBPART_SKIN_BODYDETAIL)); addEntry(LLWearableType::WT_HAIR, new WearableEntry(LLWearableType::WT_HAIR,"edit_hair_title","hair_desc_text",0,1,4, TEX_HAIR, SUBPART_HAIR_COLOR, SUBPART_HAIR_STYLE, SUBPART_HAIR_EYEBROWS, SUBPART_HAIR_FACIAL)); addEntry(LLWearableType::WT_EYES, new WearableEntry(LLWearableType::WT_EYES,"edit_eyes_title","eyes_desc_text",0,1,1, TEX_EYES_IRIS, SUBPART_EYES)); @@ -233,6 +239,7 @@ LLEditWearableDictionary::Wearables::Wearables() addEntry(LLWearableType::WT_SKIRT, new WearableEntry(LLWearableType::WT_SKIRT,"edit_skirt_title","skirt_desc_text",1,1,1, TEX_SKIRT, TEX_SKIRT, SUBPART_SKIRT)); addEntry(LLWearableType::WT_ALPHA, new WearableEntry(LLWearableType::WT_ALPHA,"edit_alpha_title","alpha_desc_text",0,5,1, TEX_LOWER_ALPHA, TEX_UPPER_ALPHA, TEX_HEAD_ALPHA, TEX_EYES_ALPHA, TEX_HAIR_ALPHA, SUBPART_ALPHA)); addEntry(LLWearableType::WT_TATTOO, new WearableEntry(LLWearableType::WT_TATTOO,"edit_tattoo_title","tattoo_desc_text",1,3,1, TEX_HEAD_TATTOO, TEX_LOWER_TATTOO, TEX_UPPER_TATTOO, TEX_HEAD_TATTOO, SUBPART_TATTOO)); + addEntry(LLWearableType::WT_PHYSICS, new WearableEntry(LLWearableType::WT_PHYSICS,"edit_physics_title","physics_desc_text",0,0,6, SUBPART_PHYSICS_BREASTS_UPDOWN, SUBPART_PHYSICS_BREASTS_INOUT, SUBPART_PHYSICS_BELLY_UPDOWN, SUBPART_PHYSICS_BUTT_UPDOWN, SUBPART_PHYSICS_BUTT_LEFTRIGHT, SUBPART_PHYSICS_ADVANCED)); } LLEditWearableDictionary::WearableEntry::WearableEntry(LLWearableType::EType type, @@ -303,6 +310,12 @@ LLEditWearableDictionary::Subparts::Subparts() addEntry(SUBPART_UNDERPANTS, new SubpartEntry(SUBPART_UNDERPANTS, "mPelvis", "underpants", "underpants_main_param_list", "underpants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH)); addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha", "alpha_main_param_list", "alpha_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH)); addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", "tattoo_main_param_list", "tattoo_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH)); + addEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, "mTorso", "physics_breasts_updown", "physics_breasts_updown_param_list", "physics_breasts_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE)); + addEntry(SUBPART_PHYSICS_BREASTS_INOUT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_INOUT, "mTorso", "physics_breasts_inout", "physics_breasts_inout_param_list", "physics_breasts_inout_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE)); + addEntry(SUBPART_PHYSICS_BELLY_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BELLY_UPDOWN, "mTorso", "physics_belly_updown", "physics_belly_updown_param_list", "physics_belly_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); + addEntry(SUBPART_PHYSICS_BUTT_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BUTT_UPDOWN, "mTorso", "physics_butt_updown", "physics_butt_updown_param_list", "physics_butt_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); + addEntry(SUBPART_PHYSICS_BUTT_LEFTRIGHT, new SubpartEntry(SUBPART_PHYSICS_BUTT_LEFTRIGHT, "mTorso", "physics_butt_leftright", "physics_butt_leftright_param_list", "physics_butt_leftright_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); + addEntry(SUBPART_PHYSICS_ADVANCED, new SubpartEntry(SUBPART_PHYSICS_ADVANCED, "mTorso", "physics_advanced", "physics_advanced_param_list", "physics_advanced_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); } LLEditWearableDictionary::SubpartEntry::SubpartEntry(ESubpart part, @@ -740,6 +753,7 @@ BOOL LLPanelEditWearable::postBuild() mPanelSkirt = getChild<LLPanel>("edit_skirt_panel"); mPanelAlpha = getChild<LLPanel>("edit_alpha_panel"); mPanelTattoo = getChild<LLPanel>("edit_tattoo_panel"); + mPanelPhysics = getChild<LLPanel>("edit_physics_panel"); mTxtAvatarHeight = mPanelShape->getChild<LLTextBox>("avatar_height"); @@ -848,11 +862,11 @@ void LLPanelEditWearable::setVisible(BOOL visible) LLPanel::setVisible(visible); } -void LLPanelEditWearable::setWearable(LLWearable *wearable) +void LLPanelEditWearable::setWearable(LLWearable *wearable, BOOL disable_camera_switch) { - showWearable(mWearablePtr, FALSE); + showWearable(mWearablePtr, FALSE, disable_camera_switch); mWearablePtr = wearable; - showWearable(mWearablePtr, TRUE); + showWearable(mWearablePtr, TRUE, disable_camera_switch); } @@ -1052,7 +1066,7 @@ void LLPanelEditWearable::revertChanges() gAgentAvatarp->wearableUpdated(mWearablePtr->getType(), FALSE); } -void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show) +void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show, BOOL disable_camera_switch) { if (!wearable) { @@ -1147,7 +1161,10 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show) updateScrollingPanelUI(); } - showDefaultSubpart(); + if (!disable_camera_switch) + { + showDefaultSubpart(); + } updateVerbs(); } @@ -1155,7 +1172,7 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show) void LLPanelEditWearable::showDefaultSubpart() { - changeCamera(0); + changeCamera(3); } void LLPanelEditWearable::onTabExpandedCollapsed(const LLSD& param, U8 index) @@ -1356,6 +1373,11 @@ LLPanel* LLPanelEditWearable::getPanel(LLWearableType::EType type) case LLWearableType::WT_TATTOO: return mPanelTattoo; break; + + case LLWearableType::WT_PHYSICS: + return mPanelPhysics; + break; + default: break; } @@ -1403,7 +1425,16 @@ void LLPanelEditWearable::buildParamList(LLScrollingPanelList *panel_list, value { LLPanel::Params p; p.name("LLScrollingPanelParam"); - LLScrollingPanelParam* panel_param = new LLScrollingPanelParam( p, NULL, (*it).second, TRUE, this->getWearable(), jointp); + LLWearable *wearable = this->getWearable(); + LLScrollingPanelParamBase *panel_param = NULL; + if (wearable && wearable->getType() == LLWearableType::WT_PHYSICS) // Hack to show a different panel for physics. Should generalize this later. + { + panel_param = new LLScrollingPanelParamBase( p, NULL, (*it).second, TRUE, this->getWearable(), jointp); + } + else + { + panel_param = new LLScrollingPanelParam( p, NULL, (*it).second, TRUE, this->getWearable(), jointp); + } height = panel_list->addPanel( panel_param ); } } diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index 43513d8ab3..692a7ce90f 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -55,8 +55,11 @@ public: /*virtual*/ BOOL isDirty() const; // LLUICtrl /*virtual*/ void draw(); + // changes camera angle to default for selected subpart + void changeCamera(U8 subpart); + LLWearable* getWearable() { return mWearablePtr; } - void setWearable(LLWearable *wearable); + void setWearable(LLWearable *wearable, BOOL disable_camera_switch = FALSE); void saveChanges(bool force_save_as = false); void revertChanges(); @@ -77,7 +80,7 @@ public: private: typedef std::map<F32, LLViewerVisualParam*> value_map_t; - void showWearable(LLWearable* wearable, BOOL show); + void showWearable(LLWearable* wearable, BOOL show, BOOL disable_camera_switch = FALSE); void updateScrollingPanelUI(); LLPanel* getPanel(LLWearableType::EType type); void getSortedParams(value_map_t &sorted_params, const std::string &edit_group); @@ -91,9 +94,6 @@ private: void toggleTypeSpecificControls(LLWearableType::EType type); void updateTypeSpecificControls(LLWearableType::EType type); - // changes camera angle to default for selected subpart - void changeCamera(U8 subpart); - //alpha mask checkboxes void configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name); void onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLVOAvatarDefines::ETextureIndex te); @@ -163,6 +163,7 @@ private: LLPanel *mPanelSkirt; LLPanel *mPanelAlpha; LLPanel *mPanelTattoo; + LLPanel *mPanelPhysics; typedef std::map<std::string, LLVOAvatarDefines::ETextureIndex> string_texture_index_map_t; string_texture_index_map_t mAlphaCheckbox2Index; diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index c10c21683b..62f582c343 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -466,6 +466,7 @@ BOOL LLPanelOutfitEdit::postBuild() mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("skirt"), new LLFindActualWearablesOfType(LLWearableType::WT_SKIRT))); mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("alpha"), new LLFindActualWearablesOfType(LLWearableType::WT_ALPHA))); mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("tattoo"), new LLFindActualWearablesOfType(LLWearableType::WT_TATTOO))); + mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("physics"), new LLFindActualWearablesOfType(LLWearableType::WT_PHYSICS))); mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name"); mStatus = getChild<LLTextBox>("status"); @@ -1323,19 +1324,19 @@ void LLPanelOutfitEdit::getCurrentItemUUID(LLUUID& selected_id) void LLPanelOutfitEdit::getSelectedItemsUUID(uuid_vec_t& uuid_list) { + void (uuid_vec_t::* tmp)(LLUUID const &) = &uuid_vec_t::push_back; if (mInventoryItemsPanel->getVisible()) { std::set<LLUUID> item_set = mInventoryItemsPanel->getRootFolder()->getSelectionList(); - std::for_each(item_set.begin(), item_set.end(), boost::bind( &uuid_vec_t::push_back, &uuid_list, _1)); + std::for_each(item_set.begin(), item_set.end(), boost::bind( tmp, &uuid_list, _1)); } else if (mWearablesListViewPanel->getVisible()) { std::vector<LLSD> item_set; mWearableItemsList->getSelectedValues(item_set); - std::for_each(item_set.begin(), item_set.end(), boost::bind( &uuid_vec_t::push_back, &uuid_list, boost::bind(&LLSD::asUUID, _1 ))); - + std::for_each(item_set.begin(), item_set.end(), boost::bind( tmp, &uuid_list, boost::bind(&LLSD::asUUID, _1 ))); } // return selected_id; diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index fd366e9cbc..5d4b8d4644 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -97,6 +97,7 @@ public: LVIT_SKIRT, LVIT_ALPHA, LVIT_TATTOO, + LVIT_PHYSICS, NUM_LIST_VIEW_ITEM_TYPES } EListViewItemType; diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp new file mode 100644 index 0000000000..73de1cef3f --- /dev/null +++ b/indra/newview/llphysicsmotion.cpp @@ -0,0 +1,698 @@ +/**
+ * @file llphysicsmotion.cpp
+ * @brief Implementation of LLPhysicsMotion class.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+//-----------------------------------------------------------------------------
+// Header Files
+//-----------------------------------------------------------------------------
+#include "llviewerprecompiledheaders.h"
+#include "linden_common.h"
+
+#include "m3math.h"
+#include "v3dmath.h"
+
+#include "llphysicsmotion.h"
+#include "llcharacter.h"
+#include "llviewercontrol.h"
+#include "llviewervisualparam.h"
+#include "llvoavatarself.h"
+
+typedef std::map<std::string, std::string> controller_map_t;
+typedef std::map<std::string, F32> default_controller_map_t;
+
+#define MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION 0.f;
+
+inline F64 llsgn(const F64 a)
+{
+ if (a >= 0)
+ return 1;
+ return -1;
+}
+
+/*
+ At a high level, this works by setting temporary parameters that are not stored
+ in the avatar's list of params, and are not conveyed to other users. We accomplish
+ this by creating some new temporary driven params inside avatar_lad that are then driven
+ by the actual params that the user sees and sets. For example, in the old system,
+ the user sets a param called breast bouyancy, which controls the Z value of the breasts.
+ In our new system, the user still sets the breast bouyancy, but that param is redefined
+ as a driver param so that affects a new temporary driven param that the bounce is applied
+ to.
+*/
+
+class LLPhysicsMotion
+{
+public:
+ /*
+ param_user_name: The param (if any) that the user sees and controls. This is what
+ the particular property would look like without physics. For example, it may be
+ the breast gravity. This param's value should will not be altered, and is only
+ used as a reference point for the rest position of the body party. This is usually
+ a driver param and the param(s) that physics is altering are the driven params.
+
+ param_driven_name: The param whose value is actually set by the physics. If you
+ leave this blank (which should suffice normally), the physics will assume that
+ param_user_name is a driver param and will set the params that the driver is
+ in charge of (i.e. the "driven" params).
+
+ joint_name: The joint that the body part is attached to. The joint is
+ used to determine the orientation (rotation) of the body part.
+
+ character: The avatar that this physics affects.
+
+ motion_direction_vec: The direction (in world coordinates) that determines the
+ motion. For example, (0,0,1) is up-down, and means that up-down motion is what
+ determines how this joint moves.
+
+ controllers: The various settings (e.g. spring force, mass) that determine how
+ the body part behaves.
+ */
+ LLPhysicsMotion(const std::string ¶m_user_name,
+ const std::string ¶m_driven_name,
+ const std::string &joint_name,
+ LLCharacter *character,
+ const LLVector3 &motion_direction_vec,
+ const controller_map_t &controllers) :
+ mParamUserName(param_user_name),
+ mParamDrivenName(param_driven_name),
+ mJointName(joint_name),
+ mMotionDirectionVec(motion_direction_vec),
+ mParamUser(NULL),
+ mParamDriven(NULL),
+
+ mParamControllers(controllers),
+ mCharacter(character),
+ mLastTime(0),
+ mPosition_local(0),
+ mVelocityJoint_local(0),
+ mPositionLastUpdate_local(0)
+ {
+ mJointState = new LLJointState;
+ }
+
+ BOOL initialize();
+
+ ~LLPhysicsMotion() {}
+
+ BOOL onUpdate(F32 time);
+
+ LLPointer<LLJointState> getJointState()
+ {
+ return mJointState;
+ }
+protected:
+ F32 getParamValue(const std::string& controller_key)
+ {
+ const controller_map_t::const_iterator& entry = mParamControllers.find(controller_key);
+ if (entry == mParamControllers.end())
+ {
+ return sDefaultController[controller_key];
+ }
+ const std::string& param_name = (*entry).second.c_str();
+ return mCharacter->getVisualParamWeight(param_name.c_str());
+ }
+ void setParamValue(LLViewerVisualParam *param,
+ const F32 new_value_local);
+
+ F32 toLocal(const LLVector3 &world);
+ F32 calculateVelocity_local(const F32 time_delta);
+ F32 calculateAcceleration_local(F32 velocity_local,
+ const F32 time_delta);
+private:
+ const std::string mParamDrivenName;
+ const std::string mParamUserName;
+ const LLVector3 mMotionDirectionVec;
+ const std::string mJointName;
+
+ F32 mPosition_local;
+ F32 mVelocityJoint_local; // How fast the joint is moving
+ F32 mAccelerationJoint_local; // Acceleration on the joint
+
+ F32 mVelocity_local; // How fast the param is moving
+ F32 mPositionLastUpdate_local;
+ LLVector3 mPosition_world;
+
+ LLViewerVisualParam *mParamUser;
+ LLViewerVisualParam *mParamDriven;
+ const controller_map_t mParamControllers;
+
+ LLPointer<LLJointState> mJointState;
+ LLCharacter *mCharacter;
+
+ F32 mLastTime;
+
+ static default_controller_map_t sDefaultController;
+};
+
+default_controller_map_t initDefaultController()
+{
+ default_controller_map_t controller;
+ controller["Mass"] = 0.2f;
+ controller["Smoothing"] = 2.0f;
+ controller["Gravity"] = 0.0f;
+ controller["Damping"] = .05f;
+ controller["Drag"] = 0.15f;
+ controller["MaxSpeed"] = 0.1f;
+ controller["Spring"] = 0.1f;
+ controller["Gain"] = 10.0f;
+ return controller;
+}
+
+default_controller_map_t LLPhysicsMotion::sDefaultController = initDefaultController();
+
+BOOL LLPhysicsMotion::initialize()
+{
+ if (!mJointState->setJoint(mCharacter->getJoint(mJointName.c_str())))
+ return FALSE;
+ mJointState->setUsage(LLJointState::ROT);
+
+ mParamUser = (LLViewerVisualParam*)mCharacter->getVisualParam(mParamUserName.c_str());
+ if (mParamDrivenName != "")
+ mParamDriven = (LLViewerVisualParam*)mCharacter->getVisualParam(mParamDrivenName.c_str());
+ if (mParamUser == NULL)
+ {
+ llinfos << "Failure reading in [ " << mParamUserName << " ]" << llendl;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+LLPhysicsMotionController::LLPhysicsMotionController(const LLUUID &id) :
+ LLMotion(id),
+ mCharacter(NULL)
+{
+ mName = "breast_motion";
+}
+
+LLPhysicsMotionController::~LLPhysicsMotionController()
+{
+ for (motion_vec_t::iterator iter = mMotions.begin();
+ iter != mMotions.end();
+ ++iter)
+ {
+ delete (*iter);
+ }
+}
+
+BOOL LLPhysicsMotionController::onActivate()
+{
+ return TRUE;
+}
+
+void LLPhysicsMotionController::onDeactivate()
+{
+}
+
+LLMotion::LLMotionInitStatus LLPhysicsMotionController::onInitialize(LLCharacter *character)
+{
+ mCharacter = character;
+
+ mMotions.clear();
+
+ // Breast Cleavage
+ {
+ controller_map_t controller;
+ controller["Mass"] = "Breast_Physics_Mass";
+ controller["Smoothing"] = "Breast_Physics_Smoothing";
+ controller["Gravity"] = "Breast_Physics_Gravity";
+ controller["Damping"] = "Breast_Physics_InOut_Damping";
+ controller["Drag"] = "Breast_Physics_InOut_Drag";
+ controller["MaxSpeed"] = "Breast_Physics_InOut_Max_Velocity";
+ controller["Spring"] = "Breast_Physics_InOut_Spring";
+ controller["Gain"] = "Breast_Physics_InOut_Gain";
+ LLPhysicsMotion *motion = new LLPhysicsMotion("Breast_Physics_InOut_Controller",
+ "",
+ "mChest",
+ character,
+ LLVector3(-1,0,0),
+ controller);
+ if (!motion->initialize())
+ {
+ llassert_always(FALSE);
+ return STATUS_FAILURE;
+ }
+ addMotion(motion);
+ }
+
+ // Breast Bounce
+ {
+ controller_map_t controller;
+ controller["Mass"] = "Breast_Physics_Mass";
+ controller["Smoothing"] = "Breast_Physics_Smoothing";
+ controller["Gravity"] = "Breast_Physics_Gravity";
+ controller["Damping"] = "Breast_Physics_UpDown_Damping";
+ controller["Drag"] = "Breast_Physics_UpDown_Drag";
+ controller["MaxSpeed"] = "Breast_Physics_UpDown_Max_Velocity";
+ controller["Spring"] = "Breast_Physics_UpDown_Spring";
+ controller["Gain"] = "Breast_Physics_UpDown_Gain";
+ LLPhysicsMotion *motion = new LLPhysicsMotion("Breast_Physics_UpDown_Controller",
+ "",
+ "mChest",
+ character,
+ LLVector3(0,0,1),
+ controller);
+ if (!motion->initialize())
+ {
+ llassert_always(FALSE);
+ return STATUS_FAILURE;
+ }
+ addMotion(motion);
+ }
+
+ // Butt Bounce
+ {
+ controller_map_t controller;
+ controller["Mass"] = "Butt_Physics_Mass";
+ controller["Smoothing"] = "Butt_Physics_Smoothing";
+ controller["Gravity"] = "Butt_Physics_Gravity";
+ controller["Damping"] = "Butt_Physics_UpDown_Damping";
+ controller["Drag"] = "Butt_Physics_UpDown_Drag";
+ controller["MaxSpeed"] = "Butt_Physics_UpDown_Max_Velocity";
+ controller["Spring"] = "Butt_Physics_UpDown_Spring";
+ controller["Gain"] = "Butt_Physics_UpDown_Gain";
+ LLPhysicsMotion *motion = new LLPhysicsMotion("Butt_Physics_UpDown_Controller",
+ "",
+ "mPelvis",
+ character,
+ LLVector3(0,0,1),
+ controller);
+ if (!motion->initialize())
+ {
+ llassert_always(FALSE);
+ return STATUS_FAILURE;
+ }
+ addMotion(motion);
+ }
+
+ // Butt LeftRight
+ {
+ controller_map_t controller;
+ controller["Mass"] = "Butt_Physics_Mass";
+ controller["Smoothing"] = "Butt_Physics_Smoothing";
+ controller["Gravity"] = "Butt_Physics_Gravity";
+ controller["Damping"] = "Butt_Physics_LeftRight_Damping";
+ controller["Drag"] = "Butt_Physics_LeftRight_Drag";
+ controller["MaxSpeed"] = "Butt_Physics_LeftRight_Max_Velocity";
+ controller["Spring"] = "Butt_Physics_LeftRight_Spring";
+ controller["Gain"] = "Butt_Physics_LeftRight_Gain";
+ LLPhysicsMotion *motion = new LLPhysicsMotion("Butt_Physics_LeftRight_Controller",
+ "",
+ "mPelvis",
+ character,
+ LLVector3(0,1,0),
+ controller);
+ if (!motion->initialize())
+ {
+ llassert_always(FALSE);
+ return STATUS_FAILURE;
+ }
+ addMotion(motion);
+ }
+
+ // Belly Bounce
+ {
+ controller_map_t controller;
+ controller["Mass"] = "Belly_Physics_Mass";
+ controller["Smoothing"] = "Belly_Physics_Smoothing";
+ controller["Gravity"] = "Belly_Physics_Gravity";
+ controller["Damping"] = "Belly_Physics_UpDown_Damping";
+ controller["Drag"] = "Belly_Physics_UpDown_Drag";
+ controller["MaxSpeed"] = "Belly_Physics_UpDown_Max_Velocity";
+ controller["Spring"] = "Belly_Physics_UpDown_Spring";
+ controller["Gain"] = "Belly_Physics_UpDown_Gain";
+ LLPhysicsMotion *motion = new LLPhysicsMotion("Belly_Physics_UpDown_Controller",
+ "",
+ "mPelvis",
+ character,
+ LLVector3(0,0,-1),
+ controller);
+ if (!motion->initialize())
+ {
+ llassert_always(FALSE);
+ return STATUS_FAILURE;
+ }
+ addMotion(motion);
+ }
+
+ return STATUS_SUCCESS;
+}
+
+void LLPhysicsMotionController::addMotion(LLPhysicsMotion *motion)
+{
+ addJointState(motion->getJointState());
+ mMotions.push_back(motion);
+}
+
+F32 LLPhysicsMotionController::getMinPixelArea()
+{
+ return MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION;
+}
+
+// Local space means "parameter space".
+F32 LLPhysicsMotion::toLocal(const LLVector3 &world)
+{
+ LLJoint *joint = mJointState->getJoint();
+ const LLQuaternion rotation_world = joint->getWorldRotation();
+
+ LLVector3 dir_world = mMotionDirectionVec * rotation_world;
+ dir_world.normalize();
+ return world * dir_world;
+}
+
+F32 LLPhysicsMotion::calculateVelocity_local(const F32 time_delta)
+{
+ LLJoint *joint = mJointState->getJoint();
+ const LLVector3 position_world = joint->getWorldPosition();
+ const LLQuaternion rotation_world = joint->getWorldRotation();
+ const LLVector3 last_position_world = mPosition_world;
+ const LLVector3 velocity_world = (position_world-last_position_world) / time_delta;
+ const F32 velocity_local = toLocal(velocity_world);
+ return velocity_local;
+}
+
+F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local,
+ const F32 time_delta)
+{
+ const F32 smoothing = getParamValue("Smoothing");
+ const F32 acceleration_local = velocity_local - mVelocityJoint_local;
+
+ const F32 smoothed_acceleration_local =
+ acceleration_local * 1.0/smoothing +
+ mAccelerationJoint_local * (smoothing-1.0)/smoothing;
+
+ return smoothed_acceleration_local;
+}
+
+BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask)
+{
+ // Skip if disabled globally.
+ if (!gSavedSettings.getBOOL("AvatarPhysics"))
+ {
+ return TRUE;
+ }
+
+ BOOL update_visuals = FALSE;
+ for (motion_vec_t::iterator iter = mMotions.begin();
+ iter != mMotions.end();
+ ++iter)
+ {
+ LLPhysicsMotion *motion = (*iter);
+ update_visuals |= motion->onUpdate(time);
+ }
+
+ if (update_visuals)
+ mCharacter->updateVisualParams();
+
+ return TRUE;
+}
+
+
+// Return TRUE if character has to update visual params.
+BOOL LLPhysicsMotion::onUpdate(F32 time)
+{
+ // static FILE *mFileWrite = fopen("c:\\temp\\avatar_data.txt","w");
+
+ if (!mParamUser)
+ return FALSE;
+
+ if (!mLastTime)
+ {
+ mLastTime = time;
+ return FALSE;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Get all parameters and settings
+ //
+
+ const F32 time_delta = time - mLastTime;
+ if (time_delta > 3.0 || time_delta <= 0.01)
+ {
+ mLastTime = time;
+ return FALSE;
+ }
+
+ // Higher LOD is better. This controls the granularity
+ // and frequency of updates for the motions.
+ const F32 lod_factor = LLVOAvatar::sPhysicsLODFactor;
+ if (lod_factor == 0)
+ {
+ return TRUE;
+ }
+
+ LLJoint *joint = mJointState->getJoint();
+
+ const F32 behavior_mass = getParamValue("Mass");
+ const F32 behavior_gravity = getParamValue("Gravity");
+ const F32 behavior_spring = getParamValue("Spring");
+ const F32 behavior_gain = getParamValue("Gain");
+ const F32 behavior_damping = getParamValue("Damping");
+ const F32 behavior_drag = getParamValue("Drag");
+ const BOOL physics_test = gSavedSettings.getBOOL("AvatarPhysicsTest");
+
+ F32 behavior_maxspeed = getParamValue("MaxSpeed");
+ if (physics_test)
+ behavior_maxspeed = 100.0f;
+
+ if (behavior_maxspeed == 0)
+ return FALSE;
+
+ F32 position_current_local = llclamp(mPosition_local,
+ 0.0f,
+ 1.0f); // Normalized [0,1] range
+
+ // Normalize the param position to be from [0,1].
+ // We have to use normalized values because there may be more than one driven param,
+ // and each of these driven params may have its own range.
+ // This means we'll do all our calculations in normalized [0,1] local coordinates.
+ F32 position_user_local = mParamUser->getWeight();
+ position_user_local = (position_user_local - mParamUser->getMinWeight()) / (mParamUser->getMaxWeight() - mParamUser->getMinWeight());
+
+ //
+ // End parameters and settings
+ ////////////////////////////////////////////////////////////////////////////////
+
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Calculate velocity and acceleration in parameter space.
+ //
+
+ const F32 velocity_joint_local = calculateVelocity_local(time_delta);
+ const F32 acceleration_joint_local = calculateAcceleration_local(velocity_joint_local, time_delta);
+
+ //
+ // End velocity and acceleration
+ ////////////////////////////////////////////////////////////////////////////////
+
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Calculate the total force
+ //
+
+ // Spring force is a restoring force towards the original user-set breast position.
+ // F = kx
+ const F32 spring_length = position_current_local - position_user_local;
+ const F32 force_spring = -spring_length * behavior_spring;
+
+ // Acceleration is the force that comes from the change in velocity of the torso.
+ // F = ma
+ const F32 force_accel = behavior_gain * (acceleration_joint_local * behavior_mass);
+
+ // Gravity always points downward in world space.
+ // F = mg
+ const LLVector3 gravity_world(0,0,1);
+ const F32 force_gravity = behavior_gain * (toLocal(gravity_world) * behavior_gravity * behavior_mass);
+
+ // Damping is a restoring force that opposes the current velocity.
+ // F = -kv
+ const F32 force_damping = -behavior_damping * mVelocity_local;
+
+ // Drag is a force imparted by velocity (intuitively it is similar to wind resistance)
+ // F = .5kv^2
+ const F32 force_drag = .5*behavior_drag*velocity_joint_local*velocity_joint_local*llsgn(velocity_joint_local);
+
+ const F32 force_net = (force_accel +
+ force_gravity +
+ force_spring +
+ force_damping +
+ force_drag);
+
+ //
+ // End total force
+ ////////////////////////////////////////////////////////////////////////////////
+
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Calculate new params
+ //
+
+ // Calculate the new acceleration based on the net force.
+ // a = F/m
+ const F32 acceleration_new_local = force_net / behavior_mass;
+ F32 velocity_new_local = mVelocity_local + acceleration_new_local;
+ velocity_new_local = llclamp(velocity_new_local,
+ -behavior_maxspeed, behavior_maxspeed);
+
+ // Temporary debugging setting to cause all avatars to move, for profiling purposes.
+ if (physics_test)
+ {
+ velocity_new_local = sin(time*4.0);
+ }
+ // Calculate the new parameters, or remain unchanged if max speed is 0.
+ const F32 position_new_local = (behavior_maxspeed != 0) ?
+ (position_current_local + velocity_new_local*time_delta) :
+ position_user_local;
+
+ // Zero out the velocity if the param is being pushed beyond its limits.
+ if (position_new_local < 0 || position_new_local > 1)
+ {
+ velocity_new_local = 0;
+ }
+
+ const F32 position_new_local_clamped = llclamp(position_new_local,
+ 0.0f,
+ 1.0f);
+
+ // Set the new param.
+ // If a specific param has been declared, then set that one.
+ // Otherwise, assume that the param is a driver param, and
+ // set the params that it drives.
+ if (mParamDriven)
+ {
+ setParamValue(mParamDriven,position_new_local_clamped);
+ }
+ else
+ {
+ LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamUser);
+ llassert_always(driver_param);
+ if (driver_param)
+ {
+ for (LLDriverParam::entry_list_t::iterator iter = driver_param->mDriven.begin();
+ iter != driver_param->mDriven.end();
+ ++iter)
+ {
+ LLDrivenEntry &entry = (*iter);
+ LLViewerVisualParam *driven_param = entry.mParam;
+ setParamValue(driven_param,position_new_local_clamped);
+ }
+ }
+ }
+
+ //
+ // End calculate new params
+ ////////////////////////////////////////////////////////////////////////////////
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Conditionally update the visual params
+ //
+
+ // Updating the visual params (i.e. what the user sees) is fairly expensive.
+ // So only update if the params have changed enough, and also take into account
+ // the graphics LOD settings.
+
+ BOOL update_visuals = FALSE;
+
+ // For non-self, if the avatar is small enough visually, then don't update.
+ const F32 area_for_max_settings = 0.0;
+ const F32 area_for_min_settings = 1400.0;
+ const F32 area_for_this_setting = area_for_max_settings + (area_for_min_settings-area_for_max_settings)*(1.0-lod_factor);
+ const F32 pixel_area = fsqrtf(mCharacter->getPixelArea());
+
+ const BOOL is_self = (dynamic_cast<LLVOAvatarSelf *>(mCharacter) != NULL);
+ if ((pixel_area > area_for_this_setting) || is_self)
+ {
+ const F32 position_diff_local = llabs(mPositionLastUpdate_local-position_new_local_clamped);
+ const F32 min_delta = (1.01f-lod_factor)*0.4f;
+ if (llabs(position_diff_local) > min_delta)
+ {
+ update_visuals = TRUE;
+ mPositionLastUpdate_local = position_new_local;
+ }
+ }
+
+ //
+ // End update visual params
+ ////////////////////////////////////////////////////////////////////////////////
+
+ mVelocityJoint_local = velocity_joint_local;
+
+ mVelocity_local = velocity_new_local;
+ mAccelerationJoint_local = acceleration_joint_local;
+ mPosition_local = position_new_local;
+
+ mPosition_world = joint->getWorldPosition();
+ mLastTime = time;
+
+ /*
+ // Write out debugging info into a spreadsheet.
+ if (mFileWrite != NULL && is_self)
+ {
+ fprintf(mFileWrite,"%f\t%f\t%f \t\t%f \t\t%f\t%f\t%f\t \t\t%f\t%f\t%f\t%f\t%f \t\t%f\t%f\t%f\n",
+ position_new_local,
+ velocity_new_local,
+ acceleration_new_local,
+
+ time_delta,
+
+ mPosition_world[0],
+ mPosition_world[1],
+ mPosition_world[2],
+
+ force_net,
+ force_spring,
+ force_accel,
+ force_damping,
+ force_drag,
+
+ spring_length,
+ velocity_joint_local,
+ acceleration_joint_local
+ );
+ }
+ */
+
+ return update_visuals;
+}
+
+// Range of new_value_local is assumed to be [0 , 1] normalized.
+void LLPhysicsMotion::setParamValue(LLViewerVisualParam *param,
+ F32 new_value_normalized)
+{
+ const F32 value_min_local = param->getMinWeight();
+ const F32 value_max_local = param->getMaxWeight();
+
+ const F32 new_value_local = value_min_local + (value_max_local-value_min_local) * new_value_normalized;
+
+ mCharacter->setVisualParamWeight(param,
+ new_value_local,
+ FALSE);
+}
diff --git a/indra/newview/llphysicsmotion.h b/indra/newview/llphysicsmotion.h new file mode 100644 index 0000000000..0c0087d269 --- /dev/null +++ b/indra/newview/llphysicsmotion.h @@ -0,0 +1,124 @@ +/**
+ * @file llphysicsmotion.h
+ * @brief Implementation of LLPhysicsMotion class.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPHYSICSMOTIONCONTROLLER_H
+#define LL_LLPHYSICSMOTIONCONTROLLER_H
+
+//-----------------------------------------------------------------------------
+// Header files
+//-----------------------------------------------------------------------------
+#include "llmotion.h"
+#include "llframetimer.h"
+
+#define PHYSICS_MOTION_FADEIN_TIME 1.0f
+#define PHYSICS_MOTION_FADEOUT_TIME 1.0f
+
+class LLPhysicsMotion;
+
+//-----------------------------------------------------------------------------
+// class LLPhysicsMotion
+//-----------------------------------------------------------------------------
+class LLPhysicsMotionController :
+ public LLMotion
+{
+public:
+ // Constructor
+ LLPhysicsMotionController(const LLUUID &id);
+
+ // Destructor
+ virtual ~LLPhysicsMotionController();
+
+public:
+ //-------------------------------------------------------------------------
+ // functions to support MotionController and MotionRegistry
+ //-------------------------------------------------------------------------
+
+ // static constructor
+ // all subclasses must implement such a function and register it
+ static LLMotion *create(const LLUUID &id) { return new LLPhysicsMotionController(id); }
+
+public:
+ //-------------------------------------------------------------------------
+ // animation callbacks to be implemented by subclasses
+ //-------------------------------------------------------------------------
+
+ // motions must specify whether or not they loop
+ virtual BOOL getLoop() { return TRUE; }
+
+ // motions must report their total duration
+ virtual F32 getDuration() { return 0.0; }
+
+ // motions must report their "ease in" duration
+ virtual F32 getEaseInDuration() { return PHYSICS_MOTION_FADEIN_TIME; }
+
+ // motions must report their "ease out" duration.
+ virtual F32 getEaseOutDuration() { return PHYSICS_MOTION_FADEOUT_TIME; }
+
+ // called to determine when a motion should be activated/deactivated based on avatar pixel coverage
+ virtual F32 getMinPixelArea();
+
+ // motions must report their priority
+ virtual LLJoint::JointPriority getPriority() { return LLJoint::MEDIUM_PRIORITY; }
+
+ virtual LLMotionBlendType getBlendType() { return ADDITIVE_BLEND; }
+
+ // run-time (post constructor) initialization,
+ // called after parameters have been set
+ // must return true to indicate success and be available for activation
+ virtual LLMotionInitStatus onInitialize(LLCharacter *character);
+
+ // called when a motion is activated
+ // must return TRUE to indicate success, or else
+ // it will be deactivated
+ virtual BOOL onActivate();
+
+ // called per time step
+ // must return TRUE while it is active, and
+ // must return FALSE when the motion is completed.
+ virtual BOOL onUpdate(F32 time, U8* joint_mask);
+
+ // called when a motion is deactivated
+ virtual void onDeactivate();
+
+ LLCharacter* getCharacter() { return mCharacter; }
+
+protected:
+ void addMotion(LLPhysicsMotion *motion);
+private:
+ LLCharacter* mCharacter;
+
+ typedef std::vector<LLPhysicsMotion *> motion_vec_t;
+ motion_vec_t mMotions;
+};
+
+#endif // LL_LLPHYSICSMOTION_H
+
diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp index 363b0b8e9d..6d6fb2fa0e 100644 --- a/indra/newview/llpolymesh.cpp +++ b/indra/newview/llpolymesh.cpp @@ -46,6 +46,10 @@ extern LLControlGroup gSavedSettings; // read only +LLPolyMorphData *clone_morph_param(const LLPolyMorphData *src_data, + const LLVector3 &direction, + const std::string &name); + //----------------------------------------------------------------------------- // Global table of loaded LLPolyMeshes //----------------------------------------------------------------------------- @@ -602,6 +606,40 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName ) } mMorphData.insert(morph_data); + + if (!strcmp(morphName, "Big_Belly_Torso")) + { + mMorphData.insert(clone_morph_param(morph_data, + LLVector3(0,0,0.03f), + "Belly_Physics_Torso_UpDown_Driven")); + } + + if (!strcmp(morphName, "Big_Belly_Legs")) + { + mMorphData.insert(clone_morph_param(morph_data, + LLVector3(0,0,0.03f), + "Belly_Physics_Legs_UpDown_Driven")); + } + + if (!strcmp(morphName, "skirt_belly")) + { + mMorphData.insert(clone_morph_param(morph_data, + LLVector3(0,0,0.03f), + "Belly_Physics_Skirt_UpDown_Driven")); + } + + if (!strcmp(morphName, "Small_Butt")) + { + mMorphData.insert(clone_morph_param(morph_data, + LLVector3(0,0,0.015f), + "Butt_Physics_UpDown_Driven")); + } + if (!strcmp(morphName, "Small_Butt")) + { + mMorphData.insert(clone_morph_param(morph_data, + LLVector3(0,0.015f,0), + "Butt_Physics_LeftRight_Driven")); + } } S32 numRemaps; @@ -1158,4 +1196,20 @@ void LLPolySkeletalDistortion::apply( ESex avatar_sex ) mLastWeight = mCurWeight; } + +LLPolyMorphData *clone_morph_param(const LLPolyMorphData *src_data, + const LLVector3 &direction, + const std::string &name) +{ + LLPolyMorphData* cloned_morph_data = new LLPolyMorphData(*src_data); + cloned_morph_data->mName = name; + for (U32 v=0; v < cloned_morph_data->mNumIndices; v++) + { + cloned_morph_data->mCoords[v] = direction; + cloned_morph_data->mNormals[v] = LLVector3(0,0,0); + cloned_morph_data->mBinormals[v] = LLVector3(0,0,0); + } + return cloned_morph_data; +} + // End diff --git a/indra/newview/llpolymorph.cpp b/indra/newview/llpolymorph.cpp index 0ffe1c635f..5a67fd482a 100644 --- a/indra/newview/llpolymorph.cpp +++ b/indra/newview/llpolymorph.cpp @@ -59,6 +59,37 @@ LLPolyMorphData::LLPolyMorphData(const std::string& morph_name) mMesh = NULL; } +LLPolyMorphData::LLPolyMorphData(const LLPolyMorphData &rhs) : + mName(rhs.mName), + mNumIndices(rhs.mNumIndices), + mTotalDistortion(rhs.mTotalDistortion), + mAvgDistortion(rhs.mAvgDistortion), + mMaxDistortion(rhs.mMaxDistortion), + mVertexIndices(NULL), + mCoords(NULL), + mNormals(NULL), + mBinormals(NULL), + mTexCoords(NULL) +{ + const S32 numVertices = mNumIndices; + + mCoords = new LLVector3[numVertices]; + mNormals = new LLVector3[numVertices]; + mBinormals = new LLVector3[numVertices]; + mTexCoords = new LLVector2[numVertices]; + mVertexIndices = new U32[numVertices]; + + for (S32 v=0; v < numVertices; v++) + { + mCoords[v] = rhs.mCoords[v]; + mNormals[v] = rhs.mNormals[v]; + mBinormals[v] = rhs.mBinormals[v]; + mTexCoords[v] = rhs.mTexCoords[v]; + mVertexIndices[v] = rhs.mVertexIndices[v]; + } +} + + //----------------------------------------------------------------------------- // ~LLPolyMorphData() //----------------------------------------------------------------------------- @@ -287,10 +318,22 @@ BOOL LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info) } } - mMorphData = mMesh->getMorphData(getInfo()->mMorphName); + std::string morph_param_name = getInfo()->mMorphName; + + mMorphData = mMesh->getMorphData(morph_param_name); + if (!mMorphData) + { + const std::string driven_tag = "_Driven"; + U32 pos = morph_param_name.find(driven_tag); + if (pos > 0) + { + morph_param_name = morph_param_name.substr(0,pos); + mMorphData = mMesh->getMorphData(morph_param_name); + } + } if (!mMorphData) { - llwarns << "No morph target named " << getInfo()->mMorphName << " found in mesh." << llendl; + llwarns << "No morph target named " << morph_param_name << " found in mesh." << llendl; return FALSE; // Continue, ignoring this tag } return TRUE; diff --git a/indra/newview/llpolymorph.h b/indra/newview/llpolymorph.h index bc111882b7..8a024f2e9e 100644 --- a/indra/newview/llpolymorph.h +++ b/indra/newview/llpolymorph.h @@ -46,6 +46,7 @@ class LLPolyMorphData public: LLPolyMorphData(const std::string& morph_name); ~LLPolyMorphData(); + LLPolyMorphData(const LLPolyMorphData &rhs); BOOL loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh); const std::string& getName() { return mName; } diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index f8c20dada0..05b82ba967 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -50,14 +50,9 @@ const S32 LLScrollingPanelParam::PARAM_HINT_HEIGHT = 128; S32 LLScrollingPanelParam::sUpdateDelayFrames = 0; LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_params, - LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp ) - : LLScrollingPanel( panel_params ), - mParam(param), - mAllowModify(allow_modify), - mWearable(wearable) + LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp, BOOL use_hints ) + : LLScrollingPanelParamBase( panel_params, mesh, param, allow_modify, wearable, jointp, use_hints) { - buildFromFile( "panel_scrolling_param.xml"); - // *HACK To avoid hard coding texture position, lets use border's position for texture. LLViewBorder* left_border = getChild<LLViewBorder>("left_border"); @@ -73,12 +68,6 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param mHintMin->setAllowsUpdates( FALSE ); mHintMax->setAllowsUpdates( FALSE ); - getChild<LLUICtrl>("param slider")->setValue(weightToPercent(param->getWeight())); - - std::string display_name = LLTrans::getString(param->getDisplayName()); - getChild<LLUICtrl>("param slider")->setLabelArg("[DESC]", display_name); - getChildView("param slider")->setEnabled(mAllowModify); - childSetCommitCallback("param slider", LLScrollingPanelParam::onSliderMoved, this); std::string min_name = LLTrans::getString(param->getMinDisplayName()); std::string max_name = LLTrans::getString(param->getMaxDisplayName()); @@ -112,20 +101,15 @@ LLScrollingPanelParam::~LLScrollingPanelParam() } void LLScrollingPanelParam::updatePanel(BOOL allow_modify) { - LLViewerVisualParam* param = mHintMin->getVisualParam(); - if (!mWearable) { // not editing a wearable just now, no update necessary return; } - F32 current_weight = mWearable->getVisualParamWeight( param->getID() ); - getChild<LLUICtrl>("param slider")->setValue(weightToPercent( current_weight ) ); + LLScrollingPanelParamBase::updatePanel(allow_modify); + mHintMin->requestUpdate( sUpdateDelayFrames++ ); mHintMax->requestUpdate( sUpdateDelayFrames++ ); - - mAllowModify = allow_modify; - getChildView("param slider")->setEnabled(mAllowModify); getChildView("less")->setEnabled(mAllowModify); getChildView("more")->setEnabled(mAllowModify); } @@ -135,13 +119,17 @@ void LLScrollingPanelParam::setVisible( BOOL visible ) if( getVisible() != visible ) { LLPanel::setVisible( visible ); - mHintMin->setAllowsUpdates( visible ); - mHintMax->setAllowsUpdates( visible ); + if (mHintMin) + mHintMin->setAllowsUpdates( visible ); + if (mHintMax) + mHintMax->setAllowsUpdates( visible ); if( visible ) { - mHintMin->setUpdateDelayFrames( sUpdateDelayFrames++ ); - mHintMax->setUpdateDelayFrames( sUpdateDelayFrames++ ); + if (mHintMin) + mHintMin->setUpdateDelayFrames( sUpdateDelayFrames++ ); + if (mHintMax) + mHintMax->setUpdateDelayFrames( sUpdateDelayFrames++ ); } } } @@ -164,7 +152,7 @@ void LLScrollingPanelParam::draw() getChildView("min param text")->setVisible( FALSE ); getChildView("max param text")->setVisible( FALSE ); LLPanel::draw(); - + // If we're in a focused floater, don't apply the floater's alpha to visual param hint, // making its behavior similar to texture controls'. F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); @@ -196,23 +184,6 @@ void LLScrollingPanelParam::draw() } // static -void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata) -{ - LLSliderCtrl* slider = (LLSliderCtrl*) ctrl; - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - LLViewerVisualParam* param = self->mParam; - - F32 current_weight = self->mWearable->getVisualParamWeight( param->getID() ); - F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() ); - if (current_weight != new_weight ) - { - self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE ); - self->mWearable->writeToAvatar(); - gAgentAvatarp->updateVisualParams(); - } -} - -// static void LLScrollingPanelParam::onSliderMouseDown(LLUICtrl* ctrl, void* userdata) { } @@ -221,7 +192,6 @@ void LLScrollingPanelParam::onSliderMouseDown(LLUICtrl* ctrl, void* userdata) void LLScrollingPanelParam::onSliderMouseUp(LLUICtrl* ctrl, void* userdata) { LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); } diff --git a/indra/newview/llscrollingpanelparam.h b/indra/newview/llscrollingpanelparam.h index 1cbc64f45a..c7a47d5c7a 100644 --- a/indra/newview/llscrollingpanelparam.h +++ b/indra/newview/llscrollingpanelparam.h @@ -28,8 +28,7 @@ #ifndef LL_SCROLLINGPANELPARAM_H #define LL_SCROLLINGPANELPARAM_H -#include "llpanel.h" -#include "llscrollingpanellist.h" +#include "llscrollingpanelparambase.h" class LLViewerJointMesh; class LLViewerVisualParam; @@ -38,11 +37,11 @@ class LLVisualParamHint; class LLViewerVisualParam; class LLJoint; -class LLScrollingPanelParam : public LLScrollingPanel +class LLScrollingPanelParam : public LLScrollingPanelParamBase { public: LLScrollingPanelParam( const LLPanel::Params& panel_params, - LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp ); + LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp, BOOL use_hints = TRUE ); virtual ~LLScrollingPanelParam(); virtual void draw(); @@ -50,7 +49,6 @@ public: virtual void updatePanel(BOOL allow_modify); static void onSliderMouseDown(LLUICtrl* ctrl, void* userdata); - static void onSliderMoved(LLUICtrl* ctrl, void* userdata); static void onSliderMouseUp(LLUICtrl* ctrl, void* userdata); static void onHintMinMouseDown(void* userdata); @@ -74,7 +72,6 @@ public: const static S32 PARAM_HINT_HEIGHT; public: - LLViewerVisualParam* mParam; LLPointer<LLVisualParamHint> mHintMin; LLPointer<LLVisualParamHint> mHintMax; static S32 sUpdateDelayFrames; @@ -82,9 +79,7 @@ public: protected: LLTimer mMouseDownTimer; // timer for how long mouse has been held down on a hint. F32 mLastHeldTime; - BOOL mAllowModify; - LLWearable *mWearable; }; #endif diff --git a/indra/newview/llscrollingpanelparambase.cpp b/indra/newview/llscrollingpanelparambase.cpp new file mode 100644 index 0000000000..62e3039d2f --- /dev/null +++ b/indra/newview/llscrollingpanelparambase.cpp @@ -0,0 +1,112 @@ +/** + * @file llscrollingpanelparam.cpp + * @brief UI panel for a list of visual param panels + * + * $LicenseInfo:firstyear=2009&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 "llscrollingpanelparambase.h" +#include "llviewerjointmesh.h" +#include "llviewervisualparam.h" +#include "llwearable.h" +#include "llviewervisualparam.h" +#include "lltoolmorph.h" +#include "lltrans.h" +#include "llbutton.h" +#include "llsliderctrl.h" +#include "llagent.h" +#include "llviewborder.h" +#include "llvoavatarself.h" + +LLScrollingPanelParamBase::LLScrollingPanelParamBase( const LLPanel::Params& panel_params, + LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp, BOOL use_hints) + : LLScrollingPanel( panel_params ), + mParam(param), + mAllowModify(allow_modify), + mWearable(wearable) +{ + if (use_hints) + buildFromFile( "panel_scrolling_param.xml"); + else + buildFromFile( "panel_scrolling_param_base.xml"); + + getChild<LLUICtrl>("param slider")->setValue(weightToPercent(param->getWeight())); + + std::string display_name = LLTrans::getString(param->getDisplayName()); + getChild<LLUICtrl>("param slider")->setLabelArg("[DESC]", display_name); + getChildView("param slider")->setEnabled(mAllowModify); + childSetCommitCallback("param slider", LLScrollingPanelParamBase::onSliderMoved, this); + + setVisible(FALSE); + setBorderVisible( FALSE ); +} + +LLScrollingPanelParamBase::~LLScrollingPanelParamBase() +{ +} + +void LLScrollingPanelParamBase::updatePanel(BOOL allow_modify) +{ + LLViewerVisualParam* param = mParam; + + if (!mWearable) + { + // not editing a wearable just now, no update necessary + return; + } + + F32 current_weight = mWearable->getVisualParamWeight( param->getID() ); + getChild<LLUICtrl>("param slider")->setValue(weightToPercent( current_weight ) ); + mAllowModify = allow_modify; + getChildView("param slider")->setEnabled(mAllowModify); +} + +// static +void LLScrollingPanelParamBase::onSliderMoved(LLUICtrl* ctrl, void* userdata) +{ + LLSliderCtrl* slider = (LLSliderCtrl*) ctrl; + LLScrollingPanelParamBase* self = (LLScrollingPanelParamBase*) userdata; + LLViewerVisualParam* param = self->mParam; + + F32 current_weight = self->mWearable->getVisualParamWeight( param->getID() ); + F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() ); + if (current_weight != new_weight ) + { + self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE ); + self->mWearable->writeToAvatar(); + gAgentAvatarp->updateVisualParams(); + } +} + +F32 LLScrollingPanelParamBase::weightToPercent( F32 weight ) +{ + LLViewerVisualParam* param = mParam; + return (weight - param->getMinWeight()) / (param->getMaxWeight() - param->getMinWeight()) * 100.f; +} + +F32 LLScrollingPanelParamBase::percentToWeight( F32 percent ) +{ + LLViewerVisualParam* param = mParam; + return percent / 100.f * (param->getMaxWeight() - param->getMinWeight()) + param->getMinWeight(); +} diff --git a/indra/newview/llscrollingpanelparambase.h b/indra/newview/llscrollingpanelparambase.h new file mode 100644 index 0000000000..9538826251 --- /dev/null +++ b/indra/newview/llscrollingpanelparambase.h @@ -0,0 +1,62 @@ +/** + * @file llscrollingpanelparam.h + * @brief the scrolling panel containing a list of visual param + * panels + * + * $LicenseInfo:firstyear=2009&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$ + */ + +#ifndef LL_SCROLLINGPANELPARAMBASE_H +#define LL_SCROLLINGPANELPARAMBASE_H + +#include "llpanel.h" +#include "llscrollingpanellist.h" + +class LLViewerJointMesh; +class LLViewerVisualParam; +class LLWearable; +class LLVisualParamHint; +class LLViewerVisualParam; +class LLJoint; + +class LLScrollingPanelParamBase : public LLScrollingPanel +{ +public: + LLScrollingPanelParamBase( const LLPanel::Params& panel_params, + LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp, BOOL use_hints = FALSE ); + virtual ~LLScrollingPanelParamBase(); + + virtual void updatePanel(BOOL allow_modify); + + static void onSliderMoved(LLUICtrl* ctrl, void* userdata); + + F32 weightToPercent( F32 weight ); + F32 percentToWeight( F32 percent ); + +public: + LLViewerVisualParam* mParam; +protected: + BOOL mAllowModify; + LLWearable *mWearable; +}; + +#endif diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 363fe5f12b..16729f045a 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -193,18 +193,28 @@ void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility) { if (new_visibility["visible"].asBoolean()) { - bool is_outfit_edit_visible = mOutfitEdit && mOutfitEdit->getVisible(); - bool is_wearable_edit_visible = mEditWearable && mEditWearable->getVisible(); + const BOOL is_outfit_edit_visible = mOutfitEdit && mOutfitEdit->getVisible(); + const BOOL is_wearable_edit_visible = mEditWearable && mEditWearable->getVisible(); if (is_outfit_edit_visible || is_wearable_edit_visible) { - if (!gAgentCamera.cameraCustomizeAvatar() && gSavedSettings.getBOOL("AppearanceCameraMovement")) + const LLWearable *wearable_ptr = mEditWearable->getWearable(); + if (!wearable_ptr) + { + llwarns << "Visibility change to invalid wearable" << llendl; + return; + } + // Disable camera switch is currently just for WT_PHYSICS type since we don't want to freeze the avatar + // when editing its physics. + const BOOL disable_camera_motion = LLWearableType::getDisableCameraSwitch(wearable_ptr->getType()); + if (!gAgentCamera.cameraCustomizeAvatar() && + !disable_camera_motion && + gSavedSettings.getBOOL("AppearanceCameraMovement")) { gAgentCamera.changeCameraToCustomizeAvatar(); } if (is_wearable_edit_visible) { - LLWearable *wearable_ptr = mEditWearable->getWearable(); if (gAgentWearables.getWearableIndex(wearable_ptr) == LLAgentWearables::MAX_CLOTHING_PER_TYPE) { // we're no longer wearing the wearable we were last editing, switch back to outfit editor @@ -289,7 +299,7 @@ void LLSidepanelAppearance::showOutfitsInventoryPanel() { toggleWearableEditPanel(FALSE); toggleOutfitEditPanel(FALSE); - togglMyOutfitsPanel(TRUE); + toggleMyOutfitsPanel(TRUE); } void LLSidepanelAppearance::showOutfitEditPanel() @@ -305,19 +315,28 @@ void LLSidepanelAppearance::showOutfitEditPanel() mOutfitEdit->resetAccordionState(); } - togglMyOutfitsPanel(FALSE); + // If we're exiting the edit wearable view, and the camera was not focused on the avatar + // (e.g. such as if we were editing a physics param), then skip the outfits edit mode since + // otherwise this would trigger the camera focus mode. + if (mEditWearable != NULL && mEditWearable->getVisible() && !gAgentCamera.cameraCustomizeAvatar()) + { + showOutfitsInventoryPanel(); + return; + } + + toggleMyOutfitsPanel(FALSE); toggleWearableEditPanel(FALSE, NULL, TRUE); // don't switch out of edit appearance mode toggleOutfitEditPanel(TRUE); } -void LLSidepanelAppearance::showWearableEditPanel(LLWearable *wearable /* = NULL*/) +void LLSidepanelAppearance::showWearableEditPanel(LLWearable *wearable /* = NULL*/, BOOL disable_camera_switch) { - togglMyOutfitsPanel(FALSE); + toggleMyOutfitsPanel(FALSE); toggleOutfitEditPanel(FALSE, TRUE); // don't switch out of edit appearance mode - toggleWearableEditPanel(TRUE, wearable); + toggleWearableEditPanel(TRUE, wearable, disable_camera_switch); } -void LLSidepanelAppearance::togglMyOutfitsPanel(BOOL visible) +void LLSidepanelAppearance::toggleMyOutfitsPanel(BOOL visible) { if (!mPanelOutfitsInventory || mPanelOutfitsInventory->getVisible() == visible) { @@ -390,7 +409,7 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *we { gAgentCamera.changeCameraToCustomizeAvatar(); } - mEditWearable->setWearable(wearable); + mEditWearable->setWearable(wearable, disable_camera_switch); mEditWearable->onOpen(LLSD()); // currently no-op, just for consistency } else @@ -434,14 +453,14 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name) } //static -void LLSidepanelAppearance::editWearable(LLWearable *wearable, LLView *data) +void LLSidepanelAppearance::editWearable(LLWearable *wearable, LLView *data, BOOL disable_camera_switch) { LLSideTray::getInstance()->showPanel("sidepanel_appearance"); LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(data); if (panel) { - panel->showWearableEditPanel(wearable); + panel->showWearableEditPanel(wearable, disable_camera_switch); } } diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index 2a83dfbc9d..6dd3520266 100644 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -51,7 +51,7 @@ public: void refreshCurrentOutfitName(const std::string& name = ""); - static void editWearable(LLWearable *wearable, LLView *data); + static void editWearable(LLWearable *wearable, LLView *data, BOOL disable_camera_switch = FALSE); void fetchInventory(); void inventoryFetched(); @@ -59,7 +59,7 @@ public: void showOutfitsInventoryPanel(); void showOutfitEditPanel(); - void showWearableEditPanel(LLWearable *wearable = NULL); + void showWearableEditPanel(LLWearable *wearable = NULL, BOOL disable_camera_switch = FALSE); void setWearablesLoading(bool val); void showDefaultSubpart(); void updateScrollingPanelList(); @@ -72,7 +72,7 @@ private: void onOpenOutfitButtonClicked(); void onEditAppearanceButtonClicked(); - void togglMyOutfitsPanel(BOOL visible); + void toggleMyOutfitsPanel(BOOL visible); void toggleOutfitEditPanel(BOOL visible, BOOL disable_camera_switch = FALSE); void toggleWearableEditPanel(BOOL visible, LLWearable* wearable = NULL, BOOL disable_camera_switch = FALSE); diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index 011aa47e31..2de7db38ed 100644 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -33,7 +33,7 @@ #include "llversioninfo.h" #include "llviewercontrol.h" -#include "jsoncpp/reader.h" +#include "reader.h" // These two are concatenated with the language specifiers to form a complete Google Translate URL const char* LLTranslate::m_GoogleURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q="; diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 3c53e54203..ffe607f912 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -164,6 +164,12 @@ static bool handleAvatarLODChanged(const LLSD& newvalue) return true; } +static bool handleAvatarPhysicsLODChanged(const LLSD& newvalue) +{ + LLVOAvatar::sPhysicsLODFactor = (F32) newvalue.asReal(); + return true; +} + static bool handleAvatarMaxVisibleChanged(const LLSD& newvalue) { LLVOAvatar::sMaxVisible = (U32) newvalue.asInteger(); @@ -552,6 +558,7 @@ void settings_setup_listeners() gSavedSettings.getControl("RenderAvatarMaxVisible")->getSignal()->connect(boost::bind(&handleAvatarMaxVisibleChanged, _2)); gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2)); gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2)); + gSavedSettings.getControl("RenderAvatarPhysicsLODFactor")->getSignal()->connect(boost::bind(&handleAvatarPhysicsLODChanged, _2)); gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _2)); gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _2)); gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _2)); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index cc851e676b..519514d99c 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -89,6 +89,7 @@ public: mInventoryItemsDict["New Skirt"] = LLTrans::getString("New Skirt"); mInventoryItemsDict["New Alpha"] = LLTrans::getString("New Alpha"); mInventoryItemsDict["New Tattoo"] = LLTrans::getString("New Tattoo"); + mInventoryItemsDict["New Physics"] = LLTrans::getString("New Physics"); mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable"); mInventoryItemsDict["New Gesture"] = LLTrans::getString("New Gesture"); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 7c8f363f11..bd46ee1b67 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3640,6 +3640,15 @@ class LLEnableEditShape : public view_listener_t } }; +class LLEnableEditPhysics : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + //return gAgentWearables.isWearableModifiable(LLWearableType::WT_SHAPE, 0); + return TRUE; + } +}; + bool is_object_sittable() { LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); @@ -5526,6 +5535,11 @@ void handle_edit_shape() LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_shape")); } +void handle_edit_physics() +{ + LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_physics")); +} + void handle_report_abuse() { // Prevent menu from appearing in screen shot. @@ -7827,9 +7841,11 @@ void initialize_menus() view_listener_t::addMenu(new LLEditEnableTakeOff(), "Edit.EnableTakeOff"); view_listener_t::addMenu(new LLEditEnableCustomizeAvatar(), "Edit.EnableCustomizeAvatar"); view_listener_t::addMenu(new LLEnableEditShape(), "Edit.EnableEditShape"); + view_listener_t::addMenu(new LLEnableEditPhysics(), "Edit.EnableEditPhysics"); commit.add("CustomizeAvatar", boost::bind(&handle_customize_avatar)); commit.add("EditOutfit", boost::bind(&handle_edit_outfit)); commit.add("EditShape", boost::bind(&handle_edit_shape)); + commit.add("EditPhysics", boost::bind(&handle_edit_physics)); // View menu view_listener_t::addMenu(new LLViewMouselook(), "View.Mouselook"); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 2e376e8568..2c5e728c87 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -48,6 +48,7 @@ #include "llanimationstates.h" #include "llavatarnamecache.h" #include "llavatarpropertiesprocessor.h" +#include "llphysicsmotion.h" #include "llviewercontrol.h" #include "llcallingcard.h" // IDEVO for LLAvatarTracker #include "lldrawpoolavatar.h" @@ -108,6 +109,8 @@ extern F32 ANIM_SPEED_MIN; #include <boost/lexical_cast.hpp> +// #define OUTPUT_BREAST_DATA + using namespace LLVOAvatarDefines; //----------------------------------------------------------------------------- @@ -123,6 +126,7 @@ const LLUUID ANIM_AGENT_HEAD_ROT = LLUUID("e6e8d1dd-e643-fff7-b238-c6b4b056a68d" const LLUUID ANIM_AGENT_PELVIS_FIX = LLUUID("0c5dd2a2-514d-8893-d44d-05beffad208b"); //"pelvis_fix" const LLUUID ANIM_AGENT_TARGET = LLUUID("0e4896cb-fba4-926c-f355-8720189d5b55"); //"target" const LLUUID ANIM_AGENT_WALK_ADJUST = LLUUID("829bc85b-02fc-ec41-be2e-74cc6dd7215d"); //"walk_adjust" +const LLUUID ANIM_AGENT_PHYSICS_MOTION = LLUUID("7360e029-3cb8-ebc4-863e-212df440d987"); //"physics_motion" //----------------------------------------------------------------------------- @@ -620,6 +624,7 @@ BOOL LLVOAvatar::sShowAnimationDebug = FALSE; BOOL LLVOAvatar::sShowFootPlane = FALSE; BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE; F32 LLVOAvatar::sLODFactor = 1.f; +F32 LLVOAvatar::sPhysicsLODFactor = 1.f; BOOL LLVOAvatar::sUseImpostors = FALSE; BOOL LLVOAvatar::sJointDebug = FALSE; @@ -1144,6 +1149,7 @@ void LLVOAvatar::initClass() gAnimLibrary.animStateSetString(ANIM_AGENT_BODY_NOISE,"body_noise"); gAnimLibrary.animStateSetString(ANIM_AGENT_BREATHE_ROT,"breathe_rot"); + gAnimLibrary.animStateSetString(ANIM_AGENT_PHYSICS_MOTION,"physics_motion"); gAnimLibrary.animStateSetString(ANIM_AGENT_EDITING,"editing"); gAnimLibrary.animStateSetString(ANIM_AGENT_EYE,"eye"); gAnimLibrary.animStateSetString(ANIM_AGENT_FLY_ADJUST,"fly_adjust"); @@ -1282,6 +1288,7 @@ void LLVOAvatar::initInstance(void) // motions without a start/stop bit registerMotion( ANIM_AGENT_BODY_NOISE, LLBodyNoiseMotion::create ); registerMotion( ANIM_AGENT_BREATHE_ROT, LLBreatheMotionRot::create ); + registerMotion( ANIM_AGENT_PHYSICS_MOTION, LLPhysicsMotionController::create ); registerMotion( ANIM_AGENT_EDITING, LLEditingMotion::create ); registerMotion( ANIM_AGENT_EYE, LLEyeMotion::create ); registerMotion( ANIM_AGENT_FEMALE_WALK, LLKeyframeWalkMotion::create ); @@ -1695,6 +1702,7 @@ void LLVOAvatar::startDefaultMotions() startMotion( ANIM_AGENT_EYE ); startMotion( ANIM_AGENT_BODY_NOISE ); startMotion( ANIM_AGENT_BREATHE_ROT ); + startMotion( ANIM_AGENT_PHYSICS_MOTION ); startMotion( ANIM_AGENT_HAND_MOTION ); startMotion( ANIM_AGENT_PELVIS_FIX ); @@ -6211,11 +6219,9 @@ void LLVOAvatar::updateMeshTextures() // When an avatar is changing clothes and not in Appearance mode, // use the last-known good baked texture until it finish the first // render of the new layerset. - const BOOL layerset_invalid = mBakedTextureDatas[i].mTexLayerSet && ( !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized() || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable() ); - use_lkg_baked_layer[i] = (!is_layer_baked[i] && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR) && layerset_invalid); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index a779a1735c..3659fb055f 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -50,6 +50,7 @@ extern const LLUUID ANIM_AGENT_BODY_NOISE; extern const LLUUID ANIM_AGENT_BREATHE_ROT; +extern const LLUUID ANIM_AGENT_PHYSICS_MOTION; extern const LLUUID ANIM_AGENT_EDITING; extern const LLUUID ANIM_AGENT_EYE; extern const LLUUID ANIM_AGENT_FLY_ADJUST; @@ -240,6 +241,7 @@ public: static BOOL sDebugInvisible; static BOOL sShowAttachmentPoints; static F32 sLODFactor; // user-settable LOD factor + static F32 sPhysicsLODFactor; // user-settable physics LOD factor static BOOL sJointDebug; // output total number of joints being touched for each avatar static BOOL sDebugAvatarRotation; diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 66a6ab5e94..92697fb2eb 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -446,6 +446,7 @@ clothing_to_string_map_t init_clothing_string_map() w_map.insert(std::make_pair(LLWearableType::WT_SKIRT, "skirt_not_worn")); w_map.insert(std::make_pair(LLWearableType::WT_ALPHA, "alpha_not_worn")); w_map.insert(std::make_pair(LLWearableType::WT_TATTOO, "tattoo_not_worn")); + w_map.insert(std::make_pair(LLWearableType::WT_PHYSICS, "physics_not_worn")); return w_map; } @@ -891,6 +892,7 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu setMenuItemVisible(menu, "edit", !standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items && n_worn == 1); setMenuItemEnabled(menu, "edit", n_editable == 1 && n_worn == 1 && n_items == 1); setMenuItemVisible(menu, "create_new", mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1); + setMenuItemEnabled(menu, "create_new", canAddWearables(ids)); setMenuItemVisible(menu, "show_original", !standalone); setMenuItemEnabled(menu, "show_original", n_items == 1 && n_links == n_items); setMenuItemVisible(menu, "take_off", mask == MASK_CLOTHING && n_worn == n_items); @@ -1041,6 +1043,10 @@ bool LLWearableItemsList::ContextMenu::canAddWearables(const uuid_vec_t& item_id U32 n_clothes = m_it->second; U32 wearable_count = gAgentWearables.getWearableCount(w_type); + if ((wearable_count > 0) && !LLWearableType::getAllowMultiwear(w_type)) + { + return false; + } if ((wearable_count + n_clothes) > LLAgentWearables::MAX_CLOTHING_PER_TYPE) { return false; diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp index 0d707d65bf..f933be4d8f 100644 --- a/indra/newview/llwearabletype.cpp +++ b/indra/newview/llwearabletype.cpp @@ -34,25 +34,27 @@ struct WearableEntry : public LLDictionaryEntry WearableEntry(const std::string &name, const std::string& default_new_name, LLAssetType::EType assetType, - LLInventoryIcon::EIconName iconName); + LLInventoryIcon::EIconName iconName, + BOOL disable_camera_switch = FALSE, + BOOL allow_multiwear = TRUE) : + LLDictionaryEntry(name), + mAssetType(assetType), + mDefaultNewName(default_new_name), + mLabel(LLTrans::getString(name)), + mIconName(iconName), + mDisableCameraSwitch(disable_camera_switch), + mAllowMultiwear(allow_multiwear) + { + + } const LLAssetType::EType mAssetType; const std::string mLabel; const std::string mDefaultNewName; //keep mLabel for backward compatibility LLInventoryIcon::EIconName mIconName; + BOOL mDisableCameraSwitch; + BOOL mAllowMultiwear; }; -WearableEntry::WearableEntry(const std::string &name, - const std::string& default_new_name, - LLAssetType::EType assetType, - LLInventoryIcon::EIconName iconName) : - LLDictionaryEntry(name), - mAssetType(assetType), - mDefaultNewName(default_new_name), - mLabel(LLTrans::getString(name)), - mIconName(iconName) -{ -} - class LLWearableDictionary : public LLSingleton<LLWearableDictionary>, public LLDictionary<LLWearableType::EType, WearableEntry> { @@ -62,23 +64,26 @@ public: LLWearableDictionary::LLWearableDictionary() { - addEntry(LLWearableType::WT_SHAPE, new WearableEntry("shape", "New Shape", LLAssetType::AT_BODYPART, LLInventoryIcon::ICONNAME_BODYPART_SHAPE)); - addEntry(LLWearableType::WT_SKIN, new WearableEntry("skin", "New Skin", LLAssetType::AT_BODYPART, LLInventoryIcon::ICONNAME_BODYPART_SKIN)); - addEntry(LLWearableType::WT_HAIR, new WearableEntry("hair", "New Hair", LLAssetType::AT_BODYPART, LLInventoryIcon::ICONNAME_BODYPART_HAIR)); - addEntry(LLWearableType::WT_EYES, new WearableEntry("eyes", "New Eyes", LLAssetType::AT_BODYPART, LLInventoryIcon::ICONNAME_BODYPART_EYES)); - addEntry(LLWearableType::WT_SHIRT, new WearableEntry("shirt", "New Shirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SHIRT)); - addEntry(LLWearableType::WT_PANTS, new WearableEntry("pants", "New Pants", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_PANTS)); - addEntry(LLWearableType::WT_SHOES, new WearableEntry("shoes", "New Shoes", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SHOES)); - addEntry(LLWearableType::WT_SOCKS, new WearableEntry("socks", "New Socks", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SOCKS)); - addEntry(LLWearableType::WT_JACKET, new WearableEntry("jacket", "New Jacket", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_JACKET)); - addEntry(LLWearableType::WT_GLOVES, new WearableEntry("gloves", "New Gloves", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_GLOVES)); - addEntry(LLWearableType::WT_UNDERSHIRT, new WearableEntry("undershirt", "New Undershirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_UNDERSHIRT)); - addEntry(LLWearableType::WT_UNDERPANTS, new WearableEntry("underpants", "New Underpants", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_UNDERPANTS)); - addEntry(LLWearableType::WT_SKIRT, new WearableEntry("skirt", "New Skirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SKIRT)); - addEntry(LLWearableType::WT_ALPHA, new WearableEntry("alpha", "New Alpha", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_ALPHA)); - addEntry(LLWearableType::WT_TATTOO, new WearableEntry("tattoo", "New Tattoo", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_TATTOO)); - addEntry(LLWearableType::WT_INVALID, new WearableEntry("invalid", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_INVALID)); - addEntry(LLWearableType::WT_NONE, new WearableEntry("none", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_INVALID)); + addEntry(LLWearableType::WT_SHAPE, new WearableEntry("shape", "New Shape", LLAssetType::AT_BODYPART, LLInventoryIcon::ICONNAME_BODYPART_SHAPE, FALSE, FALSE)); + addEntry(LLWearableType::WT_SKIN, new WearableEntry("skin", "New Skin", LLAssetType::AT_BODYPART, LLInventoryIcon::ICONNAME_BODYPART_SKIN, FALSE, FALSE)); + addEntry(LLWearableType::WT_HAIR, new WearableEntry("hair", "New Hair", LLAssetType::AT_BODYPART, LLInventoryIcon::ICONNAME_BODYPART_HAIR, FALSE, FALSE)); + addEntry(LLWearableType::WT_EYES, new WearableEntry("eyes", "New Eyes", LLAssetType::AT_BODYPART, LLInventoryIcon::ICONNAME_BODYPART_EYES, FALSE, FALSE)); + addEntry(LLWearableType::WT_SHIRT, new WearableEntry("shirt", "New Shirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SHIRT, FALSE, TRUE)); + addEntry(LLWearableType::WT_PANTS, new WearableEntry("pants", "New Pants", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_PANTS, FALSE, TRUE)); + addEntry(LLWearableType::WT_SHOES, new WearableEntry("shoes", "New Shoes", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SHOES, FALSE, TRUE)); + addEntry(LLWearableType::WT_SOCKS, new WearableEntry("socks", "New Socks", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SOCKS, FALSE, TRUE)); + addEntry(LLWearableType::WT_JACKET, new WearableEntry("jacket", "New Jacket", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_JACKET, FALSE, TRUE)); + addEntry(LLWearableType::WT_GLOVES, new WearableEntry("gloves", "New Gloves", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_GLOVES, FALSE, TRUE)); + addEntry(LLWearableType::WT_UNDERSHIRT, new WearableEntry("undershirt", "New Undershirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_UNDERSHIRT, FALSE, TRUE)); + addEntry(LLWearableType::WT_UNDERPANTS, new WearableEntry("underpants", "New Underpants", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_UNDERPANTS, FALSE, TRUE)); + addEntry(LLWearableType::WT_SKIRT, new WearableEntry("skirt", "New Skirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SKIRT, FALSE, TRUE)); + addEntry(LLWearableType::WT_ALPHA, new WearableEntry("alpha", "New Alpha", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_ALPHA, FALSE, TRUE)); + addEntry(LLWearableType::WT_TATTOO, new WearableEntry("tattoo", "New Tattoo", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_TATTOO, FALSE, TRUE)); + + addEntry(LLWearableType::WT_PHYSICS, new WearableEntry("physics", "New Physics", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_PHYSICS, TRUE, FALSE)); + + addEntry(LLWearableType::WT_INVALID, new WearableEntry("invalid", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_NONE, FALSE, FALSE)); + addEntry(LLWearableType::WT_NONE, new WearableEntry("none", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_NONE, FALSE, FALSE)); } // static @@ -134,3 +139,19 @@ LLInventoryIcon::EIconName LLWearableType::getIconName(LLWearableType::EType typ return entry->mIconName; } +// static +BOOL LLWearableType::getDisableCameraSwitch(LLWearableType::EType type) +{ + const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); + const WearableEntry *entry = dict->lookup(type); + return entry->mDisableCameraSwitch; +} + +// static +BOOL LLWearableType::getAllowMultiwear(LLWearableType::EType type) +{ + const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); + const WearableEntry *entry = dict->lookup(type); + return entry->mAllowMultiwear; +} + diff --git a/indra/newview/llwearabletype.h b/indra/newview/llwearabletype.h index 3bbf8ba0bd..d633b4807e 100644 --- a/indra/newview/llwearabletype.h +++ b/indra/newview/llwearabletype.h @@ -52,7 +52,8 @@ public: WT_SKIRT = 12, WT_ALPHA = 13, WT_TATTOO = 14, - WT_COUNT = 15, + WT_PHYSICS = 15, + WT_COUNT = 16, WT_INVALID = 255, WT_NONE = -1, @@ -64,6 +65,8 @@ public: static LLAssetType::EType getAssetType(EType type); static EType typeNameToType(const std::string& type_name); static LLInventoryIcon::EIconName getIconName(EType type); + static BOOL getDisableCameraSwitch(EType type); + static BOOL getAllowMultiwear(EType type); protected: LLWearableType() {} diff --git a/indra/newview/skins/default/textures/icons/Inv_Physics.png b/indra/newview/skins/default/textures/icons/Inv_Physics.png Binary files differnew file mode 100644 index 0000000000..ddd36b446b --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_Physics.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index d79d660724..1ca48b01a8 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -226,6 +226,7 @@ with the same filename but different name <texture name="Inv_SysClosed" file_name="icons/Inv_SysClosed.png" preload="false" /> <texture name="Inv_SysOpen" file_name="icons/Inv_SysOpen.png" preload="false" /> <texture name="Inv_Tattoo" file_name="icons/Inv_Tattoo.png" preload="false" /> + <texture name="Inv_Physics" file_name="icons/Inv_Physics.png" preload="false" /> <texture name="Inv_Texture" file_name="icons/Inv_Texture.png" preload="false" /> <texture name="Inv_TrashClosed" file_name="icons/Inv_TrashClosed.png" preload="false" /> <texture name="Inv_TrashOpen" file_name="icons/Inv_TrashOpen.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml index d727294cc8..d9bdfece38 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml @@ -152,6 +152,18 @@ </menu_item_call> <menu_item_call enabled="false" + label="Physics" + layout="topleft" + name="Self Physics"> + <menu_item_call.on_click + function="Edit.TakeOff" + parameter="physics" /> + <menu_item_call.on_enable + function="Edit.EnableTakeOff" + parameter="physics" /> + </menu_item_call> + <menu_item_call + enabled="false" label="Alpha" layout="topleft" name="Self Alpha"> diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index c0046d8e28..e91f4458ae 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -200,6 +200,14 @@ function="Inventory.DoCreate" parameter="tattoo" /> </menu_item_call> + <menu_item_call + label="New Physics" + layout="topleft" + name="New Physics"> + <menu_item_call.on_click + function="Inventory.DoCreate" + parameter="physics" /> + </menu_item_call> </menu> <menu label="New Body Parts" 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 ae98abf4fb..90e8db3709 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml @@ -188,6 +188,14 @@ function="Inventory.DoCreate" parameter="tattoo" /> </menu_item_call> + <menu_item_call + label="New Physics" + layout="topleft" + name="New Physics"> + <menu_item_call.on_click + function="Inventory.DoCreate" + parameter="physics" /> + </menu_item_call> </menu> <menu height="85" diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml index 5fc25b8f0f..fc7272b904 100644 --- a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml @@ -133,6 +133,14 @@ parameter="alpha" /> </menu_item_call> <menu_item_call + label="New Physics" + layout="topleft" + name="New Physics"> + <menu_item_call.on_click + function="Gear.Create" + parameter="physics" /> + </menu_item_call> + <menu_item_call label="New Tattoo" layout="topleft" name="New Tattoo"> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 934cae93db..51610c0ae0 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -3429,6 +3429,16 @@ parameter="tattoo" /> </menu_item_call> <menu_item_call + label="Physics" + name="Physics"> + <menu_item_call.on_click + function="Edit.TakeOff" + parameter="physics" /> + <menu_item_call.on_enable + function="Edit.EnableTakeOff" + parameter="physics" /> + </menu_item_call> + <menu_item_call label="All Clothes" name="All Clothes"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/panel_edit_physics.xml b/indra/newview/skins/default/xui/en/panel_edit_physics.xml new file mode 100644 index 0000000000..c6f974f4f1 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_edit_physics.xml @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> + <panel + background_visible="true" + follows="all" + height="400" + layout="topleft" + left="0" + name="edit_physics_panel" + top_pad="10" + width="333" > + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="388" + label="" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="0" + width="313"> + <accordion + follows="all" + height ="388" + layout="topleft" + left="0" + single_expansion="true" + fit_parent="true" + name="physics_accordion" + top="0" + width="313"> + <accordion_tab + layout="topleft" + fit_panel="false" + min_height="50" + name="physics_breasts_updown_tab" + title="Breasts Bounce"> + <scrolling_panel_list + follows="all" + layout="topleft" + left="10" + name="physics_breasts_updown_param_list" + top="10" + width="303" /> + </accordion_tab> + <accordion_tab + layout="topleft" + fit_panel="false" + min_height="50" + name="physics_breasts_inout_tab" + title="Breasts Cleavage"> + <scrolling_panel_list + follows="all" + layout="topleft" + left="0" + name="physics_breasts_inout_param_list" + top_pad="50" + width="303" /> + </accordion_tab> + <accordion_tab + layout="topleft" + fit_panel="false" + min_height="50" + name="physics_belly_tab" + title="Belly Bounce"> + <scrolling_panel_list + follows="all" + layout="topleft" + left="0" + name="physics_belly_updown_param_list" + top_pad="40" + width="303" /> + </accordion_tab> + + <accordion_tab + layout="topleft" + fit_panel="false" + min_height="50" + name="physics_butt_tab" + title="Butt Bounce"> + <scrolling_panel_list + follows="all" + layout="topleft" + left="0" + name="physics_butt_updown_param_list" + top_pad="30" + width="303" /> + </accordion_tab> + + <accordion_tab + layout="topleft" + fit_panel="false" + min_height="50" + name="physics_butt_leftright_tab" + title="Butt Sway"> + <scrolling_panel_list + follows="all" + layout="topleft" + left="0" + name="physics_butt_leftright_param_list" + top_pad="20" + width="303" /> + </accordion_tab> + <accordion_tab + layout="topleft" + fit_panel="false" + min_height="50" + name="physics_advanced_tab" + title="Advanced Parameters"> + <scrolling_panel_list + follows="all" + layout="topleft" + left="0" + name="physics_advanced_param_list" + top_pad="10" + width="303" /> + </accordion_tab> + </accordion> + </panel> +</panel> + diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index ac8917d272..c8764a6a84 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -72,6 +72,10 @@ Editing Tattoo </string> <string + name="edit_physics_title"> + Editing Physics + </string> + <string name="shape_desc_text"> Shape: </string> @@ -131,6 +135,10 @@ name="tattoo_desc_text"> Tattoo: </string> + <string + name="physics_desc_text"> + Physics: + </string> <!-- Default width of the button should be to show it without label. Button will be extedned in code to show whole label when wearable is being changed. --> @@ -410,6 +418,16 @@ top="8" visible="false" width="333" /> + <panel + filename="panel_edit_physics.xml" + follows="all" + height="425" + layout="topleft" + left="0" + name="edit_physics_panel" + top="8" + visible="false" + width="333" /> </panel> <panel follows="bottom|left|right" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 6573822d1a..d74197d965 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -2,7 +2,7 @@ <panel border="true" follows="left|top|right|bottom" - height="408" + height="418" label="Graphics" layout="topleft" left="102" @@ -327,6 +327,37 @@ value="4"/> </combo_box> + <slider + control_name="RenderAvatarPhysicsLODFactor" + follows="left|top" + height="16" + initial_value="100" + increment=".05" + label=" Avatar Physics:" + label_width="85" + layout="topleft" + left_delta="-16" + name="AvatarPhysicsDetail" + show_text="false" + top_pad="12" + width="160"> + <slider.commit_callback + function="Pref.UpdateSliderText" + parameter="AvatarPhysicsDetailText" /> + </slider> + <text + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="165" + name="AvatarPhysicsDetailText" + top_pad="-16" + width="128"> + Low + </text> + <slider control_name="RenderFarClip" decimal_digits="0" @@ -618,6 +649,7 @@ width="128"> Low </text> + <text type="string" length="1" @@ -628,7 +660,7 @@ name="AvatarRenderingText" top_pad="18" width="128"> - Avatar rendering: + Avatar Rendering: </text> <check_box control_name="RenderUseImpostors" @@ -672,7 +704,7 @@ left="358" left_pad="-30" name="TerrainDetailText" - top="226" + top="250" width="155"> Terrain detail: </text> @@ -710,7 +742,7 @@ layout="topleft" left="10" name="Apply" - top="383" + top="390" width="115"> <button.commit_callback function="Pref.Apply" /> @@ -722,7 +754,7 @@ layout="topleft" left_pad="3" name="Defaults" - top="383" + top="390" width="115"> <button.commit_callback function="Pref.HardwareDefaults" /> diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param_base.xml new file mode 100644 index 0000000000..1351f75623 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_scrolling_param_base.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + layout="topleft" + left="0" + name="LLScrollingPanelParamBase" + height="16" + width="290"> + <slider + can_edit_text="true" + decimal_digits="0" + enabled="false" + height="12" + increment="1" + initial_value="0" + label="[DESC]" + label_width="125" + layout="bottom|left" + left="16" + max_val="100" + name="param slider" + bottom="0" + width="264" + /> +</panel> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 14ea43a8f8..ed7814e0f0 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -1853,6 +1853,7 @@ Requests name of an avatar. When data is available the dataserver event will be <string name="skirt">Skirt</string> <string name="alpha">Alpha</string> <string name="tattoo">Tattoo</string> + <string name="physics">Physics</string> <string name="invalid">invalid</string> <string name="none">none</string> @@ -1868,6 +1869,7 @@ Requests name of an avatar. When data is available the dataserver event will be <string name="skirt_not_worn">Skirt not worn</string> <string name="alpha_not_worn">Alpha not worn</string> <string name="tattoo_not_worn">Tattoo not worn</string> + <string name="physics_not_worn">Physics not worn</string> <string name="invalid_not_worn">invalid</string> <!-- Create new wearable of the specified type --> @@ -1886,6 +1888,7 @@ Requests name of an avatar. When data is available the dataserver event will be <string name="create_new_skirt">Create new skirt</string> <string name="create_new_alpha">Create new alpha</string> <string name="create_new_tattoo">Create new tattoo</string> + <string name="create_new_physics">Create new physics</string> <string name="create_new_invalid">invalid</string> <!-- Wearable List--> @@ -2497,8 +2500,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Body Thin">Body Thin</string> <string name="Bow Legged">Bow Legged</string> -<string name="Breast Buoyancy">Breast Buoyancy</string> -<string name="Breast Cleavage">Breast Cleavage</string> +<string name="Breast Physics UpDown Controller">Breast Buoyancy</string> +<string name="Breast Physics InOut Controller">Breast Cleavage</string> <string name="Breast Size">Breast Size</string> <string name="Bridge Width">Bridge Width</string> <string name="Broad">Broad</string> @@ -2508,10 +2511,52 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Bulbous">Bulbous</string> <string name="Bulbous Nose">Bulbous Nose</string> +<string name="Breast Physics Mass">Breast Mass</string> +<string name="Breast Physics Smoothing">Breast Smoothing</string> +<string name="Breast Physics Gravity">Breast Gravity</string> + +<string name="Breast Physics InOut Max Speed">Max Effect</string> +<string name="Breast Physics InOut Spring">Spring</string> +<string name="Breast Physics InOut Gain">Gain</string> +<string name="Breast Physics InOut Damping">Damping</string> +<string name="Breast Physics InOut Drag">Breast Cleavage Drag</string> + +<string name="Breast Physics UpDown Max Speed">Max Effect</string> +<string name="Breast Physics UpDown Spring">Spring</string> +<string name="Breast Physics UpDown Gain">Gain</string> +<string name="Breast Physics UpDown Damping">Damping</string> +<string name="Breast Physics UpDown Drag">Breast Bounce Drag</string> + +<string name="Belly Physics Mass">Belly Mass</string> +<string name="Belly Physics Smoothing">Belly Smoothing</string> +<string name="Belly Physics Gravity">Belly Gravity</string> + +<string name="Belly Physics UpDown Max Speed">Max Effect</string> +<string name="Belly Physics UpDown Spring">Spring</string> +<string name="Belly Physics UpDown Gain">Gain</string> +<string name="Belly Physics UpDown Damping">Damping</string> +<string name="Belly Physics UpDown Drag">Belly Bounce Drag</string> + +<string name="Butt Physics Mass">Butt Mass</string> +<string name="Butt Physics Smoothing">Butt Smoothing</string> +<string name="Butt Physics Gravity">Butt Gravity</string> + +<string name="Butt Physics UpDown Max Speed">Max Effect</string> +<string name="Butt Physics UpDown Spring">Spring</string> +<string name="Butt Physics UpDown Gain">Gain</string> +<string name="Butt Physics UpDown Damping">Damping</string> +<string name="Butt Physics UpDown Drag">Butt Bounce Drag</string> + +<string name="Butt Physics LeftRight Max Speed">Max Effect</string> +<string name="Butt Physics LeftRight Spring">Spring</string> +<string name="Butt Physics LeftRight Gain">Gain</string> +<string name="Butt Physics LeftRight Damping">Damping</string> +<string name="Butt Physics LeftRight Drag">Butt Sway Drag</string> <string name="Bushy Eyebrows">Bushy Eyebrows</string> <string name="Bushy Hair">Bushy Hair</string> <string name="Butt Size">Butt Size</string> +<string name="Butt Gravity">Butt Gravity</string> <string name="bustle skirt">Bustle Skirt</string> <string name="no bustle">No Bustle</string> <string name="more bustle">More Bustle</string> @@ -3215,6 +3260,7 @@ Abuse Report</string> <string name="New Skirt">New Skirt</string> <string name="New Alpha">New Alpha</string> <string name="New Tattoo">New Tattoo</string> + <string name="New Physics">New Physics</string> <string name="Invalid Wearable">Invalid Wearable</string> <string name="New Gesture">New Gesture</string> <string name="New Script">New Script</string> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index e08c815218..f0b1973fdf 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -221,22 +221,25 @@ class WindowsManifest(ViewerManifest): else: print "Doesn't exist:", src - def enable_crt_manifest_check(self): - if self.is_packaging_viewer(): - WindowsManifest.copy_action = WindowsManifest.test_msvcrt_and_copy_action + ### DISABLED MANIFEST CHECKING for vs2010. we may need to reenable this + # shortly. If this hasn't been reenabled by the 2.9 viewer release then it + # should be deleted -brad + #def enable_crt_manifest_check(self): + # if self.is_packaging_viewer(): + # WindowsManifest.copy_action = WindowsManifest.test_msvcrt_and_copy_action - def enable_no_crt_manifest_check(self): - if self.is_packaging_viewer(): - WindowsManifest.copy_action = WindowsManifest.test_for_no_msvcrt_manifest_and_copy_action + #def enable_no_crt_manifest_check(self): + # if self.is_packaging_viewer(): + # WindowsManifest.copy_action = WindowsManifest.test_for_no_msvcrt_manifest_and_copy_action - def disable_manifest_check(self): - if self.is_packaging_viewer(): - del WindowsManifest.copy_action + #def disable_manifest_check(self): + # if self.is_packaging_viewer(): + # del WindowsManifest.copy_action def construct(self): super(WindowsManifest, self).construct() - self.enable_crt_manifest_check() + #self.enable_crt_manifest_check() if self.is_packaging_viewer(): # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe. @@ -247,7 +250,7 @@ class WindowsManifest(ViewerManifest): 'llplugin', 'slplugin', self.args['configuration'], "slplugin.exe"), "slplugin.exe") - self.disable_manifest_check() + #self.disable_manifest_check() self.path(src="../viewer_components/updater/scripts/windows/update_install.bat", dst="update_install.bat") @@ -255,7 +258,7 @@ class WindowsManifest(ViewerManifest): if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']), dst=""): - self.enable_crt_manifest_check() + #self.enable_crt_manifest_check() # Get llcommon and deps. If missing assume static linkage and continue. try: @@ -267,7 +270,7 @@ class WindowsManifest(ViewerManifest): print err.message print "Skipping llcommon.dll (assuming llcommon was linked statically)" - self.disable_manifest_check() + #self.disable_manifest_check() # Get fmod dll, continue if missing try: @@ -284,13 +287,11 @@ class WindowsManifest(ViewerManifest): # These need to be installed as a SxS assembly, currently a 'private' assembly. # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx if self.args['configuration'].lower() == 'debug': - self.path("msvcr80d.dll") - self.path("msvcp80d.dll") - self.path("Microsoft.VC80.DebugCRT.manifest") + self.path("msvcr100d.dll") + self.path("msvcp100d.dll") else: - self.path("msvcr80.dll") - self.path("msvcp80.dll") - self.path("Microsoft.VC80.CRT.manifest") + self.path("msvcr100.dll") + self.path("msvcp100.dll") # Vivox runtimes self.path("SLVoice.exe") @@ -300,6 +301,10 @@ class WindowsManifest(ViewerManifest): self.path("zlib1.dll") self.path("vivoxplatform.dll") self.path("vivoxoal.dll") + + # Security + self.path("ssleay32.dll") + self.path("libeay32.dll") # For google-perftools tcmalloc allocator. try: @@ -316,10 +321,7 @@ class WindowsManifest(ViewerManifest): self.path("featuretable.txt") self.path("featuretable_xp.txt") - # For use in crash reporting (generates minidumps) - self.path("dbghelp.dll") - - self.enable_no_crt_manifest_check() + #self.enable_no_crt_manifest_check() # Media plugins - QuickTime if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"): @@ -338,7 +340,7 @@ class WindowsManifest(ViewerManifest): if self.args['configuration'].lower() == 'debug': - if self.prefix(src=os.path.join(os.pardir, os.pardir, 'libraries', 'i686-win32', 'lib', 'debug'), + if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'debug'), dst="llplugin"): self.path("libeay32.dll") self.path("qtcored4.dll") @@ -369,7 +371,7 @@ class WindowsManifest(ViewerManifest): self.end_prefix() else: - if self.prefix(src=os.path.join(os.pardir, os.pardir, 'libraries', 'i686-win32', 'lib', 'release'), + if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release'), dst="llplugin"): self.path("libeay32.dll") self.path("qtcore4.dll") @@ -400,7 +402,7 @@ class WindowsManifest(ViewerManifest): self.end_prefix() - self.disable_manifest_check() + #self.disable_manifest_check() # pull in the crash logger and updater from other projects # tag:"crash-logger" here as a cue to the exporter @@ -568,7 +570,7 @@ class DarwinManifest(ViewerManifest): self.path("Info-SecondLife.plist", dst="Info.plist") # copy additional libs in <bundle>/Contents/MacOS/ - self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib") + self.path("../packages/lib/release/libndofdev.dylib", dst="Resources/libndofdev.dylib") self.path("../viewer_components/updater/scripts/darwin/update_install", "MacOS/update_install") @@ -610,15 +612,7 @@ class DarwinManifest(ViewerManifest): self.path("uk.lproj") self.path("zh-Hans.lproj") - # SLVoice and vivox lols - self.path("vivox-runtime/universal-darwin/libsndfile.dylib", "libsndfile.dylib") - self.path("vivox-runtime/universal-darwin/libvivoxoal.dylib", "libvivoxoal.dylib") - self.path("vivox-runtime/universal-darwin/libortp.dylib", "libortp.dylib") - self.path("vivox-runtime/universal-darwin/libvivoxsdk.dylib", "libvivoxsdk.dylib") - self.path("vivox-runtime/universal-darwin/libvivoxplatform.dylib", "libvivoxplatform.dylib") - self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice") - - libdir = "../../libraries/universal-darwin/lib_release" + libdir = "../packages/lib/release" dylibs = {} # Need to get the llcommon dll from any of the build directories as well @@ -638,13 +632,18 @@ class DarwinManifest(ViewerManifest): dylibs[lib] = True if dylibs["llcommon"]: - for libfile in ("libapr-1.0.3.7.dylib", - "libaprutil-1.0.3.8.dylib", - "libexpat.0.5.0.dylib", + for libfile in ("libapr-1.0.dylib", + "libaprutil-1.0.dylib", + "libexpat.1.5.2.dylib", "libexception_handler.dylib", ): self.path(os.path.join(libdir, libfile), libfile) + # SLVoice and vivox lols + for libfile in ('libsndfile.dylib', 'libvivoxoal.dylib', 'libortp.dylib', \ + 'libvivoxsdk.dylib', 'libvivoxplatform.dylib', 'SLVoice') : + self.path(os.path.join(libdir, libfile), libfile) + try: # FMOD for sound self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib") @@ -664,9 +663,9 @@ class DarwinManifest(ViewerManifest): mac_updater_res_path = self.dst_path_of("mac-updater.app/Contents/Resources") slplugin_res_path = self.dst_path_of("SLPlugin.app/Contents/Resources") for libfile in ("libllcommon.dylib", - "libapr-1.0.3.7.dylib", - "libaprutil-1.0.3.8.dylib", - "libexpat.0.5.0.dylib", + "libapr-1.0.dylib", + "libaprutil-1.0.dylib", + "libexpat.1.5.2.dylib", "libexception_handler.dylib", ): target_lib = os.path.join('../../..', libfile) @@ -687,7 +686,7 @@ class DarwinManifest(ViewerManifest): if self.prefix(src="", dst="llplugin"): self.path("../media_plugins/quicktime/" + self.args['configuration'] + "/media_plugin_quicktime.dylib", "media_plugin_quicktime.dylib") self.path("../media_plugins/webkit/" + self.args['configuration'] + "/media_plugin_webkit.dylib", "media_plugin_webkit.dylib") - self.path("../../libraries/universal-darwin/lib_release/libllqtwebkit.dylib", "libllqtwebkit.dylib") + self.path("../packages/lib/release/libllqtwebkit.dylib", "libllqtwebkit.dylib") self.end_prefix("llplugin") @@ -927,21 +926,36 @@ class Linux_i686Manifest(LinuxManifest): def construct(self): super(Linux_i686Manifest, self).construct() - if self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"): + if self.prefix("../packages/lib/release", dst="lib"): + self.path("libapr-1.so") self.path("libapr-1.so.0") + self.path("libapr-1.so.0.4.2") + self.path("libaprutil-1.so") self.path("libaprutil-1.so.0") - self.path("libbreakpad_client.so.0.0.0", "libbreakpad_client.so.0") - self.path("libdb-4.2.so") - self.path("libcrypto.so.0.9.7") - self.path("libexpat.so.1") - self.path("libssl.so.0.9.7") - self.path("libuuid.so.1") - self.path("libSDL-1.2.so.0") - self.path("libELFIO.so") - self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3") + self.path("libaprutil-1.so.0.3.10") + self.path("libbreakpad_client.so.0.0.0") + self.path("libbreakpad_client.so.0") + self.path("libbreakpad_client.so") + self.path("libdb-5.1.so") + self.path("libdb-5.so") + self.path("libdb.so") + self.path("libcrypto.so.0.9.8") + self.path("libexpat.so.1.5.2") + self.path("libssl.so.0.9.8") + self.path("libuuid.so") + self.path("libuuid.so.16") + self.path("libuuid.so.16.0.22") + self.path("libSDL-1.2.so.0.11.3") + self.path("libdirectfb-1.4.so.5.0.4") + self.path("libfusion-1.4.so.5.0.4") + self.path("libdirect-1.4.so.5.0.4") + self.path("libopenjpeg.so.1.4.0") + self.path("libopenjpeg.so.1") + self.path("libopenjpeg.so") self.path("libalut.so") self.path("libopenal.so", "libopenal.so.1") self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname + self.path("libfontconfig.so.1.4.4") try: self.path("libfmod-3.75.so") pass @@ -951,10 +965,10 @@ class Linux_i686Manifest(LinuxManifest): self.end_prefix("lib") # Vivox runtimes - if self.prefix(src="vivox-runtime/i686-linux", dst="bin"): + if self.prefix(src="../packages/lib/release", dst="bin"): self.path("SLVoice") self.end_prefix() - if self.prefix(src="vivox-runtime/i686-linux", dst="lib"): + if self.prefix(src="../packages/lib/release", dst="lib"): self.path("libortp.so") self.path("libsndfile.so.1") #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt index 02d7031b81..1211bb7e5a 100644 --- a/indra/test_apps/llplugintest/CMakeLists.txt +++ b/indra/test_apps/llplugintest/CMakeLists.txt @@ -378,8 +378,8 @@ endif (DARWIN OR WINDOWS) if (DARWIN) add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR} - DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib + COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR} + DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ) endif (DARWIN) @@ -388,7 +388,7 @@ if(WINDOWS) # Plugin test library deploy # # Debug config runtime files required for the plugin test mule - set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") + set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}") set(plugintest_debug_files libeay32.dll libglib-2.0-0.dll @@ -411,7 +411,7 @@ if(WINDOWS) set(plugin_test_targets ${plugin_test_targets} ${out_targets}) # Debug config runtime files required for the plugin test mule (Qt image format plugins) - set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/imageformats") + set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}/imageformats") set(plugintest_debug_files qgifd4.dll qicod4.dll @@ -429,7 +429,7 @@ if(WINDOWS) set(plugin_test_targets ${plugin_test_targets} ${out_targets}) # Debug config runtime files required for the plugin test mule (Qt codec plugins) - set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/codecs") + set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}/codecs") set(plugintest_debug_files qcncodecsd4.dll qjpcodecsd4.dll @@ -445,7 +445,7 @@ if(WINDOWS) set(plugin_test_targets ${plugin_test_targets} ${out_targets}) # Release & ReleaseDebInfo config runtime files required for the plugin test mule - set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") + set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") set(plugintest_release_files libeay32.dll libglib-2.0-0.dll @@ -477,7 +477,7 @@ if(WINDOWS) set(plugin_test_targets ${plugin_test_targets} ${out_targets}) # Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt image format plugins) - set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/imageformats") + set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}/imageformats") set(plugintest_release_files qgif4.dll qico4.dll @@ -503,7 +503,7 @@ if(WINDOWS) set(plugin_test_targets ${plugin_test_targets} ${out_targets}) # Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt codec plugins) - set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/codecs") + set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}/codecs") set(plugintest_release_files qcncodecs4.dll qjpcodecs4.dll diff --git a/indra/tools/vstool/VSTool.csproj b/indra/tools/vstool/VSTool.csproj index 24f1031f81..7f431e85c7 100644 --- a/indra/tools/vstool/VSTool.csproj +++ b/indra/tools/vstool/VSTool.csproj @@ -1,4 +1,5 @@ -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>8.0.50727</ProductVersion>
@@ -25,6 +26,8 @@ </FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
+ <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+ <OldToolsVersion>2.0</OldToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>.\</OutputPath>
diff --git a/indra/tools/vstool/VSTool.exe b/indra/tools/vstool/VSTool.exe Binary files differindex 6d1497d5e5..8be428614e 100755 --- a/indra/tools/vstool/VSTool.exe +++ b/indra/tools/vstool/VSTool.exe diff --git a/indra/tools/vstool/VSTool.sln b/indra/tools/vstool/VSTool.sln index 8859671802..21e3d75971 100644 --- a/indra/tools/vstool/VSTool.sln +++ b/indra/tools/vstool/VSTool.sln @@ -1,5 +1,5 @@ -Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSTool", "VSTool.csproj", "{96943E2D-1373-4617-A117-D0F997A94919}"
EndProject
Global
diff --git a/indra/tools/vstool/main.cs b/indra/tools/vstool/main.cs index cc268d59d9..cc73261e30 100644 --- a/indra/tools/vstool/main.cs +++ b/indra/tools/vstool/main.cs @@ -550,6 +550,11 @@ namespace VSTool case "10.00":
version = "VC90";
break;
+
+ case "11.00":
+ version = "VC100";
+ break;
+
default:
throw new ApplicationException("Unknown .sln version: " + format);
}
@@ -585,6 +590,11 @@ namespace VSTool case "VC90":
progid = "VisualStudio.DTE.9.0";
break;
+
+ case "VC100":
+ progid = "VisualStudio.DTE.10.0";
+ break;
+
default:
throw new ApplicationException("Can't handle VS version: " + version);
}
diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp index 354b7e6cc3..51ff754c27 100644 --- a/indra/win_crash_logger/llcrashloggerwindows.cpp +++ b/indra/win_crash_logger/llcrashloggerwindows.cpp @@ -34,7 +34,6 @@ #include "boost/tokenizer.hpp" -#include "dbghelp.h" #include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME #include "llerror.h" #include "llfile.h" diff --git a/install.xml b/install.xml deleted file mode 100644 index c91bec8535..0000000000 --- a/install.xml +++ /dev/null @@ -1,1898 +0,0 @@ -<?xml version="1.0" ?> -<llsd> -<map> - <key>installables</key> - <map> - <key>GL</key> - <map> - <key>copyright</key> - <string>Copyright (c) 1991-2000 Silicon Graphics, Inc.</string> - <key>description</key> - <string>A standard for 3D Graphics rendering engine.</string> - <key>license</key> - <string>GL</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>0bd2795a2afe09f6c563f2f888f24cc9</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-darwin-20080613.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>2ab29212a7f3acdaebf10059af816be0</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-linux-20080812.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>9c3dff3817f1105f9054401fdef1fe50</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>91155239b02f576384603795d41eb971</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-windows-20090505.tar.bz2</uri> - </map> - </map> - </map> - <key>SDL</key> - <map> - <key>copyright</key> - <string>Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga</string> - <key>description</key> - <string>The Simple DirectMedia Layer libraries are used for handling input and basic window/GL setup on the Linux client. Packages also include cursors.</string> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>fce0ff7d2cdf0f36c1647e6a3916e29e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.12-linux-20090218.tar.bz2</uri> - </map> - </map> - </map> - <key>apr_suite</key> - <map> - <key>license</key> - <string>apache 2.0</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>115d8ac44a91efdb173e9b3e478c46b6</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.3.7-darwin-20090805.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>7b84cd6a3c601a104d9c09e58ef2f50c</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.2.8-linux-20080812.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>1a7e1186855d48d8316ce86803095f70</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.2.8-linux64-20080909a.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>a02619c1e30a3db02d3883bf1ad7a1e6</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.3.8-windows-20090911.tar.bz2</uri> - </map> - </map> - </map> - <key>ares</key> - <map> - <key>copyright</key> - <string>Copyright 1998 by the Massachusetts Institute of Technology.</string> - <key>description</key> - <string>Performs DNS requests and name resolves asynchronously. Used with libcurl to keep all HTTP operations async.</string> - <key>license</key> - <string>c-ares</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>cdb2f5c4a5a1f9ecd75bc1dbdd4db8e9</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20100606.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>91694429e391efeea1de974df26032a2</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-linux-20100527.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>c4242416e0b2e642c0bf062a19a250e4</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.3.0-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>4b84738eec2e21b0c096d53b79ee2681</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-windows-20100611a.tar.bz2</uri> - </map> - </map> - </map> - <key>artwork-common</key> - <map> - <key>copyright</key> - <string>(C) 2008 Linden Research, Inc.</string> - <key>description</key> - <string>Second Life(TM) Viewer Artwork</string> - <key>license</key> - <string>artwork</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>5e047437d73d1017bf270a6c6e936f23</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>5e047437d73d1017bf270a6c6e936f23</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>5e047437d73d1017bf270a6c6e936f23</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2</uri> - </map> - </map> - </map> - <key>berkeley</key> - <map> - <key>copyright</key> - <string>Copyright (c) 1990-1999 Sleepycat Software. All rights reserved.</string> - <key>description</key> - <string>a high-performance, embedded database library</string> - <key>license</key> - <string>sleepycat</string> - </map> - <key>boost</key> - <map> - <key>copyright</key> - <string>various</string> - <key>description</key> - <string>A set of portable C++ libraries which provide a wide set of functionality. </string> - <key>license</key> - <string>boost</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>71defd179827bf172b76d6020023e0e8</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-darwin-20100222a.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>4db3d74e40d149eeec06f4d97a609bb1</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100624.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>af4badd6b2c10bc4db82ff1256695892</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux64-20100119.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>72e6e2eff5d146a107f3059b6c31fb95</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-windows-20100630.tar.bz2</uri> - </map> - </map> - </map> - <key>curl</key> - <map> - <key>copyright</key> - <string>Copyright (c) 1996 - 2008, Daniel Stenberg, <daniel@haxx.se>.</string> - <key>description</key> - <string>Client-side URL transfer library. Handles moving data across the net in many different protocols. Used to GET/POST/PUT/DELETE web resources. </string> - <key>license</key> - <string>curl</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>ca8f0134fa5ab6f34a6eeb8d0896c9b0</string> - <key>url</key> - <uri>https://s3.amazonaws.com/automated-builds-secondlife-com/hg/repo/brad_curl-autobuild/rev/216961/arch/Darwin/installer/curl-7.21.1-darwin-20101214.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>9c9b629b62bf874d550c430ad678dc04</string> - <key>url</key> - <uri>https://s3.amazonaws.com/automated-builds-secondlife-com/hg/repo/brad_curl-autobuild/rev/216961/arch/Linux/installer/curl-7.21.1-linux-20101215.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>6994192cea7ab2d885a158a3de474273</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.16.4a-linux64-20090303.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>48691883065a82d53691d73aae81d4c1</string> - <key>url</key> - <uri>https://s3.amazonaws.com/automated-builds-secondlife-com/hg/repo/brad_curl-autobuild/rev/216961/arch/CYGWIN/installer/curl-7.21.1-windows-20101214.tar.bz2</uri> - </map> - </map> - </map> - <key>dbghelp</key> - <map> - <key>copyright</key> - <string>Copyright Microsoft Corporation</string> - <key>description</key> - <string>dbghelp: Debug helper from Microsoft Debugging Tools For Windows</string> - <key>license</key> - <string>MSDTW</string> - <key>packages</key> - <map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>b7563064037e032143ca2d610aae5153</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbghelp-6.11.1.404-windows-20090520.tar.bz2</uri> - </map> - </map> - </map> - <key>dbusglib</key> - <map> - <key>copyright</key> - <string>Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.</string> - <key>description</key> - <string>dbus/dbus-glib: headers only</string> - <key>license</key> - <string>AFL2.1</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>eb25444142d4102b0ce1b7ffaadb071e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbusglib-linux-20080707.tar.bz2</uri> - </map> - </map> - </map> - <key>elfio</key> - <map> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>82ea408af2f968cfe5f013ab241323ef</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/elfio-1.0.3-linux-20080812.tar.bz2</uri> - </map> - </map> - </map> - <key>expat</key> - <map> - <key>copyright</key> - <string>Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd</string> - <key>description</key> - <string>An XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags).</string> - <key>license</key> - <string>mit</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>c457a0a041ac4946265889a503d26c3d</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-darwin-20090805.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>67b470fd446b08c9831d1039674eae4e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-linux-20080812.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>278c61871419b9a4d50a4f88b7922403</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>5dbbdb4a9b5bec86d180ef20a5f8ccfb</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-windows-20090917.tar.bz2</uri> - </map> - </map> - </map> - <key>fmod</key> - <map> - <key>copyright</key> - <string>FMOD Sound System, copyright (C) Firelight Technologies Pty, Ltd., 1994-2006.</string> - <key>description</key> - <string>Audio engine and mp3 stream decoder .</string> - <key>license</key> - <string>fmod</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>261bcd3387066cf0a1d46549400052b5</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-darwin-20101007.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>8490d97430c12c2e1ac19ff80a8d4db4</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-linux-20101007.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>bab1babcb01ff9849b7f072d352e1ecd</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-windows-20101007.tar.bz2</uri> - </map> - </map> - </map> - <key>fontconfig</key> - <map> - <key>license</key> - <string>mit</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>9af6a1ed39fa540bfcaa402b0ea22f78</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.2.3-linux-20080613.tar.bz2</uri> - </map> - </map> - </map> - <key>freeglut</key> - <map> - <key>license</key> - <string>mit</string> - <key>packages</key> - <map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>fcbb695ff203775fad96d184bf5f34fc</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freeglut-2.4.0-windows-20090608.tar.bz2</uri> - </map> - </map> - </map> - <key>freetype</key> - <map> - <key>copyright</key> - <string>Copyright</string> - <key>description</key> - <string>Font</string> - <key>license</key> - <string>freetype</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>f00144dfb597140f328774c3244f0c3e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.3.9-darwin-20090922.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>9de3f44be65645c7f6af236139596942</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.3.9-linux-2010-02-19a-nommap.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>35f6fa557ba90f9cda0a18d1af2055a4</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.1.5-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>88980fd6d91ac541b62dea877ebe6ba6</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.3.9-windows-20090917.tar.bz2</uri> - </map> - </map> - </map> - <key>glh_linear</key> - <map> - <key>copyright</key> - <string>Copyright (c) 2000 Cass Everitt; Copyright (c) 2000 NVIDIA Corporation; All rights reserved.</string> - <key>description</key> - <string>nVidia NVParse SDK: platform-indepenedent C++ Apple OpenGL helper library</string> - <key>license</key> - <string>glh_linear</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>23bd9a75e5a2365a827461e6c324f52b</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20080613.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>23bd9a75e5a2365a827461e6c324f52b</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20080812.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>2965646aea1d2a6aec1fbc431c02733f</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20080613.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>38b9ddfe8dceff55ee4351016a937d1b</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20080613.tar.bz2</uri> - </map> - </map> - </map> - <key>glib</key> - <map> - <key>description</key> - <string>GLib is a library containing many useful C routines for things such as trees, hashes, and lists.</string> - <key>license</key> - <string>gpl</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>6cc5ce1fafd10299fdb890b3d4c3cf53</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-darwin-20080817.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>2f1a9e14f9213c2c9564c1c1cfdd6d47</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-linux-20080817.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>3d5e29d444dde4815b36082eedfc775a</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-windows-20080817.tar.bz2</uri> - </map> - </map> - </map> - <key>glui</key> - <map> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>84f792a860691d0fad6d1de6eeb31baa</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20090623a.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>5b8631fe510d4ebaeb965c673937e1e7</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.3.6-windows-freeglut-20090608.tar.bz2</uri> - </map> - </map> - </map> - <key>google</key> - <map> - <key>license</key> - <string>mit</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>40db900872612615e849f17cbdfd2c27</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google-linux-20080812.tar.bz2</uri> - </map> - </map> - </map> - <key>google-perftools</key> - <map> - <key>copyright</key> - <string>Copyright (c) 2005, Google Inc.</string> - <key>description</key> - <string>Heap performance and validity checking tools from google. Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.</string> - <key>license</key> - <string>bsd</string> - <key>packages</key> - <map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>32dba32ddd460a08e082898ebba6315c</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google-perftools-1.0-windows-20090406.tar.bz2</uri> - </map> - </map> - </map> - <key>google_breakpad</key> - <map> - <key>copyright</key> - <string>Copyright (c) 2006, Google Inc.</string> - <key>description</key> - <string>An open-source multi-platform crash reporting system </string> - <key>license</key> - <string>bsd</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>ced4010b59f1a579caa7fe3c18512499</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20100528a.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>29c3e7dad60bbf02c811786436d99523</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20100521b.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>0859d47242990125f17eaab30bece2ff</string> - <key>url</key> - <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/google_breakpad-0.0.0-rev599-windows-20100524.tar.bz2</uri> - </map> - </map> - </map> - <key>googlemock</key> - <map> - <key>copyright</key> - <string>Copyright 2008, Google Inc.</string> - <key>description</key> - <string>Google C++ Mocking Framework (or Google Mock for short) is a library for writing and using C++ mock classes.</string> - <key>license</key> - <string>bsd</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>4863e9fea433d0a4be761ea5d3e8346a</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20090626.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>877dabecf84339690191c6115c76366e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux32-20090527.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>f601a82ea91030974072da8924cae41e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-windows-20090921.tar.bz2</uri> - </map> - </map> - </map> - <key>gstreamer</key> - <map> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>c829b638b6eef71ca63418cb9aea46a2</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20080613.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>befc7520fe01250f39458f65c29bc584</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux64-20080909.tar.bz2</uri> - </map> - </map> - </map> - <key>gtk-atk-pango-glib</key> - <map> - <key>copyright</key> - <string>Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald</string> - <key>description</key> - <string>Libraries associated with GTK for gui features. atk: interfaces for accessibility; glib: low-level core functionality for using GTK+ and GNOME; pango: layout/rendering of text w/ emphasis on internationalization.</string> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>21c16a74f8fc9a62e3ab944a6eb7403d</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20080616.tar.bz</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>d963750bcd333a108b3697d220c87d09</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20080613.tar.bz2</uri> - </map> - </map> - </map> - <key>havok</key> - <map> - <key>copyright</key> - <string>on file</string> - <key>description</key> - <string>Physics engine for the simulator</string> - <key>license</key> - <string>havok</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>f64c08771a4fc456db2a55b47302078b</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/havok-4.6-darwin-20080812.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>af7b1fc9072443009f19e43fb3c8342f</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/havok-4.6.1-linux-20081029.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>cd4076d6caf5fabff36bf48bd01e4ba8</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/havok-4.6.1-linux64-20081030.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>f25fbb29c2275267233c79f0c68ca37f</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/havok-4.6.1-windows-20081030.tar.bz2</uri> - </map> - </map> - </map> - <key>jpeglib</key> - <map> - <key>copyright</key> - <string>Copyright (c) 2003, Yves Piguet.</string> - <key>description</key> - <string>An open-source JPEG (JFIF) library</string> - <key>license</key> - <string>jpeglib</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>8d38d74c481e9aab4518c8f2a7d52800</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-darwin-20080812.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>8aa8e01e0c21f60f0ede0ffb04e9214f</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-linux-20081218.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>0e7facf7d48531d20c0cd6a3c3f04021</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>6a6bb0143a2561e3276dab4bcfa425ef</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-windows-20090917a.tar.bz2</uri> - </map> - </map> - </map> - <key>jsoncpp</key> - <map> - <key>copyright</key> - <string>json-cpp library released to Public Domain by Baptiste Lepilleur <blep@users.sourceforge.net></string> - <key>description</key> - <string>jsoncpp is an implementation of a JSON (http://json.org) reader and writer in C++.</string> - <key>license</key> - <string>jsoncpp</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>4c6b949778099a63550898f00f3e6a5e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-svn-r69-darwin-20090923.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>a2a94b8ca1d32f23e3e668d64023514e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-svn-r69-linux-20090922.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>a06ab38628ab7b53b8f3326cd942a6a8</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-svn-r69-linux64-20090922.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>caf152cfc730737c124f7612cf68fbd3</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-svn-r69-windows-20090922.tar.bz2</uri> - </map> - </map> - </map> - <key>kdu</key> - <map> - <key>copyright</key> - <string>on file</string> - <key>description</key> - <string>Kakadu (KDU) JPEG-2000 decoder library. </string> - <key>license</key> - <string>kdu</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>8261994de5af6581e08c26fefe1b2810</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/kdu-6.4.1-darwin-20101123.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>ed3e58899a424684dad49c94ba3813e7</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/kdu-6.4.1-linux-20101124.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>066e089a5d9faeaf131e1f4e4860a163</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/kdu-6.4.1-windows-20101123.tar.bz2</uri> - </map> - </map> - </map> - <key>libmono</key> - <map> - <key>copyright</key> - <string>(C) 2005 Novell, Inc. http://www.novell.com</string> - <key>description</key> - <string>An open source implementation of the ECMA/ISO ECMA-334 Common L\ -anguage Infrstructure (CLI) international standard</string> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>39a803fcbe6f11b72358fc78b7777b6c</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libmono-darwin-20080724.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>9bc0f8b7d5e0ff194b6d5635daf9ae3a</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libmono-1.2.6-linux-20080816a.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>451521b4cb57c35caf3efb8dcf99b99e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libmono-1.2.6-linux64-20080926.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>6712a09311a914752f47d5d62562a239</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libmono-1.2.6-windows-20080903.tar.bz2</uri> - </map> - </map> - </map> - <key>libpng</key> - <map> - <key>copyright</key> - <string>Copyright (c) 2004, 2006-2008 Glenn Randers-Pehrson</string> - <key>description</key> - <string>An open, extensible image format with lossless compression. PNG Reference Library </string> - <key>license</key> - <string>libpng</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>82659b48831cbf58bf04b86602939e0b</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-darwin-20090304.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>f5e84c991f6e3caacb26db259593cbea</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-linux-20090304.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>5ee1e62bde38520c7f134c4afb9ac9b1</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-linux64-20090304.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>c781cd9846cf20afb90ac40ad1a0ce9d</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-windows-20090917.tar.bz2</uri> - </map> - </map> - </map> - <key>libuuid</key> - <map> - <key>copyright</key> - <string>Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/></string> - <key>description</key> - <string>Generates UUIDs under Linux. Originally a part of the ext2fs filesystem. Also see lluuid.cpp for all platforms. Part of the e2fsprogs package.</string> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>91b194aed4b38bc23493b198009a8c6a</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libuuid-linux-20090417.tar.bz2</uri> - </map> - </map> - </map> - <key>libxml</key> - <map> - <key>license</key> - <string>mit</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>4b5d2dcfe8a49b73fb69f10aab441092</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20080613.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>921d7f980519101afb74623e29e9d175</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux64-20080909.tar.bz2</uri> - </map> - </map> - </map> - <key>llqtwebkit</key> - <map> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>13f9be04ba029d19f822abdcb755c700</string> - <key>url</key> - <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-darwin-4.7.1-20110302.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>5d743c93b970abe685b185de83001a6e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20100923.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>7cc9626ff4ac035f8605c996d18ea6a9</string> - <key>url</key> - <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.7.1-20110302.tar.bz2</uri> - </map> - </map> - </map> - <key>mesa</key> - <map> - <key>copyright</key> - <string>Copyright (C) 1999-2007 Brian Paul All Rights Reserved.</string> - <key>description</key> - <string>Mesa 3-D graphics library. Provides the required Apple OpenGL headers under Linux.</string> - <key>license</key> - <string>mesa</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>70d0bbe1145fff29a0131349c898260e</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20080812.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>56630977f9261bd82039b0da08a0685c</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-6.2.1-linux64-20081016.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>82cdcdcb2d0615389a7480485ea35f4c</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-windows-20080613.tar.bz2</uri> - </map> - </map> - </map> - <key>mysql</key> - <map> - <key>license</key> - <string>gpl</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>df27f2db244ea2762759a06cd75ada4e</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysql-darwin-20080812.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>cc86b4cc858655e23704d1168325d7b9</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysqlclient-linux-20090320.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>98bac06680dca907e783d8dd4aa9edde</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysql-windows-20080804.tar.bz2</uri> - </map> - </map> - </map> - <key>ndofdev</key> - <map> - <key>copyright</key> - <string>Copyright (c) 2007, 3Dconnexion, Inc. - All rights reserved.</string> - <key>description</key> - <string>in use on windows and darwin for joystick support.</string> - <key>license</key> - <string>linden</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>17999c47e17f2dd9e12a22372ce8ff14</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-darwin-20080812.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>9469c3732a33a154fa0a2807b9f36ccc</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-0.2-20080828.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>f0df8a1e60991095e3adca1450b8c9c0</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-windows-20090917.tar.bz2</uri> - </map> - </map> - </map> - <key>ogg-vorbis</key> - <map> - <key>copyright</key> - <string>Copyright (C) 2008 Xiph.org Foundation</string> - <key>description</key> - <string>Ogg: container format Vorbis: audio compression scheme</string> - <key>license</key> - <string>ogg-vorbis</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>a6843398b780645c4897c9776c688926</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.03-1.1.2-darwin-20080812.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>6dc0536329a0aadf76e3054ffd4da61c</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.2.0-linux-20081201.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>964c71e6ee22be1bcaf6d480e74cdd14</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.2.0-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>9bf1fea65e66b2cd3075e6ffd7eb57ad</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.1.3-1.2.0-windows-20080723.tar.bz2</uri> - </map> - </map> - </map> - <key>openSSL</key> - <map> - <key>license</key> - <string>openSSL</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>11d2be4f2b172430747b7d4a6739e3d8</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8l-darwin-20100428.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>f219ef07b02e2abb9282345c3a8f2b39</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-linux-20080812.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>00b23f28a2457d9dabbaff0b29ee7323</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8g-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>dd85209081b832e836de6e1538541d89</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8j-windows-20090129.tar.bz2</uri> - </map> - </map> - </map> - <key>openal-soft</key> - <map> - <key>copyright</key> - <string>Copyright (C) 2008 by authors.</string> - <key>description</key> - <string>3D Audio library</string> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>a0757244e3e6688fde2ffeea35cc1f96</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-darwin-20080924.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>75a7004ab14bea46594b1c652f1a6040</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-linux-20100120-3ad86a1c.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>5ad0a3ab623356c1ad61394ba238f99f</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-soft-1.6.372-linux64-20081219.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>a0757244e3e6688fde2ffeea35cc1f96</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-windows-20080924.tar.bz2</uri> - </map> - </map> - </map> - <key>openjpeg</key> - <map> - <key>copyright</key> - <string>Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium</string> - <key>description</key> - <string>An open-source JPEG-2000 library; a slower alternative to Kadaku. Used in the open source release </string> - <key>license</key> - <string>openjpeg</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>23313fda213a2496945435db2a0ee78b</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.3.0-darwin-20090501.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>02af0dad64803e0d821bc09e6038682c</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.3-linux-20081124b.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>44f1bc9d47e4a54fc274c213f2cb565f</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.2.0-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>41541a98106894e28a6bf585010fea65</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.3-windows-20090407.tar.bz2</uri> - </map> - </map> - </map> - <key>pth</key> - <map> - <key>copyright</key> - <string>Copyright (c) 1999-2006 Ralf S. Engelschall <rse@gnu.org></string> - <key>description</key> - <string>Portable cooperative threads package, used to support Boost.Coroutine on Mac OS X 10.4</string> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>216cb6217a06c64dfae30a55ab8b975c</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-darwin-20090923.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>c5c2f73847c126e679d925beab48c7d4</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-linux-20090427.tar.bz2</uri> - </map> - <key>linux32</key> - <map> - <key>md5sum</key> - <string>c5c2f73847c126e679d925beab48c7d4</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-linux32-20090427.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>c5c2f73847c126e679d925beab48c7d4</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-linux64-20090427.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>c5c2f73847c126e679d925beab48c7d4</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-windows-20090427.tar.bz2</uri> - </map> - </map> - </map> - <key>pulseaudio</key> - <map> - <key>copyright</key> - <string>Copyright 2004-2006 Lennart Poettering, Copyright 2006 Pierre Ossman (ossman@cendio.se) for Cendio AB</string> - <key>description</key> - <string>pulseaudio: headers only</string> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>30cb00069fe2a545fbf7be1070386236</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/linux-pulse-headers-0.9.14.tar.bz2</uri> - </map> - </map> - </map> - <key>quicktime</key> - <map> - <key>copyright</key> - <string>Copyright (C) 1990-2007 by Apple Computer, Inc., all rights reserved.</string> - <key>description</key> - <string>Separate download. Used to play in-world video clips on a prim. </string> - <key>license</key> - <string>quicktime</string> - <key>packages</key> - <map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>be45825cc14ede53790ac93c58307dcb</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/quicktime-sdk-windows-7.3-20091110.tar.bz2</uri> - </map> - </map> - </map> - <key>smartheap</key> - <map> - <key>copyright</key> - <string>Copyright (C) 1991-2000 Compuware Corporation. All Rights Reserved.</string> - <key>description</key> - <string>Memory Management Library</string> - <key>license</key> - <string>smartheap</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>f54131b5f228e805c64c2e4e6c96579a</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-darwin-20080610.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>499208522bf7d7843e1d014d64214e06</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-linux-20080610.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>78fd47017f21d11eae43bca3e38a3e1e</string> - <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-windows-20080611.tar.bz2</uri> - </map> - </map> - </map> - <key>tut</key> - <map> - <key>copyright</key> - <string>Copyright 2002-2006 Vladimir Dyuzhev, Copyright 2007 Denis Kononenko, Copyright 2008 Michal Rzechonek</string> - <key>description</key> - <string>C++ Template Unit Test</string> - <key>license</key> - <string>bsd</string> - <key>packages</key> - <map> - <key>common</key> - <map> - <key>md5sum</key> - <string>a1b8a118ba9df1f2a73f6aafa7980e83</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20081208.tar.bz2</uri> - </map> - </map> - </map> - <key>unistd</key> - <map> - <key>copyright</key> - <string>(c) 2008 Linden Lab.</string> - <key>description</key> - <string>Placeholder file to make flex happy on windows.</string> - <key>license</key> - <string>linden</string> - <key>packages</key> - <map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>6353aff33d7d03b22055aec76f53a866</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/unistd-windows-20080611.tar.bz2</uri> - </map> - </map> - </map> - <key>slvoice</key> - <map> - <key>copyright</key> - <string> </string> - <key>license</key> - <string>vivox</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>2f9b3528d4b5f858fb8dcee4b6dd5188</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20101117a.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>cde4728b8a75a76c72a8785815cb769f</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20101117a.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>940ac55a6d0141c958bf2b14939d8474</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20101117a.tar.bz2</uri> - </map> - </map> - </map> - <key>xmlrpc-epi</key> - <map> - <key>copyright</key> - <string>Copyright 2000 Epinions, Inc.</string> - <key>description</key> - <string>Implementation of the xmlrpc protocol in C that provides an API for developers to serialize RPC requests to and from XML. </string> - <key>license</key> - <string>xmlrpc-epi</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>2d3a918c88d756422c1a8139ebe15f56</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-darwin-20080812.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>84a219199240ea70f54439c02acef0cd</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-linux-20080812.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>dc67b896c56116df8e18f2d1bbd07031</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>262629bcaa39dcf7266caa50da01a599</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-windows-20091016.tar.bz2</uri> - </map> - </map> - </map> - <key>zlib</key> - <map> - <key>copyright</key> - <string>Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler</string> - <key>description</key> - <string>A Massively Spiffy Yet Delicately Unobtrusive Compression Library (Also Free, Not to Mention Unencumbered by Patents)</string> - <key>license</key> - <string>zlib</string> - <key>packages</key> - <map> - <key>darwin</key> - <map> - <key>md5sum</key> - <string>c844e1b05723ce078dbbd5aea9cdd3ad</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.1.4-darwin-20080818.tar.bz2</uri> - </map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>26fe88213c213dc6153690ab142c25ca</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.3dfsg-linux-20091208.tar.bz2</uri> - </map> - <key>linux64</key> - <map> - <key>md5sum</key> - <string>4bddfb2c6dd7b1470a3ed675ac14bd9a</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.3-linux64-20080909.tar.bz2</uri> - </map> - <key>windows</key> - <map> - <key>md5sum</key> - <string>73baf52a740d151fddbc2a008369c462</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.3-windows-20090921.tar.bz2</uri> - </map> - </map> - </map> - </map> - <key>licenses</key> - <map> - <key>AFL2.1</key> - <map> - <key>url</key> - <string>http://opensource-definition.org/licenses/afl-2.1.html</string> - </map> - <key>GL</key> - <map> - <key>url</key> - <string>http://www.xfree86.org/4.4.0/LICENSE9.html#sgi</string> - </map> - <key>MSDTW</key> - <map> - <key>text</key> - <string>MICROSOFT SOFTWARE LICENSE TERMS -MICROSOFT DEBUGGING TOOLS FOR WINDOWS -These license terms are an agreement between Microsoft Corporation (or based on where you live, one of -its affiliates) and you. Please read them. They apply to the software named above, which includes the -media on which you received it, if any. The terms also apply to any Microsoft -* updates, -* supplements, -* Internet-based services -* support services, and -* Debugging symbol files that you may access over the internet -for this software, unless other terms accompany those items. If so, those terms apply. -By using the software, you accept these terms. If you do not accept them, do not use the -software. -If you comply with these license terms, you have the rights below. -1. INSTALLATION AND USE RIGHTS. One user may install and use any number of copies of the -software on your devices to design, develop, debug and test your programs. -2. ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS. -a. Distributable Code. The software contains code that you are permitted to distribute in programs -you develop if you comply with the terms below. -i. Right to Use and Distribute. The code and text files listed below are “Distributable Code.” -* REDIST.TXT Files. You may copy and distribute the object code form of code listed in -REDIST.TXT files. -* Sample Code. You may modify, copy, and distribute the source and object code form of -code marked as “sample.” -* Third Party Distribution. You may permit distributors of your programs to copy and -distribute the Distributable Code as part of those programs. -ii. Distribution Requirements. For any Distributable Code you distribute, you must -* add significant primary functionality to it in your programs; -* require distributors and external end users to agree to terms that protect it at least as much -as this agreement; -* display your valid copyright notice on your programs; and -* indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, -related to the distribution or use of your programs. -iii. Distribution Restrictions. You may not -* alter any copyright, trademark or patent notice in the Distributable Code; -* distribute any symbol files which you may access or use under these license terms for the -software; -* use Microsoft’s trademarks in your programs’ names or in a way that suggests your -programs come from or are endorsed by Microsoft; -* distribute Distributable Code to run on a platform other than the Windows platform; -* include Distributable Code in malicious, deceptive or unlawful programs; or -* modify or distribute the source code of any Distributable Code so that any part of it -becomes subject to an Excluded License. An Excluded License is one that requires, as a -condition of use, modification or distribution, that -* the code be disclosed or distributed in source code form; or -* others have the right to modify it. -3. SCOPE OF LICENSE. The software is licensed, not sold. This agreement only gives you some rights -to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights -despite this limitation, you may use the software only as expressly permitted in this agreement. In -doing so, you must comply with any technical limitations in the software that only allow you to use it in -certain ways. You may not -* work around any technical limitations in the software; -* reverse engineer, decompile or disassemble the software, except and only to the extent that -applicable law expressly permits, despite this limitation; -* make more copies of the software than specified in this agreement or allowed by applicable law, -despite this limitation; -* publish the software for others to copy; -* rent, lease or lend the software; -* transfer the software or this agreement to any third party; or -* use the software for commercial software hosting services. -4. INTERNET-BASED SERVICES. Microsoft provides Internet-based services with the software. It may -change or cancel them at any time. -a. Consent for Internet-Based Services. The software contains features which may connect to -Microsoft or service provider computer systems over the Internet. In some cases, you will not -receive a separate notice when they connect. You may switch these features on or you may -choose not to use them. For more information about these features, see -http://www.microsoft.com/info/privacy/default.mspx. By using these features, you consent to the transmission of -this information. Microsoft does not use the information to identify or contact you. -b. Misuse of Internet-based Services. You may not use these services in any way that could -harm them or impair anyone else’s use of them. You may not use the services to try to gain -unauthorized access to any service, data, account or network by any means. - -5. BACKUP COPY. You may make one backup copy of the software. You may use it only to reinstall the -software. -6. DOCUMENTATION. Any person that has valid access to your computer or internal network may copy -and use the documentation for your internal, reference purposes. -7. EXPORT RESTRICTIONS. The software is subject to United States export laws and regulations. You -must comply with all domestic and international export laws and regulations that apply to the software. -These laws include restrictions on destinations, end users and end use. For additional information, see -www.microsoft.com/exporting. -8. SUPPORT SERVICES. Because this software is “as is,” we may not provide support services for it. -9. ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-based -services and support services that you use, are the entire agreement for the software and support -services. -10. APPLICABLE LAW. -a. United States. If you acquired the software in the United States, Washington state law governs -the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of -laws principles. The laws of the state where you live govern all other claims, including claims under -state consumer protection laws, unfair competition laws, and in tort. -b. Outside the United States. If you acquired the software in any other country, the laws of that -country apply. -11. LEGAL EFFECT. This agreement describes certain legal rights. You may have other rights under the -laws of your country. You may also have rights with respect to the party from whom you acquired the -software. This agreement does not change your rights under the laws of your country if the laws of -your country do not permit it to do so. -12. DISCLAIMER OF WARRANTY. The software is licensed “as-is.” You bear the risk of using -it. Microsoft gives no express warranties, guarantees or conditions. You may have -additional consumer rights under your local laws which this agreement cannot change. To -the extent permitted under your local laws, Microsoft excludes the implied warranties of -merchantability, fitness for a particular purpose and non-infringement. -13. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. You can recover from -Microsoft and its suppliers only direct damages up to U.S. $5.00. You cannot recover any -other damages, including consequential, lost profits, special, indirect or incidental -damages. -This limitation applies to -* anything related to the software, services, content (including code) on third party Internet sites, or -third party programs; and -* claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, -or other tort to the extent permitted by applicable law. -It also applies even if Microsoft knew or should have known about the possibility of the damages. The -above limitation or exclusion may not apply to you because your country may not allow the exclusion or -limitation of incidental, consequential or other damages. - </string> - </map> - <key>apache 2.0</key> - <map> - <key>url</key> - <string>http://www.apache.org/licenses/LICENSE-2.0</string> - </map> - <key>artwork</key> - <map> - <key>text</key> - <string>COPYRIGHT AND PERMISSION NOTICE - -Second Life(TM) Viewer Artwork. Copyright (C) 2008 Linden Research, Inc. - -Linden Research, Inc. ("Linden Lab") licenses the Second Life viewer -artwork and other works in the files distributed with this Notice under -the Creative Commons Attribution-Share Alike 3.0 License, available at -http://creativecommons.org/licenses/by-sa/3.0/legalcode. For the license -summary, see http://creativecommons.org/licenses/by-sa/3.0/. - -Notwithstanding the foregoing, all of Linden Lab's trademarks, including -but not limited to the Second Life brand name and Second Life Eye-in-Hand -logo, are subject to our trademark policy at -http://secondlife.com/corporate/trademark/. - -If you distribute any copies or adaptations of the Second Life viewer -artwork or any other works in these files, you must include this Notice -and clearly identify any changes made to the original works. Include -this Notice and information where copyright notices are usually included, -for example, after your own copyright notice acknowledging your use of -the Second Life viewer artwork, in a text file distributed with your -program, in your application's About window, or on a credits page for -your work. -</string> - <key>url</key> - <string>http://svn.secondlife.com/svn/linden/trunk/doc/LICENSE-logos.txt</string> - </map> - <key>boost</key> - <map> - <key>url</key> - <string>http://www.boost.org/LICENSE_1_0.txt</string> - </map> - <key>bsd</key> - <map> - <key>url</key> - <string>http://www.opensource.org/licenses/bsd-license.php</string> - </map> - <key>c-ares</key> - <map> - <key>text</key> - <string>http://daniel.haxx.se/projects/c-ares/license.html</string> - </map> - <key>curl</key> - <map> - <key>url</key> - <string>http://curl.haxx.se/docs/copyright.html</string> - </map> - <key>fmod</key> - <map> - <key>url</key> - <string>http://www.fmod.org/ifmodlicense.html</string> - </map> - <key>freetype</key> - <map> - <key>url</key> - <string>http://freetype.sourceforge.net/FTL.TXT</string> - </map> - <key>glh_linear</key> - <map> - <key>text</key> - <string>glh - is a platform-indepenedent C++ OpenGL helper library - -Copyright (c) 2000 Cass Everitt -Copyright (c) 2000 NVIDIA Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or -without modification, are permitted provided that the following -conditions are met: - -Redistributions of source code must retain the above -copyright notice, this list of conditions and the following -disclaimer. -Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following -disclaimer in the documentation and/or other materials -provided with the distribution. -The names of contributors to this software may not be used -to endorse or promote products derived from this software -without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -Cass Everitt - cass@r3.nu - -</string> - </map> - <key>glut</key> - <map> - <key>url</key> - <string>http://www.xmission.com/~nate/glut/README-win32.txt</string> - </map> - <key>gpl</key> - <map> - <key>url</key> - <string>http://www.gnu.org/licenses/gpl.html</string> - </map> - <key>havok</key> - <map> - <key>text</key> - <string>on file</string> - </map> - <key>intel</key> - <map> - <key>text</key> - <string>Haven't yet found. -</string> - </map> - <key>jpeglib</key> - <map> - <key>text</key> - <string>http://nyctergatis.com/jpeglib/</string> - </map> - <key>jsoncpp</key> - <map> - <key>text</key> - <string>The json-cpp library and this documentation are in Public Domain. Retrieved from http://jsoncpp.sourceforge.net/ on 2009-09-04.</string> - <key>url</key> - <string>http://jsoncpp.sourceforge.net</string> - </map> - <key>kdu</key> - <map> - <key>text</key> - <string>jpeg2000 license #00024 (on file)</string> - </map> - <key>lgpl</key> - <map> - <key>url</key> - <string>http://www.gnu.org/copyleft/lgpl.html</string> - </map> - <key>libpng</key> - <map> - <key>text</key> - <string>http://www.libpng.org/pub/png/src/libpng-LICENSE.txt</string> - </map> - <key>linden</key> - <map> - <key>text</key> - <string>Using this license for Linden Lab owned library files</string> - </map> - <key>mesa</key> - <map> - <key>url</key> - <string>http://www.mesa3d.org/license.html</string> - </map> - <key>mit</key> - <map> - <key>text</key> - <string>http://www.jclark.com/xml/copying.txt</string> - </map> - <key>ogg-vorbis</key> - <map> - <key>url</key> - <string>http://www.xiph.org/licenses/bsd/</string> - </map> - <key>openSSL</key> - <map> - <key>url</key> - <string>http://www.openssl.org/source/license.html</string> - </map> - <key>openjpeg</key> - <map> - <key>url</key> - <string>http://www.openjpeg.org/BSDlicense.txt</string> - </map> - <key>quicktime</key> - <map> - <key>text</key> - <string>ENGLISH - -Apple Computer, Inc. -QuickTime 7 Software Developer Kit (SDK) -Software License Agreement - -PLEASE READ THIS SOFTWARE LICENSE AGREEMENT ("LICENSE") BEFORE USING THE SOFTWARE. BY USING THE SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS LICENSE. IF YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY, SIGNIFY YOUR AGREEMENT TO BE BOUND BY THE TERMS OF THIS LICENSE BY CLICKING THE "AGREE/ACCEPT" BUTTON. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENSE, RETURN THE APPLE SOFTWARE TO THE PLACE WHERE YOU OBTAINED IT FOR A REFUND OR, IF THE SOFTWARE WAS ACCESSED ELECTRONICALLY, CLICK "DISAGREE/DECLINE". - -IMPORTANT NOTE: To the extent this software may be used to reproduce materials, it is licensed to you only for reproduction of materials you are authorized or legally permitted to reproduce. - -1. License. Any software, tools, utilities, sample code, documentation, fonts, API?s, header files and other materials accompanying this License, whether on disk, print or electronic documentation, in read only memory, or any other media, (collectively, the "Apple Software") are licensed, not sold, to you by Apple Computer, Inc. ("Apple") for use only under the terms of this License, and Apple reserves all rights not expressly granted to you. The rights granted herein are limited to Apple's and its licensors' intellectual property rights in the Apple Software and do not include any other patents or intellectual property rights. You own the media on which the Apple Software is recorded but Apple and/or Apple's licensor(s) retain ownership of the Apple Software itself. The Apple Software in this package and any copies, modifications and derivative works that this License authorizes you to make are subject to this License. - -2. Permitted Uses and Restrictions. You may use the Apple Software to develop application software that is compatible with, and runs only on Mac OS X and/or Windows platforms with QuickTime installed. Except for compiling header files and linking libraries as necessary to build your application software, you have no right to modify, incorporate into or include in combination with your own programs, license or otherwise redistribute any portion of the Apple Software. Your software application may not interfere with the functionality of QuickTime Player or the QuickTime Plug-in, including but not limited to file type or MIME type associations that are registered to QuickTime. You may make only as many internal use copies of the Apple Software as reasonably necessary to use the Apple Software as permitted in this paragraph and distribute such copies only to your employees whose job duties require them to so use the Apple Software. You must reproduce on each copy of the Apple Software or portion thereof, the Apple copyright notice and any other proprietary legends that were on the original copy of the Apple Software. Except as expressly permitted in this License, you may not decompile, reverse engineer, disassemble, modify, rent, lease, loan, sublicense, distribute or create derivative works based upon the Apple Software in whole or part. Your rights under this License will terminate automatically without notice from Apple if you fail to comply with any term(s) of this License. In addition, Apple reserves the right to terminate this License if a new version of Apple's operating system software or the Apple Software is released which is incompatible with the Apple Software. - -3. Disclaimer Of Warranty. The Apple Software may be "alpha", "beta", "development", pre-release, untested, and/or not fully tested and may contain errors that could cause failures or loss of data, be incomplete or contain inaccuracies. YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT USE OF THE APPLE SOFTWARE IS AT YOUR SOLE RISK AND THAT THE ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY AND EFFORT IS WITH YOU. EXCEPT FOR THE LIMITED WARRANTY ON MEDIA SET FORTH ABOVE AND TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE APPLE SOFTWARE IS PROVIDED "AS IS", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND, AND APPLE AND APPLE'S LICENSORS (COLLECTIVELY REFERRED TO AS "APPLE" FOR THE PURPOSES OF SECTIONS 4 AND 5) HEREBY DISCLAIM ALL WARRANTIES AND CONDITIONS WITH RESPECT TO THE APPLE SOFTWARE, EITHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT, AND NON-INFRINGEMENT OF THIRD PARTY RIGHTS. APPLE DOES NOT WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE APPLE SOFTWARE, THAT THE FUNCTIONS CONTAINED IN THE APPLE SOFTWARE WILL MEET YOUR REQUIREMENTS, THAT THE OPERATION OF THE APPLE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE APPLE SOFTWARE WILL BE CORRECTED. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY. SHOULD THE APPLE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES OR LIMITATIONS ON APPLICABLE STATUTORY RIGHTS OF A CONSUMER, SO THE ABOVE EXCLUSION AND LIMITATIONS MAY NOT APPLY TO YOU. - -4. Limitation Of Liability. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT SHALL APPLE BE LIABLE FOR PERSONAL INJURY, OR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES WHATSOEVER, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, LOSS OF DATA, BUSINESS INTERRUPTION OR ANY OTHER COMMERCIAL DAMAGES OR LOSSES, ARISING OUT OF OR RELATED TO YOUR USE OR INABILITY TO USE THE APPLE SOFTWARE, HOWEVER CAUSED, REGARDLESS OF THE THEORY OF LIABILITY (CONTRACT, TORT OR OTHERWISE) AND EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY FOR PERSONAL INJURY, OR OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. In no event shall Apple's total liability to you for all damages (other than as may be required by applicable law in cases involving personal injury) exceed the amount of fifty dollars ($50.00). The foregoing limitations will apply even if the above stated remedy fails of its essential purpose. - -5. Export Control. You may not use or otherwise export or reexport the Apple Product except as authorized by United States law and the laws of the jurisdiction in which the Apple Product was obtained. In particular, but without limitation, the Apple Product may not be exported or re-exported (a) into any U.S. embargoed countries or (b) to anyone on the U.S. Treasury Department's list of Specially Designated Nationals or the U.S. Department of Commerce Denied Person?s List or Entity List. By using the Apple Product, you represent and warrant that you are not located in any such country or on any such list. - -6. Government End Users. The Apple Software and related documentation are "Commercial Items", as that term is defined at 48 C.F.R. ?2.101, consisting of "Commercial Computer Software" and "Commercial Computer Software Documentation", as such terms are used in 48 C.F.R. ?12.212 or 48 C.F.R. ?227.7202, as applicable. Consistent with 48 C.F.R. ?12.212 or 48 C.F.R. ?227.7202-1through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States. - -7. Controlling Law and Severability. This License will be governed by and construed in accordance with the laws of the State of California, as applied to agreements entered into and to be performed entirely within California between California residents. This License shall not be governed by the United Nations Convention on Contracts for the International Sale of Goods, the application of which is expressly excluded. If for any reason a court of competent jurisdiction finds any provision, or portion thereof, to be unenforceable, the remainder of this License shall continue in full force and effect. - -8. Complete Agreement. This License constitutes the entire agreement between the parties with respect to the use of the Apple Software licensed hereunder and supersedes all prior or contemporaneous understandings regarding such subject matter. No amendment to or modification of this License will be binding unless in writing and signed by Apple. Any translation of this License is done for local requirements and in the event of a dispute between the English and any non-English versions, the English version of this License shall govern. - -EA0300 -</string> - </map> - <key>sleepycat</key> - <map> - <key>url</key> - <string>http://opensource.org/licenses/sleepycat.php</string> - </map> - <key>smartheap</key> - <map> - <key>text</key> - <string>on file -</string> - </map> - <key>things</key> - <map> - </map> - <key>vivox</key> - <map> - <key>text</key> - <string>on file</string> - </map> - <key>xmlrpc-epi</key> - <map> - <key>url</key> - <string>http://xmlrpc-epi.sourceforge.net/main.php?t=license</string> - </map> - <key>zlib</key> - <map> - <key>url</key> - <string>http://www.gzip.org/zlib/zlib_license.html</string> - </map> - </map> - </map> -</llsd> diff --git a/scripts/install.py b/scripts/install.py deleted file mode 100755 index d3bdf52283..0000000000 --- a/scripts/install.py +++ /dev/null @@ -1,1150 +0,0 @@ -#!/usr/bin/env python -"""\ -@file install.py -@author Phoenix -@date 2008-01-27 -@brief Install files into an indra checkout. - -Install files as specified by: -https://wiki.lindenlab.com/wiki/User:Phoenix/Library_Installation - - -$LicenseInfo:firstyear=2007&license=mit$ - -Copyright (c) 2007-2009, Linden Research, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -$/LicenseInfo$ -""" - -import sys -import os.path - -# Look for indra/lib/python in all possible parent directories ... -# This is an improvement over the setup-path.py method used previously: -# * the script may blocated anywhere inside the source tree -# * it doesn't depend on the current directory -# * it doesn't depend on another file being present. - -def add_indra_lib_path(): - root = os.path.realpath(__file__) - # always insert the directory of the script in the search path - dir = os.path.dirname(root) - if dir not in sys.path: - sys.path.insert(0, dir) - - # Now go look for indra/lib/python in the parent dies - while root != os.path.sep: - root = os.path.dirname(root) - dir = os.path.join(root, 'indra', 'lib', 'python') - if os.path.isdir(dir): - if dir not in sys.path: - sys.path.insert(0, dir) - return root - else: - print >>sys.stderr, "This script is not inside a valid installation." - sys.exit(1) - -base_dir = add_indra_lib_path() - -import copy -import optparse -import os -import platform -import pprint -import shutil -import tarfile -import tempfile -import urllib2 -import urlparse - -try: - # Python 2.6 - from hashlib import md5 -except ImportError: - # Python 2.5 and earlier - from md5 import new as md5 - -from indra.base import llsd -from indra.util import helpformatter - -class InstallFile(object): - "This is just a handy way to throw around details on a file in memory." - def __init__(self, pkgname, url, md5sum, cache_dir, platform_path): - self.pkgname = pkgname - self.url = url - self.md5sum = md5sum - filename = urlparse.urlparse(url)[2].split('/')[-1] - self.filename = os.path.join(cache_dir, filename) - self.platform_path = platform_path - - def __str__(self): - return "ifile{%s:%s}" % (self.pkgname, self.url) - - def _is_md5sum_match(self): - hasher = md5(file(self.filename, 'rb').read()) - if hasher.hexdigest() == self.md5sum: - return True - return False - - def is_match(self, platform): - """@brief Test to see if this ifile is part of platform - @param platform The target platform. Eg, windows or linux/i686/gcc/3.3 - @return Returns True if the ifile is in the platform. - """ - if self.platform_path[0] == 'common': - return True - req_platform_path = platform.split('/') - #print "platform:",req_platform_path - #print "path:",self.platform_path - # to match, every path part much match - match_count = min(len(req_platform_path), len(self.platform_path)) - for ii in range(0, match_count): - if req_platform_path[ii] != self.platform_path[ii]: - return False - #print "match!" - return True - - def fetch_local(self): - #print "Looking for:",self.filename - if not os.path.exists(self.filename): - pass - elif self.md5sum and not self._is_md5sum_match(): - print "md5 mismatch:", self.filename - os.remove(self.filename) - else: - print "Found matching package:", self.filename - return - print "Downloading",self.url,"to local file",self.filename - file(self.filename, 'wb').write(urllib2.urlopen(self.url).read()) - if self.md5sum and not self._is_md5sum_match(): - raise RuntimeError("Error matching md5 for %s" % self.url) - -class LicenseDefinition(object): - def __init__(self, definition): - #probably looks like: - # { text : ..., - # url : ... - # blessed : ... - # } - self._definition = definition - - -class InstallableDefinition(object): - def __init__(self, definition): - #probably looks like: - # { packages : {platform...}, - # copyright : ... - # license : ... - # description: ... - # } - self._definition = definition - - def _ifiles_from(self, tree, pkgname, cache_dir): - return self._ifiles_from_path(tree, pkgname, cache_dir, []) - - def _ifiles_from_path(self, tree, pkgname, cache_dir, path): - ifiles = [] - if 'url' in tree: - ifiles.append(InstallFile( - pkgname, - tree['url'], - tree.get('md5sum', None), - cache_dir, - path)) - else: - for key in tree: - platform_path = copy.copy(path) - platform_path.append(key) - ifiles.extend( - self._ifiles_from_path( - tree[key], - pkgname, - cache_dir, - platform_path)) - return ifiles - - def ifiles(self, pkgname, platform, cache_dir): - """@brief return a list of appropriate InstallFile instances to install - @param pkgname The name of the package to be installed, eg 'tut' - @param platform The target platform. Eg, windows or linux/i686/gcc/3.3 - @param cache_dir The directory to cache downloads. - @return Returns a list of InstallFiles which are part of this install - """ - if 'packages' not in self._definition: - return [] - all_ifiles = self._ifiles_from( - self._definition['packages'], - pkgname, - cache_dir) - if platform == 'all': - return all_ifiles - #print "Considering", len(all_ifiles), "packages for", pkgname - # split into 2 lines because pychecker thinks it might return none. - files = [ifile for ifile in all_ifiles if ifile.is_match(platform)] - return files - -class InstalledPackage(object): - def __init__(self, definition): - # looks like: - # { url1 : { files: [file1,file2,...], md5sum:... }, - # url2 : { files: [file1,file2,...], md5sum:... },... - # } - self._installed = {} - for url in definition: - self._installed[url] = definition[url] - - def urls(self): - return self._installed.keys() - - def files_in(self, url): - return self._installed[url].get('files', []) - - def get_md5sum(self, url): - return self._installed[url].get('md5sum', None) - - def remove(self, url): - self._installed.pop(url) - - def add_files(self, url, files): - if url not in self._installed: - self._installed[url] = {} - self._installed[url]['files'] = files - - def set_md5sum(self, url, md5sum): - if url not in self._installed: - self._installed[url] = {} - self._installed[url]['md5sum'] = md5sum - -class Installer(object): - def __init__(self, install_filename, installed_filename, dryrun): - self._install_filename = install_filename - self._install_changed = False - self._installed_filename = installed_filename - self._installed_changed = False - self._dryrun = dryrun - self._installables = {} - self._licenses = {} - self._installed = {} - self.load() - - def load(self): - if os.path.exists(self._install_filename): - install = llsd.parse(file(self._install_filename, 'rb').read()) - try: - for name in install['installables']: - self._installables[name] = InstallableDefinition( - install['installables'][name]) - except KeyError: - pass - try: - for name in install['licenses']: - self._licenses[name] = LicenseDefinition(install['licenses'][name]) - except KeyError: - pass - if os.path.exists(self._installed_filename): - installed = llsd.parse(file(self._installed_filename, 'rb').read()) - try: - bins = installed['installables'] - for name in bins: - self._installed[name] = InstalledPackage(bins[name]) - except KeyError: - pass - - def _write(self, filename, state): - print "Writing state to",filename - if not self._dryrun: - file(filename, 'wb').write(llsd.format_pretty_xml(state)) - - def save(self): - if self._install_changed: - state = {} - state['licenses'] = {} - for name in self._licenses: - state['licenses'][name] = self._licenses[name]._definition - #print "self._installables:",self._installables - state['installables'] = {} - for name in self._installables: - state['installables'][name] = \ - self._installables[name]._definition - self._write(self._install_filename, state) - if self._installed_changed: - state = {} - state['installables'] = {} - bin = state['installables'] - for name in self._installed: - #print "installed:",name,self._installed[name]._installed - bin[name] = self._installed[name]._installed - self._write(self._installed_filename, state) - - def is_valid_license(self, bin): - "@brief retrun true if we have valid license info for installable." - installable = self._installables[bin]._definition - if 'license' not in installable: - print >>sys.stderr, "No license info found for", bin - print >>sys.stderr, 'Please add the license with the', - print >>sys.stderr, '--add-installable option. See', \ - sys.argv[0], '--help' - return False - if installable['license'] not in self._licenses: - lic = installable['license'] - print >>sys.stderr, "Missing license info for '" + lic + "'.", - print >>sys.stderr, 'Please add the license with the', - print >>sys.stderr, '--add-license option. See', sys.argv[0], - print >>sys.stderr, '--help' - return False - return True - - def list_installables(self): - "Return a list of all known installables." - return sorted(self._installables.keys()) - - def detail_installable(self, name): - "Return a installable definition detail" - return self._installables[name]._definition - - def list_licenses(self): - "Return a list of all known licenses." - return sorted(self._licenses.keys()) - - def detail_license(self, name): - "Return a license definition detail" - return self._licenses[name]._definition - - def list_installed(self): - "Return a list of installed packages." - return sorted(self._installed.keys()) - - def detail_installed(self, name): - "Return file list for specific installed package." - filelist = [] - for url in self._installed[name]._installed.keys(): - filelist.extend(self._installed[name].files_in(url)) - return filelist - - def _update_field(self, description, field, value, multiline=False): - """Given a block and a field name, add or update it. - @param description a dict containing all the details of a description. - @param field the name of the field to update. - @param value the value of the field to update; if omitted, interview - will ask for value. - @param multiline boolean specifying whether field is multiline or not. - """ - if value: - description[field] = value - else: - if field in description: - print "Update value for '" + field + "'" - print "(Leave blank to keep current value)" - print "Current Value: '" + description[field] + "'" - else: - print "Specify value for '" + field + "'" - if not multiline: - new_value = raw_input("Enter New Value: ") - else: - print "Please enter " + field + ". End input with EOF (^D)." - new_value = sys.stdin.read() - - if field in description and not new_value: - pass - elif new_value: - description[field] = new_value - - self._install_changed = True - return True - - def _update_installable(self, name, platform, url, md5sum): - """Update installable entry with specific package information. - @param installable[in,out] a dict containing installable details. - @param platform Platform info, i.e. linux/i686, windows/i686 etc. - @param url URL of tar file - @param md5sum md5sum of tar file - """ - installable = self._installables[name]._definition - path = platform.split('/') - if 'packages' not in installable: - installable['packages'] = {} - update = installable['packages'] - for child in path: - if child not in update: - update[child] = {} - parent = update - update = update[child] - parent[child]['url'] = llsd.uri(url) - parent[child]['md5sum'] = md5sum - - self._install_changed = True - return True - - - def add_installable_package(self, name, **kwargs): - """Add an url for a platform path to the installable. - @param installable[in,out] a dict containing installable details. - """ - platform_help_str = """\ -Please enter a new package location and url. Some examples: -common -- specify a package for all platforms -linux -- specify a package for all arch and compilers on linux -darwin/universal -- specify a mac os x universal -windows/i686/vs/2003 -- specify a windows visual studio 2003 package""" - if name not in self._installables: - print "Error: must add library with --add-installable or " \ - +"--add-installable-metadata before using " \ - +"--add-installable-package option" - return False - else: - print "Updating installable '" + name + "'." - for arg in ('platform', 'url', 'md5sum'): - if not kwargs[arg]: - if arg == 'platform': - print platform_help_str - kwargs[arg] = raw_input("Package "+arg+":") - #path = kwargs['platform'].split('/') - - return self._update_installable(name, kwargs['platform'], - kwargs['url'], kwargs['md5sum']) - - def add_installable_metadata(self, name, **kwargs): - """Interactively add (only) library metadata into install, - w/o adding installable""" - if name not in self._installables: - print "Adding installable '" + name + "'." - self._installables[name] = InstallableDefinition({}) - else: - print "Updating installable '" + name + "'." - installable = self._installables[name]._definition - for field in ('copyright', 'license', 'description'): - self._update_field(installable, field, kwargs[field]) - print "Added installable '" + name + "':" - pprint.pprint(self._installables[name]) - - return True - - def add_installable(self, name, **kwargs): - "Interactively pull a new installable into the install" - ret_a = self.add_installable_metadata(name, **kwargs) - ret_b = self.add_installable_package(name, **kwargs) - return (ret_a and ret_b) - - def remove_installable(self, name): - self._installables.pop(name) - self._install_changed = True - - def add_license(self, name, **kwargs): - if name not in self._licenses: - print "Adding license '" + name + "'." - self._licenses[name] = LicenseDefinition({}) - else: - print "Updating license '" + name + "'." - the_license = self._licenses[name]._definition - for field in ('url', 'text'): - multiline = False - if field == 'text': - multiline = True - self._update_field(the_license, field, kwargs[field], multiline) - self._install_changed = True - return True - - def remove_license(self, name): - self._licenses.pop(name) - self._install_changed = True - - def _uninstall(self, installables): - """@brief Do the actual removal of files work. - *NOTE: This method is not transactionally safe -- ie, if it - raises an exception, internal state may be inconsistent. How - should we address this? - @param installables The package names to remove - """ - remove_file_list = [] - for pkgname in installables: - for url in self._installed[pkgname].urls(): - remove_file_list.extend( - self._installed[pkgname].files_in(url)) - self._installed[pkgname].remove(url) - if not self._dryrun: - self._installed_changed = True - if not self._dryrun: - self._installed.pop(pkgname) - remove_dir_set = set() - for filename in remove_file_list: - print "rm",filename - if not self._dryrun: - if os.path.lexists(filename): - remove_dir_set.add(os.path.dirname(filename)) - try: - os.remove(filename) - except OSError: - # This is just for cleanup, so we don't care - # about normal failures. - pass - for dirname in remove_dir_set: - try: - os.removedirs(dirname) - except OSError: - # This is just for cleanup, so we don't care about - # normal failures. - pass - - def uninstall(self, installables, install_dir): - """@brief Remove the packages specified. - @param installables The package names to remove - @param install_dir The directory to work from - """ - print "uninstall",installables,"from",install_dir - cwd = os.getcwdu() - os.chdir(install_dir) - try: - self._uninstall(installables) - finally: - os.chdir(cwd) - - def _build_ifiles(self, platform, cache_dir): - """@brief determine what files to install - @param platform The target platform. Eg, windows or linux/i686/gcc/3.3 - @param cache_dir The directory to cache downloads. - @return Returns the ifiles to install - """ - ifiles = [] - for bin in self._installables: - ifiles.extend(self._installables[bin].ifiles(bin, - platform, - cache_dir)) - to_install = [] - #print "self._installed",self._installed - for ifile in ifiles: - if ifile.pkgname not in self._installed: - to_install.append(ifile) - elif ifile.url not in self._installed[ifile.pkgname].urls(): - to_install.append(ifile) - elif ifile.md5sum != \ - self._installed[ifile.pkgname].get_md5sum(ifile.url): - # *TODO: We may want to uninstall the old version too - # when we detect it is installed, but the md5 sum is - # different. - to_install.append(ifile) - else: - #print "Installation up to date:", - # ifile.pkgname,ifile.platform_path - pass - #print "to_install",to_install - return to_install - - def _install(self, to_install, install_dir): - for ifile in to_install: - tar = tarfile.open(ifile.filename, 'r') - print "Extracting",ifile.filename,"to",install_dir - if not self._dryrun: - # *NOTE: try to call extractall, which first appears - # in python 2.5. Phoenix 2008-01-28 - try: - tar.extractall(path=install_dir) - except AttributeError: - _extractall(tar, path=install_dir) - if ifile.pkgname in self._installed: - self._installed[ifile.pkgname].add_files( - ifile.url, - tar.getnames()) - self._installed[ifile.pkgname].set_md5sum( - ifile.url, - ifile.md5sum) - else: - # *HACK: this understands the installed package syntax. - definition = { ifile.url : - {'files': tar.getnames(), - 'md5sum' : ifile.md5sum } } - self._installed[ifile.pkgname] = InstalledPackage(definition) - self._installed_changed = True - - def install(self, installables, platform, install_dir, cache_dir): - """@brief Do the installation for for the platform. - @param installables The requested installables to install. - @param platform The target platform. Eg, windows or linux/i686/gcc/3.3 - @param install_dir The root directory to install into. Created - if missing. - @param cache_dir The directory to cache downloads. Created if - missing. - """ - # The ordering of steps in the method is to help reduce the - # likelihood that we break something. - install_dir = os.path.realpath(install_dir) - cache_dir = os.path.realpath(cache_dir) - _mkdir(install_dir) - _mkdir(cache_dir) - to_install = self._build_ifiles(platform, cache_dir) - - # Filter for files which we actually requested to install. - to_install = [ifl for ifl in to_install if ifl.pkgname in installables] - for ifile in to_install: - ifile.fetch_local() - self._install(to_install, install_dir) - - def do_install(self, installables, platform, install_dir, cache_dir=None, - check_license=True, scp=None): - """Determine what installables should be installed. If they were - passed in on the command line, use them, otherwise install - all known installables. - """ - if not cache_dir: - cache_dir = _default_installable_cache() - all_installables = self.list_installables() - if not len(installables): - install_installables = all_installables - else: - # passed in on the command line. We'll need to verify we - # know about them here. - install_installables = installables - for installable in install_installables: - if installable not in all_installables: - raise RuntimeError('Unknown installable: %s' % - (installable,)) - if check_license: - # *TODO: check against a list of 'known good' licenses. - # *TODO: check for urls which conflict -- will lead to - # problems. - for installable in install_installables: - if not self.is_valid_license(installable): - return 1 - - # Set up the 'scp' handler - opener = urllib2.build_opener() - scp_or_http = SCPOrHTTPHandler(scp) - opener.add_handler(scp_or_http) - urllib2.install_opener(opener) - - # Do the work of installing the requested installables. - self.install( - install_installables, - platform, - install_dir, - cache_dir) - scp_or_http.cleanup() - - def do_uninstall(self, installables, install_dir): - # Do not bother to check license if we're uninstalling. - all_installed = self.list_installed() - if not len(installables): - uninstall_installables = all_installed - else: - # passed in on the command line. We'll need to verify we - # know about them here. - uninstall_installables = installables - for installable in uninstall_installables: - if installable not in all_installed: - raise RuntimeError('Installable not installed: %s' % - (installable,)) - self.uninstall(uninstall_installables, install_dir) - -class SCPOrHTTPHandler(urllib2.BaseHandler): - """Evil hack to allow both the build system and developers consume - proprietary binaries. - To use http, export the environment variable: - INSTALL_USE_HTTP_FOR_SCP=true - """ - def __init__(self, scp_binary): - self._scp = scp_binary - self._dir = None - - def scp_open(self, request): - #scp:codex.lindenlab.com:/local/share/install_pkgs/package.tar.bz2 - remote = request.get_full_url()[4:] - if os.getenv('INSTALL_USE_HTTP_FOR_SCP', None) == 'true': - return self.do_http(remote) - try: - return self.do_scp(remote) - except: - self.cleanup() - raise - - def do_http(self, remote): - url = remote.split(':',1) - if not url[1].startswith('/'): - # in case it's in a homedir or something - url.insert(1, '/') - url.insert(0, "http://") - url = ''.join(url) - print "Using HTTP:",url - return urllib2.urlopen(url) - - def do_scp(self, remote): - if not self._dir: - self._dir = tempfile.mkdtemp() - local = os.path.join(self._dir, remote.split('/')[-1:][0]) - command = [] - for part in (self._scp, remote, local): - if ' ' in part: - # I hate shell escaping. - part.replace('\\', '\\\\') - part.replace('"', '\\"') - command.append('"%s"' % part) - else: - command.append(part) - #print "forking:", command - rv = os.system(' '.join(command)) - if rv != 0: - raise RuntimeError("Cannot fetch: %s" % remote) - return file(local, 'rb') - - def cleanup(self): - if self._dir: - shutil.rmtree(self._dir) - - -# -# *NOTE: PULLED FROM PYTHON 2.5 tarfile.py Phoenix 2008-01-28 -# -def _extractall(tar, path=".", members=None): - """Extract all members from the archive to the current working - directory and set owner, modification time and permissions on - directories afterwards. `path' specifies a different directory - to extract to. `members' is optional and must be a subset of the - list returned by getmembers(). - """ - directories = [] - - if members is None: - members = tar - - for tarinfo in members: - if tarinfo.isdir(): - # Extract directory with a safe mode, so that - # all files below can be extracted as well. - try: - os.makedirs(os.path.join(path, tarinfo.name), 0777) - except EnvironmentError: - pass - directories.append(tarinfo) - else: - tar.extract(tarinfo, path) - - # Reverse sort directories. - directories.sort(lambda a, b: cmp(a.name, b.name)) - directories.reverse() - - # Set correct owner, mtime and filemode on directories. - for tarinfo in directories: - path = os.path.join(path, tarinfo.name) - try: - tar.chown(tarinfo, path) - tar.utime(tarinfo, path) - tar.chmod(tarinfo, path) - except tarfile.ExtractError, e: - if tar.errorlevel > 1: - raise - else: - tar._dbg(1, "tarfile: %s" % e) - - -def _mkdir(directory): - "Safe, repeatable way to make a directory." - if not os.path.exists(directory): - os.makedirs(directory) - -def _get_platform(): - "Return appropriate platform packages for the environment." - platform_map = { - 'darwin': 'darwin', - 'linux2': 'linux', - 'win32' : 'windows', - 'cygwin' : 'windows', - 'solaris' : 'solaris' - } - this_platform = platform_map[sys.platform] - if this_platform == 'linux': - if platform.architecture()[0] == '64bit': - # TODO -- someday when install.py accepts a platform of the form - # os/arch/compiler/compiler_version then we can replace the - # 'linux64' platform with 'linux/x86_64/gcc/4.1' - this_platform = 'linux' - return this_platform - -def _getuser(): - "Get the user" - try: - # Unix-only. - import getpass - return getpass.getuser() - except ImportError: - import ctypes - MAX_PATH = 260 # according to a recent WinDef.h - name = ctypes.create_unicode_buffer(MAX_PATH) - namelen = ctypes.c_int(len(name)) # len in chars, NOT bytes - if not ctypes.windll.advapi32.GetUserNameW(name, ctypes.byref(namelen)): - raise ctypes.WinError() - return name.value - -def _default_installable_cache(): - """In general, the installable files do not change much, so find a - host/user specific location to cache files.""" - user = _getuser() - cache_dir = "/var/tmp/%s/install.cache" % user - if _get_platform() == 'windows': - cache_dir = os.path.join(tempfile.gettempdir(), \ - 'install.cache.%s' % user) - return cache_dir - -def parse_args(): - parser = optparse.OptionParser( - usage="usage: %prog [options] [installable1 [installable2...]]", - formatter = helpformatter.Formatter(), - description="""This script fetches and installs installable packages. -It also handles uninstalling those packages and manages the mapping between -packages and their license. - -The process is to open and read an install manifest file which specifies -what files should be installed. For each installable to be installed. - * make sure it has a license - * check the installed version - ** if not installed and needs to be, download and install - ** if installed version differs, download & install - -If no installables are specified on the command line, then the defaut -behavior is to install all known installables appropriate for the platform -specified or uninstall all installables if --uninstall is set. You can specify -more than one installable on the command line. - -When specifying a platform, you can specify 'all' to install all -packages, or any platform of the form: - -OS[/arch[/compiler[/compiler_version]]] - -Where the supported values for each are: -OS: darwin, linux, windows, solaris -arch: i686, x86_64, ppc, universal -compiler: vs, gcc -compiler_version: 2003, 2005, 2008, 3.3, 3.4, 4.0, etc. - -No checks are made to ensure a valid combination of platform -parts. Some exmples of valid platforms: - -windows -windows/i686/vs/2005 -linux/x86_64/gcc/3.3 -linux/x86_64/gcc/4.0 -darwin/universal/gcc/4.0 -""") - parser.add_option( - '--dry-run', - action='store_true', - default=False, - dest='dryrun', - help='Do not actually install files. Downloads will still happen.') - parser.add_option( - '--install-manifest', - type='string', - default=os.path.join(base_dir, 'install.xml'), - dest='install_filename', - help='The file used to describe what should be installed.') - parser.add_option( - '--installed-manifest', - type='string', - default=os.path.join(base_dir, 'installed.xml'), - dest='installed_filename', - help='The file used to record what is installed.') - parser.add_option( - '--export-manifest', - action='store_true', - default=False, - dest='export_manifest', - help="Print the install manifest to stdout and exit.") - parser.add_option( - '-p', '--platform', - type='string', - default=_get_platform(), - dest='platform', - help="""Override the automatically determined platform. \ -You can specify 'all' to do a installation of installables for all platforms.""") - parser.add_option( - '--cache-dir', - type='string', - default=_default_installable_cache(), - dest='cache_dir', - help='Where to download files. Default: %s'% \ - (_default_installable_cache())) - parser.add_option( - '--install-dir', - type='string', - default=base_dir, - dest='install_dir', - help='Where to unpack the installed files.') - parser.add_option( - '--list-installed', - action='store_true', - default=False, - dest='list_installed', - help="List the installed package names and exit.") - parser.add_option( - '--skip-license-check', - action='store_false', - default=True, - dest='check_license', - help="Do not perform the license check.") - parser.add_option( - '--list-licenses', - action='store_true', - default=False, - dest='list_licenses', - help="List known licenses and exit.") - parser.add_option( - '--detail-license', - type='string', - default=None, - dest='detail_license', - help="Get detailed information on specified license and exit.") - parser.add_option( - '--add-license', - type='string', - default=None, - dest='new_license', - help="""Add a license to the install file. Argument is the name of \ -license. Specify --license-url if the license is remote or specify \ ---license-text, otherwse the license text will be read from standard \ -input.""") - parser.add_option( - '--license-url', - type='string', - default=None, - dest='license_url', - help="""Put the specified url into an added license. \ -Ignored if --add-license is not specified.""") - parser.add_option( - '--license-text', - type='string', - default=None, - dest='license_text', - help="""Put the text into an added license. \ -Ignored if --add-license is not specified.""") - parser.add_option( - '--remove-license', - type='string', - default=None, - dest='remove_license', - help="Remove a named license.") - parser.add_option( - '--remove-installable', - type='string', - default=None, - dest='remove_installable', - help="Remove a installable from the install file.") - parser.add_option( - '--add-installable', - type='string', - default=None, - dest='add_installable', - help="""Add a installable into the install file. Argument is \ -the name of the installable to add.""") - parser.add_option( - '--add-installable-metadata', - type='string', - default=None, - dest='add_installable_metadata', - help="""Add package for library into the install file. Argument is \ -the name of the library to add.""") - parser.add_option( - '--installable-copyright', - type='string', - default=None, - dest='installable_copyright', - help="""Copyright for specified new package. Ignored if \ ---add-installable is not specified.""") - parser.add_option( - '--installable-license', - type='string', - default=None, - dest='installable_license', - help="""Name of license for specified new package. Ignored if \ ---add-installable is not specified.""") - parser.add_option( - '--installable-description', - type='string', - default=None, - dest='installable_description', - help="""Description for specified new package. Ignored if \ ---add-installable is not specified.""") - parser.add_option( - '--add-installable-package', - type='string', - default=None, - dest='add_installable_package', - help="""Add package for library into the install file. Argument is \ -the name of the library to add.""") - parser.add_option( - '--package-platform', - type='string', - default=None, - dest='package_platform', - help="""Platform for specified new package. \ -Ignored if --add-installable or --add-installable-package is not specified.""") - parser.add_option( - '--package-url', - type='string', - default=None, - dest='package_url', - help="""URL for specified package. \ -Ignored if --add-installable or --add-installable-package is not specified.""") - parser.add_option( - '--package-md5', - type='string', - default=None, - dest='package_md5', - help="""md5sum for new package. \ -Ignored if --add-installable or --add-installable-package is not specified.""") - parser.add_option( - '--list', - action='store_true', - default=False, - dest='list_installables', - help="List the installables in the install manifest and exit.") - parser.add_option( - '--detail', - type='string', - default=None, - dest='detail_installable', - help="Get detailed information on specified installable and exit.") - parser.add_option( - '--detail-installed', - type='string', - default=None, - dest='detail_installed', - help="Get list of files for specified installed installable and exit.") - parser.add_option( - '--uninstall', - action='store_true', - default=False, - dest='uninstall', - help="""Remove the installables specified in the arguments. Just like \ -during installation, if no installables are listed then all installed \ -installables are removed.""") - parser.add_option( - '--scp', - type='string', - default='scp', - dest='scp', - help="Specify the path to your scp program.") - - return parser.parse_args() - -def main(): - options, args = parse_args() - installer = Installer( - options.install_filename, - options.installed_filename, - options.dryrun) - - # - # Handle the queries for information - # - if options.list_installed: - print "installed list:", installer.list_installed() - return 0 - if options.list_installables: - print "installable list:", installer.list_installables() - return 0 - if options.detail_installable: - try: - detail = installer.detail_installable(options.detail_installable) - print "Detail on installable",options.detail_installable+":" - pprint.pprint(detail) - except KeyError: - print "Installable '"+options.detail_installable+"' not found in", - print "install file." - return 0 - if options.detail_installed: - try: - detail = installer.detail_installed(options.detail_installed) - #print "Detail on installed",options.detail_installed+":" - for line in detail: - print line - except: - raise - print "Installable '"+options.detail_installed+"' not found in ", - print "install file." - return 0 - if options.list_licenses: - print "license list:", installer.list_licenses() - return 0 - if options.detail_license: - try: - detail = installer.detail_license(options.detail_license) - print "Detail on license",options.detail_license+":" - pprint.pprint(detail) - except KeyError: - print "License '"+options.detail_license+"' not defined in", - print "install file." - return 0 - if options.export_manifest: - # *HACK: just re-parse the install manifest and pretty print - # it. easier than looking at the datastructure designed for - # actually determining what to install - install = llsd.parse(file(options.install_filename, 'rb').read()) - pprint.pprint(install) - return 0 - - # - # Handle updates -- can only do one of these - # *TODO: should this change the command line syntax? - # - if options.new_license: - if not installer.add_license( - options.new_license, - text=options.license_text, - url=options.license_url): - return 1 - elif options.remove_license: - installer.remove_license(options.remove_license) - elif options.remove_installable: - installer.remove_installable(options.remove_installable) - elif options.add_installable: - if not installer.add_installable( - options.add_installable, - copyright=options.installable_copyright, - license=options.installable_license, - description=options.installable_description, - platform=options.package_platform, - url=options.package_url, - md5sum=options.package_md5): - return 1 - elif options.add_installable_metadata: - if not installer.add_installable_metadata( - options.add_installable_metadata, - copyright=options.installable_copyright, - license=options.installable_license, - description=options.installable_description): - return 1 - elif options.add_installable_package: - if not installer.add_installable_package( - options.add_installable_package, - platform=options.package_platform, - url=options.package_url, - md5sum=options.package_md5): - return 1 - elif options.uninstall: - installer.do_uninstall(args, options.install_dir) - else: - installer.do_install(args, options.platform, options.install_dir, - options.cache_dir, options.check_license, - options.scp) - - # save out any changes - installer.save() - return 0 - -if __name__ == '__main__': - #print sys.argv - sys.exit(main()) diff --git a/scripts/messages/message_template.msg.sha1 b/scripts/messages/message_template.msg.sha1 index 4b1ba7e2d3..41e70011af 100644 --- a/scripts/messages/message_template.msg.sha1 +++ b/scripts/messages/message_template.msg.sha1 @@ -1 +1 @@ -ee062c94248e9af06df5284f7186893a135084c9
\ No newline at end of file +ce3be58f4ea395c272fcfa3e6b6dad027c188e0d
\ No newline at end of file |