SL-16220: Merge branch 'master' into sl-16220
commit
14dae8bc8e
372
autobuild.xml
372
autobuild.xml
|
|
@ -76,9 +76,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>9b8bcc3be6dbe40a04c9c81c313f70dc</string>
|
||||
<string>b6357ef3a0ec37877a5831820f25094e</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/68333/658209/apr_suite-1.4.5.548882-darwin64-548882.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/80557/759704/apr_suite-1.4.5.558565-darwin64-558565.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -112,9 +112,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6bdf460c18ee004b41a46afc80041a92</string>
|
||||
<string>cb48ac069440f6dcd564cfa9fd02a4c2</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/68334/658225/apr_suite-1.4.5.548882-windows-548882.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/80556/759710/apr_suite-1.4.5.558565-windows-558565.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -124,16 +124,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>83104bfa4dabb77cd70d185e38a95b49</string>
|
||||
<string>646dc3828d9c39fb1e77c4eec44ed739</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/68332/658215/apr_suite-1.4.5.548882-windows64-548882.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/80555/759709/apr_suite-1.4.5.558565-windows64-558565.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.4.5.548882</string>
|
||||
<string>1.4.5.558565</string>
|
||||
</map>
|
||||
<key>boost</key>
|
||||
<map>
|
||||
|
|
@ -166,9 +166,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>3cc73623c9a976b4f8346a3837f7a916</string>
|
||||
<string>35cc090d942b85c9126ceac9912d52d6</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/78585/744021/boost-1.72-darwin64-557045.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>9aa4ce32df5f5e36124c990e2d77b885</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/78586/743982/boost-1.72-windows-557045.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>a79511c9d8b956767ebaa405155d4238</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/78584/743961/boost-1.72-windows64-557045.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>1d063cf1783e7788f17486c234adb1db</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/78635/744249/colladadom-2.3.557064-darwin64-557064.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>e78ecf919eee01567556787c3a358d15</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/78637/744269/colladadom-2.3.557064-windows-557064.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>7e63a212c8909a25236138422fe01298</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/78636/744273/colladadom-2.3.557064-windows64-557064.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.3.545362</string>
|
||||
<string>2.3.557064</string>
|
||||
</map>
|
||||
<key>curl</key>
|
||||
<map>
|
||||
|
|
@ -398,9 +398,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f5ae57117a6518d11f49ccfbfbe0969d</string>
|
||||
<string>13f74f43a6363ec998569f731fd869c5</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/82637/774617/curl-7.54.1.560191-darwin64-560191.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>0df99bd685dc3561ca8ea347b2921987</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/82639/774610/curl-7.54.1.560191-windows-560191.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>50db2a9e6b74ec4b0c38b1ea8f135735</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/82638/774608/curl-7.54.1.560191-windows64-560191.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.560191</string>
|
||||
</map>
|
||||
<key>db</key>
|
||||
<map>
|
||||
|
|
@ -580,9 +580,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>49fff41e17e06cdf9eb0c737d20df52f</string>
|
||||
<string>45dedb5b09995cd794304150e94fcf21</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/83411/779825/dullahan-1.12.2.202106220202_91.1.21_g9dd45fe_chromium-91.0.4472.114-darwin64-560751.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87950/806969/dullahan-1.12.2.202109170444_91.1.21_g9dd45fe_chromium-91.0.4472.114-darwin64-563968.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -592,9 +592,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f51f324d50a2461cda273e84fa65e0ad</string>
|
||||
<string>d0fd9d7086699da4bb5ccc935622a717</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/83413/779836/dullahan-1.12.2.202106220213_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows-560751.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/88276/809277/dullahan-1.12.2.202109230751_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows-563968.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -604,16 +604,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>d3df46f6592715c75df2bf520c1ad68b</string>
|
||||
<string>7e8c3ccd420ff5aef24ff72d609ba394</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/83412/779840/dullahan-1.12.2.202106220213_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows64-560751.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/88275/809281/dullahan-1.12.2.202109230751_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows64-563968.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.12.2.202106220213_91.1.21_g9dd45fe_chromium-91.0.4472.114</string>
|
||||
<string>1.12.2.202109230751_91.1.21_g9dd45fe_chromium-91.0.4472.114</string>
|
||||
</map>
|
||||
<key>elfio</key>
|
||||
<map>
|
||||
|
|
@ -670,9 +670,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>3656b7f7b655cb267fd94f089d2e145c</string>
|
||||
<string>f4e80e0dfcab713a3da90cd8f7f23e7b</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54860/510198/expat-2.1.1.538990-darwin64-538990.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76341/727265/expat-2.1.1.555519-darwin64-555519.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -706,9 +706,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>c509f8afa1e02f4c16232cce7f6855f8</string>
|
||||
<string>cd4fe03473076c324d80ae3bd91a85bb</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55056/512080/expat-2.1.1.538990-windows-538990.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76343/727273/expat-2.1.1.555519-windows-555519.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -718,16 +718,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>aba97cfdf44c04dbfcac89c7cb472580</string>
|
||||
<string>d2d74d73b914150982b1883a3b96e60b</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55054/512068/expat-2.1.1.538990-windows64-538990.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76344/727279/expat-2.1.1.555519-windows64-555519.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.1.1.538990</string>
|
||||
<string>2.1.1.555519</string>
|
||||
</map>
|
||||
<key>fmodstudio</key>
|
||||
<map>
|
||||
|
|
@ -748,9 +748,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>89c37441a806ed80c0102d380eec6fd0</string>
|
||||
<string>d5528538e67c710387ae0c061a90cb23</string>
|
||||
<key>url</key>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/65400/612632/fmodstudio-2.00.11.546392-darwin64-546392.tar.bz2</string>
|
||||
<string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/76868/730756/fmodstudio-2.01.07.555883-darwin64-555883.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -784,9 +784,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0f44323b0d03b7d0d8a17eec83e103ce</string>
|
||||
<string>a2bb6eaf51f933993b26a5fe7503a761</string>
|
||||
<key>url</key>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/65401/612647/fmodstudio-2.00.11.546392-windows-546392.tar.bz2</string>
|
||||
<string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/76869/730763/fmodstudio-2.01.07.555883-windows-555883.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -796,16 +796,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>462d28eacf731a5d36ab031e7071c32a</string>
|
||||
<string>138d07dd516a9ad5b9787192fe6134dd</string>
|
||||
<key>url</key>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/65402/612648/fmodstudio-2.00.11.546392-windows64-546392.tar.bz2</string>
|
||||
<string>https://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/76867/730751/fmodstudio-2.01.07.555883-windows64-555883.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.00.11.546392</string>
|
||||
<string>2.01.07.555883</string>
|
||||
</map>
|
||||
<key>fontconfig</key>
|
||||
<map>
|
||||
|
|
@ -880,9 +880,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>81a2e9aca3e33c4eecf0081854540b07</string>
|
||||
<string>3a478d6c8a10d49d9161ef864394b03c</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/78592/744013/freetype-2.4.4.557047-darwin64-557047.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>7ee200d6b5fa282c7f973ade5615aa86</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/78594/744011/freetype-2.4.4.557047-windows-557047.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>69307aaba16ac71531c9c4d930ace993</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/78593/744010/freetype-2.4.4.557047-windows64-557047.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.557047</string>
|
||||
</map>
|
||||
<key>glext</key>
|
||||
<map>
|
||||
|
|
@ -1078,9 +1078,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>343913fe1434da228c2210c23d2e3a1a</string>
|
||||
<string>a9eaa005ff9d387f946283fbcb69b3c8</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54850/510134/glod-1.0pre3.538980-darwin64-538980.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76353/727324/glod-1.0pre3.555522-darwin64-555522.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -1139,97 +1139,7 @@
|
|||
</map>
|
||||
</map>
|
||||
<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>
|
||||
<string>1.0pre3.555522</string>
|
||||
</map>
|
||||
<key>googlemock</key>
|
||||
<map>
|
||||
|
|
@ -1262,9 +1172,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f9831360ced94943ab9dfb3fbf5256d3</string>
|
||||
<string>19e925604bc1a91efb4b130e1edd8bf2</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/78620/744140/googlemock-1.7.0.557057-darwin64-557057.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>eed7b41d0d1f41b24f315349ef78c728</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/78622/744148/googlemock-1.7.0.557057-windows-557057.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>a6ad6fe722d2fe4e8137495af3f374c9</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/78621/744152/googlemock-1.7.0.557057-windows64-557057.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.557057</string>
|
||||
</map>
|
||||
<key>gstreamer</key>
|
||||
<map>
|
||||
|
|
@ -1792,9 +1702,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>c327e6d6573fc0a808677de47f08acd9</string>
|
||||
<string>2021ea3a19b81c82993e733709683303</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54844/510092/libhunspell-1.3.2.538974-darwin64-538974.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76371/727419/libhunspell-1.3.2.555528-darwin64-555528.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -1828,9 +1738,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ec22ec25160bcfd2a74f1c7bc8ff6133</string>
|
||||
<string>2253ec09136cc7c208481030d78d9dd7</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54986/511824/libhunspell-1.3.2.538974-windows-538974.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76369/727412/libhunspell-1.3.2.555528-windows-555528.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -1840,16 +1750,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f470c6f3f7b0559e95e76467b808de10</string>
|
||||
<string>858d1708f6b3a74738a3d57a5387e20f</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54985/511817/libhunspell-1.3.2.538974-windows64-538974.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76370/727413/libhunspell-1.3.2.555528-windows64-555528.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.3.2.538974</string>
|
||||
<string>1.3.2.555528</string>
|
||||
</map>
|
||||
<key>libndofdev</key>
|
||||
<map>
|
||||
|
|
@ -1882,9 +1792,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>bf765dfe0b928ef3c531cd9618fee89b</string>
|
||||
<string>a487fff84208a45844602c4a1f68c974</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54843/510085/libndofdev-0.1.538973-darwin64-538973.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76356/727333/libndofdev-0.1.555523-darwin64-555523.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -1894,9 +1804,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>8abb7d216535009f6c0a7e43b0734b1e</string>
|
||||
<string>4c839555bf0ed9ae60ffc3f8a7c96f9b</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54984/511810/libndofdev-0.1.538973-windows-538973.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76354/727340/libndofdev-0.1.555523-windows-555523.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -1906,16 +1816,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>9da7aed5a914174dcb2be12ecd4a656f</string>
|
||||
<string>cbc033ae3b034b992b59f6de1034247c</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54983/511803/libndofdev-0.1.538973-windows64-538973.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76355/727341/libndofdev-0.1.555523-windows64-555523.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>0.1.538973</string>
|
||||
<string>0.1.555523</string>
|
||||
</map>
|
||||
<key>libpng</key>
|
||||
<map>
|
||||
|
|
@ -1948,9 +1858,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0932b19bb6a8e2641706afd13d92951d</string>
|
||||
<string>2a41acc3116ce19a443873216cb882ad</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/78587/743948/libpng-1.6.8.557046-darwin64-557046.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>b935b440947f63c69700bdcf5095a8e1</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/78591/743970/libpng-1.6.8.557046-windows-557046.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>d1cc8354ac4e877eefedf16b1be3aac6</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/78589/743991/libpng-1.6.8.557046-windows64-557046.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.557046</string>
|
||||
</map>
|
||||
<key>libuuid</key>
|
||||
<map>
|
||||
|
|
@ -2080,9 +1990,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0706b9c3889d767af9f5105d9ffa9b51</string>
|
||||
<string>6677173bbbb0ea32369b5e9b6c9aa641</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/78631/744225/libxml2-2.9.4.557062-darwin64-557062.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>ad6a596fbf0e83a21d95762da78437bc</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/78633/744239/libxml2-2.9.4.557062-windows-557062.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>6b5bb230684ecf28386d7c91c47bb6e1</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/78634/744240/libxml2-2.9.4.557062-windows64-557062.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.557062</string>
|
||||
</map>
|
||||
<key>llappearance_utility</key>
|
||||
<map>
|
||||
|
|
@ -2414,9 +2324,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 +2360,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 +2372,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 +2383,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 +2738,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>18aef0c8fc471b6539addbdc019aea25</string>
|
||||
<string>5503e4928bcdb0a29685b3242c4a409b</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/82619/774464/openssl-1.1.1l.560177-darwin64-560177.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -2864,9 +2774,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>2b2f61313b1cbd2893c1ba5bf15061fa</string>
|
||||
<string>d2153f20dc2d35c609b876a9f019a748</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/82623/774521/openssl-1.1.1l.560177-windows-560177.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -2876,16 +2786,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>59aae854155bc7119e0dca25e65828c0</string>
|
||||
<string>f40b8622ba38084b0962e273988d748f</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/82624/774520/openssl-1.1.1l.560177-windows64-560177.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.560177</string>
|
||||
</map>
|
||||
<key>pcre</key>
|
||||
<map>
|
||||
|
|
@ -3008,9 +2918,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>321a8542e7b693fbe8e44ebface06087</string>
|
||||
<string>6ce3cbaed968a69fb7a2cca80220874d</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55966/524403/slvoice-4.10.0000.32327.5fc3fe7c.539691-darwin64-539691.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/80380/758537/slvoice-4.10.0000.32327.5fc3fe7c.558436-darwin64-558436.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -3044,9 +2954,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>fb1a57a1cf5e38a3d51b32307b93ffba</string>
|
||||
<string>2eb38c5eff4d0f18fbb89d0c30c4f0a4</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55968/524423/slvoice-4.10.0000.32327.5fc3fe7c.539691-windows-539691.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/80382/758550/slvoice-4.10.0000.32327.5fc3fe7c.558436-windows-558436.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -3056,16 +2966,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>81df970eb0c97d415d7bd12049c82042</string>
|
||||
<string>9ee8f3cbc5369c598a998c61961ed16d</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55967/524409/slvoice-4.10.0000.32327.5fc3fe7c.539691-windows64-539691.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/80381/758551/slvoice-4.10.0000.32327.5fc3fe7c.558436-windows64-558436.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>4.10.0000.32327.5fc3fe7c.539691</string>
|
||||
<string>4.10.0000.32327.5fc3fe7c.558436</string>
|
||||
</map>
|
||||
<key>tracy</key>
|
||||
<map>
|
||||
|
|
@ -3192,9 +3102,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>60f008c5fd31641ad4e61ac751ce15d1</string>
|
||||
<string>c42575ac8997de979eadb082c33a578e</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/75748/723495/uriparser-0.9.4-darwin64-555117.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/81322/765512/uriparser-0.9.4-darwin64-559132.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -3228,9 +3138,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>00aff37a6f5e1fe08456702d28706cf6</string>
|
||||
<string>901b1063556fc6b2575e745eef2bf744</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/75751/723507/uriparser-0.9.4-windows-555117.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/81323/765528/uriparser-0.9.4-windows-559132.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -3240,9 +3150,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ff27a91f3941c7bef5e1613a064cb048</string>
|
||||
<string>962c01d553f286c430102998129fb0d6</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/75750/723506/uriparser-0.9.4-windows64-555117.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/81324/765527/uriparser-0.9.4-windows64-559132.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
|
|
@ -3326,9 +3236,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>5e553a4358203f283c74744aed2fcd8c</string>
|
||||
<string>b639d0035f4a8c9b4973be428a1b7e61</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54836/510036/vlc_bin-2.2.8.538966-darwin64-538966.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/69569/671323/vlc_bin-3.0.9.549888-darwin64-549888.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -3350,9 +3260,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ca84b7c5f86e702fb35727eed8f0c8c4</string>
|
||||
<string>4f50b0c47daa081dd4fcb83763d5b0b2</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54958/511725/vlc_bin-2.2.8.538966-windows-538966.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/69567/671314/vlc_bin-3.0.9.549888-windows-549888.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -3362,16 +3272,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>93cd88d90cb8aedbed5cd90ff9262409</string>
|
||||
<string>c2f8c01fb6c261b72beb07f0c4cd423f</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54954/511718/vlc_bin-2.2.8.538966-windows64-538966.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/69568/671315/vlc_bin-3.0.9.549888-windows64-549888.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.2.8.538966</string>
|
||||
<string>3.0.9.549888</string>
|
||||
</map>
|
||||
<key>xmlrpc-epi</key>
|
||||
<map>
|
||||
|
|
@ -3404,9 +3314,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>99ea1808ee9f5b55029daa9fdef86776</string>
|
||||
<string>922a0dea32266897ed1911200438e1e1</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55063/512104/xmlrpc_epi-0.54.1.539072-darwin64-539072.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76372/727426/xmlrpc_epi-0.54.1.555529-darwin64-555529.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -3440,9 +3350,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>94643b7cebb449f049fa9e32ae682bcd</string>
|
||||
<string>34b847e6b280048465fe7c6ce67fe05c</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55138/512288/xmlrpc_epi-0.54.1.539072-windows-539072.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76374/727436/xmlrpc_epi-0.54.1.555529-windows-555529.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -3452,16 +3362,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>c409de1974a879291ce7daaf52348d85</string>
|
||||
<string>8fbe7c4ea22bb7f23a93c73884ebb34c</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55137/512279/xmlrpc_epi-0.54.1.539072-windows64-539072.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76373/727435/xmlrpc_epi-0.54.1.555529-windows64-555529.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>0.54.1.539072</string>
|
||||
<string>0.54.1.555529</string>
|
||||
</map>
|
||||
<key>zlib</key>
|
||||
<map>
|
||||
|
|
@ -3494,9 +3404,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>9785bda5b4d3b41bf391b33d0da78c9e</string>
|
||||
<string>9181bc8229f1a8e480d2a40a2744ec28</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/78578/743913/zlib-1.2.11.557041-darwin64-557041.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -3532,9 +3442,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ebdb07d4aaa5312005a8773f625032a4</string>
|
||||
<string>8308cbd2ea0fe290541698b0f63482e2</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/78579/743926/zlib-1.2.11.557041-windows-557041.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -3544,16 +3454,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0ac95f3dece7d575ba45cf5728f53eea</string>
|
||||
<string>36bdc34f67d3ad3c57125dc1b16a3129</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/78577/743920/zlib-1.2.11.557041-windows64-557041.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.2.8.538988</string>
|
||||
<string>1.2.11.557041</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>package_description</key>
|
||||
|
|
|
|||
34
build.sh
34
build.sh
|
|
@ -16,6 +16,29 @@
|
|||
# * The special style in which python is invoked is intentional to permit
|
||||
# use of a native python install on windows - which requires paths in DOS form
|
||||
|
||||
retry_cmd()
|
||||
{
|
||||
max_attempts="$1"; shift
|
||||
initial_wait="$1"; shift
|
||||
attempt_num=1
|
||||
echo "trying" "$@"
|
||||
until "$@"
|
||||
do
|
||||
if ((attempt_num==max_attempts))
|
||||
then
|
||||
echo "Last attempt $attempt_num failed"
|
||||
return 1
|
||||
else
|
||||
wait_time=$(($attempt_num*$initial_wait))
|
||||
echo "Attempt $attempt_num failed. Trying again in $wait_time seconds..."
|
||||
sleep $wait_time
|
||||
attempt_num=$(($attempt_num+1))
|
||||
fi
|
||||
done
|
||||
echo "succeeded"
|
||||
return 0
|
||||
}
|
||||
|
||||
build_dir_Darwin()
|
||||
{
|
||||
echo build-darwin-x86_64
|
||||
|
|
@ -455,7 +478,7 @@ then
|
|||
succeeded=$build_coverity
|
||||
else
|
||||
# Upload base package.
|
||||
python_cmd "$helpers/codeticket.py" addoutput Installer "$package" \
|
||||
retry_cmd 4 30 python_cmd "$helpers/codeticket.py" addoutput Installer "$package" \
|
||||
|| fatal "Upload of installer failed"
|
||||
wait_for_codeticket
|
||||
|
||||
|
|
@ -465,7 +488,7 @@ then
|
|||
package=$(installer_$arch "$package_id")
|
||||
if [ x"$package" != x ]
|
||||
then
|
||||
python_cmd "$helpers/codeticket.py" addoutput "Installer $package_id" "$package" \
|
||||
retry_cmd 4 30 python_cmd "$helpers/codeticket.py" addoutput "Installer $package_id" "$package" \
|
||||
|| fatal "Upload of installer $package_id failed"
|
||||
wait_for_codeticket
|
||||
else
|
||||
|
|
@ -479,7 +502,7 @@ then
|
|||
if [ "${RELEASE_CRASH_REPORTING:-}" != "OFF" ]
|
||||
then
|
||||
# Upload crash reporter file
|
||||
python_cmd "$helpers/codeticket.py" addoutput "Symbolfile" "$VIEWER_SYMBOL_FILE" \
|
||||
retry_cmd 4 30 python_cmd "$helpers/codeticket.py" addoutput "Symbolfile" "$VIEWER_SYMBOL_FILE" \
|
||||
|| fatal "Upload of symbolfile failed"
|
||||
wait_for_codeticket
|
||||
fi
|
||||
|
|
@ -489,10 +512,7 @@ then
|
|||
if [ -r "$build_dir/llphysicsextensions_package" ]
|
||||
then
|
||||
llphysicsextensions_package=$(cat $build_dir/llphysicsextensions_package)
|
||||
# This next upload is a frequent failure; see if giving the last one some time helps
|
||||
# JJ is making changes to Codeticket that we hope will eliminate this failure soon
|
||||
sleep 300
|
||||
python_cmd "$helpers/codeticket.py" addoutput "Physics Extensions Package" "$llphysicsextensions_package" --private \
|
||||
retry_cmd 4 30 python_cmd "$helpers/codeticket.py" addoutput "Physics Extensions Package" "$llphysicsextensions_package" --private \
|
||||
|| fatal "Upload of physics extensions package failed"
|
||||
fi
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -95,17 +95,6 @@ if (USE_BUGSPLAT)
|
|||
endif (BUGSPLAT_DB)
|
||||
else (USE_BUGSPLAT)
|
||||
message(STATUS "Not building with 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)
|
||||
|
||||
add_subdirectory(${VIEWER_PREFIX}newview)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ elseif (DARWIN)
|
|||
message(FATAL_ERROR "AppKit not found")
|
||||
endif()
|
||||
|
||||
FIND_LIBRARY(CEF_LIBRARY "Chromium Embedded Framework" ${ARCH_PREBUILT_DIRS_RELEASE})
|
||||
set(CEF_LIBRARY "'${ARCH_PREBUILT_DIRS_RELEASE}/Chromium\ Embedded\ Framework.framework'")
|
||||
if (NOT CEF_LIBRARY)
|
||||
message(FATAL_ERROR "CEF not found")
|
||||
endif()
|
||||
|
|
@ -33,7 +33,7 @@ elseif (DARWIN)
|
|||
${ARCH_PREBUILT_DIRS_RELEASE}/libcef_dll_wrapper.a
|
||||
${ARCH_PREBUILT_DIRS_RELEASE}/libdullahan.a
|
||||
${APPKIT_LIBRARY}
|
||||
${CEF_LIBRARY}
|
||||
"-F ${CEF_LIBRARY}"
|
||||
)
|
||||
|
||||
elseif (LINUX)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ set(cmake_SOURCE_FILES
|
|||
FindAutobuild.cmake
|
||||
FindBerkeleyDB.cmake
|
||||
FindGLH.cmake
|
||||
FindGoogleBreakpad.cmake
|
||||
FindHUNSPELL.cmake
|
||||
FindJsonCpp.cmake
|
||||
FindNDOF.cmake
|
||||
|
|
@ -43,7 +42,6 @@ set(cmake_SOURCE_FILES
|
|||
GLH.cmake
|
||||
GLOD.cmake
|
||||
## GStreamer010Plugin.cmake
|
||||
GoogleBreakpad.cmake
|
||||
GoogleMock.cmake
|
||||
Havok.cmake
|
||||
Hunspell.cmake
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -160,7 +167,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,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)
|
||||
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ include(Linking)
|
|||
include(Boost)
|
||||
include(LLSharedLibs)
|
||||
include(JsonCpp)
|
||||
include(GoogleBreakpad)
|
||||
include(Copy3rdPartyLibs)
|
||||
include(ZLIB)
|
||||
include(URIPARSER)
|
||||
|
|
@ -20,7 +19,6 @@ include_directories(
|
|||
${LLCOMMON_INCLUDE_DIRS}
|
||||
${JSONCPP_INCLUDE_DIR}
|
||||
${ZLIB_INCLUDE_DIRS}
|
||||
${BREAKPAD_INCLUDE_DIRECTORIES}
|
||||
${URIPARSER_INCLUDE_DIRS}
|
||||
${TRACY_INCLUDE_DIR}
|
||||
)
|
||||
|
|
@ -297,7 +295,6 @@ endif(LLCOMMON_LINK_SHARED)
|
|||
|
||||
target_link_libraries(
|
||||
llcommon
|
||||
${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}
|
||||
${APRUTIL_LIBRARIES}
|
||||
${APR_LIBRARIES}
|
||||
${EXPAT_LIBRARIES}
|
||||
|
|
|
|||
|
|
@ -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 *);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -281,9 +270,6 @@ namespace LLHttp
|
|||
{
|
||||
namespace
|
||||
{
|
||||
typedef boost::shared_ptr<LLMutex> LLMutex_ptr;
|
||||
std::vector<LLMutex_ptr> sSSLMutex;
|
||||
|
||||
CURL *getCurlTemplateHandle()
|
||||
{
|
||||
static CURL *curlpTemplateHandle = NULL;
|
||||
|
|
@ -348,34 +334,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 +345,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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,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;
|
||||
}
|
||||
|
|
@ -34,6 +34,11 @@
|
|||
#include "llpluginmessageclasses.h"
|
||||
#include "media_plugin_base.h"
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#include <basetsd.h>
|
||||
typedef SSIZE_T ssize_t;
|
||||
#endif
|
||||
|
||||
#include "vlc/vlc.h"
|
||||
#include "vlc/libvlc_version.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -1834,10 +1834,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
|
||||
|
|
@ -1854,11 +1850,15 @@ if (WINDOWS)
|
|||
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)
|
||||
|
||||
|
|
@ -1912,11 +1912,9 @@ if (WINDOWS)
|
|||
add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)
|
||||
endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
|
||||
|
||||
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin)
|
||||
|
||||
if (NOT USE_BUGSPLAT)
|
||||
add_dependencies(${VIEWER_BINARY_NAME} windows-crash-logger)
|
||||
endif (NOT USE_BUGSPLAT)
|
||||
add_dependencies(${VIEWER_BINARY_NAME}
|
||||
SLPlugin
|
||||
)
|
||||
|
||||
# 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)
|
||||
|
|
@ -2226,10 +2224,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 +2265,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 (BUGSPLAT_DB)
|
||||
# BugSplat symbol-file generation
|
||||
if (WINDOWS)
|
||||
# Just pack up a tarball containing only the .pdb file for the
|
||||
|
|
@ -2410,7 +2349,7 @@ if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND VIE
|
|||
if (LINUX)
|
||||
# TBD
|
||||
endif (LINUX)
|
||||
endif (NOT USE_BUGSPLAT)
|
||||
endif (BUGSPLAT_DB)
|
||||
|
||||
# for both Bugsplat and Breakpad
|
||||
add_dependencies(llpackage generate_symbols)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
6.4.23
|
||||
6.4.24
|
||||
|
|
|
|||
|
|
@ -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:]))
|
||||
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
#!/bin/sh
|
||||
if [[ $SKIP_NOTARIZATION == "true" ]]; then
|
||||
echo "Skipping notarization"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
CONFIG_FILE="$build_secrets_checkout/code-signing-osx/notarize_creds.sh"
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
source $CONFIG_FILE
|
||||
app_file="$1"
|
||||
zip_file=${app_file/app/zip}
|
||||
ditto -c -k --keepParent "$app_file" "$zip_file"
|
||||
if [ -f "$zip_file" ]; then
|
||||
res=$(xcrun altool --notarize-app --primary-bundle-id "com.secondlife.viewer" \
|
||||
--username $USERNAME \
|
||||
--password $PASSWORD \
|
||||
--asc-provider $ASC_PROVIDER \
|
||||
--file "$zip_file" 2>&1)
|
||||
requestUUID=$(echo $res | awk '/RequestUUID/ { print $NF; }')
|
||||
|
||||
echo "Apple Notarization RequestUUID: $requestUUID"
|
||||
|
||||
if [[ -n $requestUUID ]]; then
|
||||
status="in progress"
|
||||
while [[ "$status" == "in progress" ]]; do
|
||||
sleep 30
|
||||
status=$(xcrun altool --notarization-info "$requestUUID" \
|
||||
--username $USERNAME \
|
||||
--password $PASSWORD 2>&1 \
|
||||
| awk -F ': ' '/Status:/ { print $2; }' )
|
||||
echo "$status"
|
||||
done
|
||||
# log results
|
||||
xcrun altool --notarization-info "$requestUUID" \
|
||||
--username $USERNAME \
|
||||
--password $PASSWORD
|
||||
|
||||
#remove temporary file
|
||||
rm "$zip_file"
|
||||
|
||||
if [["$status" == "success"]]; then
|
||||
xcrun stapler staple "$app_file"
|
||||
elif [["$status" == "invalid"]]; then
|
||||
echo "Notarization error: failed to process the app file"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Notarization error: couldn't get request UUID"
|
||||
echo $res
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
@ -704,7 +704,7 @@ LLAppViewer::LLAppViewer()
|
|||
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "");
|
||||
# endif // ! LL_BUGSPLAT
|
||||
mDumpPath = logdir;
|
||||
setMiniDumpDir(logdir);
|
||||
|
||||
setDebugFileNames(logdir);
|
||||
}
|
||||
|
||||
|
|
@ -1977,7 +1977,9 @@ bool LLAppViewer::cleanup()
|
|||
if (LLConversationLog::instanceExists())
|
||||
{
|
||||
LLConversationLog::instance().cache();
|
||||
}
|
||||
}
|
||||
|
||||
clearSecHandler();
|
||||
|
||||
if (mPurgeCacheOnExit)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -603,9 +603,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")
|
||||
|
||||
|
|
@ -850,57 +847,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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -51,9 +51,8 @@ protected:
|
|||
bool initHardwareTest() override; // Win32 uses DX9 to test hardware.
|
||||
bool initParseCommandLine(LLCommandLineParser& clp) override;
|
||||
|
||||
bool beingDebugged() override;
|
||||
bool restoreErrorTrap() override;
|
||||
void initCrashReporting(bool reportFreeze) override;
|
||||
virtual bool beingDebugged();
|
||||
virtual bool restoreErrorTrap();
|
||||
|
||||
bool sendURLToOtherInstance(const std::string& url) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,12 @@ void initializeSecHandler()
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
void clearSecHandler()
|
||||
{
|
||||
gSecAPIHandler = NULL;
|
||||
gHandlerMap.clear();
|
||||
}
|
||||
// start using a given security api handler. If the string is empty
|
||||
// the default is used
|
||||
LLPointer<LLSecAPIHandler> getSecHandler(const std::string& handler_type)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -533,6 +533,8 @@ public:
|
|||
};
|
||||
|
||||
void initializeSecHandler();
|
||||
|
||||
void clearSecHandler();
|
||||
|
||||
// retrieve a security api depending on the api type
|
||||
LLPointer<LLSecAPIHandler> getSecHandler(const std::string& handler_type);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
<?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>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -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
|
||||
|
|
@ -1294,14 +1297,19 @@ class DarwinManifest(ViewerManifest):
|
|||
signed=False
|
||||
sign_attempts=3
|
||||
sign_retry_wait=15
|
||||
libvlc_path = app_in_dmg + "/Contents/Resources/llplugin/media_plugin_libvlc.dylib"
|
||||
cef_path = app_in_dmg + "/Contents/Resources/llplugin/media_plugin_cef.dylib"
|
||||
slplugin_path = app_in_dmg + "/Contents/Resources/SLPlugin.app/Contents/MacOS/SLPlugin"
|
||||
greenlet_path = app_in_dmg + "/Contents/Resources/updater/greenlet/_greenlet.so"
|
||||
while (not signed) and (sign_attempts > 0):
|
||||
try:
|
||||
sign_attempts-=1;
|
||||
self.run_command(
|
||||
# Note: See blurb above about names of keychains
|
||||
['codesign', '--verbose', '--deep', '--force',
|
||||
'--keychain', viewer_keychain, '--sign', identity,
|
||||
app_in_dmg])
|
||||
sign_attempts-=1
|
||||
# Note: See blurb above about names of keychains
|
||||
self.run_command(['codesign', '--force', '--timestamp','--keychain', viewer_keychain, '--sign', identity, libvlc_path])
|
||||
self.run_command(['codesign', '--force', '--timestamp', '--keychain', viewer_keychain, '--sign', identity, cef_path])
|
||||
self.run_command(['codesign', '--force', '--timestamp', '--keychain', viewer_keychain, '--sign', identity, greenlet_path])
|
||||
self.run_command(['codesign', '--verbose', '--deep', '--force', '--entitlements', self.src_path_of("slplugin.entitlements"), '--options', 'runtime', '--keychain', viewer_keychain, '--sign', identity, slplugin_path])
|
||||
self.run_command(['codesign', '--verbose', '--deep', '--force', '--options', 'runtime', '--keychain', viewer_keychain, '--sign', identity, app_in_dmg])
|
||||
signed=True # if no exception was raised, the codesign worked
|
||||
except ManifestError as err:
|
||||
if sign_attempts:
|
||||
|
|
@ -1312,6 +1320,7 @@ class DarwinManifest(ViewerManifest):
|
|||
print >> sys.stderr, "Maximum codesign attempts exceeded; giving up"
|
||||
raise
|
||||
self.run_command(['spctl', '-a', '-texec', '-vvvv', app_in_dmg])
|
||||
self.run_command([self.src_path_of("installers/darwin/apple-notarize.sh"), app_in_dmg])
|
||||
|
||||
finally:
|
||||
# Unmount the image even if exceptions from any of the above
|
||||
|
|
@ -1364,7 +1373,7 @@ class LinuxManifest(ViewerManifest):
|
|||
with self.prefix(dst="bin"):
|
||||
self.path("secondlife-bin","do-not-directly-run-secondlife-bin")
|
||||
self.path("../linux_crash_logger/linux-crash-logger","linux-crash-logger.bin")
|
||||
self.path2basename("../llplugin/slplugin", "SLPlugin")
|
||||
self.path2basename("../llplugin/slplugin", "SLPlugin")
|
||||
#this copies over the python wrapper script, associated utilities and required libraries, see SL-321, SL-322 and SL-323
|
||||
with self.prefix(src="../viewer_components/manager", dst=""):
|
||||
self.path("*.py")
|
||||
|
|
|
|||
|
|
@ -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_)
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.2 KiB |
|
|
@ -1,536 +0,0 @@
|
|||
/**
|
||||
* @file llcrashloggerwindows.cpp
|
||||
* @brief Windows 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 "stdafx.h"
|
||||
#include "resource.h"
|
||||
#include "llcrashloggerwindows.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
#include "boost/tokenizer.hpp"
|
||||
|
||||
#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
|
||||
#include "llerror.h"
|
||||
#include "llfile.h"
|
||||
#include "lltimer.h"
|
||||
#include "llstring.h"
|
||||
#include "lldxhardware.h"
|
||||
#include "lldir.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "llsdutil.h"
|
||||
#include "stringize.h"
|
||||
|
||||
#include <client/windows/crash_generation/crash_generation_server.h>
|
||||
#include <client/windows/crash_generation/client_info.h>
|
||||
|
||||
#define MAX_LOADSTRING 100
|
||||
#define MAX_STRING 2048
|
||||
const char* const SETTINGS_FILE_HEADER = "version";
|
||||
const S32 SETTINGS_FILE_VERSION = 101;
|
||||
|
||||
// Windows Message Handlers
|
||||
|
||||
// Global Variables:
|
||||
HINSTANCE hInst= NULL; // current instance
|
||||
TCHAR szTitle[MAX_LOADSTRING]; /* Flawfinder: ignore */ // The title bar text
|
||||
TCHAR szWindowClass[MAX_LOADSTRING]; /* Flawfinder: ignore */ // The title bar text
|
||||
|
||||
std::string gProductName;
|
||||
HWND gHwndReport = NULL; // Send/Don't Send dialog
|
||||
HWND gHwndProgress = NULL; // Progress window
|
||||
HCURSOR gCursorArrow = NULL;
|
||||
HCURSOR gCursorWait = NULL;
|
||||
BOOL gFirstDialog = TRUE; // Are we currently handling the Send/Don't Send dialog?
|
||||
std::stringstream gDXInfo;
|
||||
bool gSendLogs = false;
|
||||
|
||||
LLCrashLoggerWindows* LLCrashLoggerWindows::sInstance = NULL;
|
||||
|
||||
//Conversion from char* to wchar*
|
||||
//Replacement for ATL macros, doesn't allocate memory
|
||||
//For more info see: http://www.codeguru.com/forum/showthread.php?t=337247
|
||||
void ConvertLPCSTRToLPWSTR (const char* pCstring, WCHAR* outStr)
|
||||
{
|
||||
if (pCstring != NULL)
|
||||
{
|
||||
int nInputStrLen = strlen (pCstring);
|
||||
// Double NULL Termination
|
||||
int nOutputStrLen = MultiByteToWideChar(CP_ACP, 0, pCstring, nInputStrLen, NULL, 0) + 2;
|
||||
if (outStr)
|
||||
{
|
||||
memset (outStr, 0x00, sizeof (WCHAR)*nOutputStrLen);
|
||||
MultiByteToWideChar (CP_ACP, 0, pCstring, nInputStrLen, outStr, nInputStrLen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void write_debug(const char *str)
|
||||
{
|
||||
gDXInfo << str; /* Flawfinder: ignore */
|
||||
}
|
||||
|
||||
void write_debug(std::string& str)
|
||||
{
|
||||
write_debug(str.c_str());
|
||||
}
|
||||
|
||||
void show_progress(const std::string& message)
|
||||
{
|
||||
std::wstring msg = wstring_to_utf16str(utf8str_to_wstring(message));
|
||||
if (gHwndProgress)
|
||||
{
|
||||
SendDlgItemMessage(gHwndProgress, // handle to destination window
|
||||
IDC_LOG,
|
||||
WM_SETTEXT, // message to send
|
||||
FALSE, // undo option
|
||||
(LPARAM)msg.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void update_messages()
|
||||
{
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
if (msg.message == WM_QUIT)
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
void sleep_and_pump_messages( U32 seconds )
|
||||
{
|
||||
const U32 CYCLES_PER_SECOND = 10;
|
||||
U32 cycles = seconds * CYCLES_PER_SECOND;
|
||||
while( cycles-- )
|
||||
{
|
||||
update_messages();
|
||||
ms_sleep(1000 / CYCLES_PER_SECOND);
|
||||
}
|
||||
}
|
||||
|
||||
// Include product name in the window caption.
|
||||
void LLCrashLoggerWindows::ProcessCaption(HWND hWnd)
|
||||
{
|
||||
TCHAR templateText[MAX_STRING]; /* Flawfinder: ignore */
|
||||
TCHAR header[MAX_STRING];
|
||||
std::string final;
|
||||
GetWindowText(hWnd, templateText, sizeof(templateText));
|
||||
final = llformat(ll_convert_wide_to_string(templateText, CP_ACP).c_str(), gProductName.c_str());
|
||||
ConvertLPCSTRToLPWSTR(final.c_str(), header);
|
||||
SetWindowText(hWnd, header);
|
||||
}
|
||||
|
||||
|
||||
// Include product name in the diaog item text.
|
||||
void LLCrashLoggerWindows::ProcessDlgItemText(HWND hWnd, int nIDDlgItem)
|
||||
{
|
||||
TCHAR templateText[MAX_STRING]; /* Flawfinder: ignore */
|
||||
TCHAR header[MAX_STRING];
|
||||
std::string final;
|
||||
GetDlgItemText(hWnd, nIDDlgItem, templateText, sizeof(templateText));
|
||||
final = llformat(ll_convert_wide_to_string(templateText, CP_ACP).c_str(), gProductName.c_str());
|
||||
ConvertLPCSTRToLPWSTR(final.c_str(), header);
|
||||
SetDlgItemText(hWnd, nIDDlgItem, header);
|
||||
}
|
||||
|
||||
bool handle_button_click(WORD button_id)
|
||||
{
|
||||
// Is this something other than Send or Don't Send?
|
||||
if (button_id != IDOK
|
||||
&& button_id != IDCANCEL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// We're done with this dialog.
|
||||
gFirstDialog = FALSE;
|
||||
|
||||
// Send the crash report if requested
|
||||
if (button_id == IDOK)
|
||||
{
|
||||
gSendLogs = TRUE;
|
||||
WCHAR wbuffer[20000];
|
||||
GetDlgItemText(gHwndReport, // handle to dialog box
|
||||
IDC_EDIT1, // control identifier
|
||||
wbuffer, // pointer to buffer for text
|
||||
20000 // maximum size of string
|
||||
);
|
||||
std::string user_text(ll_convert_wide_to_string(wbuffer, CP_ACP));
|
||||
// Activate and show the window.
|
||||
ShowWindow(gHwndProgress, SW_SHOW);
|
||||
// Try doing this second to make the progress window go frontmost.
|
||||
ShowWindow(gHwndReport, SW_HIDE);
|
||||
((LLCrashLoggerWindows*)LLCrashLogger::instance())->setUserText(user_text);
|
||||
((LLCrashLoggerWindows*)LLCrashLogger::instance())->sendCrashLogs();
|
||||
}
|
||||
// Quit the app
|
||||
LLApp::setQuitting();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
switch( message )
|
||||
{
|
||||
case WM_CREATE:
|
||||
return 0;
|
||||
|
||||
case WM_COMMAND:
|
||||
if( gFirstDialog )
|
||||
{
|
||||
WORD button_id = LOWORD(wParam);
|
||||
bool handled = handle_button_click(button_id);
|
||||
if (handled)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
// Closing the window cancels
|
||||
LLApp::setQuitting();
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DefWindowProc(hwnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
LLCrashLoggerWindows::LLCrashLoggerWindows(void)
|
||||
{
|
||||
if (LLCrashLoggerWindows::sInstance==NULL)
|
||||
{
|
||||
sInstance = this;
|
||||
}
|
||||
}
|
||||
|
||||
LLCrashLoggerWindows::~LLCrashLoggerWindows(void)
|
||||
{
|
||||
sInstance = NULL;
|
||||
}
|
||||
|
||||
bool LLCrashLoggerWindows::getMessageWithTimeout(MSG *msg, UINT to)
|
||||
{
|
||||
bool res;
|
||||
UINT_PTR timerID = SetTimer(NULL, NULL, to, NULL);
|
||||
res = GetMessage(msg, NULL, 0, 0);
|
||||
KillTimer(NULL, timerID);
|
||||
if (!res)
|
||||
return false;
|
||||
if (msg->message == WM_TIMER && msg->hwnd == NULL && msg->wParam == 1)
|
||||
return false; //TIMEOUT! You could call SetLastError() or something...
|
||||
return true;
|
||||
}
|
||||
|
||||
int LLCrashLoggerWindows::processingLoop() {
|
||||
const int millisecs=1000;
|
||||
int retries = 0;
|
||||
const int max_retries = 60;
|
||||
|
||||
LL_DEBUGS("CRASHREPORT") << "Entering processing loop for OOP server" << LL_ENDL;
|
||||
|
||||
LLSD options = getOptionData( LLApp::PRIORITY_COMMAND_LINE );
|
||||
|
||||
MSG msg;
|
||||
|
||||
bool result;
|
||||
|
||||
while (1)
|
||||
{
|
||||
result = getMessageWithTimeout(&msg, millisecs);
|
||||
if ( result )
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
if ( retries < max_retries ) //Wait up to 1 minute for the viewer to say hello.
|
||||
{
|
||||
if (mClientsConnected == 0)
|
||||
{
|
||||
LL_DEBUGS("CRASHREPORT") << "Waiting for client to connect." << LL_ENDL;
|
||||
++retries;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS("CRASHREPORT") << "Client has connected!" << LL_ENDL;
|
||||
retries = max_retries;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mClientsConnected == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (!mKeyMaster.isProcessAlive(mPID, mProcName) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LL_INFOS() << "session ending.." << LL_ENDL;
|
||||
|
||||
std::string per_run_dir = options["dumpdir"].asString();
|
||||
std::string per_run_file = per_run_dir + "\\SecondLife.log";
|
||||
std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.log");
|
||||
|
||||
if (gDirUtilp->fileExists(per_run_dir))
|
||||
{
|
||||
LL_INFOS ("CRASHREPORT") << "Copying " << log_file << " to " << per_run_file << LL_ENDL;
|
||||
LLFile::copy(log_file, per_run_file);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void LLCrashLoggerWindows::OnClientConnected(void* context,
|
||||
const google_breakpad::ClientInfo* client_info)
|
||||
{
|
||||
sInstance->mClientsConnected++;
|
||||
LL_INFOS("CRASHREPORT") << "Client connected. pid = " << client_info->pid() << " total clients " << sInstance->mClientsConnected << LL_ENDL;
|
||||
}
|
||||
|
||||
void LLCrashLoggerWindows::OnClientExited(void* context,
|
||||
const google_breakpad::ClientInfo* client_info)
|
||||
{
|
||||
sInstance->mClientsConnected--;
|
||||
LL_INFOS("CRASHREPORT") << "Client disconnected. pid = " << client_info->pid() << " total clients " << sInstance->mClientsConnected << LL_ENDL;
|
||||
}
|
||||
|
||||
|
||||
void LLCrashLoggerWindows::OnClientDumpRequest(void* context,
|
||||
const google_breakpad::ClientInfo* client_info,
|
||||
const std::wstring* file_path)
|
||||
{
|
||||
if (!file_path)
|
||||
{
|
||||
LL_WARNS() << "dump with no file path" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
if (!client_info)
|
||||
{
|
||||
LL_WARNS() << "dump with no client info" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLCrashLoggerWindows* self = static_cast<LLCrashLoggerWindows*>(context);
|
||||
if (!self)
|
||||
{
|
||||
LL_WARNS() << "dump with no context" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
//DWORD pid = client_info->pid();
|
||||
}
|
||||
|
||||
|
||||
bool LLCrashLoggerWindows::initCrashServer()
|
||||
{
|
||||
//For Breakpad on Windows we need a full Out of Process service to get good data.
|
||||
//This routine starts up the service on a named pipe that the viewer will then
|
||||
//communicate with.
|
||||
using namespace google_breakpad;
|
||||
|
||||
LLSD options = getOptionData( LLApp::PRIORITY_COMMAND_LINE );
|
||||
std::string dump_path = options["dumpdir"].asString();
|
||||
mClientsConnected = 0;
|
||||
mPID = options["pid"].asInteger();
|
||||
mProcName = options["procname"].asString();
|
||||
|
||||
//Generate a quasi-uniq name for the named pipe. For our purposes
|
||||
//this is unique-enough with least hassle. Worst case for duplicate name
|
||||
//is a second instance of the viewer will not do crash reporting.
|
||||
std::wstring wpipe_name;
|
||||
wpipe_name = mCrashReportPipeStr + std::wstring(wstringize(mPID));
|
||||
|
||||
std::wstring wdump_path(utf8str_to_utf16str(dump_path));
|
||||
|
||||
//Pipe naming conventions: http://msdn.microsoft.com/en-us/library/aa365783%28v=vs.85%29.aspx
|
||||
mCrashHandler = new CrashGenerationServer( wpipe_name,
|
||||
NULL,
|
||||
&LLCrashLoggerWindows::OnClientConnected, this,
|
||||
/*NULL, NULL, */ &LLCrashLoggerWindows::OnClientDumpRequest, this,
|
||||
&LLCrashLoggerWindows::OnClientExited, this,
|
||||
NULL, NULL,
|
||||
true, &wdump_path);
|
||||
|
||||
if (!mCrashHandler) {
|
||||
//Failed to start the crash server.
|
||||
LL_WARNS() << "Failed to init crash server." << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Start servicing clients.
|
||||
if (!mCrashHandler->Start()) {
|
||||
LL_WARNS() << "Failed to start crash server." << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
LL_INFOS("CRASHREPORT") << "Initialized OOP server with pipe named " << stringize(wpipe_name) << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LLCrashLoggerWindows::init(void)
|
||||
{
|
||||
bool ok = LLCrashLogger::init();
|
||||
if(!ok) return false;
|
||||
|
||||
initCrashServer();
|
||||
|
||||
/*
|
||||
mbstowcs( gProductName, mProductName.c_str(), LL_ARRAY_SIZE(gProductName) );
|
||||
gProductName[ LL_ARRY_SIZE(gProductName) - 1 ] = 0;
|
||||
swprintf(gProductName, L"Second Life");
|
||||
*/
|
||||
|
||||
LL_INFOS() << "Loading dialogs" << LL_ENDL;
|
||||
|
||||
// Initialize global strings
|
||||
LoadString(mhInst, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
|
||||
LoadString(mhInst, IDC_WIN_CRASH_LOGGER, szWindowClass, MAX_LOADSTRING);
|
||||
|
||||
gCursorArrow = LoadCursor(NULL, IDC_ARROW);
|
||||
gCursorWait = LoadCursor(NULL, IDC_WAIT);
|
||||
|
||||
// Register a window class that will be used by our dialogs
|
||||
WNDCLASS wndclass;
|
||||
wndclass.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wndclass.lpfnWndProc = WndProc;
|
||||
wndclass.cbClsExtra = 0;
|
||||
wndclass.cbWndExtra = DLGWINDOWEXTRA; // Required, since this is used for dialogs!
|
||||
wndclass.hInstance = mhInst;
|
||||
wndclass.hIcon = LoadIcon(hInst, MAKEINTRESOURCE( IDI_WIN_CRASH_LOGGER ) );
|
||||
wndclass.hCursor = gCursorArrow;
|
||||
wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
|
||||
wndclass.lpszMenuName = NULL;
|
||||
wndclass.lpszClassName = szWindowClass;
|
||||
RegisterClass( &wndclass );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLCrashLoggerWindows::gatherPlatformSpecificFiles()
|
||||
{
|
||||
updateApplication("Gathering hardware information. App may appear frozen.");
|
||||
// DX hardware probe blocks, so we can't cancel during it
|
||||
//Generate our dx_info.log file
|
||||
SetCursor(gCursorWait);
|
||||
// At this point we're responsive enough the user could click the close button
|
||||
SetCursor(gCursorArrow);
|
||||
//mDebugLog["DisplayDeviceInfo"] = gDXHardware.getDisplayInfo(); //Not initialized.
|
||||
}
|
||||
|
||||
bool LLCrashLoggerWindows::frame()
|
||||
{
|
||||
LL_INFOS() << "CrashSubmitBehavior is " << mCrashBehavior << LL_ENDL;
|
||||
|
||||
// Note: parent hwnd is 0 (the desktop). No dlg proc. See Petzold (5th ed) HexCalc example, Chapter 11, p529
|
||||
// win_crash_logger.rc has been edited by hand.
|
||||
// Dialogs defined with CLASS "WIN_CRASH_LOGGER" (must be same as szWindowClass)
|
||||
gProductName = mProductName;
|
||||
gHwndProgress = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PROGRESS), 0, NULL);
|
||||
ProcessCaption(gHwndProgress);
|
||||
ShowWindow(gHwndProgress, SW_HIDE );
|
||||
|
||||
if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND)
|
||||
{
|
||||
LL_INFOS() << "Showing crash report submit progress window." << LL_ENDL;
|
||||
//ShowWindow(gHwndProgress, SW_SHOW ); Maint-5707
|
||||
sendCrashLogs();
|
||||
}
|
||||
else if (mCrashBehavior == CRASH_BEHAVIOR_ASK)
|
||||
{
|
||||
gHwndReport = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PREVREPORTBOX), 0, NULL);
|
||||
// Ignore result
|
||||
(void) SendDlgItemMessage(gHwndReport, IDC_CHECK_AUTO, BM_SETCHECK, 0, 0);
|
||||
// Include the product name in the caption and various dialog items.
|
||||
ProcessCaption(gHwndReport);
|
||||
ProcessDlgItemText(gHwndReport, IDC_STATIC_MSG);
|
||||
|
||||
// Update the header to include whether or not we crashed on the last run.
|
||||
std::string headerStr;
|
||||
TCHAR header[MAX_STRING];
|
||||
if (mCrashInPreviousExec)
|
||||
{
|
||||
headerStr = llformat("%s appears to have crashed or frozen the last time it ran.", mProductName.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
headerStr = llformat("%s appears to have crashed.", mProductName.c_str());
|
||||
}
|
||||
ConvertLPCSTRToLPWSTR(headerStr.c_str(), header);
|
||||
SetDlgItemText(gHwndReport, IDC_STATIC_HEADER, header);
|
||||
ShowWindow(gHwndReport, SW_SHOW );
|
||||
|
||||
MSG msg;
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
while (!LLApp::isExiting() && GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
return true; // msg.wParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Unknown crash behavior " << mCrashBehavior << LL_ENDL;
|
||||
return true; // 1;
|
||||
}
|
||||
return true; // 0;
|
||||
}
|
||||
|
||||
void LLCrashLoggerWindows::updateApplication(const std::string& message)
|
||||
{
|
||||
LLCrashLogger::updateApplication(message);
|
||||
if(!message.empty()) show_progress(message);
|
||||
update_messages();
|
||||
}
|
||||
|
||||
bool LLCrashLoggerWindows::cleanup()
|
||||
{
|
||||
if(gSendLogs)
|
||||
{
|
||||
if(mSentCrashLogs) show_progress("Done");
|
||||
else show_progress("Could not connect to servers, logs not sent");
|
||||
sleep_and_pump_messages(3);
|
||||
}
|
||||
PostQuitMessage(0);
|
||||
commonCleanup();
|
||||
mKeyMaster.releaseMaster();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
/**
|
||||
* @file llcrashloggerwindows.h
|
||||
* @brief Windows 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 LLCRASHLOGGERWINDOWS_H
|
||||
#define LLCRASHLOGGERWINDOWS_H
|
||||
|
||||
#include "llcrashlogger.h"
|
||||
#include "windows.h"
|
||||
#include "llstring.h"
|
||||
|
||||
class LLSD;
|
||||
|
||||
namespace google_breakpad {
|
||||
class CrashGenerationServer;
|
||||
class ClientInfo;
|
||||
}
|
||||
|
||||
class LLCrashLoggerWindows : public LLCrashLogger
|
||||
{
|
||||
public:
|
||||
LLCrashLoggerWindows(void);
|
||||
~LLCrashLoggerWindows(void);
|
||||
static LLCrashLoggerWindows* sInstance;
|
||||
|
||||
virtual bool init();
|
||||
virtual bool frame();
|
||||
virtual void updateApplication(const std::string& message = LLStringUtil::null);
|
||||
virtual bool cleanup();
|
||||
virtual void gatherPlatformSpecificFiles();
|
||||
void setHandle(HINSTANCE hInst) { mhInst = hInst; }
|
||||
int clients_connected() const {
|
||||
return mClientsConnected;
|
||||
}
|
||||
bool getMessageWithTimeout(MSG *msg, UINT to);
|
||||
|
||||
// Starts the processing loop. This function does not return unless the
|
||||
// user is logging off or the user closes the crash service window. The
|
||||
// return value is a good number to pass in ExitProcess().
|
||||
int processingLoop();
|
||||
private:
|
||||
void ProcessDlgItemText(HWND hWnd, int nIDDlgItem);
|
||||
void ProcessCaption(HWND hWnd);
|
||||
bool initCrashServer();
|
||||
google_breakpad::CrashGenerationServer* mCrashHandler;
|
||||
static void OnClientConnected(void* context,
|
||||
const google_breakpad::ClientInfo* client_info);
|
||||
|
||||
static void OnClientDumpRequest(
|
||||
void* context,
|
||||
const google_breakpad::ClientInfo* client_info,
|
||||
const std::wstring* file_path);
|
||||
|
||||
static void OnClientExited(void* context,
|
||||
const google_breakpad::ClientInfo* client_info);
|
||||
int mClientsConnected;
|
||||
int mPID;
|
||||
std::string mProcName;
|
||||
|
||||
HINSTANCE mhInst;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
/**
|
||||
* @file resource.h
|
||||
* @brief Windows crash logger windows resources
|
||||
*
|
||||
* $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$
|
||||
*/
|
||||
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by win_crash_logger.rc
|
||||
//
|
||||
#define IDC_MYICON 2
|
||||
#define IDD_REPORT 9
|
||||
#define IDD_WIN_CRASH_LOGGER_DIALOG 102
|
||||
#define IDD_ABOUTBOX 103
|
||||
#define IDS_APP_TITLE 103
|
||||
#define IDM_ABOUT 104
|
||||
#define IDM_EXIT 105
|
||||
#define IDS_HELLO 106
|
||||
#define IDI_WIN_CRASH_LOGGER 107
|
||||
#define IDI_SMALL 108
|
||||
#define IDC_WIN_CRASH_LOGGER 109
|
||||
#define IDR_MAINFRAME 128
|
||||
#define IDD_PROGRESS 129
|
||||
#define IDD_PREVREPORTBOX 130
|
||||
#define IDC_EDIT1 1000
|
||||
#define IDC_LOG 1004
|
||||
#define IDC_CHECK_AUTO 1006
|
||||
#define IDC_STATIC_HEADER 1007
|
||||
#define IDC_STATIC_WHATINFO 1008
|
||||
#define IDC_STATIC_MOTIVATION 1009
|
||||
#define IDC_STATIC_MSG 1010
|
||||
#define IDC_STATIC -1
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 131
|
||||
#define _APS_NEXT_COMMAND_VALUE 32771
|
||||
#define _APS_NEXT_CONTROL_VALUE 1011
|
||||
#define _APS_NEXT_SYMED_VALUE 110
|
||||
#endif
|
||||
#endif
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
/**
|
||||
* @file win_crash_logger.cpp
|
||||
* @brief Windows 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 "stdafx.h"
|
||||
#include <stdlib.h>
|
||||
#include "llcrashloggerwindows.h"
|
||||
|
||||
#ifdef _UNICODE
|
||||
int APIENTRY wWinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPWSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
#else
|
||||
int APIENTRY WinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
#endif //_UNICODE
|
||||
{
|
||||
LL_INFOS() << "Starting crash reporter with args" << &lpCmdLine << LL_ENDL;
|
||||
LLCrashLoggerWindows app;
|
||||
app.setHandle(hInstance);
|
||||
#ifdef _UNICODE
|
||||
app.parseCommandOptions(__argc, __wargv);
|
||||
#else
|
||||
app.parseCommandOptions(__argc, __argv);
|
||||
#endif //_UNICODE
|
||||
|
||||
LLSD options = LLApp::instance()->getOptionData(
|
||||
LLApp::PRIORITY_COMMAND_LINE);
|
||||
if (!(options.has("pid") && options.has("dumpdir")))
|
||||
{
|
||||
LL_WARNS() << "Insufficient parameters to crash report." << LL_ENDL;
|
||||
}
|
||||
if (! app.init())
|
||||
{
|
||||
LL_WARNS() << "Unable to initialize application." << LL_ENDL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
app.processingLoop();
|
||||
app.frame();
|
||||
app.cleanup();
|
||||
LL_INFOS() << "Crash reporter finished normally." << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
/**
|
||||
* @file win_crash_logger.h
|
||||
* @brief Windows crash logger project 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$
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(AFX_WIN_CRASH_LOGGER_H__79802F4B_7C37_4F63_A2BB_0768788C3A27__INCLUDED_)
|
||||
#define AFX_WIN_CRASH_LOGGER_H__79802F4B_7C37_4F63_A2BB_0768788C3A27__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
|
||||
#endif // !defined(AFX_WIN_CRASH_LOGGER_H__79802F4B_7C37_4F63_A2BB_0768788C3A27__INCLUDED_)
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB |
|
|
@ -1,188 +0,0 @@
|
|||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#define APSTUDIO_HIDDEN_SYMBOLS
|
||||
#include "windows.h"
|
||||
#undef APSTUDIO_HIDDEN_SYMBOLS
|
||||
#include "resource.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_WIN_CRASH_LOGGER ICON "ll_icon.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Menu
|
||||
//
|
||||
|
||||
IDC_WIN_CRASH_LOGGER MENU
|
||||
BEGIN
|
||||
POPUP "&File"
|
||||
BEGIN
|
||||
MENUITEM "E&xit", IDM_EXIT
|
||||
END
|
||||
POPUP "&Help"
|
||||
BEGIN
|
||||
MENUITEM "&About ...", IDM_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_PROGRESS DIALOGEX 100, 100, 234, 33
|
||||
STYLE DS_SETFONT | DS_SETFOREGROUND | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "%s Crash Logger"
|
||||
CLASS "WIN_CRASH_LOGGER"
|
||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||
BEGIN
|
||||
LTEXT "Static",IDC_LOG,7,7,220,8
|
||||
END
|
||||
|
||||
IDD_REPORT DIALOGEX 100, 100, 297, 125
|
||||
STYLE DS_SETFONT | DS_SETFOREGROUND | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "%s Crash Logger"
|
||||
CLASS "WIN_CRASH_LOGGER"
|
||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Send",IDOK,198,104,45,15,WS_GROUP
|
||||
PUSHBUTTON "Don't Send",IDCANCEL,247,104,45,15,WS_GROUP
|
||||
LTEXT "%s appears to have crashed.",IDC_STATIC_HEADER,4,4,288,14
|
||||
LTEXT "This crash reporter collects information about your computer's hardware, operating system, and some %s logs, which are used for debugging purposes only.",IDC_STATIC_WHATINFO,4,23,288,19,NOT WS_GROUP
|
||||
CONTROL "Remember this choice",IDC_CHECK_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,106,89,13
|
||||
LTEXT "Sending crash reports is the best way to help us improve the quality of %s.",IDC_STATIC_MOTIVATION,4,43,288,8
|
||||
LTEXT "If you continue to experience this problem, please try:",IDC_STATIC,4,57,251,8
|
||||
LTEXT "- Contacting support by visiting http://www.secondlife.com/support",IDC_STATIC,4,67,231,8
|
||||
END
|
||||
|
||||
IDD_PREVREPORTBOX DIALOGEX 100, 100, 232, 213
|
||||
STYLE DS_SETFONT | DS_SETFOREGROUND | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "%s Crash Logger"
|
||||
CLASS "WIN_CRASH_LOGGER"
|
||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Send Report",IDOK,131,193,45,15,WS_GROUP
|
||||
EDITTEXT IDC_EDIT1,3,100,223,89,ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL
|
||||
PUSHBUTTON "Don't Send",IDCANCEL,181,193,45,15,WS_GROUP
|
||||
LTEXT "%s appears to have crashed or frozen the last time it ran.",IDC_STATIC_HEADER,4,4,214,8
|
||||
LTEXT "This crash reporter collects information about your computer's",IDC_STATIC,4,17,201,8
|
||||
LTEXT "hardware configuration, operating system, and some %s",IDC_STATIC_MSG,4,25,212,8
|
||||
LTEXT "logs, all of which are used for debugging purposes only.",IDC_STATIC,4,33,210,8
|
||||
LTEXT "In the space below, please briefly describe what you were doing",IDC_STATIC,3,48,208,8
|
||||
LTEXT "or trying to do just prior to the crash.",IDC_STATIC,3,56,204,8
|
||||
LTEXT "If you don't wish to send Linden Lab a crash report, press Don't Send.",IDC_STATIC,3,90,223,8
|
||||
LTEXT "This report is NOT read by customer support. If you have billing or",IDC_STATIC,3,68,208,8
|
||||
LTEXT "other questions, please go to: www.secondlife.com/support",IDC_STATIC,3,76,206,8
|
||||
CONTROL "Remember this choice",IDC_CHECK_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,193,89,13
|
||||
END
|
||||
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
|
||||
"#include ""windows.h""\r\n"
|
||||
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
|
||||
"#include ""resource.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO
|
||||
BEGIN
|
||||
IDD_PROGRESS, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 227
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 26
|
||||
END
|
||||
|
||||
IDD_REPORT, DIALOG
|
||||
BEGIN
|
||||
RIGHTMARGIN, 292
|
||||
VERTGUIDE, 4
|
||||
BOTTOMMARGIN, 119
|
||||
HORZGUIDE, 4
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// String Table
|
||||
//
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_APP_TITLE "win_crash_logger"
|
||||
IDS_HELLO "Hello World!"
|
||||
IDC_WIN_CRASH_LOGGER "WIN_CRASH_LOGGER"
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
Loading…
Reference in New Issue