DRTVWR-543: Merge branch 'DRTVWR-543-maint' into classic
commit
274fc85fcb
334
autobuild.xml
334
autobuild.xml
|
|
@ -166,9 +166,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>3cc73623c9a976b4f8346a3837f7a916</string>
|
||||
<string>fedc8d63856f534b6098102e059dc548</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64088/601256/boost-1.72-darwin64-545361.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87776/805857/boost-1.72-darwin64-563847.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -202,9 +202,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>7d4b2511976449e9a4ec7be41dc8310f</string>
|
||||
<string>6cc9fb4ca21365c4470a3e516544ba71</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64092/601270/boost-1.72-windows-545361.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87784/805850/boost-1.72-windows-563847.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -214,9 +214,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4ad8df0700745201cddf6b71d7b0949f</string>
|
||||
<string>0c526efc3f8825cd25cdf635e238fab3</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64091/601265/boost-1.72-windows64-545361.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87783/805851/boost-1.72-windows64-563847.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
|
|
@ -308,9 +308,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>02e6a8207dcdaf243dcb6da19b8c3534</string>
|
||||
<string>84d625d41067e6dc633ac53367ae4e87</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64099/601302/colladadom-2.3.545362-darwin64-545362.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87796/805943/colladadom-2.3.563854-darwin64-563854.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -344,9 +344,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>8a02a10fc69c8f504dc5335644db184a</string>
|
||||
<string>d365992132ca2bd89f48a2dab1f3b1f2</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64104/601313/colladadom-2.3.545362-windows-545362.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87794/805955/colladadom-2.3.563854-windows-563854.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -356,16 +356,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>742180324fca7ab92b6a61a36aab4f9d</string>
|
||||
<string>27687df032caffdc1ec92611341adfe3</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64103/601314/colladadom-2.3.545362-windows64-545362.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87795/805951/colladadom-2.3.563854-windows64-563854.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.3.545362</string>
|
||||
<string>2.3.563854</string>
|
||||
</map>
|
||||
<key>curl</key>
|
||||
<map>
|
||||
|
|
@ -398,9 +398,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f5ae57117a6518d11f49ccfbfbe0969d</string>
|
||||
<string>44d801e05811269d1bed7dbc75d85843</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64131/601402/curl-7.54.1.545369-darwin64-545369.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87786/805905/curl-7.54.1.563852-darwin64-563852.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -434,11 +434,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>2796ae7b09e730a55ac03f74ed669520</string>
|
||||
<string>676f624d4ebdc2189caa43ef6dd8266d</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64130/601396/curl-7.54.1.545369-windows-545369.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87790/805917/curl-7.54.1.563852-windows-563852.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -448,16 +448,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>a8f96e5cdb8128b23d49ff4c3f2233a4</string>
|
||||
<string>b3db5a2cdf275c1af7758fbe2d14544a</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64129/601382/curl-7.54.1.545369-windows64-545369.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87789/805918/curl-7.54.1.563852-windows64-563852.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>7.54.1.545369</string>
|
||||
<string>7.54.1.563852</string>
|
||||
</map>
|
||||
<key>db</key>
|
||||
<map>
|
||||
|
|
@ -880,9 +880,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>81a2e9aca3e33c4eecf0081854540b07</string>
|
||||
<string>8865739d8e530199dacb3c3042c1bc01</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56309/526711/freetype-2.4.4.539865-darwin64-539865.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87777/805782/freetype-2.4.4.563848-darwin64-563848.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -916,9 +916,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>1d1c7b60f71a5152ced60bee87f5bba8</string>
|
||||
<string>c0b3601e997553931cadc7d7ee94168b</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56312/526734/freetype-2.4.4.539865-windows-539865.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87779/805814/freetype-2.4.4.563848-windows-563848.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -928,16 +928,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>53e78d4a607e959637e98a82a3cf5bea</string>
|
||||
<string>e98e1e088cdcd20442e05e9abecdadf9</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56310/526723/freetype-2.4.4.539865-windows64-539865.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87778/805815/freetype-2.4.4.563848-windows64-563848.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.4.4.539865</string>
|
||||
<string>2.4.4.563848</string>
|
||||
</map>
|
||||
<key>glext</key>
|
||||
<map>
|
||||
|
|
@ -1141,96 +1141,6 @@
|
|||
<key>version</key>
|
||||
<string>1.0pre3.538980</string>
|
||||
</map>
|
||||
<key>google_breakpad</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2006, Google Inc.</string>
|
||||
<key>description</key>
|
||||
<string>Breakpad is a crossplatform library for capturing crash callstacks and runtime data.</string>
|
||||
<key>license</key>
|
||||
<string>bsd</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/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>171b39db6d0702535b41fad5b476e39d</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-breakpad_3p-update-google-breakpad/rev/298033/arch/Darwin/installer/google_breakpad-1413.298033-darwin-298033.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin</string>
|
||||
</map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ca33f234aae399b9e704e262f7e15d35</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56338/526869/google_breakpad-1413.539880-darwin64-539880.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>352e673897e8f36f8470150b8ace6ce9</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-google-breakpad/rev/314225/arch/Linux/installer/google_breakpad-1413.314225-linux-314225.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6bddcc1ac470dd5eab459220102df9e9</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/1835/4114/google_breakpad-1413.501824-linux64-501824.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>bfee0438617f57f02f7e8515a801cb20</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56359/526982/google_breakpad-1413.539880-windows-539880.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6f983e754bb3046f065806b510b408c5</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56358/526975/google_breakpad-1413.539880-windows64-539880.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1413.539880</string>
|
||||
</map>
|
||||
<key>googlemock</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
|
|
@ -1262,9 +1172,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f9831360ced94943ab9dfb3fbf5256d3</string>
|
||||
<string>11d0794582e91a57f6524ad345f2399d</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64101/601290/googlemock-1.7.0.545363-darwin64-545363.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87791/805924/googlemock-1.7.0.563853-darwin64-563853.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -1298,9 +1208,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>8149e46b4f7abb3ac284415cfe1366e1</string>
|
||||
<string>7d267050970ec6e28749178597bc8af0</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64102/601296/googlemock-1.7.0.545363-windows-545363.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87793/805930/googlemock-1.7.0.563853-windows-563853.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -1310,16 +1220,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f3851eba809ead2810d702041569d36d</string>
|
||||
<string>27638c692f0ec6121e54bf75f2d45e49</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64100/601284/googlemock-1.7.0.545363-windows64-545363.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87792/805936/googlemock-1.7.0.563853-windows64-563853.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.7.0.545363</string>
|
||||
<string>1.7.0.563853</string>
|
||||
</map>
|
||||
<key>gstreamer</key>
|
||||
<map>
|
||||
|
|
@ -1948,9 +1858,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0932b19bb6a8e2641706afd13d92951d</string>
|
||||
<string>c1c9e32e21f3c34d91ed045b2ca91f24</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56313/526740/libpng-1.6.8.539868-darwin64-539868.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87781/805801/libpng-1.6.8.563850-darwin64-563850.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -1984,9 +1894,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f498782698428888113b64a7505c8f7f</string>
|
||||
<string>642e9cf95c8ccd0eb34f6d7a40df585a</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56319/526770/libpng-1.6.8.539868-windows-539868.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87782/805831/libpng-1.6.8.563850-windows-563850.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -1996,16 +1906,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f8ac4f690a2925418866bccf6eba3cf4</string>
|
||||
<string>ce46aa0f171d97626c4a3940347cecd7</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56317/526762/libpng-1.6.8.539868-windows64-539868.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87780/805832/libpng-1.6.8.563850-windows64-563850.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.6.8.539868</string>
|
||||
<string>1.6.8.563850</string>
|
||||
</map>
|
||||
<key>libuuid</key>
|
||||
<map>
|
||||
|
|
@ -2080,9 +1990,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0706b9c3889d767af9f5105d9ffa9b51</string>
|
||||
<string>6f37dd6c4a5174f358b6cc5d953f121b</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56327/526819/libxml2-2.9.4.539866-darwin64-539866.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87768/805766/libxml2-2.9.4.563845-darwin64-563845.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -2116,9 +2026,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>1b7b979a8387fbb0f278dc681558b9ef</string>
|
||||
<string>fd85d3aa13fbdfd1f1ace587e95ef151</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56316/526755/libxml2-2.9.4.539866-windows-539866.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87773/805797/libxml2-2.9.4.563845-windows-563845.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -2128,16 +2038,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4f8ff97d6a9ab350306b62eec8adc810</string>
|
||||
<string>d231d36c3b8942e0259aa2d9fcaa3b7e</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56314/526748/libxml2-2.9.4.539866-windows64-539866.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87772/805795/libxml2-2.9.4.563845-windows64-563845.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.9.4.539866</string>
|
||||
<string>2.9.4.563845</string>
|
||||
</map>
|
||||
<key>llappearance_utility</key>
|
||||
<map>
|
||||
|
|
@ -2394,6 +2304,62 @@
|
|||
<key>version</key>
|
||||
<string>7.11.1.297294</string>
|
||||
</map>
|
||||
<key>minizip-ng</key>
|
||||
<map>
|
||||
<key>canonical_repo</key>
|
||||
<string>https://bitbucket.org/lindenlab/3p-minizip-ng</string>
|
||||
<key>copyright</key>
|
||||
<string>This project uses the zlib license. Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler</string>
|
||||
<key>description</key>
|
||||
<string>minizip-ng is a zip manipulation library. Based on work of Gilles Vollant.</string>
|
||||
<key>license</key>
|
||||
<string>minizip-ng</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/minizip-ng.txt</string>
|
||||
<key>name</key>
|
||||
<string>minizip-ng</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>d00bed67d307d5435280fc7b42ceb822</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87785/805884/minizip_ng-3.0.2.563851-darwin64-563851.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e7cf61cde66e5c632e0e2c1fc5770dbb</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87787/805898/minizip_ng-3.0.2.563851-windows-563851.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>b3c69f9d05cfb531b591347f7b6785cb</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87788/805899/minizip_ng-3.0.2.563851-windows64-563851.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>3.0.2.563851</string>
|
||||
</map>
|
||||
<key>nghttp2</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
|
|
@ -2414,9 +2380,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>937ce1a2158c0cfff37f5989f5b24aba</string>
|
||||
<string>e4f784d8a035c51921a1562ca7a1bab6</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64066/601156/nghttp2-1.40.0.545354-darwin64-545354.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76357/727350/nghttp2-1.40.0.555524-darwin64-555524.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -2450,9 +2416,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>138b881bdf37dff4e626e022a50dd11f</string>
|
||||
<string>af05aa2994c9845308fecd094b7b2d25</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64069/601181/nghttp2-1.40.0.545354-windows-545354.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76359/727360/nghttp2-1.40.0.555524-windows-555524.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -2462,9 +2428,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>c23c6480c7cbea60a2bd26e257adc0a7</string>
|
||||
<string>5a55cede40eef16b9d1e47c418a2b77a</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64068/601177/nghttp2-1.40.0.545354-windows64-545354.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76358/727359/nghttp2-1.40.0.555524-windows64-555524.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
|
|
@ -2473,7 +2439,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>source_type</key>
|
||||
<string>hg</string>
|
||||
<key>version</key>
|
||||
<string>1.40.0.545354</string>
|
||||
<string>1.40.0.555524</string>
|
||||
</map>
|
||||
<key>nvapi</key>
|
||||
<map>
|
||||
|
|
@ -2828,9 +2794,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>18aef0c8fc471b6539addbdc019aea25</string>
|
||||
<string>142d0ad85d0ee4fbb673c9f9e414fbdd</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56325/526804/openssl-1.0.2l.539874-darwin64-539874.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87769/805772/openssl-1.1.1l.563846-darwin64-563846.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -2864,9 +2830,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>2b2f61313b1cbd2893c1ba5bf15061fa</string>
|
||||
<string>55bd833166d03f1467e2c7f24fa9143e</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56328/526826/openssl-1.0.2l.539874-windows-539874.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87775/805841/openssl-1.1.1l.563846-windows-563846.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -2876,16 +2842,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>59aae854155bc7119e0dca25e65828c0</string>
|
||||
<string>6fefc60f68882fc6b246521b696497ab</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/56326/526811/openssl-1.0.2l.539874-windows64-539874.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87774/805833/openssl-1.1.1l.563846-windows64-563846.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.0.2l.539874</string>
|
||||
<string>1.1.1l.563846</string>
|
||||
</map>
|
||||
<key>pcre</key>
|
||||
<map>
|
||||
|
|
@ -3399,78 +3365,42 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>version</key>
|
||||
<string>0.54.1.539072</string>
|
||||
</map>
|
||||
<key>zlib</key>
|
||||
<key>zlib-ng</key>
|
||||
<map>
|
||||
<key>canonical_repo</key>
|
||||
<string>https://bitbucket.org/lindenlab/3p-zlib-ng</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler</string>
|
||||
<key>description</key>
|
||||
<string>Zlib Data Compression Library</string>
|
||||
<string>zlib data compression library for the next generation systems</string>
|
||||
<key>license</key>
|
||||
<string>zlib</string>
|
||||
<string>zlib-ng</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/zlib.txt</string>
|
||||
<string>LICENSES/zlib-ng.txt</string>
|
||||
<key>name</key>
|
||||
<string>zlib</string>
|
||||
<string>zlib-ng</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>1a79eeac199c2d94e4ae4e5d0194e25f</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/Darwin/installer/zlib-1.2.8.296881-darwin-296881.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin</string>
|
||||
</map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>9785bda5b4d3b41bf391b33d0da78c9e</string>
|
||||
<string>bf306e38bf81c6095e0967bdef6a2445</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54858/510190/zlib-1.2.8.538988-darwin64-538988.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87759/805718/zlib_ng-2.0.5.563838-darwin64-563838.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>98a8c775c581ca80bb559e8b4e8eaae7</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-zlib/rev/314131/arch/Linux/installer/zlib-1.2.8.314131-linux-314131.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>dab6be8b0596c1e3354f2b6d41335131</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/866/1898/zlib-1.2.8.500857-linux64-500857.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ebdb07d4aaa5312005a8773f625032a4</string>
|
||||
<string>8ffce5bd00e3d5afa8cb39b855237c4a</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55048/512031/zlib-1.2.8.538988-windows-538988.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87761/805730/zlib_ng-2.0.5.563838-windows-563838.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -3480,16 +3410,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0ac95f3dece7d575ba45cf5728f53eea</string>
|
||||
<string>bd103a9129e57f7ea35886bc7750f8a6</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55047/512024/zlib-1.2.8.538988-windows64-538988.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87760/805729/zlib_ng-2.0.5.563838-windows64-563838.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.2.8.538988</string>
|
||||
<string>2.0.5.563838</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>package_description</key>
|
||||
|
|
|
|||
|
|
@ -72,6 +72,12 @@ if (LINUX)
|
|||
include(LLAppearanceUtility)
|
||||
add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR})
|
||||
endif (INSTALL_PROPRIETARY)
|
||||
add_dependencies(viewer linux-crash-logger-strip-target)
|
||||
elseif (WINDOWS)
|
||||
# cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake
|
||||
if (EXISTS ${VIEWER_DIR}win_setup)
|
||||
add_subdirectory(${VIEWER_DIR}win_setup)
|
||||
endif (EXISTS ${VIEWER_DIR}win_setup)
|
||||
endif (LINUX)
|
||||
|
||||
if (WINDOWS)
|
||||
|
|
@ -98,13 +104,6 @@ else (USE_BUGSPLAT)
|
|||
if (LINUX)
|
||||
add_subdirectory(${VIEWER_PREFIX}linux_crash_logger)
|
||||
add_dependencies(viewer linux-crash-logger-strip-target)
|
||||
elseif (DARWIN)
|
||||
add_subdirectory(${VIEWER_PREFIX}mac_crash_logger)
|
||||
add_dependencies(viewer mac-crash-logger)
|
||||
elseif (WINDOWS)
|
||||
add_subdirectory(${VIEWER_PREFIX}win_crash_logger)
|
||||
# add_dependencies(viewer windows-setup windows-crash-logger)
|
||||
add_dependencies(viewer windows-crash-logger)
|
||||
endif (LINUX)
|
||||
endif (USE_BUGSPLAT)
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ set(cmake_SOURCE_FILES
|
|||
FindAutobuild.cmake
|
||||
FindBerkeleyDB.cmake
|
||||
FindGLH.cmake
|
||||
FindGoogleBreakpad.cmake
|
||||
FindHUNSPELL.cmake
|
||||
FindJsonCpp.cmake
|
||||
FindNDOF.cmake
|
||||
|
|
@ -36,14 +35,13 @@ set(cmake_SOURCE_FILES
|
|||
FindSCP.cmake
|
||||
FindURIPARSER.cmake
|
||||
FindXmlRpcEpi.cmake
|
||||
FindZLIB.cmake
|
||||
FindZLIBNG.cmake
|
||||
FMODSTUDIO.cmake
|
||||
FreeType.cmake
|
||||
GLEXT.cmake
|
||||
GLH.cmake
|
||||
GLOD.cmake
|
||||
## GStreamer010Plugin.cmake
|
||||
GoogleBreakpad.cmake
|
||||
GoogleMock.cmake
|
||||
Havok.cmake
|
||||
Hunspell.cmake
|
||||
|
|
@ -94,7 +92,7 @@ set(cmake_SOURCE_FILES
|
|||
VisualLeakDetector.cmake
|
||||
LibVLCPlugin.cmake
|
||||
XmlRpcEpi.cmake
|
||||
ZLIB.cmake
|
||||
ZLIBNG.cmake
|
||||
)
|
||||
|
||||
source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})
|
||||
|
|
|
|||
|
|
@ -56,14 +56,21 @@ if(WINDOWS)
|
|||
libapr-1.dll
|
||||
libaprutil-1.dll
|
||||
libapriconv-1.dll
|
||||
ssleay32.dll
|
||||
libeay32.dll
|
||||
nghttp2.dll
|
||||
glod.dll
|
||||
libhunspell.dll
|
||||
uriparser.dll
|
||||
)
|
||||
|
||||
# OpenSSL
|
||||
if(ADDRESS_SIZE EQUAL 64)
|
||||
set(release_files ${release_files} libcrypto-1_1-x64.dll)
|
||||
set(release_files ${release_files} libssl-1_1-x64.dll)
|
||||
else(ADDRESS_SIZE EQUAL 64)
|
||||
set(release_files ${release_files} libcrypto-1_1.dll)
|
||||
set(release_files ${release_files} libssl-1_1.dll)
|
||||
endif(ADDRESS_SIZE EQUAL 64)
|
||||
|
||||
# Filenames are different for 32/64 bit BugSplat file and we don't
|
||||
# have any control over them so need to branch.
|
||||
if (USE_BUGSPLAT)
|
||||
|
|
@ -158,7 +165,6 @@ elseif(DARWIN)
|
|||
libapr-1.dylib
|
||||
libaprutil-1.0.dylib
|
||||
libaprutil-1.dylib
|
||||
libexception_handler.dylib
|
||||
${EXPAT_COPY}
|
||||
libGLOD.dylib
|
||||
libhunspell-1.3.0.dylib
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
# - Find Google BreakPad
|
||||
# Find the Google BreakPad includes and library
|
||||
# This module defines
|
||||
# BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR, where to find exception_handler.h, etc.
|
||||
# BREAKPAD_EXCEPTION_HANDLER_LIBRARIES, the libraries needed to use Google BreakPad.
|
||||
# BREAKPAD_EXCEPTION_HANDLER_FOUND, If false, do not try to use Google BreakPad.
|
||||
# also defined, but not for general use are
|
||||
# BREAKPAD_EXCEPTION_HANDLER_LIBRARY, where to find the Google BreakPad library.
|
||||
|
||||
FIND_PATH(BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR google_breakpad/exception_handler.h)
|
||||
|
||||
SET(BREAKPAD_EXCEPTION_HANDLER_NAMES ${BREAKPAD_EXCEPTION_HANDLER_NAMES} breakpad_client)
|
||||
FIND_LIBRARY(BREAKPAD_EXCEPTION_HANDLER_LIBRARY
|
||||
NAMES ${BREAKPAD_EXCEPTION_HANDLER_NAMES}
|
||||
)
|
||||
|
||||
IF (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
|
||||
SET(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES ${BREAKPAD_EXCEPTION_HANDLER_LIBRARY})
|
||||
SET(BREAKPAD_EXCEPTION_HANDLER_FOUND "YES")
|
||||
ELSE (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
|
||||
SET(BREAKPAD_EXCEPTION_HANDLER_FOUND "NO")
|
||||
ENDIF (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
|
||||
|
||||
|
||||
IF (BREAKPAD_EXCEPTION_HANDLER_FOUND)
|
||||
IF (NOT BREAKPAD_EXCEPTION_HANDLER_FIND_QUIETLY)
|
||||
MESSAGE(STATUS "Found Google BreakPad: ${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}")
|
||||
ENDIF (NOT BREAKPAD_EXCEPTION_HANDLER_FIND_QUIETLY)
|
||||
ELSE (BREAKPAD_EXCEPTION_HANDLER_FOUND)
|
||||
IF (BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED)
|
||||
MESSAGE(FATAL_ERROR "Could not find Google BreakPad library")
|
||||
ENDIF (BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED)
|
||||
ENDIF (BREAKPAD_EXCEPTION_HANDLER_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
BREAKPAD_EXCEPTION_HANDLER_LIBRARY
|
||||
BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR
|
||||
)
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
# - Find zlib
|
||||
# Find the ZLIB includes and library
|
||||
# This module defines
|
||||
# ZLIB_INCLUDE_DIRS, where to find zlib.h, etc.
|
||||
# ZLIB_LIBRARIES, the libraries needed to use zlib.
|
||||
# ZLIB_FOUND, If false, do not try to use zlib.
|
||||
#
|
||||
# This FindZLIB is about 43 times as fast the one provided with cmake (2.8.x),
|
||||
# because it doesn't look up the version of zlib, resulting in a dramatic
|
||||
# speed up for configure (from 4 minutes 22 seconds to 6 seconds).
|
||||
#
|
||||
# Note: Since this file is only used for standalone, the windows
|
||||
# specific parts were left out.
|
||||
|
||||
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
|
||||
NO_SYSTEM_ENVIRONMENT_PATH
|
||||
)
|
||||
|
||||
FIND_LIBRARY(ZLIB_LIBRARY z)
|
||||
|
||||
if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR)
|
||||
SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
|
||||
SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
|
||||
SET(ZLIB_FOUND "YES")
|
||||
else (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR)
|
||||
SET(ZLIB_FOUND "NO")
|
||||
endif (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR)
|
||||
|
||||
if (ZLIB_FOUND)
|
||||
if (NOT ZLIB_FIND_QUIETLY)
|
||||
message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}")
|
||||
SET(ZLIB_FIND_QUIETLY TRUE)
|
||||
endif (NOT ZLIB_FIND_QUIETLY)
|
||||
else (ZLIB_FOUND)
|
||||
if (ZLIB_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could not find ZLIB library")
|
||||
endif (ZLIB_FIND_REQUIRED)
|
||||
endif (ZLIB_FOUND)
|
||||
|
||||
mark_as_advanced(
|
||||
ZLIB_LIBRARY
|
||||
ZLIB_INCLUDE_DIR
|
||||
)
|
||||
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
# - Find zlib-ng
|
||||
# Find the ZLIB includes and library
|
||||
# This module defines
|
||||
# ZLIBNG_INCLUDE_DIRS, where to find zlib.h, etc.
|
||||
# ZLIBNG_LIBRARIES, the libraries needed to use zlib.
|
||||
# ZLIBNG_FOUND, If false, do not try to use zlib.
|
||||
#
|
||||
# This FindZLIBNG is about 43 times as fast the one provided with cmake (2.8.x),
|
||||
# because it doesn't look up the version of zlib, resulting in a dramatic
|
||||
# speed up for configure (from 4 minutes 22 seconds to 6 seconds).
|
||||
#
|
||||
# Note: Since this file is only used for standalone, the windows
|
||||
# specific parts were left out.
|
||||
|
||||
FIND_PATH(ZLIBNG_INCLUDE_DIR zlib.h
|
||||
NO_SYSTEM_ENVIRONMENT_PATH
|
||||
)
|
||||
|
||||
FIND_LIBRARY(ZLIBNG_LIBRARY z)
|
||||
|
||||
if (ZLIBNG_LIBRARY AND ZLIBNG_INCLUDE_DIR)
|
||||
SET(ZLIBNG_INCLUDE_DIRS ${ZLIBNG_INCLUDE_DIR})
|
||||
SET(ZLIBNG_LIBRARIES ${ZLIBNG_LIBRARY})
|
||||
SET(ZLIBNG_FOUND "YES")
|
||||
else (ZLIBNG_LIBRARY AND ZLIBNG_INCLUDE_DIR)
|
||||
SET(ZLIBNG_FOUND "NO")
|
||||
endif (ZLINGB_LIBRARY AND ZLIBNG_INCLUDE_DIR)
|
||||
|
||||
if (ZLIBNG_FOUND)
|
||||
if (NOT ZLIBNG_FIND_QUIETLY)
|
||||
message(STATUS "Found ZLIBNG: ${ZLIBNG_LIBRARIES}")
|
||||
SET(ZLIBNG_FIND_QUIETLY TRUE)
|
||||
endif (NOT ZLIBNG_FIND_QUIETLY)
|
||||
else (ZLIBNG_FOUND)
|
||||
if (ZLIBNG_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could not find ZLIBNG library")
|
||||
endif (ZLIBNG_FIND_REQUIRED)
|
||||
endif (ZLIBNG_FOUND)
|
||||
|
||||
mark_as_advanced(
|
||||
ZLIBNG_LIBRARY
|
||||
ZLIBNG_INCLUDE_DIR
|
||||
)
|
||||
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
if (USESYSTEMLIBS)
|
||||
set(BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED ON)
|
||||
include(FindGoogleBreakpad)
|
||||
else (USESYSTEMLIBS)
|
||||
use_prebuilt_binary(google_breakpad)
|
||||
if (DARWIN)
|
||||
set(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES exception_handler)
|
||||
endif (DARWIN)
|
||||
if (LINUX)
|
||||
set(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES breakpad_client)
|
||||
endif (LINUX)
|
||||
if (WINDOWS)
|
||||
set(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES exception_handler crash_generation_client crash_generation_server common)
|
||||
endif (WINDOWS)
|
||||
# yes, this does look dumb, no, it's not incorrect
|
||||
#
|
||||
set(BREAKPAD_INCLUDE_DIRECTORIES "${LIBS_PREBUILT_DIR}/include/google_breakpad" "${LIBS_PREBUILT_DIR}/include/google_breakpad/google_breakpad")
|
||||
endif (USESYSTEMLIBS)
|
||||
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
include(APR)
|
||||
include(Boost)
|
||||
include(EXPAT)
|
||||
include(ZLIB)
|
||||
include(ZLIBNG)
|
||||
|
||||
set(LLCOMMON_INCLUDE_DIRS
|
||||
${LIBS_OPEN_DIR}/llcommon
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ include(Prebuilt)
|
|||
include(Boost)
|
||||
|
||||
use_prebuilt_binary(colladadom)
|
||||
use_prebuilt_binary(minizip-ng) # needed for colladadom
|
||||
use_prebuilt_binary(pcre)
|
||||
use_prebuilt_binary(libxml2)
|
||||
|
||||
|
|
@ -22,6 +23,8 @@ if (WINDOWS)
|
|||
optimized pcrecpp
|
||||
debug pcred
|
||||
optimized pcre
|
||||
debug libminizip
|
||||
optimized libminizip
|
||||
${BOOST_SYSTEM_LIBRARIES}
|
||||
)
|
||||
elseif (DARWIN)
|
||||
|
|
@ -29,7 +32,7 @@ elseif (DARWIN)
|
|||
llprimitive
|
||||
debug collada14dom-d
|
||||
optimized collada14dom
|
||||
minizip
|
||||
minizip # for collada libminizip.a
|
||||
xml2
|
||||
pcrecpp
|
||||
pcre
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ if (USESYSTEMLIBS)
|
|||
else (USESYSTEMLIBS)
|
||||
use_prebuilt_binary(openssl)
|
||||
if (WINDOWS)
|
||||
set(OPENSSL_LIBRARIES ssleay32 libeay32)
|
||||
set(OPENSSL_LIBRARIES libssl libcrypto)
|
||||
else (WINDOWS)
|
||||
set(OPENSSL_LIBRARIES ssl crypto)
|
||||
endif (WINDOWS)
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
set(ZLIB_FIND_QUIETLY ON)
|
||||
set(ZLIB_FIND_REQUIRED ON)
|
||||
set(ZLIBNG_FIND_QUIETLY ON)
|
||||
set(ZLIBNG_FIND_REQUIRED ON)
|
||||
|
||||
include(Prebuilt)
|
||||
|
||||
if (USESYSTEMLIBS)
|
||||
include(FindZLIB)
|
||||
include(FindZLIBNG)
|
||||
else (USESYSTEMLIBS)
|
||||
use_prebuilt_binary(zlib)
|
||||
use_prebuilt_binary(zlib-ng)
|
||||
if (WINDOWS)
|
||||
set(ZLIB_LIBRARIES
|
||||
debug zlibd
|
||||
set(ZLIBNG_LIBRARIES
|
||||
debug zlib
|
||||
optimized zlib)
|
||||
elseif (LINUX)
|
||||
#
|
||||
|
|
@ -26,10 +26,10 @@ else (USESYSTEMLIBS)
|
|||
# second whole-archive load of the archive. See viewer's
|
||||
# CMakeLists.txt for more information.
|
||||
#
|
||||
set(ZLIB_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive)
|
||||
set(ZLIB_LIBRARIES z)
|
||||
set(ZLIBNG_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive)
|
||||
set(ZLIBNG_LIBRARIES z)
|
||||
elseif (DARWIN)
|
||||
set(ZLIB_LIBRARIES z)
|
||||
set(ZLIBNG_LIBRARIES z)
|
||||
endif (WINDOWS)
|
||||
set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)
|
||||
set(ZLIBNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib-ng)
|
||||
endif (USESYSTEMLIBS)
|
||||
|
|
@ -9,17 +9,15 @@ include(Linking)
|
|||
include(Boost)
|
||||
include(LLSharedLibs)
|
||||
include(JsonCpp)
|
||||
include(GoogleBreakpad)
|
||||
include(Copy3rdPartyLibs)
|
||||
include(ZLIB)
|
||||
include(ZLIBNG)
|
||||
include(URIPARSER)
|
||||
|
||||
include_directories(
|
||||
${EXPAT_INCLUDE_DIRS}
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
${JSONCPP_INCLUDE_DIR}
|
||||
${ZLIB_INCLUDE_DIRS}
|
||||
${BREAKPAD_INCLUDE_DIRECTORIES}
|
||||
${ZLIBNG_INCLUDE_DIRS}
|
||||
${URIPARSER_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
|
|
@ -289,12 +287,11 @@ endif(LLCOMMON_LINK_SHARED)
|
|||
|
||||
target_link_libraries(
|
||||
llcommon
|
||||
${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}
|
||||
${APRUTIL_LIBRARIES}
|
||||
${APR_LIBRARIES}
|
||||
${EXPAT_LIBRARIES}
|
||||
${JSONCPP_LIBRARIES}
|
||||
${ZLIB_LIBRARIES}
|
||||
${ZLIBNG_LIBRARIES}
|
||||
${WINDOWS_LIBRARIES}
|
||||
${BOOST_FIBER_LIBRARY}
|
||||
${BOOST_CONTEXT_LIBRARY}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@
|
|||
#include "llstl.h" // for DeletePointer()
|
||||
#include "llstring.h"
|
||||
#include "lleventtimer.h"
|
||||
#include "google_breakpad/exception_handler.h"
|
||||
#include "stringize.h"
|
||||
#include "llcleanup.h"
|
||||
#include "llevents.h"
|
||||
|
|
@ -62,12 +61,6 @@
|
|||
|
||||
LONG WINAPI default_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop);
|
||||
BOOL ConsoleCtrlHandler(DWORD fdwCtrlType);
|
||||
bool windows_post_minidump_callback(const wchar_t* dump_path,
|
||||
const wchar_t* minidump_id,
|
||||
void* context,
|
||||
EXCEPTION_POINTERS* exinfo,
|
||||
MDRawAssertionInfo* assertion,
|
||||
bool succeeded);
|
||||
#else
|
||||
# include <signal.h>
|
||||
# include <unistd.h> // for fork()
|
||||
|
|
@ -146,8 +139,6 @@ void LLApp::commonCtor()
|
|||
|
||||
// Set the application to this instance.
|
||||
sApplication = this;
|
||||
|
||||
mExceptionHandler = 0;
|
||||
|
||||
// initialize the buffer to write the minidump filename to
|
||||
// (this is used to avoid allocating memory in the crash handler)
|
||||
|
|
@ -177,8 +168,6 @@ LLApp::~LLApp()
|
|||
delete mThreadErrorp;
|
||||
mThreadErrorp = NULL;
|
||||
}
|
||||
|
||||
if(mExceptionHandler != 0) delete mExceptionHandler;
|
||||
|
||||
SUBSYSTEM_CLEANUP_DBG(LLCommon);
|
||||
}
|
||||
|
|
@ -394,139 +383,18 @@ void LLApp::setupErrorHandling(bool second_instance)
|
|||
|
||||
#if LL_WINDOWS
|
||||
|
||||
#if LL_SEND_CRASH_REPORTS && ! defined(LL_BUGSPLAT)
|
||||
EnableCrashingOnCrashes();
|
||||
|
||||
// This sets a callback to handle w32 signals to the console window.
|
||||
// The viewer shouldn't be affected, sicne its a windowed app.
|
||||
SetConsoleCtrlHandler( (PHANDLER_ROUTINE) ConsoleCtrlHandler, TRUE);
|
||||
|
||||
// Install the Google Breakpad crash handler for Windows
|
||||
if(mExceptionHandler == 0)
|
||||
{
|
||||
if ( second_instance ) //BUG-5707 Firing teleport from a web browser causes second
|
||||
{
|
||||
mExceptionHandler = new google_breakpad::ExceptionHandler(
|
||||
L"C:\\Temp\\",
|
||||
0, //No filter
|
||||
windows_post_minidump_callback,
|
||||
0,
|
||||
google_breakpad::ExceptionHandler::HANDLER_ALL); //No custom client info.
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "adding breakpad exception handler" << LL_ENDL;
|
||||
|
||||
std::wstring wpipe_name;
|
||||
wpipe_name = mCrashReportPipeStr + wstringize(getPid());
|
||||
|
||||
const std::wstring wdump_path(utf8str_to_utf16str(mDumpPath));
|
||||
|
||||
int retries = 30;
|
||||
for (; retries > 0; --retries)
|
||||
{
|
||||
if (mExceptionHandler != 0) delete mExceptionHandler;
|
||||
|
||||
mExceptionHandler = new google_breakpad::ExceptionHandler(
|
||||
wdump_path,
|
||||
NULL, //No filter
|
||||
windows_post_minidump_callback,
|
||||
0,
|
||||
google_breakpad::ExceptionHandler::HANDLER_ALL,
|
||||
MiniDumpNormal, //Generate a 'normal' minidump.
|
||||
wpipe_name.c_str(),
|
||||
NULL); //No custom client info.
|
||||
if (mExceptionHandler->IsOutOfProcess())
|
||||
{
|
||||
LL_INFOS("CRASHREPORT") << "Successfully attached to Out of Process exception handler." << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("CRASHREPORT") << "Unable to attach to Out of Process exception handler. " << retries << " retries remaining." << LL_ENDL;
|
||||
::Sleep(100); //Wait a tick and try again.
|
||||
}
|
||||
}
|
||||
|
||||
if (retries == 0) LL_WARNS("CRASHREPORT") << "Unable to attach to Out of Process exception handler." << LL_ENDL;
|
||||
}
|
||||
|
||||
if (mExceptionHandler)
|
||||
{
|
||||
mExceptionHandler->set_handle_debug_exceptions(true);
|
||||
}
|
||||
}
|
||||
#endif // LL_SEND_CRASH_REPORTS && ! defined(LL_BUGSPLAT)
|
||||
#else // ! LL_WINDOWS
|
||||
|
||||
#if defined(LL_BUGSPLAT)
|
||||
// Don't install our own signal handlers -- BugSplat needs to hook them,
|
||||
// or it's completely ineffectual.
|
||||
bool installHandler = false;
|
||||
|
||||
#else // ! LL_BUGSPLAT
|
||||
//
|
||||
// Start up signal handling.
|
||||
//
|
||||
// There are two different classes of signals. Synchronous signals are delivered to a specific
|
||||
// thread, asynchronous signals can be delivered to any thread (in theory)
|
||||
//
|
||||
setup_signals();
|
||||
|
||||
// Add google breakpad exception handler configured for Darwin/Linux.
|
||||
bool installHandler = true;
|
||||
#if ! defined(LL_BUGSPLAT)
|
||||
//
|
||||
// Start up signal handling.
|
||||
//
|
||||
// There are two different classes of signals. Synchronous signals are delivered to a specific
|
||||
// thread, asynchronous signals can be delivered to any thread (in theory)
|
||||
//
|
||||
setup_signals();
|
||||
#endif // ! LL_BUGSPLAT
|
||||
|
||||
#if LL_DARWIN
|
||||
// For the special case of Darwin, we do not want to install the handler if
|
||||
// the process is being debugged as the app will exit with value ABRT (6) if
|
||||
// we do. Unfortunately, the code below which performs that test relies on
|
||||
// the structure kinfo_proc which has been tagged by apple as an unstable
|
||||
// API. We disable this test for shipping versions to avoid conflicts with
|
||||
// future releases of Darwin. This test is really only needed for developers
|
||||
// starting the app from a debugger anyway.
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
int mib[4];
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_PROC;
|
||||
mib[2] = KERN_PROC_PID;
|
||||
mib[3] = getpid();
|
||||
|
||||
struct kinfo_proc info;
|
||||
memset(&info, 0, sizeof(info));
|
||||
|
||||
size_t size = sizeof(info);
|
||||
int result = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
|
||||
if((result == 0) || (errno == ENOMEM))
|
||||
{
|
||||
// P_TRACED flag is set, so this process is being debugged; do not install
|
||||
// the handler
|
||||
if(info.kp_proc.p_flag & P_TRACED) installHandler = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Failed to discover if the process is being debugged; default to
|
||||
// installing the handler.
|
||||
installHandler = true;
|
||||
}
|
||||
#endif // ! LL_RELEASE_FOR_DOWNLOAD
|
||||
|
||||
if(installHandler && (mExceptionHandler == 0))
|
||||
{
|
||||
mExceptionHandler = new google_breakpad::ExceptionHandler(mDumpPath, 0, &unix_post_minidump_callback, 0, true, 0);
|
||||
}
|
||||
#elif LL_LINUX
|
||||
if(installHandler && (mExceptionHandler == 0))
|
||||
{
|
||||
if (mDumpPath.empty())
|
||||
{
|
||||
mDumpPath = "/tmp";
|
||||
}
|
||||
google_breakpad::MinidumpDescriptor desc(mDumpPath);
|
||||
mExceptionHandler = new google_breakpad::ExceptionHandler(desc, NULL, unix_minidump_callback, NULL, true, -1);
|
||||
}
|
||||
#endif // LL_LINUX
|
||||
|
||||
#endif // ! LL_WINDOWS
|
||||
|
||||
#ifdef LL_BUGSPLAT
|
||||
|
|
@ -614,31 +482,6 @@ void LLApp::setError()
|
|||
setStatus(APP_STATUS_ERROR);
|
||||
}
|
||||
|
||||
void LLApp::setMiniDumpDir(const std::string &path)
|
||||
{
|
||||
if (path.empty())
|
||||
{
|
||||
mDumpPath = "/tmp";
|
||||
}
|
||||
else
|
||||
{
|
||||
mDumpPath = path;
|
||||
}
|
||||
|
||||
if(mExceptionHandler == 0) return;
|
||||
#ifdef LL_WINDOWS
|
||||
std::wstring buffer(utf8str_to_utf16str(mDumpPath));
|
||||
if (buffer.size() > MAX_MINDUMP_PATH_LENGTH) buffer.resize(MAX_MINDUMP_PATH_LENGTH);
|
||||
mExceptionHandler->set_dump_path(buffer);
|
||||
#elif LL_LINUX
|
||||
//google_breakpad::MinidumpDescriptor desc("/tmp"); //path works in debug fails in production inside breakpad lib so linux gets a little less stack reporting until it is patched.
|
||||
google_breakpad::MinidumpDescriptor desc(mDumpPath); //path works in debug fails in production inside breakpad lib so linux gets a little less stack reporting until it is patched.
|
||||
mExceptionHandler->set_minidump_descriptor(desc);
|
||||
#else
|
||||
mExceptionHandler->set_dump_path(mDumpPath);
|
||||
#endif
|
||||
}
|
||||
|
||||
void LLApp::setDebugFileNames(const std::string &path)
|
||||
{
|
||||
mStaticDebugFileName = path + "static_debug_info.log";
|
||||
|
|
@ -647,8 +490,6 @@ void LLApp::setDebugFileNames(const std::string &path)
|
|||
|
||||
void LLApp::writeMiniDump()
|
||||
{
|
||||
if(mExceptionHandler == 0) return;
|
||||
mExceptionHandler->WriteMinidump();
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
@ -705,13 +546,6 @@ bool LLApp::isExiting()
|
|||
|
||||
void LLApp::disableCrashlogger()
|
||||
{
|
||||
// Disable Breakpad exception handler.
|
||||
if (mExceptionHandler != 0)
|
||||
{
|
||||
delete mExceptionHandler;
|
||||
mExceptionHandler = 0;
|
||||
}
|
||||
|
||||
sDisableCrashlogger = TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -1105,64 +939,3 @@ bool unix_post_minidump_callback(const char *dump_dir,
|
|||
}
|
||||
#endif // !WINDOWS
|
||||
|
||||
#ifdef LL_WINDOWS
|
||||
bool windows_post_minidump_callback(const wchar_t* dump_path,
|
||||
const wchar_t* minidump_id,
|
||||
void* context,
|
||||
EXCEPTION_POINTERS* exinfo,
|
||||
MDRawAssertionInfo* assertion,
|
||||
bool succeeded)
|
||||
{
|
||||
char * path = LLApp::instance()->getMiniDumpFilename();
|
||||
S32 remaining = LLApp::MAX_MINDUMP_PATH_LENGTH;
|
||||
size_t bytesUsed;
|
||||
|
||||
LL_INFOS("MINIDUMPCALLBACK") << "Dump file was generated." << LL_ENDL;
|
||||
bytesUsed = wcstombs(path, dump_path, static_cast<size_t>(remaining));
|
||||
remaining -= bytesUsed;
|
||||
path += bytesUsed;
|
||||
if(remaining > 0 && bytesUsed > 0 && path[-1] != '\\')
|
||||
{
|
||||
*path++ = '\\';
|
||||
--remaining;
|
||||
}
|
||||
if(remaining > 0)
|
||||
{
|
||||
bytesUsed = wcstombs(path, minidump_id, static_cast<size_t>(remaining));
|
||||
remaining -= bytesUsed;
|
||||
path += bytesUsed;
|
||||
}
|
||||
if(remaining > 0)
|
||||
{
|
||||
strncpy(path, ".dmp", remaining);
|
||||
}
|
||||
|
||||
LL_INFOS("CRASHREPORT") << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << LL_ENDL;
|
||||
// *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
|
||||
//OSMessageBox("Attach Debugger Now", "Error", OSMB_OK);
|
||||
// *TODO: Translate the signals/exceptions into cross-platform stuff
|
||||
// Windows implementation
|
||||
LL_INFOS() << "Entering Windows Exception Handler..." << LL_ENDL;
|
||||
|
||||
if (LLApp::isError())
|
||||
{
|
||||
LL_WARNS() << "Got another fatal signal while in the error handler, die now!" << LL_ENDL;
|
||||
}
|
||||
|
||||
// Flag status to error, so thread_error starts its work
|
||||
LLApp::setError();
|
||||
|
||||
// Block in the exception handler until the app has stopped
|
||||
// This is pretty sketchy, but appears to work just fine
|
||||
while (!LLApp::isStopped())
|
||||
{
|
||||
ms_sleep(10);
|
||||
}
|
||||
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
return false;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -49,10 +49,6 @@ void clear_signals();
|
|||
|
||||
#endif
|
||||
|
||||
namespace google_breakpad {
|
||||
class ExceptionHandler; // See exception_handler.h
|
||||
}
|
||||
|
||||
class LL_COMMON_API LLApp
|
||||
{
|
||||
friend class LLErrorThread;
|
||||
|
|
@ -236,7 +232,6 @@ public:
|
|||
static const U32 MAX_MINDUMP_PATH_LENGTH = 256;
|
||||
|
||||
// change the directory where Breakpad minidump files are written to
|
||||
void setMiniDumpDir(const std::string &path);
|
||||
void setDebugFileNames(const std::string &path);
|
||||
|
||||
// Return the Google Breakpad minidump filename after a crash.
|
||||
|
|
@ -316,9 +311,6 @@ private:
|
|||
private:
|
||||
// the static application instance if it was created.
|
||||
static LLApp* sApplication;
|
||||
|
||||
google_breakpad::ExceptionHandler * mExceptionHandler;
|
||||
|
||||
|
||||
#if !LL_WINDOWS
|
||||
friend void default_unix_signal_handler(int signum, siginfo_t *info, void *);
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#ifdef LL_USESYSTEMLIBS
|
||||
# include <zlib.h>
|
||||
#else
|
||||
# include "zlib/zlib.h" // for davep's dirty little zip functions
|
||||
# include "zlib-ng/zlib.h" // for davep's dirty little zip functions
|
||||
#endif
|
||||
|
||||
#if !LL_WINDOWS
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
#ifdef LL_USESYSTEMLIBS
|
||||
# include <zlib.h>
|
||||
#else
|
||||
# include "zlib/zlib.h"
|
||||
# include "zlib-ng/zlib.h"
|
||||
#endif
|
||||
|
||||
#include "llprocessor.h"
|
||||
|
|
@ -474,6 +474,8 @@ LLOSInfo::LLOSInfo() :
|
|||
dotted_version_string << mMajorVer << "." << mMinorVer << "." << mBuild;
|
||||
mOSVersionString.append(dotted_version_string.str());
|
||||
|
||||
mOSBitness = is64Bit() ? 64 : 32;
|
||||
LL_INFOS("LLOSInfo") << "OS bitness: " << mOSBitness << LL_ENDL;
|
||||
}
|
||||
|
||||
#ifndef LL_WINDOWS
|
||||
|
|
@ -529,6 +531,11 @@ const std::string& LLOSInfo::getOSVersionString() const
|
|||
return mOSVersionString;
|
||||
}
|
||||
|
||||
const S32 LLOSInfo::getOSBitness() const
|
||||
{
|
||||
return mOSBitness;
|
||||
}
|
||||
|
||||
//static
|
||||
U32 LLOSInfo::getProcessVirtualSizeKB()
|
||||
{
|
||||
|
|
@ -582,6 +589,25 @@ U32 LLOSInfo::getProcessResidentSizeKB()
|
|||
return resident_size;
|
||||
}
|
||||
|
||||
//static
|
||||
bool LLOSInfo::is64Bit()
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
#if defined(_WIN64)
|
||||
return true;
|
||||
#elif defined(_WIN32)
|
||||
// 32-bit viewer may be run on both 32-bit and 64-bit Windows, need to elaborate
|
||||
BOOL f64 = FALSE;
|
||||
return IsWow64Process(GetCurrentProcess(), &f64) && f64;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
#else // ! LL_WINDOWS
|
||||
// we only build a 64-bit mac viewer and currently we don't build for linux at all
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
LLCPUInfo::LLCPUInfo()
|
||||
{
|
||||
std::ostringstream out;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ public:
|
|||
const std::string& getOSStringSimple() const;
|
||||
|
||||
const std::string& getOSVersionString() const;
|
||||
|
||||
const S32 getOSBitness() const;
|
||||
|
||||
S32 mMajorVer;
|
||||
S32 mMinorVer;
|
||||
|
|
@ -59,6 +61,7 @@ public:
|
|||
#ifndef LL_WINDOWS
|
||||
static S32 getMaxOpenFiles();
|
||||
#endif
|
||||
static bool is64Bit();
|
||||
|
||||
static U32 getProcessVirtualSizeKB();
|
||||
static U32 getProcessResidentSizeKB();
|
||||
|
|
@ -66,6 +69,7 @@ private:
|
|||
std::string mOSString;
|
||||
std::string mOSStringSimple;
|
||||
std::string mOSVersionString;
|
||||
S32 mOSBitness;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ include(GoogleMock)
|
|||
include(CURL)
|
||||
include(OpenSSL)
|
||||
include(NGHTTP2)
|
||||
include(ZLIB)
|
||||
include(ZLIBNG)
|
||||
include(LLCoreHttp)
|
||||
include(LLAddBuildTest)
|
||||
include(LLMessage)
|
||||
|
|
@ -177,7 +177,6 @@ if (DARWIN)
|
|||
set(copy_dylibs
|
||||
libapr-1.0.dylib
|
||||
libaprutil-1.0.dylib
|
||||
libexception_handler.dylib
|
||||
libnghttp2*.dylib
|
||||
liburiparser*.dylib
|
||||
${EXPAT_COPY}
|
||||
|
|
|
|||
|
|
@ -23,13 +23,6 @@
|
|||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
#if LL_WINDOWS
|
||||
#define SAFE_SSL 1
|
||||
#elif LL_DARWIN
|
||||
#define SAFE_SSL 1
|
||||
#else
|
||||
#define SAFE_SSL 1
|
||||
#endif
|
||||
|
||||
#include "linden_common.h" // Modifies curl/curl.h interfaces
|
||||
#include "httpcommon.h"
|
||||
|
|
@ -38,10 +31,6 @@
|
|||
#include <curl/curl.h>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#if SAFE_SSL
|
||||
#include <openssl/crypto.h>
|
||||
#include <functional> // std::hash
|
||||
#endif
|
||||
|
||||
|
||||
namespace LLCore
|
||||
|
|
@ -348,34 +337,6 @@ void deallocateEasyCurl(CURL *curlp)
|
|||
}
|
||||
|
||||
|
||||
#if SAFE_SSL
|
||||
//static
|
||||
void ssl_locking_callback(int mode, int type, const char *file, int line)
|
||||
{
|
||||
if (type >= sSSLMutex.size())
|
||||
{
|
||||
LL_WARNS() << "Attempt to get unknown MUTEX in SSL Lock." << LL_ENDL;
|
||||
}
|
||||
|
||||
if (mode & CRYPTO_LOCK)
|
||||
{
|
||||
sSSLMutex[type]->lock();
|
||||
}
|
||||
else
|
||||
{
|
||||
sSSLMutex[type]->unlock();
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
unsigned long ssl_thread_id(void)
|
||||
{
|
||||
// std::thread::id is very deliberately opaque, but we can hash it
|
||||
return std::hash<LLThread::id_t>()(LLThread::currentID());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
void initialize()
|
||||
|
|
@ -387,27 +348,11 @@ void initialize()
|
|||
|
||||
check_curl_code(code, CURL_GLOBAL_ALL);
|
||||
|
||||
#if SAFE_SSL
|
||||
S32 mutex_count = CRYPTO_num_locks();
|
||||
for (S32 i = 0; i < mutex_count; i++)
|
||||
{
|
||||
sSSLMutex.push_back(LLMutex_ptr(new LLMutex()));
|
||||
}
|
||||
CRYPTO_set_id_callback(&ssl_thread_id);
|
||||
CRYPTO_set_locking_callback(&ssl_locking_callback);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
void cleanup()
|
||||
{
|
||||
#if SAFE_SSL
|
||||
CRYPTO_set_id_callback(NULL);
|
||||
CRYPTO_set_locking_callback(NULL);
|
||||
sSSLMutex.clear();
|
||||
#endif
|
||||
|
||||
curl_global_cleanup();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ include(LLMath)
|
|||
include(LLVFS)
|
||||
include(LLKDU)
|
||||
include(LLImageJ2COJ)
|
||||
include(ZLIB)
|
||||
include(ZLIBNG)
|
||||
include(LLAddBuildTest)
|
||||
include(bugsplat)
|
||||
include(Tut)
|
||||
|
|
@ -20,7 +20,7 @@ include_directories(
|
|||
${LLMATH_INCLUDE_DIRS}
|
||||
${LLVFS_INCLUDE_DIRS}
|
||||
${PNG_INCLUDE_DIRS}
|
||||
${ZLIB_INCLUDE_DIRS}
|
||||
${ZLIBNG_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
set(llimage_SOURCE_FILES
|
||||
|
|
@ -74,7 +74,7 @@ target_link_libraries(llimage
|
|||
${LLCOMMON_LIBRARIES}
|
||||
${JPEG_LIBRARIES}
|
||||
${PNG_LIBRARIES}
|
||||
${ZLIB_LIBRARIES}
|
||||
${ZLIBNG_LIBRARIES}
|
||||
)
|
||||
|
||||
# Add tests
|
||||
|
|
|
|||
|
|
@ -52,24 +52,28 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
|
|||
if (src_len > dst_len) return 0;
|
||||
|
||||
// OpenSSL uses "cipher contexts" to hold encryption parameters.
|
||||
EVP_CIPHER_CTX context;
|
||||
EVP_CIPHER_CTX_init(&context);
|
||||
EVP_CIPHER_CTX *context = EVP_CIPHER_CTX_new();
|
||||
if (!context)
|
||||
{
|
||||
LL_WARNS() << "LLBlowfishCipher::encrypt EVP_CIPHER_CTX initiation failure" << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// We want a blowfish cyclic block chain cipher, but need to set
|
||||
// the key length before we pass in a key, so call EncryptInit
|
||||
// first with NULLs.
|
||||
EVP_EncryptInit_ex(&context, EVP_bf_cbc(), NULL, NULL, NULL);
|
||||
EVP_CIPHER_CTX_set_key_length(&context, (int)mSecretSize);
|
||||
EVP_EncryptInit_ex(context, EVP_bf_cbc(), NULL, NULL, NULL);
|
||||
EVP_CIPHER_CTX_set_key_length(context, (int)mSecretSize);
|
||||
|
||||
// Complete initialization. Per EVP_EncryptInit man page, the
|
||||
// cipher pointer must be NULL. Apparently initial_vector must
|
||||
// be 8 bytes for blowfish, as this is the block size.
|
||||
unsigned char initial_vector[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
EVP_EncryptInit_ex(&context, NULL, NULL, mSecret, initial_vector);
|
||||
EVP_EncryptInit_ex(context, NULL, NULL, mSecret, initial_vector);
|
||||
|
||||
int blocksize = EVP_CIPHER_CTX_block_size(&context);
|
||||
int keylen = EVP_CIPHER_CTX_key_length(&context);
|
||||
int iv_length = EVP_CIPHER_CTX_iv_length(&context);
|
||||
int blocksize = EVP_CIPHER_CTX_block_size(context);
|
||||
int keylen = EVP_CIPHER_CTX_key_length(context);
|
||||
int iv_length = EVP_CIPHER_CTX_iv_length(context);
|
||||
LL_DEBUGS() << "LLBlowfishCipher blocksize " << blocksize
|
||||
<< " keylen " << keylen
|
||||
<< " iv_len " << iv_length
|
||||
|
|
@ -77,7 +81,7 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
|
|||
|
||||
int output_len = 0;
|
||||
int temp_len = 0;
|
||||
if (!EVP_EncryptUpdate(&context,
|
||||
if (!EVP_EncryptUpdate(context,
|
||||
dst,
|
||||
&output_len,
|
||||
src,
|
||||
|
|
@ -89,18 +93,18 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
|
|||
|
||||
// There may be some final data left to encrypt if the input is
|
||||
// not an exact multiple of the block size.
|
||||
if (!EVP_EncryptFinal_ex(&context, (unsigned char*)(dst + output_len), &temp_len))
|
||||
if (!EVP_EncryptFinal_ex(context, (unsigned char*)(dst + output_len), &temp_len))
|
||||
{
|
||||
LL_WARNS() << "LLBlowfishCipher::encrypt EVP_EncryptFinal failure" << LL_ENDL;
|
||||
goto ERROR;
|
||||
}
|
||||
output_len += temp_len;
|
||||
|
||||
EVP_CIPHER_CTX_cleanup(&context);
|
||||
EVP_CIPHER_CTX_free(context);
|
||||
return output_len;
|
||||
|
||||
ERROR:
|
||||
EVP_CIPHER_CTX_cleanup(&context);
|
||||
EVP_CIPHER_CTX_free(context);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
#ifdef LL_USESYSTEMLIBS
|
||||
# include <zlib.h>
|
||||
#else
|
||||
# include "zlib/zlib.h"
|
||||
# include "zlib-ng/zlib.h"
|
||||
#endif
|
||||
|
||||
std::string model_names[] =
|
||||
|
|
|
|||
|
|
@ -1363,6 +1363,9 @@ public:
|
|||
virtual BOOL handleKeyHere(KEY key, MASK mask);
|
||||
|
||||
virtual BOOL handleAcceleratorKey(KEY key, MASK mask);
|
||||
|
||||
virtual void onFocusLost();
|
||||
virtual void setFocus(BOOL b);
|
||||
};
|
||||
|
||||
LLMenuItemBranchDownGL::LLMenuItemBranchDownGL( const Params& p) :
|
||||
|
|
@ -1517,6 +1520,21 @@ BOOL LLMenuItemBranchDownGL::handleAcceleratorKey(KEY key, MASK mask)
|
|||
|
||||
return handled;
|
||||
}
|
||||
void LLMenuItemBranchDownGL::onFocusLost()
|
||||
{
|
||||
// needed for tab-based selection
|
||||
LLMenuItemBranchGL::onFocusLost();
|
||||
LLMenuGL::setKeyboardMode(FALSE);
|
||||
setHighlight(FALSE);
|
||||
}
|
||||
|
||||
void LLMenuItemBranchDownGL::setFocus(BOOL b)
|
||||
{
|
||||
// needed for tab-based selection
|
||||
LLMenuItemBranchGL::setFocus(b);
|
||||
LLMenuGL::setKeyboardMode(b);
|
||||
setHighlight(b);
|
||||
}
|
||||
|
||||
BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -457,6 +457,8 @@ public:
|
|||
void setSkipLinkUnderline(bool skip_link_underline) { mSkipLinkUnderline = skip_link_underline; }
|
||||
bool getSkipLinkUnderline() { return mSkipLinkUnderline; }
|
||||
|
||||
void setParseURLs(bool parse_urls) { mParseHTML = parse_urls; }
|
||||
|
||||
void setPlainText(bool value) { mPlainText = value;}
|
||||
bool getPlainText() const { return mPlainText; }
|
||||
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ S32 LLDXHardware::getMBVideoMemoryViaWMI()
|
|||
}
|
||||
|
||||
//Getting the version of graphics controller driver via WMI
|
||||
std::string LLDXHardware::getDriverVersionWMI()
|
||||
std::string LLDXHardware::getDriverVersionWMI(EGPUVendor vendor)
|
||||
{
|
||||
std::string mDriverVersion;
|
||||
HRESULT hrCoInitialize = S_OK;
|
||||
|
|
@ -325,15 +325,68 @@ std::string LLDXHardware::getDriverVersionWMI()
|
|||
{
|
||||
break; // If quantity less then 1.
|
||||
}
|
||||
|
||||
if (vendor != GPU_ANY)
|
||||
{
|
||||
VARIANT vtCaptionProp;
|
||||
// Might be preferable to check "AdapterCompatibility" here instead of caption.
|
||||
hr = pclsObj->Get(L"Caption", 0, &vtCaptionProp, 0, 0);
|
||||
|
||||
VARIANT vtProp;
|
||||
if (FAILED(hr))
|
||||
{
|
||||
LL_WARNS("AppInit") << "Query for Caption property failed." << " Error code = 0x" << hr << LL_ENDL;
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
return std::string(); // Program has failed.
|
||||
}
|
||||
|
||||
// Get the value of the Name property
|
||||
hr = pclsObj->Get(L"DriverVersion", 0, &vtProp, 0, 0);
|
||||
// use characters in the returned driver version
|
||||
BSTR caption(vtCaptionProp.bstrVal);
|
||||
|
||||
//convert BSTR to std::string
|
||||
std::wstring ws(caption, SysStringLen(caption));
|
||||
std::string caption_str(ws.begin(), ws.end());
|
||||
LLStringUtil::toLower(caption_str);
|
||||
|
||||
bool found = false;
|
||||
switch (vendor)
|
||||
{
|
||||
case GPU_INTEL:
|
||||
found = caption_str.find("intel") != std::string::npos;
|
||||
break;
|
||||
case GPU_NVIDIA:
|
||||
found = caption_str.find("nvidia") != std::string::npos;
|
||||
break;
|
||||
case GPU_AMD:
|
||||
found = caption_str.find("amd") != std::string::npos
|
||||
|| caption_str.find("ati ") != std::string::npos
|
||||
|| caption_str.find("radeon") != std::string::npos;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (found)
|
||||
{
|
||||
VariantClear(&vtCaptionProp);
|
||||
}
|
||||
else
|
||||
{
|
||||
VariantClear(&vtCaptionProp);
|
||||
pclsObj->Release();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
VARIANT vtVersionProp;
|
||||
|
||||
// Get the value of the DriverVersion property
|
||||
hr = pclsObj->Get(L"DriverVersion", 0, &vtVersionProp, 0, 0);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
LL_WARNS("AppInit") << "Query for name property failed." << " Error code = 0x" << hr << LL_ENDL;
|
||||
LL_WARNS("AppInit") << "Query for DriverVersion property failed." << " Error code = 0x" << hr << LL_ENDL;
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
|
|
@ -341,7 +394,7 @@ std::string LLDXHardware::getDriverVersionWMI()
|
|||
}
|
||||
|
||||
// use characters in the returned driver version
|
||||
BSTR driverVersion(vtProp.bstrVal);
|
||||
BSTR driverVersion(vtVersionProp.bstrVal);
|
||||
|
||||
//convert BSTR to std::string
|
||||
std::wstring ws(driverVersion, SysStringLen(driverVersion));
|
||||
|
|
@ -354,10 +407,19 @@ std::string LLDXHardware::getDriverVersionWMI()
|
|||
}
|
||||
else if (mDriverVersion != str)
|
||||
{
|
||||
LL_WARNS("DriverVersion") << "Different versions of drivers. Version of second driver : " << str << LL_ENDL;
|
||||
if (vendor == GPU_ANY)
|
||||
{
|
||||
// Expected from systems with gpus from different vendors
|
||||
LL_INFOS("DriverVersion") << "Multiple video drivers detected. Version of second driver: " << str << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Not Expected!
|
||||
LL_WARNS("DriverVersion") << "Multiple video drivers detected from same vendor. Version of second driver : " << str << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
VariantClear(&vtProp);
|
||||
VariantClear(&vtVersionProp);
|
||||
pclsObj->Release();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -88,7 +88,15 @@ public:
|
|||
// vram_only TRUE does a "light" probe.
|
||||
BOOL getInfo(BOOL vram_only);
|
||||
|
||||
std::string getDriverVersionWMI();
|
||||
// WMI can return multiple GPU drivers
|
||||
// specify which one to output
|
||||
typedef enum {
|
||||
GPU_INTEL,
|
||||
GPU_NVIDIA,
|
||||
GPU_AMD,
|
||||
GPU_ANY
|
||||
} EGPUVendor;
|
||||
std::string getDriverVersionWMI(EGPUVendor vendor);
|
||||
|
||||
S32 getVRAM() const { return mVRAM; }
|
||||
|
||||
|
|
|
|||
|
|
@ -1,95 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
project(mac_crash_logger)
|
||||
|
||||
include(00-Common)
|
||||
include(LLCommon)
|
||||
include(LLCoreHttp)
|
||||
include(LLCrashLogger)
|
||||
include(LLMath)
|
||||
include(LLMessage)
|
||||
include(LLVFS)
|
||||
include(LLXML)
|
||||
include(Linking)
|
||||
include(LLSharedLibs)
|
||||
include(Boost)
|
||||
|
||||
include_directories(
|
||||
${LLCOREHTTP_INCLUDE_DIRS}
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
${LLCRASHLOGGER_INCLUDE_DIRS}
|
||||
${LLMATH_INCLUDE_DIRS}
|
||||
${LLVFS_INCLUDE_DIRS}
|
||||
${LLXML_INCLUDE_DIRS}
|
||||
)
|
||||
include_directories(SYSTEM
|
||||
${LLCOMMON_SYSTEM_INCLUDE_DIRS}
|
||||
${LLXML_SYSTEM_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
set(mac_crash_logger_SOURCE_FILES
|
||||
mac_crash_logger.cpp
|
||||
llcrashloggermac.cpp
|
||||
llcrashloggermacdelegate.mm
|
||||
)
|
||||
|
||||
set(mac_crash_logger_HEADER_FILES
|
||||
CMakeLists.txt
|
||||
|
||||
llcrashloggermac.h
|
||||
llcrashloggermacdelegate.h
|
||||
)
|
||||
|
||||
set_source_files_properties(${mac_crash_logger_HEADER_FILES}
|
||||
PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
list(APPEND mac_crash_logger_SOURCE_FILES ${mac_crash_logger_HEADER_FILES})
|
||||
|
||||
set(mac_crash_logger_RESOURCE_FILES
|
||||
CrashReporter.nib/
|
||||
)
|
||||
set_source_files_properties(
|
||||
${mac_crash_logger_RESOURCE_FILES}
|
||||
PROPERTIES
|
||||
HEADER_FILE_ONLY TRUE
|
||||
)
|
||||
SOURCE_GROUP("Resources" FILES ${mac_crash_logger_RESOURCE_FILES})
|
||||
list(APPEND mac_crash_logger_SOURCE_FILES ${mac_crash_logger_RESOURCE_FILES})
|
||||
|
||||
add_executable(mac-crash-logger
|
||||
MACOSX_BUNDLE
|
||||
${mac_crash_logger_SOURCE_FILES})
|
||||
|
||||
set_target_properties(mac-crash-logger
|
||||
PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
|
||||
)
|
||||
|
||||
find_library(COCOA_LIBRARY Cocoa)
|
||||
|
||||
target_link_libraries(mac-crash-logger
|
||||
${LLCRASHLOGGER_LIBRARIES}
|
||||
${LLVFS_LIBRARIES}
|
||||
${COCOA_LIBRARIES}
|
||||
${LLXML_LIBRARIES}
|
||||
${LLMESSAGE_LIBRARIES}
|
||||
${LLVFS_LIBRARIES}
|
||||
${LLMATH_LIBRARIES}
|
||||
${LLCOREHTTP_LIBRARIES}
|
||||
${LLCOMMON_LIBRARIES}
|
||||
${BOOST_CONTEXT_LIBRARY}
|
||||
${BOOST_FIBER_LIBRARY}
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
TARGET mac-crash-logger POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
ARGS
|
||||
-E
|
||||
copy_if_different
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CrashReporter.nib
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib
|
||||
)
|
||||
|
||||
ll_deploy_sharedlibs_command(mac-crash-logger)
|
||||
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -1,28 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>mac-crash-logger</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string></string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string></string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0.0</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>CrashReporter</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
This component is no longer used in Linden Lab builds.
|
||||
Change requests to support continued use by open source
|
||||
builds are welcome.
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
/**
|
||||
* @file llcrashloggermac.cpp
|
||||
* @brief Mac OSX crash logger implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
#include "llcrashloggermac.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
|
||||
#include "llerror.h"
|
||||
#include "llfile.h"
|
||||
#include "lltimer.h"
|
||||
#include "llstring.h"
|
||||
#include "lldir.h"
|
||||
#include "llsdserialize.h"
|
||||
|
||||
// Windows Message Handlers
|
||||
|
||||
BOOL gFirstDialog = TRUE;
|
||||
LLFILE *gDebugFile = NULL;
|
||||
|
||||
std::string gUserNotes = "";
|
||||
bool gSendReport = false;
|
||||
bool gRememberChoice = false;
|
||||
|
||||
LLCrashLoggerMac::LLCrashLoggerMac(void)
|
||||
{
|
||||
}
|
||||
|
||||
LLCrashLoggerMac::~LLCrashLoggerMac(void)
|
||||
{
|
||||
}
|
||||
|
||||
bool LLCrashLoggerMac::init(void)
|
||||
{
|
||||
bool ok = LLCrashLogger::init();
|
||||
return ok;
|
||||
}
|
||||
|
||||
void LLCrashLoggerMac::gatherPlatformSpecificFiles()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLCrashLoggerMac::frame()
|
||||
{
|
||||
|
||||
if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND)
|
||||
{
|
||||
gSendReport = true;
|
||||
}
|
||||
|
||||
if(gSendReport)
|
||||
{
|
||||
setUserText(gUserNotes);
|
||||
sendCrashLogs();
|
||||
}
|
||||
|
||||
LL_INFOS() << "Sending of logs complete" << LL_ENDL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LLCrashLoggerMac::cleanup()
|
||||
{
|
||||
commonCleanup();
|
||||
mKeyMaster.releaseMaster();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
/**
|
||||
* @file llcrashloggermac.h
|
||||
* @brief Mac OSX crash logger definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LLCRASHLOGGERMAC_H
|
||||
#define LLCRASHLOGGERMAC_H
|
||||
|
||||
#include "linden_common.h"
|
||||
#include "llcrashlogger.h"
|
||||
#include "llstring.h"
|
||||
|
||||
class LLCrashLoggerMac : public LLCrashLogger
|
||||
{
|
||||
public:
|
||||
LLCrashLoggerMac(void);
|
||||
~LLCrashLoggerMac(void);
|
||||
virtual bool init();
|
||||
virtual bool frame();
|
||||
virtual bool cleanup();
|
||||
virtual void gatherPlatformSpecificFiles();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
/**
|
||||
* @file llcrashloggermacdelegate.h
|
||||
* @brief Mac OSX crash logger implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
/*
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface LLCrashLoggerMacDelegate : NSObject <NSApplicationDelegate>
|
||||
{
|
||||
IBOutlet NSTextField *crashText;
|
||||
IBOutlet NSButton *rememberCheck;
|
||||
|
||||
NSWindow *_window;
|
||||
bool mRemember;
|
||||
|
||||
}
|
||||
|
||||
- (void)setWindow:(NSWindow *)newWindow;
|
||||
- (NSWindow *)window;
|
||||
|
||||
- (IBAction)remember:(id)sender;
|
||||
- (IBAction)send:(id)sender;
|
||||
- (IBAction)cancel:(id)sender;
|
||||
|
||||
@property (assign) IBOutlet NSWindow *window;
|
||||
|
||||
@end
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
/**
|
||||
* @file llcrashloggermacdelegate.mm
|
||||
* @brief Mac OSX crash logger implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
#import "llcrashloggermacdelegate.h"
|
||||
#include <iostream>
|
||||
|
||||
extern std::string gUserNotes;
|
||||
extern bool gSendReport;
|
||||
extern bool gRememberChoice;
|
||||
|
||||
@implementation LLCrashLoggerMacDelegate
|
||||
|
||||
- (void)setWindow:(NSWindow *)window
|
||||
{
|
||||
_window = window;
|
||||
}
|
||||
|
||||
- (NSWindow *)window
|
||||
{
|
||||
return _window;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
std::string* NSToString( NSString *ns_str )
|
||||
{
|
||||
return ( new std::string([ns_str UTF8String]) );
|
||||
}
|
||||
|
||||
- (IBAction)remember:(id)sender
|
||||
{
|
||||
gRememberChoice = [rememberCheck state];
|
||||
}
|
||||
|
||||
- (IBAction)send:(id)sender
|
||||
{
|
||||
std::string* user_input = NSToString([crashText stringValue]);
|
||||
gUserNotes = *user_input;
|
||||
gSendReport = true;
|
||||
}
|
||||
|
||||
- (IBAction)cancel:(id)sender
|
||||
{
|
||||
[ _window close];
|
||||
}
|
||||
@end
|
||||
*/
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
/**
|
||||
* @file mac_crash_logger.cpp
|
||||
* @brief Mac OSX crash logger implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
#include "llcrashloggermac.h"
|
||||
#include "indra_constants.h"
|
||||
#include "llpidlock.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
LLCrashLoggerMac app;
|
||||
app.parseCommandOptions(argc, argv);
|
||||
|
||||
LLSD options = LLApp::instance()->getOptionData(
|
||||
LLApp::PRIORITY_COMMAND_LINE);
|
||||
|
||||
if (! app.init())
|
||||
{
|
||||
LL_WARNS() << "Unable to initialize application." << LL_ENDL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (app.getCrashBehavior() != CRASH_BEHAVIOR_ALWAYS_SEND)
|
||||
{
|
||||
// return NSApplicationMain(argc, (const char **)argv);
|
||||
}
|
||||
app.frame();
|
||||
app.cleanup();
|
||||
|
||||
LL_INFOS() << "Crash reporter finished normally." << LL_ENDL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -52,7 +52,7 @@ include(UnixInstall)
|
|||
include(ViewerMiscLibs)
|
||||
include(ViewerManager)
|
||||
include(VisualLeakDetector)
|
||||
include(ZLIB)
|
||||
include(ZLIBNG)
|
||||
include(URIPARSER)
|
||||
|
||||
if (NOT HAVOK_TPV)
|
||||
|
|
@ -1835,10 +1835,6 @@ if (WINDOWS)
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/licenses-win32.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/featuretable.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/featuretable_xp.txt
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/libeay32.dll
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/ssleay32.dll
|
||||
${ARCH_PREBUILT_DIRS_DEBUG}/libeay32.dll
|
||||
${ARCH_PREBUILT_DIRS_DEBUG}/ssleay32.dll
|
||||
${viewer_APPSETTINGS_FILES}
|
||||
SLPlugin
|
||||
media_plugin_cef
|
||||
|
|
@ -1847,19 +1843,19 @@ if (WINDOWS)
|
|||
winmm_shim
|
||||
)
|
||||
|
||||
if (NOT USE_BUGSPLAT)
|
||||
LIST(APPEND COPY_INPUT_DEPENDENCIES windows-crash-logger)
|
||||
endif (NOT USE_BUGSPLAT)
|
||||
|
||||
if (ADDRESS_SIZE EQUAL 64)
|
||||
list(APPEND COPY_INPUT_DEPENDENCIES
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/vivoxsdk_x64.dll
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/ortp_x64.dll
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/libcrypto-1_1-x64.dll
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/libssl-1_1-x64.dll
|
||||
)
|
||||
else (ADDRESS_SIZE EQUAL 64)
|
||||
list(APPEND COPY_INPUT_DEPENDENCIES
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/vivoxsdk.dll
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/ortp.dll
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/libcrypto-1_1.dll
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/libssl-1_1.dll
|
||||
)
|
||||
endif (ADDRESS_SIZE EQUAL 64)
|
||||
|
||||
|
|
@ -1915,10 +1911,6 @@ if (WINDOWS)
|
|||
|
||||
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin)
|
||||
|
||||
if (NOT USE_BUGSPLAT)
|
||||
add_dependencies(${VIEWER_BINARY_NAME} windows-crash-logger)
|
||||
endif (NOT USE_BUGSPLAT)
|
||||
|
||||
# sets the 'working directory' for debugging from visual studio.
|
||||
# Condition for version can be moved to requirements once build agents will be updated (see TOOL-3865)
|
||||
if (NOT UNATTENDED)
|
||||
|
|
@ -2015,14 +2007,14 @@ endif (WINDOWS)
|
|||
#
|
||||
# We generally want the newest version of the library to provide all symbol
|
||||
# resolution. To that end, when using static archives, the *_PRELOAD_ARCHIVES
|
||||
# variables, PNG_PRELOAD_ARCHIVES and ZLIB_PRELOAD_ARCHIVES, get the archives
|
||||
# variables, PNG_PRELOAD_ARCHIVES and ZLIBNG_PRELOAD_ARCHIVES, get the archives
|
||||
# dumped into the target binary and runtime lookup will find the most
|
||||
# modern version.
|
||||
|
||||
target_link_libraries(${VIEWER_BINARY_NAME}
|
||||
${LEGACY_STDIO_LIBS}
|
||||
${PNG_PRELOAD_ARCHIVES}
|
||||
${ZLIB_PRELOAD_ARCHIVES}
|
||||
${ZLIBNG_PRELOAD_ARCHIVES}
|
||||
${URIPARSER_PRELOAD_ARCHIVES}
|
||||
${GOOGLE_PERFTOOLS_LIBRARIES}
|
||||
${LLAUDIO_LIBRARIES}
|
||||
|
|
@ -2226,10 +2218,6 @@ if (DARWIN)
|
|||
|
||||
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_libvlc media_plugin_cef)
|
||||
|
||||
if (NOT USE_BUGSPLAT)
|
||||
add_dependencies(${VIEWER_BINARY_NAME} mac-crash-logger)
|
||||
endif (NOT USE_BUGSPLAT)
|
||||
|
||||
if (ENABLE_SIGNING)
|
||||
set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}")
|
||||
else (ENABLE_SIGNING)
|
||||
|
|
@ -2271,62 +2259,7 @@ endif (INSTALL)
|
|||
|
||||
# Note that the conventional VIEWER_SYMBOL_FILE is set by ../../build.sh
|
||||
if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND VIEWER_SYMBOL_FILE)
|
||||
if (NOT USE_BUGSPLAT)
|
||||
# Breakpad symbol-file generation
|
||||
set(SYMBOL_SEARCH_DIRS "")
|
||||
if (WINDOWS)
|
||||
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
|
||||
# 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)
|
||||
if (DARWIN)
|
||||
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
|
||||
# *TODO: Generate these search dirs in the cmake files related to each binary.
|
||||
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}")
|
||||
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_crash_logger/${CMAKE_CFG_INTDIR}")
|
||||
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}")
|
||||
set(VIEWER_EXE_GLOBS "'${product}' SLPlugin")
|
||||
set(VIEWER_EXE_GLOBS "'${product}' mac-crash-logger")
|
||||
set(VIEWER_LIB_GLOB "*.dylib")
|
||||
endif (DARWIN)
|
||||
if (LINUX)
|
||||
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/packaged")
|
||||
set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin SLPlugin")
|
||||
set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin")
|
||||
set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}*")
|
||||
set(VIEWER_COPY_MANIFEST copy_l_viewer_manifest)
|
||||
endif (LINUX)
|
||||
|
||||
if(CMAKE_CFG_INTDIR STREQUAL ".")
|
||||
set(LLBUILD_CONFIG ${CMAKE_BUILD_TYPE})
|
||||
else(CMAKE_CFG_INTDIR STREQUAL ".")
|
||||
# set LLBUILD_CONFIG to be a shell variable evaluated at build time
|
||||
# reflecting the configuration we are currently building.
|
||||
set(LLBUILD_CONFIG ${CMAKE_CFG_INTDIR})
|
||||
endif(CMAKE_CFG_INTDIR STREQUAL ".")
|
||||
add_custom_command(OUTPUT "${VIEWER_SYMBOL_FILE}"
|
||||
COMMAND "${PYTHON_EXECUTABLE}"
|
||||
ARGS
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/generate_breakpad_symbols.py"
|
||||
"${LLBUILD_CONFIG}"
|
||||
"${SYMBOL_SEARCH_DIRS}"
|
||||
"${VIEWER_EXE_GLOBS}"
|
||||
"${VIEWER_LIB_GLOB}"
|
||||
"${AUTOBUILD_INSTALL_DIR}/bin/dump_syms"
|
||||
"${VIEWER_SYMBOL_FILE}"
|
||||
DEPENDS generate_breakpad_symbols.py
|
||||
VERBATIM)
|
||||
|
||||
add_custom_target(generate_symbols DEPENDS "${VIEWER_SYMBOL_FILE}" ${VIEWER_BINARY_NAME} "${VIEWER_COPY_MANIFEST}")
|
||||
add_dependencies(generate_symbols ${VIEWER_BINARY_NAME})
|
||||
if (WINDOWS OR LINUX)
|
||||
add_dependencies(generate_symbols "${VIEWER_COPY_MANIFEST}")
|
||||
endif (WINDOWS OR LINUX)
|
||||
|
||||
else (NOT USE_BUGSPLAT)
|
||||
if (USE_BUGSPLAT)
|
||||
# BugSplat symbol-file generation
|
||||
if (WINDOWS)
|
||||
# Just pack up a tarball containing only the .pdb file for the
|
||||
|
|
@ -2410,7 +2343,7 @@ if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND VIE
|
|||
if (LINUX)
|
||||
# TBD
|
||||
endif (LINUX)
|
||||
endif (NOT USE_BUGSPLAT)
|
||||
endif (USE_BUGSPLAT)
|
||||
|
||||
# for both Bugsplat and Breakpad
|
||||
add_dependencies(llpackage generate_symbols)
|
||||
|
|
|
|||
|
|
@ -1,166 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
"""\
|
||||
@file generate_breakpad_symbols.py
|
||||
@author Brad Kittenbrink <brad@lindenlab.com>
|
||||
@brief Simple tool for generating google_breakpad symbol information
|
||||
for the crash reporter.
|
||||
|
||||
$LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
Second Life Viewer Source Code
|
||||
Copyright (C) 2010-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 collections
|
||||
import fnmatch
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import shlex
|
||||
import subprocess
|
||||
import tarfile
|
||||
import StringIO
|
||||
import pprint
|
||||
|
||||
DEBUG=False
|
||||
|
||||
def usage():
|
||||
print >>sys.stderr, "usage: %s search_dirs viewer_exes libs_suffix dump_syms_tool viewer_symbol_file" % sys.argv[0]
|
||||
|
||||
class MissingModuleError(Exception):
|
||||
def __init__(self, modules):
|
||||
Exception.__init__(self, "Failed to find required modules: %r" % modules)
|
||||
self.modules = modules
|
||||
|
||||
def main(configuration, search_dirs, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file):
|
||||
print "generate_breakpad_symbols run with args: %s" % str((configuration, search_dirs, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file))
|
||||
|
||||
if not re.match("release", configuration, re.IGNORECASE):
|
||||
print "skipping breakpad symbol generation for non-release build."
|
||||
return 0
|
||||
|
||||
# split up list of viewer_exes
|
||||
# "'Second Life' SLPlugin" becomes ['Second Life', 'SLPlugin']
|
||||
viewer_exes = shlex.split(viewer_exes)
|
||||
|
||||
found_required = dict([(module, False) for module in viewer_exes])
|
||||
|
||||
def matches(f):
|
||||
if f in viewer_exes:
|
||||
found_required[f] = True
|
||||
return True
|
||||
return fnmatch.fnmatch(f, libs_suffix)
|
||||
|
||||
search_dirs = search_dirs.split(";")
|
||||
|
||||
def list_files():
|
||||
for search_dir in search_dirs:
|
||||
for (dirname, subdirs, filenames) in os.walk(search_dir):
|
||||
if DEBUG:
|
||||
print "scanning '%s' for modules..." % dirname
|
||||
for f in itertools.ifilter(matches, filenames):
|
||||
yield os.path.join(dirname, f)
|
||||
|
||||
def dump_module(m):
|
||||
print "dumping module '%s' with '%s'..." % (m, dump_syms_tool)
|
||||
dsym_full_path = m
|
||||
child = subprocess.Popen([dump_syms_tool, dsym_full_path] , stdout=subprocess.PIPE)
|
||||
out, err = child.communicate()
|
||||
return (m,child.returncode, out, err)
|
||||
|
||||
|
||||
modules = {}
|
||||
|
||||
for m in list_files():
|
||||
if DEBUG:
|
||||
print "examining module '%s' ... " % m,
|
||||
filename=os.path.basename(m)
|
||||
if -1 != m.find("DWARF"):
|
||||
# Just use this module; it has the symbols we want.
|
||||
modules[filename] = m
|
||||
if DEBUG:
|
||||
print "found dSYM entry"
|
||||
elif filename not in modules:
|
||||
# Only use this if we don't already have a (possibly better) entry.
|
||||
modules[filename] = m
|
||||
if DEBUG:
|
||||
print "found new entry"
|
||||
elif DEBUG:
|
||||
print "ignoring entry"
|
||||
|
||||
|
||||
print "Found these following modules:"
|
||||
pprint.pprint( modules )
|
||||
|
||||
out = tarfile.open(viewer_symbol_file, 'w:bz2')
|
||||
for (filename,status,symbols,err) in itertools.imap(dump_module, modules.values()):
|
||||
if status == 0:
|
||||
module_line = symbols[:symbols.index('\n')]
|
||||
module_line = module_line.split()
|
||||
hash_id = module_line[3]
|
||||
module = ' '.join(module_line[4:])
|
||||
if sys.platform in ['win32', 'cygwin']:
|
||||
mod_name = module[:module.rindex('.pdb')]
|
||||
else:
|
||||
mod_name = module
|
||||
symbolfile = StringIO.StringIO(symbols)
|
||||
info = tarfile.TarInfo("%(module)s/%(hash_id)s/%(mod_name)s.sym" % dict(module=module, hash_id=hash_id, mod_name=mod_name))
|
||||
info.size = symbolfile.len
|
||||
out.addfile(info, symbolfile)
|
||||
else:
|
||||
print >>sys.stderr, "warning: failed to dump symbols for '%s': %s" % (filename, err)
|
||||
|
||||
out.close()
|
||||
|
||||
missing_modules = [m for (m,_) in
|
||||
itertools.ifilter(lambda (k,v): not v, found_required.iteritems())
|
||||
]
|
||||
if missing_modules:
|
||||
print >> sys.stderr, "failed to generate %s" % viewer_symbol_file
|
||||
os.remove(viewer_symbol_file)
|
||||
raise MissingModuleError(missing_modules)
|
||||
|
||||
symbols = tarfile.open(viewer_symbol_file, 'r:bz2')
|
||||
tarfile_members = symbols.getnames()
|
||||
symbols.close()
|
||||
|
||||
for required_module in viewer_exes:
|
||||
def match_module_basename(m):
|
||||
return os.path.splitext(required_module)[0].lower() \
|
||||
== os.path.splitext(os.path.basename(m))[0].lower()
|
||||
# there must be at least one .sym file in tarfile_members that matches
|
||||
# each required module (ignoring file extensions)
|
||||
if not any(itertools.imap(match_module_basename, tarfile_members)):
|
||||
print >> sys.stderr, "failed to find required %s in generated %s" \
|
||||
% (required_module, viewer_symbol_file)
|
||||
os.remove(viewer_symbol_file)
|
||||
raise MissingModuleError([required_module])
|
||||
|
||||
print "successfully generated %s including required modules '%s'" % (viewer_symbol_file, viewer_exes)
|
||||
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 7:
|
||||
usage()
|
||||
sys.exit(1)
|
||||
sys.exit(main(*sys.argv[1:]))
|
||||
|
||||
|
|
@ -713,6 +713,12 @@ void LLAgent::moveYaw(F32 mag, bool reset_view)
|
|||
setControlFlags(AGENT_CONTROL_YAW_NEG);
|
||||
}
|
||||
|
||||
U32 mask = AGENT_CONTROL_YAW_POS | AGENT_CONTROL_YAW_NEG;
|
||||
if ((getControlFlags() & mask) == mask)
|
||||
{
|
||||
gAgentCamera.setYawKey(0);
|
||||
}
|
||||
|
||||
if (reset_view)
|
||||
{
|
||||
gAgentCamera.resetView();
|
||||
|
|
@ -2004,6 +2010,27 @@ void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32
|
|||
//
|
||||
|
||||
gAgentCamera.updateLookAt(mouse_x, mouse_y);
|
||||
|
||||
// When agent has no parents, position updates come from setPositionAgent()
|
||||
// But when agent has a parent (ex: is seated), position remains unchanged
|
||||
// relative to parent and no parent's position update trigger
|
||||
// setPositionAgent().
|
||||
// But EEP's sky track selection still needs an update if agent has a parent
|
||||
// and parent moves (ex: vehicles).
|
||||
if (isAgentAvatarValid()
|
||||
&& gAgentAvatarp->getParent()
|
||||
&& !mOnPositionChanged.empty()
|
||||
)
|
||||
{
|
||||
LLVector3d new_position = getPositionGlobal();
|
||||
if ((mLastTestGlobal - new_position).lengthSquared() > 1.0)
|
||||
{
|
||||
// If the position has changed by more than 1 meter since the last time we triggered.
|
||||
// filters out some noise.
|
||||
mLastTestGlobal = new_position;
|
||||
mOnPositionChanged(mFrameAgent.getOrigin(), new_position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// friends and operators
|
||||
|
|
|
|||
|
|
@ -404,10 +404,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi
|
|||
LLQuaternion obj_rot = object->getRenderRotation();
|
||||
LLVector3 obj_pos = object->getRenderPosition();
|
||||
|
||||
BOOL is_avatar = object->isAvatar();
|
||||
// if is avatar - don't do any funk heuristics to position the focal point
|
||||
// see DEV-30589
|
||||
if (is_avatar)
|
||||
if (object->isAvatar() || (object->isAnimatedObject() && object->getControlAvatar()))
|
||||
{
|
||||
return original_focus_point - obj_pos;
|
||||
}
|
||||
|
|
@ -532,7 +531,6 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi
|
|||
// or keep the focus point in the object middle when (relatively) far
|
||||
// NOTE: leave focus point in middle of avatars, since the behavior you want when alt-zooming on avatars
|
||||
// is almost always "tumble about middle" and not "spin around surface point"
|
||||
if (!is_avatar)
|
||||
{
|
||||
LLVector3 obj_rel = original_focus_point - object->getRenderPosition();
|
||||
|
||||
|
|
@ -1420,7 +1418,7 @@ void LLAgentCamera::updateCamera()
|
|||
|
||||
F32 smoothing = LLSmoothInterpolation::getInterpolant(gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE, FALSE);
|
||||
|
||||
if (!mFocusObject) // we differentiate on avatar mode
|
||||
if (mFocusOnAvatar && !mFocusObject) // we differentiate on avatar mode
|
||||
{
|
||||
// for avatar-relative focus, we smooth in avatar space -
|
||||
// the avatar moves too jerkily w/r/t global space to smooth there.
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "llgesturemgr.h"
|
||||
#include "llinventorybridge.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
#include "llinventorymodelbackgroundfetch.h"
|
||||
#include "llinventoryobserver.h"
|
||||
#include "llinventorypanel.h"
|
||||
#include "lllocaltextureobject.h"
|
||||
|
|
@ -1581,6 +1582,14 @@ void LLAgentWearables::editWearable(const LLUUID& item_id)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!item->isFinished())
|
||||
{
|
||||
LL_WARNS() << "Tried to edit wearable that isn't loaded" << LL_ENDL;
|
||||
// Restart fetch or put item to the front
|
||||
LLInventoryModelBackgroundFetch::instance().start(item->getUUID(), false);
|
||||
return;
|
||||
}
|
||||
|
||||
LLViewerWearable* wearable = gAgentWearables.getWearableFromItemID(item_id);
|
||||
if (!wearable)
|
||||
{
|
||||
|
|
@ -1594,6 +1603,18 @@ void LLAgentWearables::editWearable(const LLUUID& item_id)
|
|||
return;
|
||||
}
|
||||
|
||||
S32 shape_count = gAgentWearables.getWearableCount(LLWearableType::WT_SHAPE);
|
||||
S32 hair_count = gAgentWearables.getWearableCount(LLWearableType::WT_HAIR);
|
||||
S32 eye_count = gAgentWearables.getWearableCount(LLWearableType::WT_EYES);
|
||||
S32 skin_count = gAgentWearables.getWearableCount(LLWearableType::WT_SKIN);
|
||||
if (!shape_count || !hair_count || !eye_count || !skin_count)
|
||||
{
|
||||
// Don't let user edit wearables if avatar is cloud due to missing parts.
|
||||
// Let user edit wearables if avatar is cloud due to missing textures.
|
||||
LL_WARNS() << "Cannot modify wearable. Avatar is cloud and missing parts." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
const BOOL disable_camera_switch = LLWearableType::getDisableCameraSwitch(wearable->getType());
|
||||
LLPanel* panel = LLFloaterSidePanelContainer::getPanel("appearance");
|
||||
LLSidepanelAppearance::editWearable(wearable, panel, disable_camera_switch);
|
||||
|
|
|
|||
|
|
@ -739,7 +739,7 @@ LLAppViewer::LLAppViewer()
|
|||
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "");
|
||||
# endif // ! LL_BUGSPLAT
|
||||
mDumpPath = logdir;
|
||||
setMiniDumpDir(logdir);
|
||||
|
||||
setDebugFileNames(logdir);
|
||||
}
|
||||
|
||||
|
|
@ -3165,7 +3165,28 @@ LLSD LLAppViewer::getViewerInfo() const
|
|||
info["GRAPHICS_CARD"] = ll_safe_string((const char*)(glGetString(GL_RENDERER)));
|
||||
|
||||
#if LL_WINDOWS
|
||||
std::string drvinfo = gDXHardware.getDriverVersionWMI();
|
||||
std::string drvinfo;
|
||||
|
||||
if (gGLManager.mIsIntel)
|
||||
{
|
||||
drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_INTEL);
|
||||
}
|
||||
else if (gGLManager.mIsNVIDIA)
|
||||
{
|
||||
drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_NVIDIA);
|
||||
}
|
||||
else if (gGLManager.mIsATI)
|
||||
{
|
||||
drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_AMD);
|
||||
}
|
||||
|
||||
if (drvinfo.empty())
|
||||
{
|
||||
// Generic/substitute windows driver? Unknown vendor?
|
||||
LL_WARNS("DriverVersion") << "Vendor based driver search failed, searching for any driver" << LL_ENDL;
|
||||
drvinfo = gDXHardware.getDriverVersionWMI(LLDXHardware::GPU_ANY);
|
||||
}
|
||||
|
||||
if (!drvinfo.empty())
|
||||
{
|
||||
info["GRAPHICS_DRIVER_VERSION"] = drvinfo;
|
||||
|
|
@ -5018,13 +5039,18 @@ void LLAppViewer::idle()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// Update layonts, handle mouse events, tooltips, e t c
|
||||
// updateUI() needs to be called even in case viewer disconected
|
||||
// since related notification still needs handling and allows
|
||||
// opening chat.
|
||||
gViewerWindow->updateUI();
|
||||
|
||||
if (gDisconnected)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gViewerWindow->updateUI();
|
||||
|
||||
if (gTeleportDisplay)
|
||||
{
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -109,7 +109,6 @@ public:
|
|||
|
||||
virtual bool restoreErrorTrap() = 0; // Require platform specific override to reset error handling mechanism.
|
||||
// return false if the error trap needed restoration.
|
||||
virtual void initCrashReporting(bool reportFreeze = false) = 0; // What to do with crash report?
|
||||
static void handleViewerCrash(); // Hey! The viewer crashed. Do this, soon.
|
||||
void checkForCrash();
|
||||
|
||||
|
|
|
|||
|
|
@ -222,14 +222,7 @@ LLAppViewerMacOSX::~LLAppViewerMacOSX()
|
|||
|
||||
bool LLAppViewerMacOSX::init()
|
||||
{
|
||||
bool success = LLAppViewer::init();
|
||||
|
||||
if (success)
|
||||
{
|
||||
LLAppViewer* pApp = LLAppViewer::instance();
|
||||
pApp->initCrashReporting();
|
||||
}
|
||||
return success;
|
||||
return LLAppViewer::init();
|
||||
}
|
||||
|
||||
// MacOSX may add and addition command line arguement for the process serial number.
|
||||
|
|
@ -347,28 +340,6 @@ bool LLAppViewerMacOSX::restoreErrorTrap()
|
|||
return reset_count == 0;
|
||||
}
|
||||
|
||||
void LLAppViewerMacOSX::initCrashReporting(bool reportFreeze)
|
||||
{
|
||||
#if defined LL_BUGSPLAT
|
||||
LL_DEBUGS("InitOSX", "Bugsplat") << "using BugSplat crash logger" << LL_ENDL;
|
||||
#elif LL_SEND_CRASH_REPORTS
|
||||
LL_DEBUGS("InitOSX") << "Initializing legacy crash logger" << LL_ENDL;
|
||||
std::string command_str = "mac-crash-logger.app";
|
||||
|
||||
std::stringstream pid_str;
|
||||
pid_str << LLApp::getPid();
|
||||
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "");
|
||||
std::string appname = gDirUtilp->getExecutableFilename();
|
||||
std::string str[] = { "-pid", pid_str.str(), "-dumpdir", logdir, "-procname", appname.c_str() };
|
||||
std::vector< std::string > args( str, str + ( sizeof ( str ) / sizeof ( std::string ) ) );
|
||||
LL_WARNS() << "about to launch mac-crash-logger" << pid_str.str()
|
||||
<< " " << logdir << " " << appname << LL_ENDL;
|
||||
launchApplication(&command_str, &args);
|
||||
#else
|
||||
LL_DEBUGS("InitOSX") << "No crash logger enabled" << LL_ENDL;
|
||||
#endif // ! LL_BUGSPLAT
|
||||
}
|
||||
|
||||
std::string LLAppViewerMacOSX::generateSerialNumber()
|
||||
{
|
||||
char serial_md5[MD5HEX_STR_SIZE]; // Flawfinder: ignore
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ public:
|
|||
|
||||
protected:
|
||||
virtual bool restoreErrorTrap();
|
||||
virtual void initCrashReporting(bool reportFreeze);
|
||||
|
||||
std::string generateSerialNumber();
|
||||
virtual bool initParseCommandLine(LLCommandLineParser& clp);
|
||||
|
|
|
|||
|
|
@ -599,9 +599,6 @@ bool LLAppViewerWin32::init()
|
|||
#if ! defined(LL_BUGSPLAT)
|
||||
#pragma message("Building without BugSplat")
|
||||
|
||||
LLAppViewer* pApp = LLAppViewer::instance();
|
||||
pApp->initCrashReporting();
|
||||
|
||||
#else // LL_BUGSPLAT
|
||||
#pragma message("Building with BugSplat")
|
||||
|
||||
|
|
@ -846,57 +843,6 @@ bool LLAppViewerWin32::restoreErrorTrap()
|
|||
return true; // we don't check for handler collisions on windows, so just say they're ok
|
||||
}
|
||||
|
||||
void LLAppViewerWin32::initCrashReporting(bool reportFreeze)
|
||||
{
|
||||
if (isSecondInstance()) return; //BUG-5707 do not start another crash reporter for second instance.
|
||||
|
||||
const char* logger_name = "win_crash_logger.exe";
|
||||
std::string exe_path = gDirUtilp->getExecutableDir();
|
||||
exe_path += gDirUtilp->getDirDelimiter();
|
||||
exe_path += logger_name;
|
||||
|
||||
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "");
|
||||
std::string appname = gDirUtilp->getExecutableFilename();
|
||||
|
||||
S32 slen = logdir.length() -1;
|
||||
S32 end = slen;
|
||||
while (logdir.at(end) == '/' || logdir.at(end) == '\\') end--;
|
||||
|
||||
if (slen !=end)
|
||||
{
|
||||
logdir = logdir.substr(0,end+1);
|
||||
}
|
||||
//std::string arg_str = "\"" + exe_path + "\" -dumpdir \"" + logdir + "\" -procname \"" + appname + "\" -pid " + stringize(LLApp::getPid());
|
||||
//_spawnl(_P_NOWAIT, exe_path.c_str(), arg_str.c_str(), NULL);
|
||||
std::string arg_str = "\"" + exe_path + "\" -dumpdir \"" + logdir + "\" -procname \"" + appname + "\" -pid " + stringize(LLApp::getPid());
|
||||
|
||||
STARTUPINFO startInfo={sizeof(startInfo)};
|
||||
PROCESS_INFORMATION processInfo;
|
||||
|
||||
std::wstring exe_wstr;
|
||||
exe_wstr = utf8str_to_utf16str(exe_path);
|
||||
|
||||
std::wstring arg_wstr;
|
||||
arg_wstr = utf8str_to_utf16str(arg_str);
|
||||
|
||||
LL_INFOS("CrashReport") << "Creating crash reporter process " << exe_path << " with params: " << arg_str << LL_ENDL;
|
||||
if(CreateProcess(exe_wstr.c_str(),
|
||||
&arg_wstr[0], // Application arguments
|
||||
0,
|
||||
0,
|
||||
FALSE,
|
||||
CREATE_DEFAULT_ERROR_MODE,
|
||||
0,
|
||||
0, // Working directory
|
||||
&startInfo,
|
||||
&processInfo) == FALSE)
|
||||
// Could not start application -> call 'GetLastError()'
|
||||
{
|
||||
LL_WARNS("CrashReport") << "CreateProcess failed " << GetLastError() << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
bool LLAppViewerWin32::sendURLToOtherInstance(const std::string& url)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -53,7 +53,6 @@ protected:
|
|||
|
||||
bool beingDebugged() override;
|
||||
bool restoreErrorTrap() override;
|
||||
void initCrashReporting(bool reportFreeze) override;
|
||||
|
||||
bool sendURLToOtherInstance(const std::string& url) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include "llmutelist.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerparcelmgr.h"
|
||||
#include "llvoavatarself.h"
|
||||
|
||||
LLAudioSourceVO::LLAudioSourceVO(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, LLViewerObject *objectp)
|
||||
: LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX),
|
||||
|
|
@ -141,11 +142,36 @@ void LLAudioSourceVO::updateMute()
|
|||
LLVector3d pos_global = getPosGlobal();
|
||||
|
||||
F32 cutoff = mObjectp->getSoundCutOffRadius();
|
||||
if ((cutoff > 0.1f && !isInCutOffRadius(pos_global, cutoff)) // consider cutoff below 0.1m as off
|
||||
|| !LLViewerParcelMgr::getInstance()->canHearSound(pos_global))
|
||||
{
|
||||
mute = true;
|
||||
}
|
||||
// Object can specify radius at which it turns off
|
||||
// consider cutoff below 0.1m as 'cutoff off'
|
||||
if (cutoff > 0.1f && !isInCutOffRadius(pos_global, cutoff))
|
||||
{
|
||||
mute = true;
|
||||
}
|
||||
// check if parcel allows sounds to pass border
|
||||
else if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global))
|
||||
{
|
||||
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
|
||||
{
|
||||
// Check if agent is riding this object
|
||||
// Agent can ride something out of region border and canHearSound
|
||||
// will treat object as not being part of agent's parcel.
|
||||
LLViewerObject *sound_root = (LLViewerObject*)mObjectp->getRoot();
|
||||
LLViewerObject *agent_root = (LLViewerObject*)gAgentAvatarp->getRoot();
|
||||
if (sound_root != agent_root)
|
||||
{
|
||||
mute = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "roots identical" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mute = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!mute)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -558,9 +558,15 @@ public:
|
|||
mTimeBoxTextBox = getChild<LLTextBox>("time_box");
|
||||
|
||||
mInfoCtrl = LLUICtrlFactory::getInstance()->createFromFile<LLUICtrl>("inspector_info_ctrl.xml", this, LLPanel::child_registry_t::instance());
|
||||
llassert(mInfoCtrl != NULL);
|
||||
mInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, mInfoCtrl));
|
||||
mInfoCtrl->setVisible(FALSE);
|
||||
if (mInfoCtrl)
|
||||
{
|
||||
mInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, mInfoCtrl));
|
||||
mInfoCtrl->setVisible(FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "Failed to create an interface element due to missing or corrupted file inspector_info_ctrl.xml" << LL_ENDL;
|
||||
}
|
||||
|
||||
return LLPanel::postBuild();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -389,7 +389,8 @@ void LLVolumeImplFlexible::doIdleUpdate()
|
|||
U64 throttling_delay = (virtual_frame_num + id) % update_period;
|
||||
|
||||
if ((throttling_delay == 0 && mLastFrameNum < virtual_frame_num) //one or more virtual frames per frame
|
||||
|| (mLastFrameNum + update_period < virtual_frame_num)) // missed virtual frame
|
||||
|| (mLastFrameNum + update_period < virtual_frame_num) // missed virtual frame
|
||||
|| mLastFrameNum > virtual_frame_num) // overflow
|
||||
{
|
||||
// We need mLastFrameNum to compensate for 'unreliable time' and to filter 'duplicate' frames
|
||||
// If happened too late, subtract throttling_delay (it is zero otherwise)
|
||||
|
|
@ -787,11 +788,7 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
|
|||
|
||||
volume->updateRelativeXform();
|
||||
|
||||
if (mRenderRes > -1)
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_DO_FLEXIBLE_UPDATE);
|
||||
doFlexibleUpdate();
|
||||
}
|
||||
doFlexibleUpdate();
|
||||
|
||||
// Object may have been rotated, which means it needs a rebuild. See SL-47220
|
||||
BOOL rotated = FALSE;
|
||||
|
|
|
|||
|
|
@ -452,7 +452,8 @@ BOOL LLPanelLandGeneral::postBuild()
|
|||
|
||||
mEditDesc = getChild<LLTextEditor>("Description");
|
||||
mEditDesc->setCommitOnFocusLost(TRUE);
|
||||
mEditDesc->setCommitCallback(onCommitAny, this);
|
||||
mEditDesc->setCommitCallback(onCommitAny, this);
|
||||
mEditDesc->setContentTrusted(false);
|
||||
// No prevalidate function - historically the prevalidate function was broken,
|
||||
// allowing residents to put in characters like U+2661 WHITE HEART SUIT, so
|
||||
// preserve that ability.
|
||||
|
|
@ -749,6 +750,7 @@ void LLPanelLandGeneral::refresh()
|
|||
BOOL can_edit_identity = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY);
|
||||
mEditName->setEnabled(can_edit_identity);
|
||||
mEditDesc->setEnabled(can_edit_identity);
|
||||
mEditDesc->setParseURLs(!can_edit_identity);
|
||||
|
||||
BOOL can_edit_agent_only = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_NO_POWERS);
|
||||
mBtnSetGroup->setEnabled(can_edit_agent_only && !parcel->getIsGroupOwned());
|
||||
|
|
|
|||
|
|
@ -2085,6 +2085,8 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)
|
|||
|
||||
LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
|
||||
region_landtype->setText(region->getLocalizedSimProductName());
|
||||
|
||||
getChild<LLButton>("reset_covenant")->setEnabled(gAgent.isGodlike() || (region && region->canManageEstate()));
|
||||
|
||||
// let the parent class handle the general data collection.
|
||||
bool rv = LLPanelRegionInfo::refreshFromRegion(region);
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ BOOL LLPanelGroupGeneral::postBuild()
|
|||
mEditCharter->setCommitCallback(onCommitAny, this);
|
||||
mEditCharter->setFocusReceivedCallback(boost::bind(onFocusEdit, _1, this));
|
||||
mEditCharter->setFocusChangedCallback(boost::bind(onFocusEdit, _1, this));
|
||||
mEditCharter->setContentTrusted(false);
|
||||
}
|
||||
|
||||
// Options
|
||||
|
|
@ -575,7 +576,8 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
|
|||
|
||||
if (mEditCharter)
|
||||
{
|
||||
mEditCharter->setText(gdatap->mCharter);
|
||||
mEditCharter->setParseURLs(!mAllowEdit || !can_change_ident);
|
||||
mEditCharter->setText(gdatap->mCharter);
|
||||
}
|
||||
|
||||
resetDirty();
|
||||
|
|
|
|||
|
|
@ -100,15 +100,7 @@ std::string get_user_key_from_name(const std::string &username)
|
|||
std::string key = username;
|
||||
LLStringUtil::trim(key);
|
||||
LLStringUtil::toLower(key);
|
||||
if (!LLGridManager::getInstance()->isSystemGrid())
|
||||
{
|
||||
size_t separator_index = username.find_first_of(" ");
|
||||
if (separator_index == username.npos)
|
||||
{
|
||||
// CRED_IDENTIFIER_TYPE_ACCOUNT
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
||||
// CRED_IDENTIFIER_TYPE_AGENT
|
||||
size_t separator_index = username.find_first_of(" ._");
|
||||
std::string first = username.substr(0, separator_index);
|
||||
|
|
|
|||
|
|
@ -1672,8 +1672,19 @@ void LLPanelObject::sendPosition(BOOL btn_down)
|
|||
// Make sure new position is in a valid region, so the object
|
||||
// won't get dumped by the simulator.
|
||||
LLVector3d new_pos_global = regionp->getPosGlobalFromRegion(newpos);
|
||||
bool is_valid_pos = true;
|
||||
if (mObject->isAttachment())
|
||||
{
|
||||
LLVector3 delta_pos = mObject->getPositionEdit() - newpos;
|
||||
LLVector3d attachment_pos = regionp->getPosGlobalFromRegion(mObject->getPositionRegion() + delta_pos);
|
||||
is_valid_pos = LLWorld::getInstance()->positionRegionValidGlobal(attachment_pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
is_valid_pos = LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global);
|
||||
}
|
||||
|
||||
if ( LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global) )
|
||||
if (is_valid_pos)
|
||||
{
|
||||
// send only if the position is changed, that is, the delta vector is not zero
|
||||
LLVector3d old_pos_global = mObject->getPositionGlobal();
|
||||
|
|
|
|||
|
|
@ -347,9 +347,6 @@ BOOL LLPreviewGesture::postBuild()
|
|||
LLTextBox* text;
|
||||
LLCheckBoxCtrl* check;
|
||||
|
||||
edit = getChild<LLLineEditor>("name");
|
||||
edit->setKeystrokeCallback(onKeystrokeCommit, this);
|
||||
|
||||
edit = getChild<LLLineEditor>("desc");
|
||||
edit->setKeystrokeCallback(onKeystrokeCommit, this);
|
||||
|
||||
|
|
@ -482,9 +479,6 @@ BOOL LLPreviewGesture::postBuild()
|
|||
{
|
||||
getChild<LLUICtrl>("desc")->setValue(item->getDescription());
|
||||
getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
|
||||
|
||||
getChild<LLUICtrl>("name")->setValue(item->getName());
|
||||
getChild<LLLineEditor>("name")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
|
||||
}
|
||||
|
||||
return LLPreview::postBuild();
|
||||
|
|
|
|||
|
|
@ -452,7 +452,7 @@ public:
|
|||
virtual LLPointer<LLCertificate> getCertificate(X509* openssl_cert)=0;
|
||||
|
||||
// instantiate a chain from an X509_STORE_CTX
|
||||
virtual LLPointer<LLCertificateChain> getCertificateChain(const X509_STORE_CTX* chain)=0;
|
||||
virtual LLPointer<LLCertificateChain> getCertificateChain(X509_STORE_CTX* chain)=0;
|
||||
|
||||
// instantiate a cert store given it's id. if a persisted version
|
||||
// exists, it'll be loaded. If not, one will be created (but not
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ LLBasicCertificate::LLBasicCertificate(const std::string& pem_cert,
|
|||
LLBasicCertificate::LLBasicCertificate(X509* pCert,
|
||||
const LLSD* validation_params)
|
||||
{
|
||||
if (!pCert || !pCert->cert_info)
|
||||
if (!pCert)
|
||||
{
|
||||
LLTHROW(LLInvalidCertificate(LLSD::emptyMap()));
|
||||
}
|
||||
|
|
@ -355,8 +355,8 @@ LLSD cert_name_from_X509_NAME(X509_NAME* name)
|
|||
char buffer[32];
|
||||
X509_NAME_ENTRY *entry = X509_NAME_get_entry(name, entry_index);
|
||||
|
||||
std::string name_value = std::string((const char*)M_ASN1_STRING_data(X509_NAME_ENTRY_get_data(entry)),
|
||||
M_ASN1_STRING_length(X509_NAME_ENTRY_get_data(entry)));
|
||||
std::string name_value = std::string((const char*)ASN1_STRING_data(X509_NAME_ENTRY_get_data(entry)),
|
||||
ASN1_STRING_length(X509_NAME_ENTRY_get_data(entry)));
|
||||
|
||||
ASN1_OBJECT* name_obj = X509_NAME_ENTRY_get_object(entry);
|
||||
OBJ_obj2txt(buffer, sizeof(buffer), name_obj, 0);
|
||||
|
|
@ -683,29 +683,29 @@ std::string LLBasicCertificateStore::storeId() const
|
|||
// LLBasicCertificateChain
|
||||
// This class represents a chain of certs, each cert being signed by the next cert
|
||||
// in the chain. Certs must be properly signed by the parent
|
||||
LLBasicCertificateChain::LLBasicCertificateChain(const X509_STORE_CTX* store)
|
||||
LLBasicCertificateChain::LLBasicCertificateChain(X509_STORE_CTX* store)
|
||||
{
|
||||
|
||||
// we're passed in a context, which contains a cert, and a blob of untrusted
|
||||
// certificates which compose the chain.
|
||||
if((store == NULL) || (store->cert == NULL))
|
||||
if((store == NULL) || X509_STORE_CTX_get0_cert(store) == NULL)
|
||||
{
|
||||
LL_WARNS("SECAPI") << "An invalid store context was passed in when trying to create a certificate chain" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
// grab the child cert
|
||||
LLPointer<LLCertificate> current = new LLBasicCertificate(store->cert);
|
||||
LLPointer<LLCertificate> current = new LLBasicCertificate(X509_STORE_CTX_get0_cert(store));
|
||||
|
||||
add(current);
|
||||
if(store->untrusted != NULL)
|
||||
if(X509_STORE_CTX_get0_untrusted(store) != NULL)
|
||||
{
|
||||
// if there are other certs in the chain, we build up a vector
|
||||
// of untrusted certs so we can search for the parents of each
|
||||
// consecutive cert.
|
||||
LLBasicCertificateVector untrusted_certs;
|
||||
for(int i = 0; i < sk_X509_num(store->untrusted); i++)
|
||||
for(int i = 0; i < sk_X509_num(X509_STORE_CTX_get0_untrusted(store)); i++)
|
||||
{
|
||||
LLPointer<LLCertificate> cert = new LLBasicCertificate(sk_X509_value(store->untrusted, i));
|
||||
LLPointer<LLCertificate> cert = new LLBasicCertificate(sk_X509_value(X509_STORE_CTX_get0_untrusted(store), i));
|
||||
untrusted_certs.add(cert);
|
||||
|
||||
}
|
||||
|
|
@ -1348,9 +1348,10 @@ void LLSecAPIBasicHandler::_readProtectedData()
|
|||
|
||||
|
||||
// read in the rest of the file.
|
||||
EVP_CIPHER_CTX ctx;
|
||||
EVP_CIPHER_CTX_init(&ctx);
|
||||
EVP_DecryptInit(&ctx, EVP_rc4(), salt, NULL);
|
||||
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
|
||||
// todo: ctx error handling
|
||||
|
||||
EVP_DecryptInit(ctx, EVP_rc4(), salt, NULL);
|
||||
// allocate memory:
|
||||
std::string decrypted_data;
|
||||
|
||||
|
|
@ -1358,14 +1359,14 @@ void LLSecAPIBasicHandler::_readProtectedData()
|
|||
// read data as a block:
|
||||
protected_data_stream.read((char *)buffer, BUFFER_READ_SIZE);
|
||||
|
||||
EVP_DecryptUpdate(&ctx, decrypted_buffer, &decrypted_length,
|
||||
EVP_DecryptUpdate(ctx, decrypted_buffer, &decrypted_length,
|
||||
buffer, protected_data_stream.gcount());
|
||||
decrypted_data.append((const char *)decrypted_buffer, protected_data_stream.gcount());
|
||||
}
|
||||
|
||||
// RC4 is a stream cipher, so we don't bother to EVP_DecryptFinal, as there is
|
||||
// no block padding.
|
||||
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
std::istringstream parse_stream(decrypted_data);
|
||||
if (parser->parse(parse_stream, mProtectedDataMap,
|
||||
LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE)
|
||||
|
|
@ -1401,12 +1402,14 @@ void LLSecAPIBasicHandler::_writeProtectedData()
|
|||
|
||||
llofstream protected_data_stream(tmp_filename.c_str(),
|
||||
std::ios_base::binary);
|
||||
EVP_CIPHER_CTX *ctx = NULL;
|
||||
try
|
||||
{
|
||||
|
||||
EVP_CIPHER_CTX ctx;
|
||||
EVP_CIPHER_CTX_init(&ctx);
|
||||
EVP_EncryptInit(&ctx, EVP_rc4(), salt, NULL);
|
||||
ctx = EVP_CIPHER_CTX_new();
|
||||
// todo: ctx error handling
|
||||
|
||||
EVP_EncryptInit(ctx, EVP_rc4(), salt, NULL);
|
||||
unsigned char unique_id[MAC_ADDRESS_BYTES];
|
||||
LLMachineID::getUniqueID(unique_id, sizeof(unique_id));
|
||||
LLXORCipher cipher(unique_id, sizeof(unique_id));
|
||||
|
|
@ -1421,13 +1424,13 @@ void LLSecAPIBasicHandler::_writeProtectedData()
|
|||
break;
|
||||
}
|
||||
int encrypted_length;
|
||||
EVP_EncryptUpdate(&ctx, encrypted_buffer, &encrypted_length,
|
||||
EVP_EncryptUpdate(ctx, encrypted_buffer, &encrypted_length,
|
||||
buffer, formatted_data_istream.gcount());
|
||||
protected_data_stream.write((const char *)encrypted_buffer, encrypted_length);
|
||||
}
|
||||
|
||||
// no EVP_EncrypteFinal, as this is a stream cipher
|
||||
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
|
||||
protected_data_stream.close();
|
||||
}
|
||||
|
|
@ -1439,6 +1442,11 @@ void LLSecAPIBasicHandler::_writeProtectedData()
|
|||
// it may be, however.
|
||||
LLFile::remove(tmp_filename);
|
||||
|
||||
if (ctx)
|
||||
{
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
}
|
||||
|
||||
// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData()
|
||||
// Decided throwing an exception here was overkill until we figure out why this happens
|
||||
//LLTHROW(LLProtectedDataException("Error writing Protected Data Store"));
|
||||
|
|
@ -1491,7 +1499,7 @@ LLPointer<LLCertificate> LLSecAPIBasicHandler::getCertificate(X509* openssl_cert
|
|||
}
|
||||
|
||||
// instantiate a chain from an X509_STORE_CTX
|
||||
LLPointer<LLCertificateChain> LLSecAPIBasicHandler::getCertificateChain(const X509_STORE_CTX* chain)
|
||||
LLPointer<LLCertificateChain> LLSecAPIBasicHandler::getCertificateChain(X509_STORE_CTX* chain)
|
||||
{
|
||||
LLPointer<LLCertificateChain> result = new LLBasicCertificateChain(chain);
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ class LLBasicCertificateChain : virtual public LLBasicCertificateVector, public
|
|||
{
|
||||
|
||||
public:
|
||||
LLBasicCertificateChain(const X509_STORE_CTX * store);
|
||||
LLBasicCertificateChain(X509_STORE_CTX * store);
|
||||
|
||||
virtual ~LLBasicCertificateChain() {}
|
||||
|
||||
|
|
@ -241,7 +241,7 @@ public:
|
|||
virtual LLPointer<LLCertificate> getCertificate(X509* openssl_cert);
|
||||
|
||||
// instantiate a chain from an X509_STORE_CTX
|
||||
virtual LLPointer<LLCertificateChain> getCertificateChain(const X509_STORE_CTX* chain);
|
||||
virtual LLPointer<LLCertificateChain> getCertificateChain(X509_STORE_CTX* chain);
|
||||
|
||||
// instantiate a cert store given it's id. if a persisted version
|
||||
// exists, it'll be loaded. If not, one will be created (but not
|
||||
|
|
|
|||
|
|
@ -1021,12 +1021,39 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &n
|
|||
std::set<std::string> framenames;
|
||||
std::set<std::string> notfound;
|
||||
|
||||
// expected and correct folder sctructure is to have
|
||||
// three folders in widnlight's root: days, water, skies
|
||||
std::string base_path(gDirUtilp->getDirName(path));
|
||||
std::string water_path(base_path);
|
||||
std::string sky_path(base_path);
|
||||
std::string day_path(base_path);
|
||||
|
||||
gDirUtilp->append(water_path, "water");
|
||||
gDirUtilp->append(sky_path, "skies");
|
||||
gDirUtilp->append(day_path, "days");
|
||||
|
||||
if (!gDirUtilp->fileExists(day_path))
|
||||
{
|
||||
LL_WARNS("SETTINGS") << "File " << name << ".xml is not in \"days\" folder." << LL_ENDL;
|
||||
}
|
||||
|
||||
if (!gDirUtilp->fileExists(water_path))
|
||||
{
|
||||
LL_WARNS("SETTINGS") << "Failed to find accompaniying water folder for file " << name
|
||||
<< ".xml. Falling back to using default folder" << LL_ENDL;
|
||||
|
||||
water_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight");
|
||||
gDirUtilp->append(water_path, "water");
|
||||
}
|
||||
|
||||
if (!gDirUtilp->fileExists(sky_path))
|
||||
{
|
||||
LL_WARNS("SETTINGS") << "Failed to find accompaniying skies folder for file " << name
|
||||
<< ".xml. Falling back to using default folder" << LL_ENDL;
|
||||
|
||||
sky_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight");
|
||||
gDirUtilp->append(sky_path, "skies");
|
||||
}
|
||||
|
||||
newsettings[SETTING_NAME] = name;
|
||||
|
||||
|
|
|
|||
|
|
@ -1062,7 +1062,7 @@ bool idle_startup()
|
|||
{
|
||||
// Generic failure message
|
||||
std::ostringstream emsg;
|
||||
emsg << LLTrans::getString("LoginFailed") << "\n";
|
||||
emsg << LLTrans::getString("LoginFailedHeader") << "\n";
|
||||
if(LLLoginInstance::getInstance()->authFailure())
|
||||
{
|
||||
LL_INFOS("LLStartup") << "Login failed, LLLoginInstance::getResponse(): "
|
||||
|
|
@ -1075,11 +1075,37 @@ bool idle_startup()
|
|||
std::string message_id = response["message_id"];
|
||||
std::string message; // actual string to show the user
|
||||
|
||||
if(!message_id.empty() && LLTrans::findString(message, message_id, response["message_args"]))
|
||||
{
|
||||
// message will be filled in with the template and arguments
|
||||
}
|
||||
else if(!message_response.empty())
|
||||
bool localized_by_id = false;
|
||||
if(!message_id.empty())
|
||||
{
|
||||
LLSD message_args = response["message_args"];
|
||||
if (message_args.has("TIME")
|
||||
&& (message_id == "LoginFailedAcountSuspended"
|
||||
|| message_id == "LoginFailedAccountMaintenance"))
|
||||
{
|
||||
LLDate date;
|
||||
std::string time_string;
|
||||
if (date.fromString(message_args["TIME"].asString()))
|
||||
{
|
||||
LLSD args;
|
||||
args["datetime"] = (S32)date.secondsSinceEpoch();
|
||||
LLTrans::findString(time_string, "LocalTime", args);
|
||||
}
|
||||
else
|
||||
{
|
||||
time_string = message_args["TIME"].asString() + " " + LLTrans::getString("PacificTime");
|
||||
}
|
||||
|
||||
message_args["TIME"] = time_string;
|
||||
}
|
||||
// message will be filled in with the template and arguments
|
||||
if (LLTrans::findString(message, message_id, message_args))
|
||||
{
|
||||
localized_by_id = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!localized_by_id && !message_response.empty())
|
||||
{
|
||||
// *HACK: "no_inventory_host" sent as the message itself.
|
||||
// Remove this clause when server is sending message_id as well.
|
||||
|
|
|
|||
|
|
@ -202,6 +202,7 @@ LLContextMenu* gDetachBodyPartPieMenus[9];
|
|||
|
||||
// File Menu
|
||||
void handle_compress_image(void*);
|
||||
void handle_compress_file_test(void*);
|
||||
|
||||
|
||||
// Edit menu
|
||||
|
|
@ -2171,6 +2172,21 @@ class LLAdvancedCompressImage : public view_listener_t
|
|||
};
|
||||
|
||||
|
||||
|
||||
////////////////////////
|
||||
// COMPRESS FILE TEST //
|
||||
////////////////////////
|
||||
|
||||
class LLAdvancedCompressFileTest : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
handle_compress_file_test(NULL);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/////////////////////////
|
||||
// SHOW DEBUG SETTINGS //
|
||||
/////////////////////////
|
||||
|
|
@ -9284,6 +9300,7 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLAdvancedToggleShowObjectUpdates(), "Advanced.ToggleShowObjectUpdates");
|
||||
view_listener_t::addMenu(new LLAdvancedCheckShowObjectUpdates(), "Advanced.CheckShowObjectUpdates");
|
||||
view_listener_t::addMenu(new LLAdvancedCompressImage(), "Advanced.CompressImage");
|
||||
view_listener_t::addMenu(new LLAdvancedCompressFileTest(), "Advanced.CompressFileTest");
|
||||
view_listener_t::addMenu(new LLAdvancedShowDebugSettings(), "Advanced.ShowDebugSettings");
|
||||
view_listener_t::addMenu(new LLAdvancedEnableViewAdminOptions(), "Advanced.EnableViewAdminOptions");
|
||||
view_listener_t::addMenu(new LLAdvancedToggleViewAdminOptions(), "Advanced.ToggleViewAdminOptions");
|
||||
|
|
|
|||
|
|
@ -775,6 +775,94 @@ void handle_compress_image(void*)
|
|||
}
|
||||
}
|
||||
|
||||
// No convinient check in LLFile, and correct way would be something
|
||||
// like GetFileSizeEx, which is too OS specific for current purpose
|
||||
// so doing dirty, but OS independent fopen and fseek
|
||||
size_t get_file_size(std::string &filename)
|
||||
{
|
||||
LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
|
||||
if (!file)
|
||||
{
|
||||
LL_WARNS() << "Error opening " << filename << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// read in the whole file
|
||||
fseek(file, 0L, SEEK_END);
|
||||
size_t file_length = (size_t)ftell(file);
|
||||
fclose(file);
|
||||
return file_length;
|
||||
}
|
||||
|
||||
void handle_compress_file_test(void*)
|
||||
{
|
||||
LLFilePicker& picker = LLFilePicker::instance();
|
||||
if (picker.getOpenFile())
|
||||
{
|
||||
std::string infile = picker.getFirstFile();
|
||||
if (!infile.empty())
|
||||
{
|
||||
std::string packfile = infile + ".pack_test";
|
||||
std::string unpackfile = infile + ".unpack_test";
|
||||
|
||||
S64Bytes initial_size = S64Bytes(get_file_size(infile));
|
||||
|
||||
BOOL success;
|
||||
|
||||
F64 total_seconds = LLTimer::getTotalSeconds();
|
||||
success = gzip_file(infile, packfile);
|
||||
F64 result_pack_seconds = LLTimer::getTotalSeconds() - total_seconds;
|
||||
|
||||
if (success)
|
||||
{
|
||||
S64Bytes packed_size = S64Bytes(get_file_size(packfile));
|
||||
|
||||
LL_INFOS() << "Packing complete, time: " << result_pack_seconds << " size: " << packed_size << LL_ENDL;
|
||||
total_seconds = LLTimer::getTotalSeconds();
|
||||
success = gunzip_file(packfile, unpackfile);
|
||||
F64 result_unpack_seconds = LLTimer::getTotalSeconds() - total_seconds;
|
||||
|
||||
if (success)
|
||||
{
|
||||
S64Bytes unpacked_size = S64Bytes(get_file_size(unpackfile));
|
||||
|
||||
LL_INFOS() << "Unpacking complete, time: " << result_unpack_seconds << " size: " << unpacked_size << LL_ENDL;
|
||||
|
||||
LLSD args;
|
||||
args["FILE"] = infile;
|
||||
args["PACK_TIME"] = result_pack_seconds;
|
||||
args["UNPACK_TIME"] = result_unpack_seconds;
|
||||
args["SIZE"] = LLSD::Integer(initial_size.valueInUnits<LLUnits::Kilobytes>());
|
||||
args["PSIZE"] = LLSD::Integer(packed_size.valueInUnits<LLUnits::Kilobytes>());
|
||||
args["USIZE"] = LLSD::Integer(unpacked_size.valueInUnits<LLUnits::Kilobytes>());
|
||||
LLNotificationsUtil::add("CompressionTestResults", args);
|
||||
|
||||
LLFile::remove(packfile);
|
||||
LLFile::remove(unpackfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Failed to uncompress file: " << packfile << LL_ENDL;
|
||||
LLFile::remove(packfile);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Failed to compres file: " << infile << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Failed to open file" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Failed to open file" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LLUUID upload_new_resource(
|
||||
const std::string& src_filename,
|
||||
|
|
|
|||
|
|
@ -3333,6 +3333,13 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
|
|||
// trigger a control event.
|
||||
U32 control_flags = gAgent.getControlFlags();
|
||||
|
||||
// Rotation into both directions should cancel out
|
||||
U32 mask = AGENT_CONTROL_YAW_POS | AGENT_CONTROL_YAW_NEG;
|
||||
if ((control_flags & mask) == mask)
|
||||
{
|
||||
control_flags &= ~mask;
|
||||
}
|
||||
|
||||
MASK key_mask = gKeyboard->currentMask(TRUE);
|
||||
|
||||
if (key_mask & MASK_ALT || key_mask & MASK_CONTROL)
|
||||
|
|
@ -5796,15 +5803,15 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
|
|||
if (("ScriptTakeMoney" == script_perm.question) && has_not_only_debit)
|
||||
continue;
|
||||
|
||||
if (script_perm.question == "JoinAnExperience")
|
||||
{ // Some experience only permissions do not have an explicit permission bit. Add them here.
|
||||
script_question += " " + LLTrans::getString("ForceSitAvatar") + "\n";
|
||||
if (LLTrans::getString(script_perm.question).empty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
script_question += " " + LLTrans::getString(script_perm.question) + "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
args["QUESTIONS"] = script_question;
|
||||
|
||||
if (known_questions != questions)
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@
|
|||
#ifdef LL_USESYSTEMLIBS
|
||||
#include <zlib.h>
|
||||
#else
|
||||
#include "zlib/zlib.h"
|
||||
#include "zlib-ng/zlib.h"
|
||||
#endif
|
||||
#include "object_flags.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -496,6 +496,7 @@ void send_viewer_stats(bool include_preferences)
|
|||
system["os"] = LLOSInfo::instance().getOSStringSimple();
|
||||
system["cpu"] = gSysCPU.getCPUString();
|
||||
system["address_size"] = ADDRESS_SIZE;
|
||||
system["os_bitness"] = LLOSInfo::instance().getOSBitness();
|
||||
unsigned char MACAddress[MAC_ADDRESS_BYTES];
|
||||
LLUUID::getNodeID(MACAddress);
|
||||
std::string macAddressString = llformat("%02x-%02x-%02x-%02x-%02x-%02x",
|
||||
|
|
|
|||
|
|
@ -2231,6 +2231,7 @@ void LLViewerWindow::initWorldUI()
|
|||
gStatusBar->setShape(status_bar_container->getLocalRect());
|
||||
// sync bg color with menu bar
|
||||
gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() );
|
||||
// add InBack so that gStatusBar won't be drawn over menu
|
||||
status_bar_container->addChildInBack(gStatusBar);
|
||||
status_bar_container->setVisible(TRUE);
|
||||
|
||||
|
|
@ -3211,6 +3212,11 @@ void LLViewerWindow::handleScrollWheel(S32 clicks)
|
|||
|
||||
void LLViewerWindow::handleScrollHWheel(S32 clicks)
|
||||
{
|
||||
if (LLAppViewer::instance()->quitRequested())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLUI::getInstance()->resetMouseIdleTimer();
|
||||
|
||||
LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
|
||||
|
|
|
|||
|
|
@ -658,7 +658,47 @@ void LLVivoxVoiceClient::idle(void* user_data)
|
|||
// of a coroutine.
|
||||
//
|
||||
//
|
||||
|
||||
typedef enum e_voice_control_coro_state
|
||||
{
|
||||
VOICE_STATE_ERROR = -1,
|
||||
VOICE_STATE_DONE = 0,
|
||||
VOICE_STATE_TP_WAIT, // entry point
|
||||
VOICE_STATE_START_DAEMON,
|
||||
VOICE_STATE_PROVISION_ACCOUNT,
|
||||
VOICE_STATE_START_SESSION,
|
||||
VOICE_STATE_SESSION_RETRY,
|
||||
VOICE_STATE_SESSION_ESTABLISHED,
|
||||
VOICE_STATE_WAIT_FOR_CHANNEL,
|
||||
VOICE_STATE_DISCONNECT,
|
||||
VOICE_STATE_WAIT_FOR_EXIT,
|
||||
} EVoiceControlCoroState;
|
||||
|
||||
void LLVivoxVoiceClient::voiceControlCoro()
|
||||
{
|
||||
int state = 0;
|
||||
try
|
||||
{
|
||||
// state is passed as a reference instead of being
|
||||
// a member due to unresolved issues with coroutine
|
||||
// surviving longer than LLVivoxVoiceClient
|
||||
voiceControlStateMachine(state);
|
||||
}
|
||||
catch (const LLContinueError&)
|
||||
{
|
||||
LOG_UNHANDLED_EXCEPTION("LLVivoxVoiceClient");
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
// Ideally for Windows need to log SEH exception instead or to set SEH
|
||||
// handlers but bugsplat shows local variables for windows, which should
|
||||
// be enough
|
||||
LL_WARNS("Voice") << "voiceControlStateMachine crashed in state " << state << LL_ENDL;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
void LLVivoxVoiceClient::voiceControlStateMachine(S32 &coro_state)
|
||||
{
|
||||
LL_DEBUGS("Voice") << "starting" << LL_ENDL;
|
||||
mIsCoroutineActive = true;
|
||||
|
|
@ -666,114 +706,159 @@ void LLVivoxVoiceClient::voiceControlCoro()
|
|||
|
||||
U32 retry = 0;
|
||||
|
||||
while (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE && !sShuttingDown)
|
||||
{
|
||||
LL_DEBUGS("Voice") << "Suspending voiceControlCoro() momentarily for teleport. Tuning: " << mTuningMode << ". Relog: " << mRelogRequested << LL_ENDL;
|
||||
llcoro::suspendUntilTimeout(1.0);
|
||||
}
|
||||
|
||||
if (sShuttingDown)
|
||||
{
|
||||
mIsCoroutineActive = false;
|
||||
return;
|
||||
}
|
||||
coro_state = VOICE_STATE_TP_WAIT;
|
||||
|
||||
do
|
||||
{
|
||||
bool success = startAndConnectSession();
|
||||
if (success)
|
||||
if (sShuttingDown)
|
||||
{
|
||||
// enable/disable the automatic VAD and explicitly set the initial values of
|
||||
// the VAD variables ourselves when it is off - see SL-15072 for more details
|
||||
// note: we set the other parameters too even if the auto VAD is on which is ok
|
||||
unsigned int vad_auto = gSavedSettings.getU32("VivoxVadAuto");
|
||||
unsigned int vad_hangover = gSavedSettings.getU32("VivoxVadHangover");
|
||||
unsigned int vad_noise_floor = gSavedSettings.getU32("VivoxVadNoiseFloor");
|
||||
unsigned int vad_sensitivity = gSavedSettings.getU32("VivoxVadSensitivity");
|
||||
setupVADParams(vad_auto, vad_hangover, vad_noise_floor, vad_sensitivity);
|
||||
|
||||
// watch for changes to the VAD settings via Debug Settings UI and act on them accordingly
|
||||
gSavedSettings.getControl("VivoxVadAuto")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this));
|
||||
gSavedSettings.getControl("VivoxVadHangover")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this));
|
||||
gSavedSettings.getControl("VivoxVadNoiseFloor")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this));
|
||||
gSavedSettings.getControl("VivoxVadSensitivity")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this));
|
||||
|
||||
if (mTuningMode && !sShuttingDown)
|
||||
{
|
||||
performMicTuning();
|
||||
}
|
||||
|
||||
if (!sShuttingDown)
|
||||
{
|
||||
waitForChannel(); // this doesn't normally return unless relog is needed or shutting down
|
||||
}
|
||||
|
||||
LL_DEBUGS("Voice") << "lost channel RelogRequested=" << mRelogRequested << LL_ENDL;
|
||||
endAndDisconnectSession();
|
||||
retry = 0;
|
||||
// Vivox singleton performed the exit, logged out,
|
||||
// cleaned sockets, gateway and no longer cares
|
||||
// about state of coroutine, so just stop
|
||||
return;
|
||||
}
|
||||
|
||||
// if we hit this and mRelogRequested is true, that indicates
|
||||
// that we attempted to relog into Vivox and were rejected.
|
||||
// Rather than just quit out of voice, we will tear it down (above)
|
||||
// and then reconstruct the voice connecion from scratch.
|
||||
LL_DEBUGS("Voice")
|
||||
<< "disconnected"
|
||||
<< " RelogRequested=" << mRelogRequested
|
||||
<< LL_ENDL;
|
||||
if (mRelogRequested && !sShuttingDown)
|
||||
|
||||
switch (coro_state)
|
||||
{
|
||||
if (!success)
|
||||
case VOICE_STATE_TP_WAIT:
|
||||
// starting point for voice
|
||||
if (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE)
|
||||
{
|
||||
// We failed to connect, give it a bit time before retrying.
|
||||
retry++;
|
||||
F32 delay = llmin(5.f * (F32)retry, 60.f);
|
||||
llcoro::suspendUntilTimeout(delay);
|
||||
LL_INFOS("Voice") << "Voice failed to establish session after " << retry << " tries. Will attempt to reconnect." << LL_ENDL;
|
||||
LL_DEBUGS("Voice") << "Suspending voiceControlCoro() momentarily for teleport. Tuning: " << mTuningMode << ". Relog: " << mRelogRequested << LL_ENDL;
|
||||
llcoro::suspendUntilTimeout(1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS("Voice") << "will attempt to reconnect to voice" << LL_ENDL;
|
||||
coro_state = VOICE_STATE_START_DAEMON;
|
||||
}
|
||||
break;
|
||||
|
||||
while (isGatewayRunning() || (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE && !sShuttingDown))
|
||||
case VOICE_STATE_START_DAEMON:
|
||||
LL_DEBUGS("Voice") << "Launching daemon" << LL_ENDL;
|
||||
LLVoiceVivoxStats::getInstance()->reset();
|
||||
if (startAndLaunchDaemon())
|
||||
{
|
||||
coro_state = VOICE_STATE_PROVISION_ACCOUNT;
|
||||
}
|
||||
else
|
||||
{
|
||||
coro_state = VOICE_STATE_SESSION_RETRY;
|
||||
}
|
||||
break;
|
||||
|
||||
case VOICE_STATE_PROVISION_ACCOUNT:
|
||||
if (provisionVoiceAccount())
|
||||
{
|
||||
coro_state = VOICE_STATE_START_SESSION;
|
||||
}
|
||||
else
|
||||
{
|
||||
coro_state = VOICE_STATE_SESSION_RETRY;
|
||||
}
|
||||
break;
|
||||
|
||||
case VOICE_STATE_START_SESSION:
|
||||
if (establishVoiceConnection())
|
||||
{
|
||||
coro_state = VOICE_STATE_SESSION_ESTABLISHED;
|
||||
}
|
||||
else
|
||||
{
|
||||
coro_state = VOICE_STATE_SESSION_RETRY;
|
||||
}
|
||||
break;
|
||||
|
||||
case VOICE_STATE_SESSION_RETRY:
|
||||
giveUp(); // cleans sockets and session
|
||||
if (mRelogRequested)
|
||||
{
|
||||
// We failed to connect, give it a bit time before retrying.
|
||||
retry++;
|
||||
F32 full_delay = llmin(5.f * (F32)retry, 60.f);
|
||||
F32 current_delay = 0.f;
|
||||
LL_INFOS("Voice") << "Voice failed to establish session after " << retry
|
||||
<< " tries. Will attempt to reconnect in " << full_delay
|
||||
<< " seconds" << LL_ENDL;
|
||||
while (current_delay < full_delay && !sShuttingDown)
|
||||
{
|
||||
// Assuming that a second has passed is not accurate,
|
||||
// but we don't need accurancy here, just to make sure
|
||||
// that some time passed and not to outlive voice itself
|
||||
current_delay++;
|
||||
llcoro::suspendUntilTimeout(1.f);
|
||||
}
|
||||
coro_state = VOICE_STATE_WAIT_FOR_EXIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
coro_state = VOICE_STATE_DONE;
|
||||
}
|
||||
break;
|
||||
|
||||
case VOICE_STATE_SESSION_ESTABLISHED:
|
||||
{
|
||||
// enable/disable the automatic VAD and explicitly set the initial values of
|
||||
// the VAD variables ourselves when it is off - see SL-15072 for more details
|
||||
// note: we set the other parameters too even if the auto VAD is on which is ok
|
||||
unsigned int vad_auto = gSavedSettings.getU32("VivoxVadAuto");
|
||||
unsigned int vad_hangover = gSavedSettings.getU32("VivoxVadHangover");
|
||||
unsigned int vad_noise_floor = gSavedSettings.getU32("VivoxVadNoiseFloor");
|
||||
unsigned int vad_sensitivity = gSavedSettings.getU32("VivoxVadSensitivity");
|
||||
setupVADParams(vad_auto, vad_hangover, vad_noise_floor, vad_sensitivity);
|
||||
|
||||
// watch for changes to the VAD settings via Debug Settings UI and act on them accordingly
|
||||
gSavedSettings.getControl("VivoxVadAuto")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this));
|
||||
gSavedSettings.getControl("VivoxVadHangover")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this));
|
||||
gSavedSettings.getControl("VivoxVadNoiseFloor")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this));
|
||||
gSavedSettings.getControl("VivoxVadSensitivity")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this));
|
||||
|
||||
if (mTuningMode)
|
||||
{
|
||||
performMicTuning();
|
||||
}
|
||||
|
||||
coro_state = VOICE_STATE_WAIT_FOR_CHANNEL;
|
||||
}
|
||||
break;
|
||||
|
||||
case VOICE_STATE_WAIT_FOR_CHANNEL:
|
||||
waitForChannel(); // todo: split into more states like login/fonts
|
||||
coro_state = VOICE_STATE_DISCONNECT;
|
||||
break;
|
||||
|
||||
case VOICE_STATE_DISCONNECT:
|
||||
LL_DEBUGS("Voice") << "lost channel RelogRequested=" << mRelogRequested << LL_ENDL;
|
||||
endAndDisconnectSession();
|
||||
retry = 0; // Connected without issues
|
||||
coro_state = VOICE_STATE_WAIT_FOR_EXIT;
|
||||
break;
|
||||
|
||||
case VOICE_STATE_WAIT_FOR_EXIT:
|
||||
if (isGatewayRunning())
|
||||
{
|
||||
LL_INFOS("Voice") << "waiting for SLVoice to exit" << LL_ENDL;
|
||||
llcoro::suspendUntilTimeout(1.0);
|
||||
}
|
||||
else if (mRelogRequested && mVoiceEnabled)
|
||||
{
|
||||
LL_INFOS("Voice") << "will attempt to reconnect to voice" << LL_ENDL;
|
||||
coro_state = VOICE_STATE_TP_WAIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
coro_state = VOICE_STATE_DONE;
|
||||
}
|
||||
break;
|
||||
|
||||
case VOICE_STATE_DONE:
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (mVoiceEnabled && mRelogRequested && !sShuttingDown);
|
||||
} while (coro_state > 0);
|
||||
|
||||
mIsCoroutineActive = false;
|
||||
LL_INFOS("Voice") << "exiting" << LL_ENDL;
|
||||
}
|
||||
|
||||
bool LLVivoxVoiceClient::startAndConnectSession()
|
||||
{
|
||||
bool ok = false;
|
||||
LL_DEBUGS("Voice") << LL_ENDL;
|
||||
|
||||
LLVoiceVivoxStats::getInstance()->reset();
|
||||
|
||||
if (startAndLaunchDaemon())
|
||||
{
|
||||
if (provisionVoiceAccount())
|
||||
{
|
||||
if (establishVoiceConnection())
|
||||
{
|
||||
ok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
giveUp();
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool LLVivoxVoiceClient::endAndDisconnectSession()
|
||||
{
|
||||
LL_DEBUGS("Voice") << LL_ENDL;
|
||||
|
|
@ -1047,7 +1132,7 @@ bool LLVivoxVoiceClient::provisionVoiceAccount()
|
|||
if (status == LLCore::HttpStatus(404))
|
||||
{
|
||||
F32 timeout = pow(PROVISION_RETRY_TIMEOUT, static_cast<float>(retryCount));
|
||||
LL_WARNS("Voice") << "Provision CAP 404. Retrying in " << timeout << " seconds." << LL_ENDL;
|
||||
LL_WARNS("Voice") << "Provision CAP 404. Retrying in " << timeout << " seconds. Retries: " << (S32)retryCount << LL_ENDL;
|
||||
if (sShuttingDown)
|
||||
{
|
||||
return false;
|
||||
|
|
@ -1798,7 +1883,6 @@ bool LLVivoxVoiceClient::waitForChannel()
|
|||
|
||||
if (sShuttingDown)
|
||||
{
|
||||
logoutOfVivox(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1806,6 +1890,11 @@ bool LLVivoxVoiceClient::waitForChannel()
|
|||
{
|
||||
retrieveVoiceFonts();
|
||||
|
||||
if (sShuttingDown)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Request the set of available voice fonts.
|
||||
refreshVoiceEffectLists(false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -626,8 +626,8 @@ private:
|
|||
// Coroutine support methods
|
||||
//---
|
||||
void voiceControlCoro();
|
||||
void voiceControlStateMachine(S32 &coro_state);
|
||||
|
||||
bool startAndConnectSession();
|
||||
bool endAndDisconnectSession();
|
||||
|
||||
bool callbackEndDaemon(const LLSD& data);
|
||||
|
|
|
|||
|
|
@ -611,8 +611,7 @@ with the same filename but different name
|
|||
|
||||
<texture name="login_sl_logo" file_name="windows/login_sl_logo.png" preload="true" />
|
||||
<texture name="login_sl_logo_small" file_name="windows/login_sl_logo_small.png" preload="true" />
|
||||
<texture name="first_login_image_left" file_name="windows/first_login_image_left.png" preload="true" />
|
||||
<texture name="first_login_image_right" file_name="windows/first_login_image_right.png" preload="true" />
|
||||
<texture name="first_login_image" file_name="windows/first_login_image.jpg" preload="true" />
|
||||
|
||||
<texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" />
|
||||
<texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="false" />
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 102 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 265 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 358 KiB |
|
|
@ -109,7 +109,7 @@
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Netværksfejl: Kunne ikke etablere forbindelse, check venligst din netværksforbindelse.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Login fejlede.
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ Voice-Server-Version: [VOICE_VERSION]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Netzwerkfehler: Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Netzwerkverbindung.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Anmeldung fehlgeschlagen
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@
|
|||
left_pad="2"
|
||||
name="Description"
|
||||
spellcheck="true"
|
||||
parse_urls="true"
|
||||
top_delta="0"
|
||||
width="365"
|
||||
word_wrap="true" />
|
||||
|
|
|
|||
|
|
@ -8,6 +8,15 @@
|
|||
tab_stop="false"
|
||||
name="main_view"
|
||||
width="1024">
|
||||
|
||||
<!-- At the moment layout_stack is not an LLUICtrl,
|
||||
but Tab requires focus_root to function and focus_root
|
||||
functionality is implemented in LLUICtrl -->
|
||||
<panel follows="all"
|
||||
height="768"
|
||||
name="menu_tab_wrapper"
|
||||
focus_root="true"
|
||||
top="0">
|
||||
<layout_stack border_size="0"
|
||||
follows="all"
|
||||
mouse_opaque="false"
|
||||
|
|
@ -18,12 +27,12 @@
|
|||
<layout_panel mouse_opaque="true"
|
||||
follows="left|right|top"
|
||||
name="status_bar_container"
|
||||
tab_stop="false"
|
||||
height="19"
|
||||
left="0"
|
||||
top="0"
|
||||
width="1024"
|
||||
auto_resize="false"
|
||||
default_tab_group="1"
|
||||
visible="true">
|
||||
<view mouse_opaque="false"
|
||||
follows="all"
|
||||
|
|
@ -31,13 +40,13 @@
|
|||
left="0"
|
||||
top="0"
|
||||
width="1024"
|
||||
tab_group="1"
|
||||
height="19"/>
|
||||
</layout_panel>
|
||||
<layout_panel auto_resize="false"
|
||||
height="34"
|
||||
mouse_opaque="false"
|
||||
name="nav_bar_container"
|
||||
tab_stop="false"
|
||||
width="1024"
|
||||
visible="false"/>
|
||||
<layout_panel auto_resize="true"
|
||||
|
|
@ -99,6 +108,7 @@
|
|||
tab_stop="false"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel> <!--menu_tab_wrapper-->
|
||||
|
||||
<panel top="0"
|
||||
follows="all"
|
||||
|
|
|
|||
|
|
@ -3883,6 +3883,12 @@ function="World.EnvPreset"
|
|||
<menu_item_call.on_click
|
||||
function="Advanced.CompressImage" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Compress File Test"
|
||||
name="Compress File Test">
|
||||
<menu_item_call.on_click
|
||||
function="Advanced.CompressFileTest" />
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_call
|
||||
label="Enable Visual Leak Detector"
|
||||
|
|
|
|||
|
|
@ -11777,5 +11777,15 @@ Unable to load the track into [TRACK].
|
|||
Unable to load the track from [TRACK1] into [TRACK2].
|
||||
<tag>fail</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="CompressionTestResults"
|
||||
type="alertmodal">
|
||||
Test result for gzip level 6 file compression with [FILE] of size [SIZE] KB:
|
||||
Packing: [PACK_TIME]s [PSIZE]KB
|
||||
Unpacking: [UNPACK_TIME]s [USIZE]KB
|
||||
<tag>fail</tag>
|
||||
</notification>
|
||||
|
||||
</notifications>
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ Hover your mouse over the options for more help.
|
|||
layout="topleft"
|
||||
max_length="511"
|
||||
name="charter"
|
||||
parse_urls="true"
|
||||
top="105"
|
||||
right="-4"
|
||||
bg_readonly_color="DkGray2"
|
||||
|
|
|
|||
|
|
@ -216,24 +216,17 @@
|
|||
auto_resize="false"
|
||||
follows="left|right|top"
|
||||
name="images_container"
|
||||
width="832"
|
||||
width="675"
|
||||
left="0"
|
||||
top="0"
|
||||
height="500">
|
||||
<icon
|
||||
height="400"
|
||||
width="400"
|
||||
image_name="first_login_image_left"
|
||||
height="450"
|
||||
width="675"
|
||||
image_name="first_login_image"
|
||||
left="0"
|
||||
name="image_left"
|
||||
top="0" />
|
||||
<icon
|
||||
height="400"
|
||||
width="400"
|
||||
image_name="first_login_image_right"
|
||||
left_pad="32"
|
||||
name="image_right"
|
||||
top="0" />
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
height="100"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
background_visible="true"
|
||||
bg_opaque_color="MouseGray"
|
||||
follows="left|top|right"
|
||||
focus_root="true"
|
||||
height="34"
|
||||
layout="topleft"
|
||||
name="navigation_bar"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
mouse_opaque="false"
|
||||
name="status"
|
||||
top="19"
|
||||
tab_stop="false"
|
||||
width="1000">
|
||||
<panel.string
|
||||
name="packet_loss_tooltip">
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ Voice Server Version: [VOICE_VERSION]
|
|||
</string>
|
||||
<string name="AboutTraffic">Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)</string>
|
||||
<string name="AboutTime">[month, datetime, slt] [day, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second,datetime,slt]</string>
|
||||
<string name="LocalTime">[month, datetime, local] [day, datetime, local] [year, datetime, local] [hour, datetime, local]:[min, datetime, local]:[second,datetime, local]</string>
|
||||
<string name="ErrorFetchingServerReleaseNotesURL">Error fetching server release notes URL.</string>
|
||||
<string name="BuildConfiguration">Build Configuration</string>
|
||||
|
||||
|
|
@ -112,7 +113,7 @@ Voice Server Version: [VOICE_VERSION]
|
|||
<string name="CertAllocationFailure">Failed to allocate openssl memory for certificate.</string>
|
||||
|
||||
<string name="LoginFailedNoNetwork">Network error: Could not establish connection, please check your network connection.</string>
|
||||
<string name="LoginFailed">Login failed.</string>
|
||||
<string name="LoginFailedHeader">Login failed.</string>
|
||||
<string name="Quit">Quit</string>
|
||||
<string name="create_account_url">http://join.secondlife.com/?sourceid=[sourceid]</string>
|
||||
|
||||
|
|
@ -126,6 +127,8 @@ http://secondlife.com/download
|
|||
|
||||
For more information, see our FAQ below:
|
||||
http://secondlife.com/viewer-access-faq</string>
|
||||
<string name="LoginFailed">Grid emergency login failure.
|
||||
If you feel this is an error, please contact support@secondlife.com.</string>
|
||||
<string name="LoginIntermediateOptionalUpdateAvailable">Optional viewer update available: [VERSION]</string>
|
||||
<string name="LoginFailedRequiredUpdate">Required viewer update: [VERSION]</string>
|
||||
<string name="LoginFailedAlreadyLoggedIn">This agent is already logged in.
|
||||
|
|
@ -152,15 +155,18 @@ People with free accounts will not be able to access Second Life during this tim
|
|||
<string name="LoginFailedComputerProhibited">Second Life cannot be accessed from this computer.
|
||||
If you feel this is an error, please contact
|
||||
support@secondlife.com.</string>
|
||||
<!--'Pacific time' placeholder for [TIME] in case time from server can't be decoded-->
|
||||
<string name="PacificTime">Pacific Time</string>
|
||||
<string name="LoginFailedAcountSuspended">Your account is not accessible until
|
||||
[TIME] Pacific Time.</string>
|
||||
[TIME].
|
||||
If you feel this is an error, please contact support@secondlife.com.</string>
|
||||
<string name="LoginFailedAccountDisabled">We are unable to complete your request at this time.
|
||||
Please contact Second Life support for assistance at http://support.secondlife.com.</string>
|
||||
<string name="LoginFailedTransformError">Data inconsistency found during login.
|
||||
Please contact support@secondlife.com.</string>
|
||||
<string name="LoginFailedAccountMaintenance">Your account is undergoing minor maintenance.
|
||||
Your account is not accessible until
|
||||
[TIME] Pacific Time.
|
||||
[TIME].
|
||||
If you feel this is an error, please contact support@secondlife.com.</string>
|
||||
<string name="LoginFailedPendingLogoutFault">Request for logout responded with a fault from simulator.</string>
|
||||
<string name="LoginFailedPendingLogout">The system is logging you out right now.
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ Versión del servidor de voz: [VOICE_VERSION]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Error de red: no se ha podido conectar; por favor, revisa tu conexión a internet.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Error en el inicio de sesión.
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ Voice Server Version: [VOICE_VERSION]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Erreur réseau : impossible d'établir la connexion. Veuillez vérifier votre connexion réseau.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Échec de la connexion.
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ Versione server voce: [VOICE_VERSION]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Errore di rete: Non è stato possibile stabilire un collegamento, controlla la tua connessione.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Accesso non riuscito.
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ VFS(キャッシュ)作成時間: [VFS_TIME]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
ネットワークエラー:接続を確立できませんでした。お使いのネットワーク接続をご確認ください。
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
ログインに失敗しました。
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ Wersja serwera głosu (Voice Server): [VOICE_VERSION]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Błąd sieci: Brak połączenia z siecią, sprawdź status swojego połączenia internetowego.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Logowanie nie powiodło się.
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ Versão do servidor de voz: [VOICE_VERSION]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Erro de rede: Falha de conexão: verifique sua conexão à internet.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Falha do login.
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ SLURL: <nolink>[SLURL]</nolink>
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Ошибка сети: не удалось установить соединение. Проверьте подключение к сети.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Ошибка входа.
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ Ses Sunucusu Sürümü: [VOICE_VERSION]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
Ağ hatası: Bağlantı kurulamadı, lütfen ağ bağlantınızı kontrol edin.
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
Oturum açılamadı.
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ LibVLC版本:[LIBVLC_VERSION]N]
|
|||
<string name="LoginFailedNoNetwork">
|
||||
網路錯誤:無法建立連線,請檢查網路連線是否正常。
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
<string name="LoginFailedHeader">
|
||||
登入失敗。
|
||||
</string>
|
||||
<string name="Quit">
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ void LLSecAPIBasicHandler::init() {}
|
|||
LLSecAPIBasicHandler::~LLSecAPIBasicHandler() {}
|
||||
LLPointer<LLCertificate> LLSecAPIBasicHandler::getCertificate(const std::string& pem_cert) { return NULL; }
|
||||
LLPointer<LLCertificate> LLSecAPIBasicHandler::getCertificate(X509* openssl_cert) { return NULL; }
|
||||
LLPointer<LLCertificateChain> LLSecAPIBasicHandler::getCertificateChain(const X509_STORE_CTX* chain) { return NULL; }
|
||||
LLPointer<LLCertificateChain> LLSecAPIBasicHandler::getCertificateChain(X509_STORE_CTX* chain) { return NULL; }
|
||||
LLPointer<LLCertificateStore> LLSecAPIBasicHandler::getCertificateStore(const std::string& store_id) { return NULL; }
|
||||
void LLSecAPIBasicHandler::setProtectedData(const std::string& data_type, const std::string& data_id, const LLSD& data) {}
|
||||
void LLSecAPIBasicHandler::addToProtectedMap(const std::string& data_type, const std::string& data_id, const std::string& map_elem, const LLSD& data) {}
|
||||
|
|
|
|||
|
|
@ -1217,8 +1217,8 @@ namespace tut
|
|||
|
||||
// Single cert in the chain.
|
||||
X509_STORE_CTX *test_store = X509_STORE_CTX_new();
|
||||
test_store->cert = mX509ChildCert;
|
||||
test_store->untrusted = NULL;
|
||||
X509_STORE_CTX_set_cert(test_store, mX509ChildCert);
|
||||
X509_STORE_CTX_set0_untrusted(test_store, NULL);
|
||||
test_chain = new LLBasicCertificateChain(test_store);
|
||||
X509_STORE_CTX_free(test_store);
|
||||
ensure_equals("two elements in store", test_chain->size(), 1);
|
||||
|
|
@ -1229,9 +1229,9 @@ namespace tut
|
|||
// cert + CA
|
||||
|
||||
test_store = X509_STORE_CTX_new();
|
||||
test_store->cert = mX509ChildCert;
|
||||
test_store->untrusted = sk_X509_new_null();
|
||||
sk_X509_push(test_store->untrusted, mX509IntermediateCert);
|
||||
X509_STORE_CTX_set_cert(test_store, mX509ChildCert);
|
||||
X509_STORE_CTX_set0_untrusted(test_store, sk_X509_new_null());
|
||||
sk_X509_push(X509_STORE_CTX_get0_untrusted(test_store), mX509IntermediateCert);
|
||||
test_chain = new LLBasicCertificateChain(test_store);
|
||||
X509_STORE_CTX_free(test_store);
|
||||
ensure_equals("two elements in store", test_chain->size(), 2);
|
||||
|
|
@ -1245,9 +1245,9 @@ namespace tut
|
|||
// cert + nonrelated
|
||||
|
||||
test_store = X509_STORE_CTX_new();
|
||||
test_store->cert = mX509ChildCert;
|
||||
test_store->untrusted = sk_X509_new_null();
|
||||
sk_X509_push(test_store->untrusted, mX509TestCert);
|
||||
X509_STORE_CTX_set_cert(test_store, mX509ChildCert);
|
||||
X509_STORE_CTX_set0_untrusted(test_store, sk_X509_new_null());
|
||||
sk_X509_push(X509_STORE_CTX_get0_untrusted(test_store), mX509TestCert);
|
||||
test_chain = new LLBasicCertificateChain(test_store);
|
||||
X509_STORE_CTX_free(test_store);
|
||||
ensure_equals("two elements in store", test_chain->size(), 1);
|
||||
|
|
@ -1257,10 +1257,10 @@ namespace tut
|
|||
|
||||
// cert + CA + nonrelated
|
||||
test_store = X509_STORE_CTX_new();
|
||||
test_store->cert = mX509ChildCert;
|
||||
test_store->untrusted = sk_X509_new_null();
|
||||
sk_X509_push(test_store->untrusted, mX509IntermediateCert);
|
||||
sk_X509_push(test_store->untrusted, mX509TestCert);
|
||||
X509_STORE_CTX_set_cert(test_store, mX509ChildCert);
|
||||
X509_STORE_CTX_set0_untrusted(test_store, sk_X509_new_null());
|
||||
sk_X509_push(X509_STORE_CTX_get0_untrusted(test_store), mX509IntermediateCert);
|
||||
sk_X509_push(X509_STORE_CTX_get0_untrusted(test_store), mX509TestCert);
|
||||
test_chain = new LLBasicCertificateChain(test_store);
|
||||
X509_STORE_CTX_free(test_store);
|
||||
ensure_equals("two elements in store", test_chain->size(), 2);
|
||||
|
|
@ -1273,10 +1273,10 @@ namespace tut
|
|||
|
||||
// cert + intermediate + CA
|
||||
test_store = X509_STORE_CTX_new();
|
||||
test_store->cert = mX509ChildCert;
|
||||
test_store->untrusted = sk_X509_new_null();
|
||||
sk_X509_push(test_store->untrusted, mX509IntermediateCert);
|
||||
sk_X509_push(test_store->untrusted, mX509RootCert);
|
||||
X509_STORE_CTX_set_cert(test_store, mX509ChildCert);
|
||||
X509_STORE_CTX_set0_untrusted(test_store, sk_X509_new_null());
|
||||
sk_X509_push(X509_STORE_CTX_get0_untrusted(test_store), mX509IntermediateCert);
|
||||
sk_X509_push(X509_STORE_CTX_get0_untrusted(test_store), mX509RootCert);
|
||||
test_chain = new LLBasicCertificateChain(test_store);
|
||||
X509_STORE_CTX_free(test_store);
|
||||
ensure_equals("three elements in store", test_chain->size(), 3);
|
||||
|
|
|
|||
|
|
@ -553,9 +553,13 @@ class WindowsManifest(ViewerManifest):
|
|||
self.path("vivoxsdk.dll")
|
||||
self.path("ortp.dll")
|
||||
|
||||
# Security
|
||||
self.path("ssleay32.dll")
|
||||
self.path("libeay32.dll")
|
||||
# OpenSSL
|
||||
if (self.address_size == 64):
|
||||
self.path("libcrypto-1_1-x64.dll")
|
||||
self.path("libssl-1_1-x64.dll")
|
||||
else:
|
||||
self.path("libcrypto-1_1.dll")
|
||||
self.path("libssl-1_1.dll")
|
||||
|
||||
# HTTP/2
|
||||
self.path("nghttp2.dll")
|
||||
|
|
@ -1025,7 +1029,6 @@ class DarwinManifest(ViewerManifest):
|
|||
"libapr-1.0.dylib",
|
||||
"libaprutil-1.0.dylib",
|
||||
"libexpat.1.dylib",
|
||||
"libexception_handler.dylib",
|
||||
"libGLOD.dylib",
|
||||
# libnghttp2.dylib is a symlink to
|
||||
# libnghttp2.major.dylib, which is a symlink to
|
||||
|
|
|
|||
|
|
@ -1,105 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
project(win_crash_logger)
|
||||
|
||||
include(00-Common)
|
||||
include(LLCommon)
|
||||
include(LLCoreHttp)
|
||||
include(LLCrashLogger)
|
||||
include(LLMath)
|
||||
include(LLMessage)
|
||||
include(LLVFS)
|
||||
include(LLWindow)
|
||||
include(LLXML)
|
||||
include(Linking)
|
||||
include(LLSharedLibs)
|
||||
include(GoogleBreakpad)
|
||||
include(Boost)
|
||||
|
||||
include_directories(
|
||||
${LLCOREHTTP_INCLUDE_DIRS}
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
${LLCRASHLOGGER_INCLUDE_DIRS}
|
||||
${LLMATH_INCLUDE_DIRS}
|
||||
${LLWINDOW_INCLUDE_DIRS}
|
||||
${LLXML_INCLUDE_DIRS}
|
||||
${LLVFS_INCLUDE_DIRS}
|
||||
${BREAKPAD_INCLUDE_DIRECTORIES}
|
||||
)
|
||||
include_directories(SYSTEM
|
||||
${LLCOMMON_SYSTEM_INCLUDE_DIRS}
|
||||
${LLXML_SYSTEM_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
set(win_crash_logger_SOURCE_FILES
|
||||
win_crash_logger.cpp
|
||||
llcrashloggerwindows.cpp
|
||||
)
|
||||
|
||||
set(win_crash_logger_HEADER_FILES
|
||||
CMakeLists.txt
|
||||
|
||||
llcrashloggerwindows.h
|
||||
resource.h
|
||||
StdAfx.h
|
||||
win_crash_logger.h
|
||||
)
|
||||
|
||||
set_source_files_properties(${win_crash_logger_HEADER_FILES}
|
||||
PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
|
||||
set(win_crash_logger_RESOURCE_FILES
|
||||
ll_icon.ico
|
||||
)
|
||||
|
||||
set_source_files_properties(${win_crash_logger_RESOURCE_FILES}
|
||||
PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
|
||||
set(win_crash_logger_RESOURCE_FILES
|
||||
win_crash_logger.rc
|
||||
${win_crash_logger_RESOURCE_FILES}
|
||||
)
|
||||
|
||||
SOURCE_GROUP("Resource Files" FILES ${win_crash_logger_RESOURCE_FILES})
|
||||
|
||||
list(APPEND
|
||||
win_crash_logger_SOURCE_FILES
|
||||
${win_crash_logger_HEADER_FILES}
|
||||
${win_crash_logger_RESOURCE_FILES}
|
||||
)
|
||||
|
||||
add_executable(windows-crash-logger WIN32 ${win_crash_logger_SOURCE_FILES})
|
||||
|
||||
|
||||
target_link_libraries(windows-crash-logger
|
||||
${LEGACY_STDIO_LIBS}
|
||||
${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}
|
||||
${LLCRASHLOGGER_LIBRARIES}
|
||||
${LLWINDOW_LIBRARIES}
|
||||
${LLVFS_LIBRARIES}
|
||||
${LLXML_LIBRARIES}
|
||||
${LLMESSAGE_LIBRARIES}
|
||||
${LLMATH_LIBRARIES}
|
||||
${LLCOREHTTP_LIBRARIES}
|
||||
${LLCOMMON_LIBRARIES}
|
||||
${BOOST_CONTEXT_LIBRARY}
|
||||
${BOOST_FIBER_LIBRARY}
|
||||
${WINDOWS_LIBRARIES}
|
||||
dxguid
|
||||
${GOOGLE_PERFTOOLS_LIBRARIES}
|
||||
user32
|
||||
gdi32
|
||||
oleaut32
|
||||
wininet
|
||||
Wldap32
|
||||
)
|
||||
|
||||
if (WINDOWS)
|
||||
set_target_properties(windows-crash-logger
|
||||
PROPERTIES
|
||||
LINK_FLAGS "/NODEFAULTLIB:LIBCMT"
|
||||
LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\""
|
||||
)
|
||||
endif (WINDOWS)
|
||||
|
||||
ll_deploy_sharedlibs_command(windows-crash-logger)
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
/**
|
||||
* @file StdAfx.cpp
|
||||
* @brief windows crash logger source file for includes
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// win_crash_logger.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: reference any additional headers you need in STDAFX.H
|
||||
// and not in this file
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
/**
|
||||
* @file StdAfx.h
|
||||
* @brief standard system includes
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
|
||||
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
|
||||
// Windows Header Files:
|
||||
#include <windows.h>
|
||||
|
||||
// C RunTime Header Files
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>
|
||||
#include <memory.h>
|
||||
|
||||
// Local Header Files
|
||||
|
||||
// TODO: reference additional headers your program requires here
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||
|
||||
#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue