Compare commits
582 Commits
animesh
...
sv-1.8.9.8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
246db973b4 | ||
|
|
d49c38bf18 | ||
|
|
c1aa88c720 | ||
|
|
937618b177 | ||
|
|
4a0936a4b5 | ||
|
|
891286c447 | ||
|
|
04db5d1075 | ||
|
|
997037a232 | ||
|
|
f0dfb0b080 | ||
|
|
f9c07b4806 | ||
|
|
9f9a21bb73 | ||
|
|
386528a892 | ||
|
|
4efe28cf52 | ||
|
|
2528f71bbf | ||
|
|
5610eaa839 | ||
|
|
881cc46aa9 | ||
|
|
81f342e9bf | ||
|
|
fe9d670800 | ||
|
|
ffb54802d4 | ||
|
|
518da73ad2 | ||
|
|
3e78b74474 | ||
|
|
34a7ebf53f | ||
|
|
45be739fea | ||
|
|
68ae8afaf9 | ||
|
|
2bdcd9d07f | ||
|
|
24f5457203 | ||
|
|
f941bc4334 | ||
|
|
ab5bce69ee | ||
|
|
050a8c3923 | ||
|
|
8817bf53e3 | ||
|
|
5e21037230 | ||
|
|
cabaf0fd1c | ||
|
|
bd92a09a48 | ||
|
|
61f90c665a | ||
|
|
32dbd40e64 | ||
|
|
a69e04a817 | ||
|
|
159de683e8 | ||
|
|
a9dbaf5e0a | ||
|
|
3c3d8c2400 | ||
|
|
b4080f8e2d | ||
|
|
5de94d6610 | ||
|
|
829045c262 | ||
|
|
b02d70fba0 | ||
|
|
64ed6e99f0 | ||
|
|
33d3bb2870 | ||
|
|
4df2193a4c | ||
|
|
343be08467 | ||
|
|
788b83bff3 | ||
|
|
c201ac90ba | ||
|
|
af3c66ad08 | ||
|
|
9bffc4bb82 | ||
|
|
132db6225e | ||
|
|
257086cbfc | ||
|
|
7755f1ec52 | ||
|
|
c5f1ac808b | ||
|
|
1a8660909d | ||
|
|
e6826a4c7c | ||
|
|
801bb8a075 | ||
|
|
b2c965e22d | ||
|
|
be3cbc642b | ||
|
|
24331d3c90 | ||
|
|
8a16e6c99f | ||
|
|
f36e8fbeca | ||
|
|
718ef09adf | ||
|
|
6443849ea9 | ||
|
|
cbb7e473ba | ||
|
|
118957362f | ||
|
|
ed7f73769f | ||
|
|
ae15dcb318 | ||
|
|
c4af22481c | ||
|
|
ae17f76bb4 | ||
|
|
7e62d17fda | ||
|
|
f9185e8bc8 | ||
|
|
1361f9b57d | ||
|
|
b86eae026b | ||
|
|
79d938a4f4 | ||
|
|
23068a70a2 | ||
|
|
0aa5e0bb88 | ||
|
|
5040275969 | ||
|
|
1daccf40ee | ||
|
|
4fd302286b | ||
|
|
18f9f19e61 | ||
|
|
1de6d4461a | ||
|
|
4198f47ab6 | ||
|
|
d9049ba342 | ||
|
|
f75ac3e4c2 | ||
|
|
06698deaca | ||
|
|
445eb29bd3 | ||
|
|
cc034f6841 | ||
|
|
3c368651f1 | ||
|
|
321730e384 | ||
|
|
c2fd88670f | ||
|
|
7b03103a1f | ||
|
|
ac3e19c91a | ||
|
|
4c7d2224e3 | ||
|
|
3ab800d99e | ||
|
|
332cef0f84 | ||
|
|
9de6d7627b | ||
|
|
98b42e88c1 | ||
|
|
e642e9561a | ||
|
|
77f500cb64 | ||
|
|
d04a8fc677 | ||
|
|
6028ae7b61 | ||
|
|
347c2cbd8b | ||
|
|
919ffb314b | ||
|
|
c033d69d54 | ||
|
|
356d289972 | ||
|
|
eeabbce377 | ||
|
|
0b992fdd46 | ||
|
|
a7e56d2af9 | ||
|
|
b10619e4d8 | ||
|
|
74518f299c | ||
|
|
407b527a55 | ||
|
|
b21cc835b2 | ||
|
|
4de8c3a38e | ||
|
|
72d8b8f78c | ||
|
|
45f4f601bf | ||
|
|
731283aa0b | ||
|
|
89ce328ba5 | ||
|
|
28e5270d87 | ||
|
|
4a237de72a | ||
|
|
e91aac1dd9 | ||
|
|
7cab44a17d | ||
|
|
cf57624688 | ||
|
|
c7448f290d | ||
|
|
55f9937238 | ||
|
|
ac1ef4d1ba | ||
|
|
ee1baafb59 | ||
|
|
9522e385cd | ||
|
|
a9b047b168 | ||
|
|
8c6e6143c2 | ||
|
|
0704876dfd | ||
|
|
54b75a3219 | ||
|
|
11d59d1b00 | ||
|
|
4e042db404 | ||
|
|
0f6285b2e9 | ||
|
|
a3d2107bfd | ||
|
|
a66c91bc5a | ||
|
|
4602602a5f | ||
|
|
0511d5903a | ||
|
|
7597ce3b37 | ||
|
|
7509d929d8 | ||
|
|
c7e03600aa | ||
|
|
4871f5ed8e | ||
|
|
e5a6f1e2d9 | ||
|
|
a29491658b | ||
|
|
26976b715d | ||
|
|
8d564d6ed1 | ||
|
|
18fbac26dc | ||
|
|
9f82933149 | ||
|
|
9b7aa959b0 | ||
|
|
1c46c26e6b | ||
|
|
506c6aaa9e | ||
|
|
dd61d475cb | ||
|
|
6e5eed7957 | ||
|
|
7859c0a191 | ||
|
|
ef46d21582 | ||
|
|
5071c1e0cf | ||
|
|
ecd52a9e1a | ||
|
|
0a6a47a099 | ||
|
|
9880fe225e | ||
|
|
5d44552a60 | ||
|
|
ffa32f8c98 | ||
|
|
b7086a993d | ||
|
|
d2d172f6ec | ||
|
|
34f6ea4db2 | ||
|
|
d8c4db17f2 | ||
|
|
c340dde03d | ||
|
|
e502b87b63 | ||
|
|
d6f320fb5e | ||
|
|
e4eca079e6 | ||
|
|
68ceac3678 | ||
|
|
991d603a0c | ||
|
|
74a6f7382a | ||
|
|
9264482dc3 | ||
|
|
1a61c49fc7 | ||
|
|
c2480d7227 | ||
|
|
72b5976605 | ||
|
|
1b742aa933 | ||
|
|
9412f631fa | ||
|
|
be07df3043 | ||
|
|
8f89127900 | ||
|
|
c72059e73f | ||
|
|
2fc2b7c12b | ||
|
|
a652cb4f0a | ||
|
|
16b8980d28 | ||
|
|
841a55c266 | ||
|
|
2aa6adfd46 | ||
|
|
bac0b3d745 | ||
|
|
b08b597397 | ||
|
|
25cb81221e | ||
|
|
4f5749878f | ||
|
|
2aa3ba4d36 | ||
|
|
6a2421e2e7 | ||
|
|
e78061b077 | ||
|
|
379f97e15a | ||
|
|
2afd2c500b | ||
|
|
0c3e144547 | ||
|
|
842d1b8d93 | ||
|
|
5c2c2a8c01 | ||
|
|
61f0837114 | ||
|
|
aa95d8fe3d | ||
|
|
a52c4779c8 | ||
|
|
1ece0e6051 | ||
|
|
6a56d048c0 | ||
|
|
e34999b6a9 | ||
|
|
103b2c0f33 | ||
|
|
2fe45cb8c2 | ||
|
|
64a44d6c1b | ||
|
|
3073a175d7 | ||
|
|
3b550c3a93 | ||
|
|
1d2c0cb8c6 | ||
|
|
2f369299c5 | ||
|
|
e65b513562 | ||
|
|
6959b688be | ||
|
|
7db999d801 | ||
|
|
703ad01c8b | ||
|
|
199879aea8 | ||
|
|
eefa0f07a7 | ||
|
|
6e6fb44bdb | ||
|
|
0892d14933 | ||
|
|
400da6ec92 | ||
|
|
18539831d1 | ||
|
|
9548270306 | ||
|
|
44aec1384a | ||
|
|
42139835d5 | ||
|
|
49f0f8e28f | ||
|
|
36b75b2398 | ||
|
|
9a53824d6d | ||
|
|
a9e2672820 | ||
|
|
138cf5d4f8 | ||
|
|
4b2e358783 | ||
|
|
851b3659ee | ||
|
|
27d4e05f2b | ||
|
|
deade4438d | ||
|
|
deafc6814d | ||
|
|
1fd6e91c68 | ||
|
|
67126ab494 | ||
|
|
e3318fb0d2 | ||
|
|
e9d28ee5c1 | ||
|
|
2ffc99aecf | ||
|
|
450afff50b | ||
|
|
570b0d3c5b | ||
|
|
09daa2a865 | ||
|
|
e97837e103 | ||
|
|
84add2d864 | ||
|
|
4c224def62 | ||
|
|
2242a1d101 | ||
|
|
b957c0930d | ||
|
|
f7434711ad | ||
|
|
5f0b23edd7 | ||
|
|
2eff62ad0d | ||
|
|
686795618a | ||
|
|
5c8c5a2c45 | ||
|
|
d98b99f7b3 | ||
|
|
8d472a9c7b | ||
|
|
3747d79143 | ||
|
|
910a5557ab | ||
|
|
8163448a6c | ||
|
|
ac0e93dcad | ||
|
|
ed420c3645 | ||
|
|
b872860443 | ||
|
|
992f4c7b5d | ||
|
|
8f15478ba4 | ||
|
|
1c371e7be6 | ||
|
|
937c80f694 | ||
|
|
15bd41bd71 | ||
|
|
b9156b7955 | ||
|
|
623a484ae3 | ||
|
|
2ace698101 | ||
|
|
34e0c722e7 | ||
|
|
82ee06a6bd | ||
|
|
584ee8fffe | ||
|
|
d80d232ee5 | ||
|
|
de47736038 | ||
|
|
0da16e6034 | ||
|
|
6c9a156610 | ||
|
|
1726c27078 | ||
|
|
64b43a47b5 | ||
|
|
8005a58ed5 | ||
|
|
d1d42701f5 | ||
|
|
c57fceff17 | ||
|
|
265336463d | ||
|
|
3ba1c88672 | ||
|
|
90e6afe159 | ||
|
|
3209507b6c | ||
|
|
fa97d8497a | ||
|
|
a687273d57 | ||
|
|
28f13b806c | ||
|
|
f1342d7bb8 | ||
|
|
c3428c6d57 | ||
|
|
0efddbd9ff | ||
|
|
be0aba4bfa | ||
|
|
c3f03b6bbf | ||
|
|
e15839a2cb | ||
|
|
e0efbd7d26 | ||
|
|
8e57288819 | ||
|
|
107f512545 | ||
|
|
14dc348179 | ||
|
|
eccbd98d79 | ||
|
|
a5115aa69e | ||
|
|
327574db7c | ||
|
|
8b4a29cbd3 | ||
|
|
544feee19f | ||
|
|
bee60da089 | ||
|
|
c466b44143 | ||
|
|
27222d524c | ||
|
|
b99e2cbbdd | ||
|
|
a5bdc24a14 | ||
|
|
0b6d94f202 | ||
|
|
bf5035388b | ||
|
|
640c136bcc | ||
|
|
6ebd2eef00 | ||
|
|
c954d02125 | ||
|
|
a34414849c | ||
|
|
c1ffb1b332 | ||
|
|
d06448cdfd | ||
|
|
117ef68916 | ||
|
|
83b384ab97 | ||
|
|
5ee5ba473b | ||
|
|
4055af4afd | ||
|
|
65dad7acfd | ||
|
|
a21927e510 | ||
|
|
094c948a87 | ||
|
|
31003f13af | ||
|
|
c1f39e167c | ||
|
|
0e28436aa9 | ||
|
|
bc1c816b99 | ||
|
|
32424e5640 | ||
|
|
760f1308f3 | ||
|
|
dfe8e364be | ||
|
|
33feeb0a01 | ||
|
|
50eb21ce23 | ||
|
|
d2052b9e4c | ||
|
|
2c5ad97697 | ||
|
|
8283422717 | ||
|
|
4a293ff1e1 | ||
|
|
828307ca96 | ||
|
|
a83901d2e4 | ||
|
|
878ba534b5 | ||
|
|
f17e6637d6 | ||
|
|
66b2ad5f30 | ||
|
|
463151c830 | ||
|
|
77b6a903ac | ||
|
|
1813a7bf8b | ||
|
|
6839cba56a | ||
|
|
f73fb6424b | ||
|
|
af2ae76ca2 | ||
|
|
a870534ea0 | ||
|
|
ba61314c32 | ||
|
|
d32e478456 | ||
|
|
1b29210f16 | ||
|
|
760f23b370 | ||
|
|
a7cba5f1a3 | ||
|
|
27033f4ebb | ||
|
|
c772179149 | ||
|
|
4c7eacf4fc | ||
|
|
672037d1f2 | ||
|
|
80cedb913a | ||
|
|
734621be82 | ||
|
|
dd3944161d | ||
|
|
1aabbb13c0 | ||
|
|
5574f263b1 | ||
|
|
2117c66c9a | ||
|
|
1fbfc498bf | ||
|
|
a02693e4dd | ||
|
|
24118e8e67 | ||
|
|
19ad64cc96 | ||
|
|
e81affce51 | ||
|
|
dec0bff972 | ||
|
|
5daf4aa777 | ||
|
|
2f24a53a01 | ||
|
|
28af96229b | ||
|
|
6d776632a9 | ||
|
|
1853500e10 | ||
|
|
8e01fcb7f0 | ||
|
|
3cddb0df2e | ||
|
|
37c4a4bbcb | ||
|
|
af8f0e1155 | ||
|
|
5df00a481d | ||
|
|
d299c55ea4 | ||
|
|
d9d83a6807 | ||
|
|
3fec94bb94 | ||
|
|
09926d12bb | ||
|
|
19bcdae6ac | ||
|
|
36025384f4 | ||
|
|
4bdbb89e6f | ||
|
|
e94314dc95 | ||
|
|
5dd68a4055 | ||
|
|
fff4e9b4b8 | ||
|
|
8a6f5b49a3 | ||
|
|
c8290b913e | ||
|
|
e6e6d811c6 | ||
|
|
cdc35b3c32 | ||
|
|
c68e00730e | ||
|
|
0496374328 | ||
|
|
6608dd0b8d | ||
|
|
432b4ab69d | ||
|
|
967b3646a6 | ||
|
|
4110d1975a | ||
|
|
b1862ce1c1 | ||
|
|
a432c3429c | ||
|
|
949190b48d | ||
|
|
6885bf6368 | ||
|
|
78f354925c | ||
|
|
a87b7603d1 | ||
|
|
1f3a232a9d | ||
|
|
99346d6486 | ||
|
|
067bd3cbd7 | ||
|
|
6e716fe3c5 | ||
|
|
831c7f53b2 | ||
|
|
1c5a829e82 | ||
|
|
4751949628 | ||
|
|
f8abafdefa | ||
|
|
4798d1e3b3 | ||
|
|
10140d143c | ||
|
|
f3609b06d7 | ||
|
|
f25577649a | ||
|
|
cf5586037e | ||
|
|
c6e3c31fae | ||
|
|
0c3e1f602a | ||
|
|
d3a35e3f8d | ||
|
|
b34bafc348 | ||
|
|
cdb316834a | ||
|
|
8b30e2e931 | ||
|
|
841bd0e515 | ||
|
|
90677188ec | ||
|
|
6d5df7c9af | ||
|
|
79e1830ba9 | ||
|
|
f0db784b46 | ||
|
|
ef5c9f0175 | ||
|
|
84081286f0 | ||
|
|
1b913443ad | ||
|
|
f5c19b9e5c | ||
|
|
5a561e03b8 | ||
|
|
ab207727fd | ||
|
|
b3231883f6 | ||
|
|
d9ff42ab3c | ||
|
|
fb20751330 | ||
|
|
c5bf72f0b3 | ||
|
|
cfdcb8b3df | ||
|
|
7d0cbf6d02 | ||
|
|
0b4f576c54 | ||
|
|
d93bed216a | ||
|
|
89abfe6f86 | ||
|
|
78fbc214ca | ||
|
|
fc649854ff | ||
|
|
60e71f5724 | ||
|
|
b78807e5ed | ||
|
|
4e39027958 | ||
|
|
b527918350 | ||
|
|
16a352c70a | ||
|
|
5035f9c3d6 | ||
|
|
a662318417 | ||
|
|
573934e505 | ||
|
|
927e86bdc9 | ||
|
|
cfa2c4e424 | ||
|
|
79bafbb943 | ||
|
|
36bfaf0f05 | ||
|
|
3d7da6e858 | ||
|
|
f81f374ab9 | ||
|
|
82050a5e46 | ||
|
|
9cf26e1fc2 | ||
|
|
fa869f21ad | ||
|
|
6af65004a5 | ||
|
|
d189aadd12 | ||
|
|
6048019926 | ||
|
|
021ba21b4f | ||
|
|
96b7612d73 | ||
|
|
7e8ebdb852 | ||
|
|
2e52fe64b8 | ||
|
|
8b367c8eab | ||
|
|
68481b8921 | ||
|
|
a5aeac312c | ||
|
|
d29d35ab23 | ||
|
|
20eb6a3eca | ||
|
|
54c4b1de83 | ||
|
|
d3572dd4ec | ||
|
|
696a5f967d | ||
|
|
3fa4f73b6f | ||
|
|
afbafbe689 | ||
|
|
18b02594cb | ||
|
|
8288de7f79 | ||
|
|
1693c97924 | ||
|
|
e3d69b4d8e | ||
|
|
f8eef33b7b | ||
|
|
d5af2588bc | ||
|
|
432bf03f0a | ||
|
|
2ba3ff852c | ||
|
|
76e9d912d6 | ||
|
|
29e71bec86 | ||
|
|
1d1857e5a7 | ||
|
|
8a2407ecbb | ||
|
|
05146faacf | ||
|
|
b7fb8fb0ca | ||
|
|
5ddab7d3b2 | ||
|
|
ebcbf79237 | ||
|
|
f5fd05a1e4 | ||
|
|
a644b2dee5 | ||
|
|
1d073cd0d9 | ||
|
|
a1e74c3286 | ||
|
|
a6cc7eda61 | ||
|
|
a36e128e57 | ||
|
|
daffb602bb | ||
|
|
0f28a1bd86 | ||
|
|
4043130f75 | ||
|
|
835083a741 | ||
|
|
daf63eb418 | ||
|
|
4d5e5e1635 | ||
|
|
15c3ff0544 | ||
|
|
68d19cd6fb | ||
|
|
ecc1730912 | ||
|
|
9c2d062886 | ||
|
|
7b3c3b9fab | ||
|
|
a37299b4ae | ||
|
|
0c2ec8cb71 | ||
|
|
7c2af68e3c | ||
|
|
c0ec1d2c9a | ||
|
|
28911f03a7 | ||
|
|
c65b0eb544 | ||
|
|
f11eb17313 | ||
|
|
453386a49a | ||
|
|
accd69386a | ||
|
|
610d592f5a | ||
|
|
2b955eb00d | ||
|
|
f38d200e93 | ||
|
|
0b1f605bba | ||
|
|
278b617290 | ||
|
|
27c259bf7c | ||
|
|
f520251935 | ||
|
|
aa888c704e | ||
|
|
bbd3cb3469 | ||
|
|
bd2c67e8ec | ||
|
|
b5afce0bbd | ||
|
|
c5f714def8 | ||
|
|
fdeb194d0e | ||
|
|
975f3b420e | ||
|
|
8d5f1191dd | ||
|
|
7c89a8b178 | ||
|
|
7c24e67c50 | ||
|
|
1cb9ea16da | ||
|
|
c4a9532784 | ||
|
|
43163b400d | ||
|
|
93e30f44c0 | ||
|
|
b6b44a2c86 | ||
|
|
cb53a4f923 | ||
|
|
85f147f679 | ||
|
|
17cb8bd764 | ||
|
|
b2eb4ea70c | ||
|
|
c6089637e7 | ||
|
|
2f72ed2e80 | ||
|
|
7b6a4d76a8 | ||
|
|
8c7e498861 | ||
|
|
9824cc7068 | ||
|
|
d16ff5cb5c | ||
|
|
0409a81e36 | ||
|
|
e0883b72dc | ||
|
|
b592b3c658 | ||
|
|
d277f1750d | ||
|
|
d54bf78c08 | ||
|
|
b1be8bb7f3 | ||
|
|
0b7061afb7 | ||
|
|
b132578692 | ||
|
|
c18bdddb60 | ||
|
|
6cd07b23f1 | ||
|
|
ab546f54ab | ||
|
|
11068eee38 | ||
|
|
f80e23ac5e | ||
|
|
513a4fd16c | ||
|
|
98b3c8a812 | ||
|
|
f5ffa65ea7 | ||
|
|
a559a09217 | ||
|
|
3cb831bb56 | ||
|
|
bce8a3b3cc | ||
|
|
65ee3a5345 | ||
|
|
3c8a8efc03 | ||
|
|
99facf6764 | ||
|
|
8f3b10875e | ||
|
|
33ef6cc3f7 | ||
|
|
d21e5db701 | ||
|
|
1c1e64f48f | ||
|
|
4b6d1934c3 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,10 +3,12 @@
|
||||
*.aps
|
||||
*.suo
|
||||
*.vshost.exe
|
||||
*/.vs
|
||||
/bin/
|
||||
/bin-release/
|
||||
/bin
|
||||
/bin-release
|
||||
/indra/out/
|
||||
/indra/viewer-*
|
||||
/indra/newview/vivox-runtime/
|
||||
/indra/newview/dbghelp.dll
|
||||
|
||||
168
.gitlab-ci.yml
Normal file
168
.gitlab-ci.yml
Normal file
@@ -0,0 +1,168 @@
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
|
||||
variables:
|
||||
VIEWER_USE_CRASHPAD: "TRUE"
|
||||
VIEWER_CRASHPAD_URL: $SENTRY_DSN
|
||||
|
||||
.win_build: &win_build
|
||||
stage: build
|
||||
tags:
|
||||
- autobuild
|
||||
- windows
|
||||
before_script:
|
||||
- pipenv install
|
||||
script:
|
||||
- If ($env:VIEWER_CHANNEL_TYPE -eq 'Project')
|
||||
{
|
||||
$env:VIEWER_CHANNEL_CODENAME = $env:CI_COMMIT_REF_NAME[8..100] -join ''
|
||||
}
|
||||
- pipenv run autobuild configure -c Release -- -DUSE_FMODSTUDIO=ON -DUSE_NVAPI=ON -DUSE_LTO=ON -DVS_DISABLE_FATAL_WARNINGS=ON
|
||||
- pipenv run autobuild build -c Release --no-configure
|
||||
- If ($env:VIEWER_USE_CRASHPAD -eq 'TRUE') {
|
||||
- Push-Location .\build-vc-*\newview\Release\
|
||||
- sentry-cli upload-dif --include-sources singularity-bin.exe singularity-bin.pdb crashpad_handler.exe crashpad_handler.pdb fmod.dll libcrypto-1_1.dll libcrypto-1_1.pdb libssl-1_1.dll libssl-1_1.pdb libcrypto-1_1-x64.dll libcrypto-1_1-x64.pdb libssl-1_1-x64.dll libssl-1_1-x64.pdb vcruntime140.dll msvcp140.dll libhunspell.dll libhunspell.pdb glod.dll
|
||||
- Pop-Location }
|
||||
artifacts:
|
||||
name: "$env:CI_COMMIT_REF_NAME-$env:CI_COMMIT_SHORT_SHA"
|
||||
expire_in: 2 week
|
||||
paths:
|
||||
- build-vc-*/newview/Release/build_data.json
|
||||
- build-vc-*/newview/Release/singularity-bin.pdb
|
||||
- build-vc-*/newview/Release/Singularity_*_Setup.exe
|
||||
|
||||
.beta_rules: &beta_rules
|
||||
only:
|
||||
- /^.*-beta$/
|
||||
except:
|
||||
- branches
|
||||
|
||||
.release_rules: &release_rules
|
||||
only:
|
||||
- /^.*-release$/
|
||||
except:
|
||||
- branches
|
||||
|
||||
build:master:windows32:
|
||||
<<: *win_build
|
||||
interruptible: true
|
||||
variables:
|
||||
AUTOBUILD_ADDRSIZE: 32
|
||||
VIEWER_CHANNEL_TYPE: Test
|
||||
VIEWER_USE_CRASHPAD: "FALSE"
|
||||
only:
|
||||
- schedules
|
||||
- web
|
||||
|
||||
build:master:windows64:
|
||||
<<: *win_build
|
||||
interruptible: true
|
||||
variables:
|
||||
AUTOBUILD_ADDRSIZE: 64
|
||||
VIEWER_CHANNEL_TYPE: Test
|
||||
VIEWER_USE_CRASHPAD: "FALSE"
|
||||
only:
|
||||
- schedules
|
||||
- web
|
||||
|
||||
build:project:windows32:
|
||||
<<: *win_build
|
||||
interruptible: true
|
||||
variables:
|
||||
AUTOBUILD_ADDRSIZE: 32
|
||||
VIEWER_CHANNEL_TYPE: Project
|
||||
VIEWER_USE_CRASHPAD: "FALSE"
|
||||
only:
|
||||
- /^project-.*$/
|
||||
|
||||
build:project:windows64:
|
||||
<<: *win_build
|
||||
interruptible: true
|
||||
variables:
|
||||
AUTOBUILD_ADDRSIZE: 64
|
||||
VIEWER_CHANNEL_TYPE: Project
|
||||
only:
|
||||
- /^project-.*$/
|
||||
|
||||
build:beta:windows32:
|
||||
<<: *win_build
|
||||
variables:
|
||||
AUTOBUILD_ADDRSIZE: 32
|
||||
VIEWER_CHANNEL_TYPE: Beta
|
||||
VIEWER_USE_CRASHPAD: "FALSE"
|
||||
<<: *beta_rules
|
||||
|
||||
build:beta:windows64:
|
||||
<<: *win_build
|
||||
variables:
|
||||
AUTOBUILD_ADDRSIZE: 64
|
||||
VIEWER_CHANNEL_TYPE: Beta
|
||||
<<: *beta_rules
|
||||
|
||||
build:release:windows32:
|
||||
<<: *win_build
|
||||
variables:
|
||||
AUTOBUILD_ADDRSIZE: 32
|
||||
VIEWER_CHANNEL_TYPE: Release
|
||||
VIEWER_USE_CRASHPAD: "FALSE"
|
||||
<<: *release_rules
|
||||
|
||||
build:release:windows64:
|
||||
<<: *win_build
|
||||
variables:
|
||||
AUTOBUILD_ADDRSIZE: 64
|
||||
VIEWER_CHANNEL_TYPE: Release
|
||||
<<: *release_rules
|
||||
|
||||
.deploy_template: &deploy_template
|
||||
stage: deploy
|
||||
tags:
|
||||
- autobuild
|
||||
- windows
|
||||
script:
|
||||
- $BuildData = Get-Content .\build-vc-64\newview\Release\build_data.json | ConvertFrom-Json
|
||||
- $BuildChannelVersion = $BuildData."Channel" + ' ' + $BuildData."Version"
|
||||
- $UploadDestViewerDir = $BuildChannelVersion.ToLower().Replace(" ", "/")
|
||||
- $UploadDestURL = "https://pkg.alchemyviewer.org/repository/viewer/${UploadDestViewerDir}"
|
||||
|
||||
- $UploadParams = @{ UseBasicParsing = $true;
|
||||
Method = "PUT";
|
||||
Headers = @{
|
||||
ContentType = "application/x-executable";
|
||||
Authorization = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$env:AUTOBUILD_HTTP_USER`:$env:AUTOBUILD_HTTP_PASS")))"; };
|
||||
Verbose = $true; };
|
||||
|
||||
- Push-Location .\build-vc-32\newview\Release\
|
||||
- $FileNameWin32 = Get-ChildItem -Path . -Name -Include Singularity_*_Setup.exe
|
||||
- Invoke-WebRequest @UploadParams -InFile .\$FileNameWin32 -Uri "${UploadDestURL}/${FileNameWin32}"
|
||||
- Pop-Location
|
||||
|
||||
- Push-Location .\build-vc-64\newview\Release\
|
||||
- $FileNameWin64 = Get-ChildItem -Path . -Name -Include Singularity_*_Setup.exe
|
||||
- Invoke-WebRequest @UploadParams -InFile .\$FileNameWin64 -Uri "${UploadDestURL}/${FileNameWin64}"
|
||||
- Pop-Location
|
||||
|
||||
- sentry-cli releases new $BuildChannelVersion
|
||||
- sentry-cli releases set-commits --auto $BuildChannelVersion
|
||||
- sentry-cli releases finalize $BuildChannelVersion
|
||||
when: manual
|
||||
|
||||
deploy_project:
|
||||
<<: *deploy_template
|
||||
environment:
|
||||
name: qa
|
||||
only:
|
||||
- /^project-.*$/
|
||||
|
||||
deploy_beta:
|
||||
<<: *deploy_template
|
||||
environment:
|
||||
name: staging
|
||||
<<: *beta_rules
|
||||
|
||||
deploy_release:
|
||||
<<: *deploy_template
|
||||
environment:
|
||||
name: production
|
||||
<<: *release_rules
|
||||
2
Pipfile
2
Pipfile
@@ -8,7 +8,7 @@ name = "pypi"
|
||||
[packages]
|
||||
llbase = "*"
|
||||
certifi = "*"
|
||||
autobuild = {hg = "https://bitbucket.org/alchemyviewer/autobuild-1.1"}
|
||||
autobuild = {git = "https://git.alchemyviewer.org/alchemy/autobuild.git"}
|
||||
|
||||
[requires]
|
||||
python_version = "2.7"
|
||||
|
||||
365
autobuild.xml
365
autobuild.xml
@@ -47,40 +47,6 @@
|
||||
<key>version</key>
|
||||
<string>1.2.15</string>
|
||||
</map>
|
||||
<key>abseil-cpp</key>
|
||||
<map>
|
||||
<key>canonical_repo</key>
|
||||
<string>https://bitbucket.org/alchemyviewer/3p-abseil-src</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright 2018 The Abseil Authors.</string>
|
||||
<key>description</key>
|
||||
<string>Abseil Common Libraries</string>
|
||||
<key>license</key>
|
||||
<string>Apache 2.0</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/abseil-cpp.txt</string>
|
||||
<key>name</key>
|
||||
<string>abseil-cpp</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>common</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>b82d5aa8380926240f3415279480c831</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/abseil-cpp/common/abseil_cpp-ac78ffc.1-common-1.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>ac78ffc.1</string>
|
||||
</map>
|
||||
<key>apr_suite</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
@@ -423,6 +389,54 @@
|
||||
<key>version</key>
|
||||
<string>2.3</string>
|
||||
</map>
|
||||
<key>crashpad</key>
|
||||
<map>
|
||||
<key>canonical_repo</key>
|
||||
<string>https://git.alchemyviewer.org/alchemy/thirdparty/3p-crashpad</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright 2014 The Crashpad Authors. All rights reserved.</string>
|
||||
<key>description</key>
|
||||
<string>Crashpad is a crash-reporting system.</string>
|
||||
<key>license</key>
|
||||
<string>Apache 2.0</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/crashpad.txt</string>
|
||||
<key>name</key>
|
||||
<string>crashpad</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>a96fda7ad5cee967823f5c94390ba35b</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/crashpad/windows/crashpad-c6d76a90.194-windows-194.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>5ff95ca1007ed2dc300b59de17453201</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/crashpad/windows64/crashpad-c6d76a90.194-windows64-194.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>c6d76a90.194</string>
|
||||
</map>
|
||||
<key>curl</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
@@ -650,11 +664,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>06746b78827e9a0c6b666bd2528d36ad</string>
|
||||
<string>695efb6fc548a56dc4ff34e8d9a37bfb</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://bitbucket.org/SingularityViewer/libraries/downloads/dullahan-1.1.1320_73.1.12%252Bgee4b49f%252Bchromium-73.0.3683.75-linux64-192030536.tar.bz2</string>
|
||||
<string>https://bitbucket.org/router_gray/3p-dullahan/downloads/dullahan-1.3.202002250830_79.1.38_gecefb59_chromium-79.0.3945.130-linux64-200580406.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
@@ -664,9 +678,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e19b664ad8cf9e7f4a7bf649d28faa76</string>
|
||||
<string>1b278ff2535f428ea6536683d096fdd0</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://bitbucket.org/SingularityViewer/libraries/downloads/dullahan-1.1.1320_73.1.12+gee4b49f+chromium-73.0.3683.75-windows-191102212.tar.bz2</string>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/dullahan/windows/dullahan-1.3.201911222116_78.3.7_gea7ef34_chromium-78.0.3904.108-windows-2.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
@@ -676,18 +692,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>414190fd1ce3876ee3efc682b06ae65c</string>
|
||||
<string>b9346fea7643b10308c7bd9a769ef5f7</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/packages/windows64/msvc-1920/dullahan-1.1.1320_73.1.12-gee4b49f-chromium-73.0.3683.75-windows64-190871757.tar.bz2</string>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/dullahan/windows64/dullahan-1.3.201911222103_78.3.7_gea7ef34_chromium-78.0.3904.108-windows64-2.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.1.1320_73.1.12+gee4b49f+chromium-73.0.3683.75</string>
|
||||
<string>1.3.201911222103_78.3.7_gea7ef34_chromium-78.0.3904.108</string>
|
||||
</map>
|
||||
<key>elfio</key>
|
||||
<map>
|
||||
@@ -802,7 +818,7 @@
|
||||
<key>fmodstudio</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>FMOD Studio, copyright (c) Firelight Technologies Pty, Ltd., 2012-2019.</string>
|
||||
<string>FMOD Studio, Copyright (c) Firelight Technologies Pty Ltd.</string>
|
||||
<key>description</key>
|
||||
<string>FMOD Studio audio system library</string>
|
||||
<key>license</key>
|
||||
@@ -860,11 +876,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>54dbd41322a08a1fc333ca6d96af5502</string>
|
||||
<string>7f631a7f1742a5786e1f9de1d2424350</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>/opt/devel/secondlife/pkg/fmodstudio-2.00.02.191991250-linux64-191991250.tar.bz2</string>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-internal/fmodstudio/linux64/fmodstudio-2.01.04.417-linux64-417.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
@@ -874,11 +890,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e0e87e0423fa42e4d2997b47b92eac6e</string>
|
||||
<string>50ce25e855c10d3b39f5461f34661c7f</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-internal/fmodstudio/windows/fmodstudio-2.00.03.192211030-windows-192211030.tar.bz2</string>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-internal/fmodstudio/windows/fmodstudio-2.01.04.417-windows-417.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
@@ -888,62 +904,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>c2e55e1bfef7e066a0e40867a64b4cce</string>
|
||||
<string>e13b156ca861c36b388e18df0e8e20fb</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-internal/fmodstudio/windows64/fmodstudio-2.00.03.192211029-windows64-192211029.tar.bz2</string>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-internal/fmodstudio/windows64/fmodstudio-2.01.04.417-windows64-417.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.10.10.190360453</string>
|
||||
</map>
|
||||
<key>fontconfig</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (C) 2000,2001,2002,2003,2004,2006,2007 Keith Packard, 2005 Patrick Lam, 2009 Roozbeh Pournader, 2008,2009 Red Hat, Inc., 2008 Danilo Šegan, 2012 Google, Inc.</string>
|
||||
<key>description</key>
|
||||
<string>Fontconfig is a library for configuring and customizing font access.</string>
|
||||
<key>license</key>
|
||||
<string>bsd</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/fontconfig.txt</string>
|
||||
<key>name</key>
|
||||
<string>fontconfig</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>2843c48e6c84a51e3d6aa05dace4c8c0</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-fontconfig-update/rev/290569/arch/Linux/installer/fontconfig-2.11.0-linux-20140602.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>25726244f5bcd05f412514b030098c3c</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/linux64/lib-trusty/fontconfig-2.11.0-linux64-201603241804.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.11.0</string>
|
||||
<string>2.01.04.417</string>
|
||||
</map>
|
||||
<key>fonts</key>
|
||||
<map>
|
||||
@@ -1026,7 +998,7 @@
|
||||
<key>freetype</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright 2006-2017 by David Turner, Robert Wilhelm, and Werner Lemberg.</string>
|
||||
<string>Copyright 2006-2018 by David Turner, Robert Wilhelm, and Werner Lemberg.</string>
|
||||
<key>description</key>
|
||||
<string>Font rendering library</string>
|
||||
<key>license</key>
|
||||
@@ -1051,32 +1023,6 @@
|
||||
<key>name</key>
|
||||
<string>darwin</string>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>52f87a65cc61ec4b05721c079d015b19</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Linux/installer/freetype-2.4.4-linux-20140602.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>b10ba0775b9f1033daf580a2cb55789d</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/linux64/lib-trusty/freetype-2.6.3-linux64-201603241755.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
@@ -1271,104 +1217,6 @@
|
||||
<key>version</key>
|
||||
<string>1.0pre3.190390340</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>9f963eb1728e6d5077d4feba805d4896</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://bitbucket.org/alchemyviewer/publiclibs-darwin/downloads/google_breakpad-9e60a27-darwin-201511222009.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin</string>
|
||||
</map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>2d43c6a149cd9c89ba19e884579b1e25</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/1836/4096/google_breakpad-1413.501824-darwin64-501824.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>52257e5eb166a0b69c9c0c38f6e1920e</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273079/arch/Linux/installer/google_breakpad-0.0.0-rev1099-linux-20130329.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>3709a51d4d5dff5ec0c4656623eaa05d</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/linux64/lib-trusty/google_breakpad-9e60a27-linux64-201603240004.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>fa7f683ba4ddd7db777c78c8213d2e46</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows/lib-vc141/google_breakpad-7398ce15b79da-windows-201703090621.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>71ffc5cae4da7e2e7aac856da44cb8c4</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc141/google_breakpad-7398ce15b79da-windows64-201703081616.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>9e60a27</string>
|
||||
</map>
|
||||
<key>gperftools</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
@@ -2085,38 +1933,6 @@
|
||||
<key>version</key>
|
||||
<string>7.11.1.297294</string>
|
||||
</map>
|
||||
<key>modernjson</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2013-2018 Niels Lohmann</string>
|
||||
<key>description</key>
|
||||
<string>JSON for Modern C++</string>
|
||||
<key>license</key>
|
||||
<string>MIT</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/modernjson.txt</string>
|
||||
<key>name</key>
|
||||
<string>modernjson</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>common</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6f11eca7e2a6ca61f9217e949a64f026</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://depot.alchemyviewer.org/pub/common/lib/modernjson-3.2.0-common-201809210551.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>3.2.0</string>
|
||||
</map>
|
||||
<key>nvapi</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
@@ -2660,7 +2476,7 @@
|
||||
<key>vlc-bin</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (C) 1998-2016 VLC authors and VideoLAN</string>
|
||||
<string>Copyright (C) 1998-2020 VLC authors and VideoLAN</string>
|
||||
<key>license</key>
|
||||
<string>GPL2</string>
|
||||
<key>license_file</key>
|
||||
@@ -2698,9 +2514,9 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>add560654a53cb1c554044a4fac3c718</string>
|
||||
<string>3ff1d097e4f9b8f864a639aff974a506</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/12144/71458/vlc_bin-2.2.8.511703-windows-511703.tar.bz2</string>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/vlc-bin/windows/vlc_bin-3.0.8.189-windows-189.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
@@ -2710,16 +2526,16 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>94bf04b49acc1e1bf2c06e2232f8a083</string>
|
||||
<string>b890b109b526cc6ad211eadefed83316</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/12145/71463/vlc_bin-2.2.8.511703-windows64-511703.tar.bz2</string>
|
||||
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/vlc-bin/windows64/vlc_bin-3.0.8.189-windows64-189.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.2.8.511703</string>
|
||||
<string>3.0.8.189</string>
|
||||
</map>
|
||||
<key>xmlrpc-epi</key>
|
||||
<map>
|
||||
@@ -2925,7 +2741,7 @@
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string>
|
||||
<string>-DWORD_SIZE:STRING=$AUTOBUILD_ADDRSIZE</string>
|
||||
<string>-DADDRESS_SIZE:STRING=$AUTOBUILD_ADDRSIZE</string>
|
||||
<string>-DROOT_PROJECT_NAME:STRING=Singularity</string>
|
||||
<string>-DINSTALL_PROPRIETARY=FALSE</string>
|
||||
</array>
|
||||
@@ -2946,7 +2762,7 @@
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-DCMAKE_BUILD_TYPE:STRING=Release</string>
|
||||
<string>-DWORD_SIZE:STRING=$AUTOBUILD_ADDRSIZE</string>
|
||||
<string>-DADDRESS_SIZE:STRING=$AUTOBUILD_ADDRSIZE</string>
|
||||
<string>-DROOT_PROJECT_NAME:STRING=Singularity</string>
|
||||
<string>-DINSTALL_PROPRIETARY=FALSE</string>
|
||||
</array>
|
||||
@@ -3029,10 +2845,10 @@
|
||||
<key>build</key>
|
||||
<map>
|
||||
<key>command</key>
|
||||
<string>make</string>
|
||||
<string>ninja</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-j 7</string>
|
||||
<string>-v</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>configure</key>
|
||||
@@ -3040,7 +2856,7 @@
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
<string>Unix Makefiles</string>
|
||||
<string>Ninja</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>default</key>
|
||||
@@ -3053,10 +2869,10 @@
|
||||
<key>build</key>
|
||||
<map>
|
||||
<key>command</key>
|
||||
<string>make</string>
|
||||
<string>ninja</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-j 7</string>
|
||||
<string>-v</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>configure</key>
|
||||
@@ -3064,7 +2880,7 @@
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
<string>Unix Makefiles</string>
|
||||
<string>Ninja</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>name</key>
|
||||
@@ -3085,10 +2901,10 @@
|
||||
<key>build</key>
|
||||
<map>
|
||||
<key>command</key>
|
||||
<string>make</string>
|
||||
<string>ninja</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-j 7</string>
|
||||
<string>-v</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>configure</key>
|
||||
@@ -3096,8 +2912,8 @@
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
<string>Unix Makefiles</string>
|
||||
<string>-DWORD_SIZE:STRING=64</string>
|
||||
<string>Ninja</string>
|
||||
<string>-DADDRESS_SIZE:STRING=64</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>default</key>
|
||||
@@ -3110,10 +2926,10 @@
|
||||
<key>build</key>
|
||||
<map>
|
||||
<key>command</key>
|
||||
<string>make</string>
|
||||
<string>ninja</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-j 7</string>
|
||||
<string>-v</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>configure</key>
|
||||
@@ -3121,8 +2937,8 @@
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
<string>Unix Makefiles</string>
|
||||
<string>-DWORD_SIZE:STRING=64</string>
|
||||
<string>Ninja</string>
|
||||
<string>-DADDRESS_SIZE:STRING=64</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>name</key>
|
||||
@@ -3135,7 +2951,7 @@
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>build_directory</key>
|
||||
<string>build-vc${AUTOBUILD_WIN_VSVER|161}-$AUTOBUILD_ADDRSIZE</string>
|
||||
<string>build-vc-$AUTOBUILD_ADDRSIZE</string>
|
||||
<key>configurations</key>
|
||||
<map>
|
||||
<key>RelWithDebInfo</key>
|
||||
@@ -3194,6 +3010,7 @@
|
||||
<string>/p:Configuration=Release</string>
|
||||
<string>/p:Platform=${AUTOBUILD_WIN_VSPLATFORM|NOTWIN}</string>
|
||||
<string>/t:Build</string>
|
||||
<string>/p:PreferredToolArchitecture=x64</string>
|
||||
<string>/p:useenv=true</string>
|
||||
<string>/verbosity:normal</string>
|
||||
<string>/m</string>
|
||||
@@ -3221,7 +3038,7 @@
|
||||
</map>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version_file</key>
|
||||
|
||||
@@ -3,12 +3,7 @@
|
||||
# cmake_minimum_required should appear before any
|
||||
# other commands to guarantee full compatibility
|
||||
# with the version specified
|
||||
## prior to 2.8, the add_custom_target commands used in setting the version did not work correctly
|
||||
if(WIN32)
|
||||
cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
|
||||
else()
|
||||
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
|
||||
endif()
|
||||
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||
|
||||
set(ROOT_PROJECT_NAME "Singularity" CACHE STRING
|
||||
"The root project/makefile/solution name. Defaults to Singularity.")
|
||||
@@ -16,10 +11,6 @@ project(${ROOT_PROJECT_NAME})
|
||||
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||||
|
||||
include(Variables)
|
||||
include(00-Common)
|
||||
include(BuildVersion)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
@@ -28,9 +19,13 @@ if (NOT CMAKE_BUILD_TYPE)
|
||||
"Build type. One of: Debug Release RelWithDebInfo" FORCE)
|
||||
endif (NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
include(Abseil-CPP)
|
||||
# Dependencies
|
||||
add_subdirectory(${ABSEIL_SRC_DIR} ${ABSEIL_BIN_DIR})
|
||||
include(Variables)
|
||||
include(00-Common)
|
||||
include(BuildVersion)
|
||||
include(CTest)
|
||||
|
||||
add_subdirectory(deps)
|
||||
|
||||
add_subdirectory(cmake)
|
||||
add_subdirectory(${LIBS_OPEN_PREFIX}aistatemachine)
|
||||
add_subdirectory(${LIBS_OPEN_PREFIX}llaudio)
|
||||
@@ -65,8 +60,10 @@ add_subdirectory(${LIBS_OPEN_PREFIX}plugins)
|
||||
|
||||
add_subdirectory(${VIEWER_PREFIX}newview/statemachine)
|
||||
add_subdirectory(${VIEWER_PREFIX}newview)
|
||||
add_dependencies(viewer ${VIEWER_BRANDING_ID}-bin)
|
||||
add_dependencies(viewer ${VIEWER_BINARY_NAME})
|
||||
|
||||
|
||||
if (WINDOWS)
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${VIEWER_BRANDING_ID}-bin)
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PROPERTY VS_STARTUP_PROJECT ${VIEWER_BINARY_NAME})
|
||||
endif (WINDOWS)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
if(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
|
||||
set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")
|
||||
|
||||
include(CheckCCompilerFlag)
|
||||
include(Variables)
|
||||
|
||||
# Portable compilation flags.
|
||||
@@ -17,19 +18,6 @@ set(CMAKE_C_FLAGS_RELEASE
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
"-DLL_RELEASE=1 -D_SECURE_SCL=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
|
||||
|
||||
# Configure crash reporting
|
||||
set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
|
||||
set(NON_RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in developer builds")
|
||||
|
||||
if(RELEASE_CRASH_REPORTING)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DLL_SEND_CRASH_REPORTS=1")
|
||||
endif()
|
||||
|
||||
if(NON_RELEASE_CRASH_REPORTING)
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DLL_SEND_CRASH_REPORTS=1")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DLL_SEND_CRASH_REPORTS=1")
|
||||
endif()
|
||||
|
||||
# Don't bother with a MinSizeRel build.
|
||||
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING
|
||||
"Supported build types." FORCE)
|
||||
@@ -51,9 +39,17 @@ if (WINDOWS)
|
||||
"${CMAKE_C_FLAGS_RELEASE} ${LL_C_FLAGS} /O2 /Zi /MD /MP /fp:fast"
|
||||
CACHE STRING "C compiler release options" FORCE)
|
||||
|
||||
if (WORD_SIZE EQUAL 32)
|
||||
if (ADDRESS_SIZE EQUAL 32)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
|
||||
endif (WORD_SIZE EQUAL 32)
|
||||
endif (ADDRESS_SIZE EQUAL 32)
|
||||
|
||||
if (FULL_DEBUG_SYMS OR USE_CRASHPAD)
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG:FULL")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG:FULL")
|
||||
else ()
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG:FASTLINK")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG:FASTLINK")
|
||||
endif ()
|
||||
|
||||
if (USE_LTO)
|
||||
if(INCREMENTAL_LINK)
|
||||
@@ -89,6 +85,7 @@ if (WINDOWS)
|
||||
/TP
|
||||
/W3
|
||||
/c
|
||||
/Zc:__cplusplus
|
||||
/Zc:forScope
|
||||
/Zc:rvalueCast
|
||||
/Zc:wchar_t
|
||||
@@ -107,9 +104,9 @@ if (WINDOWS)
|
||||
)
|
||||
endif (USE_LTO)
|
||||
|
||||
if (WORD_SIZE EQUAL 32)
|
||||
if (ADDRESS_SIZE EQUAL 32)
|
||||
add_compile_options(/arch:SSE2)
|
||||
endif (WORD_SIZE EQUAL 32)
|
||||
endif (ADDRESS_SIZE EQUAL 32)
|
||||
|
||||
if (NOT DISABLE_FATAL_WARNINGS)
|
||||
add_definitions(/WX)
|
||||
@@ -139,6 +136,10 @@ if (LINUX)
|
||||
-DLL_LINUX=1
|
||||
-DAPPID=secondlife
|
||||
-D_REENTRANT
|
||||
-DGDK_DISABLE_DEPRECATED
|
||||
-DGTK_DISABLE_DEPRECATED
|
||||
-DGSEAL_ENABLE
|
||||
-DGTK_DISABLE_SINGLE_INCLUDES
|
||||
)
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||
@@ -199,16 +200,19 @@ if (LINUX)
|
||||
|
||||
# End of hacks.
|
||||
|
||||
if (NOT STANDALONE)
|
||||
# this stops us requiring a really recent glibc at runtime
|
||||
add_definitions(-fno-stack-protector)
|
||||
endif (NOT STANDALONE)
|
||||
CHECK_C_COMPILER_FLAG(-fstack-protector-strong HAS_STRONG_STACK_PROTECTOR)
|
||||
if (${CMAKE_BUILD_TYPE} STREQUAL "Release")
|
||||
if(HAS_STRONG_STACK_PROTECTOR)
|
||||
add_compile_options(-fstack-protector-strong)
|
||||
endif(HAS_STRONG_STACK_PROTECTOR)
|
||||
endif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
|
||||
|
||||
if (${ARCH} STREQUAL "x86_64")
|
||||
add_definitions(-pipe)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffast-math")
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ffast-math")
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -ffast-math")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ffast-math")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffast-math -msse4.1")
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ffast-math -msse4.1")
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -ffast-math -msse4.1")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ffast-math -msse4.1")
|
||||
else (${ARCH} STREQUAL "x86_64")
|
||||
if (NOT STANDALONE)
|
||||
set(MARCH_FLAG " -march=pentium4")
|
||||
@@ -293,19 +297,26 @@ if (LINUX OR DARWIN)
|
||||
|
||||
set(CMAKE_C_FLAGS "${UNIX_WARNINGS} ${CMAKE_C_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${UNIX_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}")
|
||||
if (WORD_SIZE EQUAL 32)
|
||||
if (ADDRESS_SIZE EQUAL 32)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
|
||||
elseif (WORD_SIZE EQUAL 64)
|
||||
elseif (ADDRESS_SIZE EQUAL 64)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
|
||||
endif (WORD_SIZE EQUAL 32)
|
||||
endif (ADDRESS_SIZE EQUAL 32)
|
||||
endif (LINUX OR DARWIN)
|
||||
|
||||
|
||||
if (STANDALONE)
|
||||
add_definitions(-DLL_STANDALONE=1)
|
||||
else (STANDALONE)
|
||||
#Enforce compile-time correctness for fmt strings
|
||||
add_definitions(-DFMT_STRING_ALIAS=1)
|
||||
|
||||
if(USE_CRASHPAD)
|
||||
add_definitions(-DUSE_CRASHPAD=1 -DCRASHPAD_URL="${CRASHPAD_URL}")
|
||||
endif()
|
||||
|
||||
set(${ARCH}_linux_INCLUDES
|
||||
atk-1.0
|
||||
cairo
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
set(BUILD_TESTING OFF)
|
||||
use_prebuilt_binary(abseil-cpp)
|
||||
set(ABSEIL_SRC_DIR ${LIBS_PREBUILT_DIR}/abseil-cpp)
|
||||
set(ABSEIL_BIN_DIR ${CMAKE_BINARY_DIR}/abseil-cpp)
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
if (STANDALONE)
|
||||
if (LINUX)
|
||||
include(FindPkgConfig)
|
||||
pkg_check_modules(OGG REQUIRED ogg)
|
||||
pkg_check_modules(VORBIS REQUIRED vorbis)
|
||||
pkg_check_modules(VORBISENC REQUIRED vorbisenc)
|
||||
pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
|
||||
else (STANDALONE)
|
||||
else (LINUX)
|
||||
use_prebuilt_binary(ogg_vorbis)
|
||||
set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
||||
set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
||||
@@ -32,7 +32,7 @@ else (STANDALONE)
|
||||
set(VORBISENC_LIBRARIES vorbisenc)
|
||||
set(VORBISFILE_LIBRARIES vorbisfile)
|
||||
endif (WINDOWS)
|
||||
endif (STANDALONE)
|
||||
endif (LINUX)
|
||||
|
||||
link_directories(
|
||||
${VORBIS_LIBRARY_DIRS}
|
||||
|
||||
@@ -9,7 +9,7 @@ include(Variables)
|
||||
# building in an IDE, it probably isn't. Set it explicitly using
|
||||
# run_build_test.py.
|
||||
add_custom_command(OUTPUT packages-info.txt
|
||||
COMMENT Generating packages-info.txt for the about box
|
||||
COMMENT "Generating packages-info.txt for the about box"
|
||||
MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/../autobuild.xml
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../scripts/packages-formatter.py
|
||||
${CMAKE_SOURCE_DIR}/../autobuild.xml
|
||||
|
||||
@@ -8,7 +8,6 @@ set(cmake_SOURCE_FILES
|
||||
CMakeLists.txt
|
||||
|
||||
00-Common.cmake
|
||||
Abseil-CPP.cmake
|
||||
AIStateMachine.cmake
|
||||
APR.cmake
|
||||
Audio.cmake
|
||||
@@ -23,6 +22,7 @@ set(cmake_SOURCE_FILES
|
||||
ConfigurePkgConfig.cmake
|
||||
CURL.cmake
|
||||
Copy3rdPartyLibs.cmake
|
||||
CrashPad.cmake
|
||||
Cwdebug.cmake
|
||||
DBusGlib.cmake
|
||||
DeploySharedLibs.cmake
|
||||
@@ -33,7 +33,6 @@ set(cmake_SOURCE_FILES
|
||||
FindCARes.cmake
|
||||
FindColladadom.cmake
|
||||
FindGLOD.cmake
|
||||
FindGoogleBreakpad.cmake
|
||||
FindGooglePerfTools.cmake
|
||||
FindHunSpell.cmake
|
||||
FindNDOF.cmake
|
||||
@@ -43,15 +42,14 @@ set(cmake_SOURCE_FILES
|
||||
FindXmlRpcEpi.cmake
|
||||
FMODSTUDIO.cmake
|
||||
FreeType.cmake
|
||||
GeneratePrecompiledHeader.cmake
|
||||
GLOD.cmake
|
||||
GStreamer010Plugin.cmake
|
||||
Glui.cmake
|
||||
Glut.cmake
|
||||
GoogleBreakpad.cmake
|
||||
GooglePerfTools.cmake
|
||||
Hunspell.cmake
|
||||
JPEG.cmake
|
||||
Json.cmake
|
||||
LLAddBuildTest.cmake
|
||||
LLAppearance.cmake
|
||||
LLAudio.cmake
|
||||
|
||||
@@ -6,17 +6,17 @@ SET(DEBUG_PKG_CONFIG "YES")
|
||||
IF("$ENV{PKG_CONFIG_LIBDIR}" STREQUAL "")
|
||||
|
||||
# Guess at architecture-specific system library paths.
|
||||
if (WORD_SIZE EQUAL 32)
|
||||
if (ADDRESS_SIZE EQUAL 32)
|
||||
SET(PKG_CONFIG_NO_MULTI_GUESS /usr/lib32 /usr/lib)
|
||||
SET(PKG_CONFIG_NO_MULTI_LOCAL_GUESS /usr/local/lib32 /usr/local/lib)
|
||||
SET(PKG_CONFIG_MULTI_GUESS /usr/lib/i386-linux-gnu)
|
||||
SET(PKG_CONFIG_MULTI_LOCAL_GUESS /usr/local/lib/i386-linux-gnu)
|
||||
else (WORD_SIZE EQUAL 32)
|
||||
else (ADDRESS_SIZE EQUAL 32)
|
||||
SET(PKG_CONFIG_NO_MULTI_GUESS /usr/lib64 /usr/lib)
|
||||
SET(PKG_CONFIG_NO_MULTI_LOCAL_GUESS /usr/local/lib64 /usr/local/lib)
|
||||
SET(PKG_CONFIG_MULTI_GUESS /usr/lib/x86_64-linux-gnu)
|
||||
SET(PKG_CONFIG_MULTI_LOCAL_GUESS /usr/local/lib/x86_64-linux-gnu)
|
||||
endif (WORD_SIZE EQUAL 32)
|
||||
endif (ADDRESS_SIZE EQUAL 32)
|
||||
|
||||
# Use DPKG architecture, if available.
|
||||
IF (${DPKG_ARCH})
|
||||
|
||||
@@ -13,10 +13,6 @@ include(LLCommon)
|
||||
# set up platform specific lists of files that need to be copied
|
||||
###################################################################
|
||||
if(WINDOWS)
|
||||
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
|
||||
set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
|
||||
include(InstallRequiredSystemLibrariesAL)
|
||||
|
||||
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug")
|
||||
set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo")
|
||||
set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release")
|
||||
@@ -82,34 +78,19 @@ if(WINDOWS)
|
||||
endif(ADDRESS_SIZE EQUAL 64)
|
||||
|
||||
if(NOT DISABLE_TCMALLOC)
|
||||
set(debug_files ${debug_files} libtcmalloc_minimal-debug.dll)
|
||||
set(release_files ${release_files} libtcmalloc_minimal.dll)
|
||||
list(APPEND debug_files libtcmalloc_minimal-debug.dll)
|
||||
list(APPEND release_files libtcmalloc_minimal.dll)
|
||||
endif(NOT DISABLE_TCMALLOC)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
set(debug_files ${debug_files} fmodL.dll)
|
||||
set(release_files ${release_files} fmod.dll)
|
||||
endif (FMODSTUDIO)
|
||||
if(OPENAL)
|
||||
list(APPEND debug_files alut.dll OpenAL32.dll)
|
||||
list(APPEND release_files alut.dll OpenAL32.dll)
|
||||
endif(OPENAL)
|
||||
|
||||
foreach(redistfullfile IN LISTS CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
|
||||
get_filename_component(redistfilepath ${redistfullfile} DIRECTORY )
|
||||
get_filename_component(redistfilename ${redistfullfile} NAME)
|
||||
copy_if_different(
|
||||
${redistfilepath}
|
||||
"${SHARED_LIB_STAGING_DIR_RELEASE}"
|
||||
out_targets
|
||||
${redistfilename}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${redistfilepath}
|
||||
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
|
||||
out_targets
|
||||
${redistfilename}
|
||||
)
|
||||
set(third_party_targets ${third_party_targets} ${out_targets})
|
||||
endforeach()
|
||||
if (USE_FMODSTUDIO)
|
||||
list(APPEND debug_files fmodL.dll)
|
||||
list(APPEND release_files fmod.dll)
|
||||
endif (USE_FMODSTUDIO)
|
||||
|
||||
elseif(DARWIN)
|
||||
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug/Resources")
|
||||
@@ -143,10 +124,10 @@ elseif(DARWIN)
|
||||
libndofdev.dylib
|
||||
)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
if (USE_FMODSTUDIO)
|
||||
list(APPEND debug_files libfmodL.dylib)
|
||||
list(APPEND release_files libfmod.dylib)
|
||||
endif (FMODSTUDIO)
|
||||
endif (USE_FMODSTUDIO)
|
||||
|
||||
elseif(LINUX)
|
||||
# linux is weird, multiple side by side configurations aren't supported
|
||||
@@ -176,29 +157,20 @@ elseif(LINUX)
|
||||
set(release_files
|
||||
libapr-1.so.0
|
||||
libaprutil-1.so.0
|
||||
libatk-1.0.so
|
||||
libexpat.so
|
||||
libexpat.so.1
|
||||
libfreetype.so.6.12.3
|
||||
libfreetype.so.6
|
||||
libfreetype.so
|
||||
libGLOD.so
|
||||
libgmodule-2.0.so
|
||||
libgobject-2.0.so
|
||||
libopenal.so
|
||||
libfontconfig.so.1.8.0
|
||||
libfontconfig.so.1
|
||||
libfontconfig.so
|
||||
)
|
||||
|
||||
if (USE_TCMALLOC)
|
||||
set(release_files ${release_files} "libtcmalloc_minimal.so")
|
||||
list(APPEND release_files "libtcmalloc_minimal.so")
|
||||
endif (USE_TCMALLOC)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
set(debug_files ${debug_files} "libfmodL.so")
|
||||
set(release_files ${release_files} "libfmod.so")
|
||||
endif (FMODSTUDIO)
|
||||
if (USE_FMODSTUDIO)
|
||||
list(APPEND debug_files "libfmodL.so")
|
||||
list(APPEND release_files "libfmod.so")
|
||||
endif (USE_FMODSTUDIO)
|
||||
|
||||
else(WINDOWS)
|
||||
message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")
|
||||
|
||||
22
indra/cmake/CrashPad.cmake
Normal file
22
indra/cmake/CrashPad.cmake
Normal file
@@ -0,0 +1,22 @@
|
||||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
include(Variables)
|
||||
|
||||
if(USE_CRASHPAD)
|
||||
|
||||
if (USESYSTEMLIBS)
|
||||
else (USESYSTEMLIBS)
|
||||
use_prebuilt_binary(crashpad)
|
||||
if (WINDOWS)
|
||||
set(CRASHPAD_LIBRARIES
|
||||
debug client.lib util.lib base.lib
|
||||
optimized client.lib util.lib base.lib)
|
||||
elseif (LINUX)
|
||||
|
||||
else (DARWIN)
|
||||
|
||||
endif ()
|
||||
set(CRASHPAD_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/crashpad)
|
||||
endif (USESYSTEMLIBS)
|
||||
|
||||
endif()
|
||||
@@ -1,24 +1,11 @@
|
||||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
if (STANDALONE)
|
||||
if (LINUX)
|
||||
include(FindPkgConfig)
|
||||
|
||||
pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)
|
||||
|
||||
elseif (LINUX)
|
||||
use_prebuilt_binary(dbus-glib)
|
||||
set(DBUSGLIB_FOUND ON FORCE BOOL)
|
||||
set(DBUSGLIB_INCLUDE_DIRS
|
||||
${LIBS_PREBUILT_DIR}/include/dbus
|
||||
)
|
||||
# We don't need to explicitly link against dbus-glib itself, because
|
||||
# the viewer probes for the system's copy at runtime.
|
||||
set(DBUSGLIB_LIBRARIES
|
||||
gobject-2.0
|
||||
glib-2.0
|
||||
)
|
||||
endif (STANDALONE)
|
||||
endif (LINUX)
|
||||
|
||||
if (DBUSGLIB_FOUND)
|
||||
set(DBUSGLIB ON CACHE BOOL "Build with dbus-glib message bus support.")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# -*- cmake -*-
|
||||
|
||||
include(Variables)
|
||||
if (FMODSTUDIO)
|
||||
if (USE_FMODSTUDIO)
|
||||
use_prebuilt_binary(fmodstudio)
|
||||
if(WINDOWS)
|
||||
set(lib_suffix .dll)
|
||||
@@ -30,22 +30,21 @@ if (FMODSTUDIO)
|
||||
optimized ${FMOD_LINK_LIBRARY_RELEASE}
|
||||
)
|
||||
|
||||
set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodstudio)
|
||||
endif(FMODSTUDIO)
|
||||
set(FMODSTUDIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodstudio)
|
||||
endif(USE_FMODSTUDIO)
|
||||
|
||||
if(FMOD_LIBRARY_RELEASE AND FMOD_INCLUDE_DIR)
|
||||
if(FMOD_LIBRARY_RELEASE AND FMODSTUDIO_INCLUDE_DIR)
|
||||
set(FMOD ON)
|
||||
if (NOT FMOD_LIBRARY_DEBUG) #Use release library in debug configuration if debug library is absent.
|
||||
set(FMOD_LIBRARY_DEBUG ${FMOD_LIBRARY_RELEASE})
|
||||
endif (NOT FMOD_LIBRARY_DEBUG)
|
||||
else (FMOD_LIBRARY_RELEASE AND FMOD_INCLUDE_DIR)
|
||||
else (FMOD_LIBRARY_RELEASE AND FMODSTUDIO_INCLUDE_DIR)
|
||||
message(STATUS "No support for FMOD Studio audio (need to set FMODSTUDIO_SDK_DIR?)")
|
||||
set(FMOD OFF)
|
||||
set(FMODSTUDIO OFF)
|
||||
endif (FMOD_LIBRARY_RELEASE AND FMOD_INCLUDE_DIR)
|
||||
set(USE_FMODSTUDIO OFF)
|
||||
endif (FMOD_LIBRARY_RELEASE AND FMODSTUDIO_INCLUDE_DIR)
|
||||
|
||||
if (FMOD)
|
||||
message(STATUS "Building with FMOD Studio audio support")
|
||||
set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODSTUDIO=1")
|
||||
endif (FMOD)
|
||||
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
# -*- cmake -*-
|
||||
|
||||
# - Find Google BreakPad
|
||||
# Find the Google BreakPad includes and library
|
||||
# This module defines
|
||||
# BREAKPAD_INCLUDE_DIRECTORIES, where to find the Goole BreakPad includes.
|
||||
# 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_INCLUDE_DIRECTORIES common/using_std_string.h PATH_SUFFIXES google_breakpad)
|
||||
|
||||
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_INCLUDE_DIRECTORIES)
|
||||
SET(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES ${BREAKPAD_EXCEPTION_HANDLER_LIBRARY})
|
||||
SET(BREAKPAD_EXCEPTION_HANDLER_FOUND "YES")
|
||||
ELSE (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_INCLUDE_DIRECTORIES)
|
||||
SET(BREAKPAD_EXCEPTION_HANDLER_FOUND "NO")
|
||||
ENDIF (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_INCLUDE_DIRECTORIES)
|
||||
|
||||
|
||||
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_INCLUDE_DIRECTORIES
|
||||
)
|
||||
@@ -1,14 +1,14 @@
|
||||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
if (STANDALONE)
|
||||
if (LINUX)
|
||||
include(FindPkgConfig)
|
||||
|
||||
pkg_check_modules(FREETYPE REQUIRED freetype2)
|
||||
else (STANDALONE)
|
||||
else (LINUX)
|
||||
use_prebuilt_binary(freetype)
|
||||
set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/freetype2)
|
||||
set(FREETYPE_LIBRARIES freetype)
|
||||
endif (STANDALONE)
|
||||
endif (LINUX)
|
||||
|
||||
link_directories(${FREETYPE_LIBRARY_DIRS})
|
||||
|
||||
116
indra/cmake/GeneratePrecompiledHeader.cmake
Normal file
116
indra/cmake/GeneratePrecompiledHeader.cmake
Normal file
@@ -0,0 +1,116 @@
|
||||
# -*- cmake -*-
|
||||
|
||||
# Distributed under the MIT Software License
|
||||
# Copyright (c) 2015-2017 Borislav Stanimirov
|
||||
# Modifications Copyright (c) 2019 Cinder Roxley. All rights reserved.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
# this software and associated documentation files (the "Software"), to deal in
|
||||
# the Software without restriction, including without limitation the rights to
|
||||
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
# of the Software, and to permit persons to whom the Software is furnished to do
|
||||
# so, subject to the following conditions:
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
# target_precompiled_header
|
||||
#
|
||||
# Sets a precompiled header for a given target
|
||||
# Args:
|
||||
# TARGET_NAME - Name of the target. Only valid after add_library or add_executable
|
||||
# PRECOMPILED_HEADER - Header file to precompile
|
||||
# PRECOMPILED_SOURCE - MSVC specific source to do the actual precompilation. Ignored on other platforms
|
||||
#
|
||||
|
||||
macro(target_precompiled_header TARGET_NAME PRECOMPILED_HEADER PRECOMPILED_SOURCE)
|
||||
get_filename_component(PRECOMPILED_HEADER_NAME ${PRECOMPILED_HEADER} NAME)
|
||||
|
||||
if(MSVC)
|
||||
get_filename_component(PRECOMPILED_SOURCE_NAME ${PRECOMPILED_SOURCE} NAME)
|
||||
get_filename_component(PRECOMPILED_HEADER_PATH ${PRECOMPILED_HEADER} DIRECTORY)
|
||||
target_include_directories(${TARGET_NAME} PRIVATE ${PRECOMPILED_HEADER_PATH}) # fixes occasional IntelliSense glitches
|
||||
|
||||
get_filename_component(PRECOMPILED_HEADER_WE ${PRECOMPILED_HEADER} NAME_WE)
|
||||
if(GEN_IS_MULTI_CONFIG)
|
||||
set(PRECOMPILED_BINARY "$(IntDir)/${PRECOMPILED_HEADER_WE}.pch")
|
||||
else()
|
||||
set(PRECOMPILED_BINARY "${CMAKE_CURRENT_BINARY_DIR}/${PRECOMPILED_HEADER_WE}.pch")
|
||||
endif()
|
||||
|
||||
set_source_files_properties(${PRECOMPILED_SOURCE} PROPERTIES
|
||||
COMPILE_OPTIONS "/Yc${PRECOMPILED_HEADER_NAME};/Fp${PRECOMPILED_BINARY}"
|
||||
OBJECT_OUTPUTS "${PRECOMPILED_BINARY}")
|
||||
|
||||
get_target_property(TARGET_SOURCES ${TARGET_NAME} SOURCES)
|
||||
foreach(src ${TARGET_SOURCES})
|
||||
if(${src} MATCHES \\.\(cpp|cxx|cc\)$)
|
||||
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${src}" PROPERTIES
|
||||
COMPILE_OPTIONS "/Yu${PRECOMPILED_HEADER_NAME};/FI${PRECOMPILED_HEADER_NAME};/Fp${PRECOMPILED_BINARY}"
|
||||
OBJECT_DEPENDS "${PRECOMPILED_BINARY}"
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
#set_target_properties(${TARGET_NAME} PROPERTIES
|
||||
# COMPILE_OPTIONS "/Yu${PRECOMPILED_HEADER_NAME};/FI${PRECOMPILED_HEADER_NAME};/Fp${PRECOMPILED_BINARY}")
|
||||
|
||||
target_sources(${TARGET_NAME} PRIVATE ${PRECOMPILED_SOURCE} ${PRECOMPILED_HEADER})
|
||||
elseif(CMAKE_GENERATOR STREQUAL Xcode)
|
||||
set_target_properties(
|
||||
${TARGET_NAME}
|
||||
PROPERTIES
|
||||
XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${PRECOMPILED_HEADER}"
|
||||
XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES"
|
||||
)
|
||||
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
# Create and set output directory.
|
||||
set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${PRECOMPILED_HEADER_NAME}.gch")
|
||||
make_directory(${OUTPUT_DIR})
|
||||
set(OUTPUT_NAME "${OUTPUT_DIR}/${PRECOMPILED_HEADER_NAME}.gch")
|
||||
|
||||
# Export compiler flags via a generator to a response file
|
||||
set(PCH_FLAGS_FILE "${OUTPUT_DIR}/${PRECOMPILED_HEADER_NAME}.rsp")
|
||||
set(_include_directories "$<TARGET_PROPERTY:${TARGET_NAME},INCLUDE_DIRECTORIES>")
|
||||
set(_compile_definitions "$<TARGET_PROPERTY:${TARGET_NAME},COMPILE_DEFINITIONS>")
|
||||
set(_compile_flags "$<TARGET_PROPERTY:${TARGET_NAME},COMPILE_FLAGS>")
|
||||
set(_compile_options "$<TARGET_PROPERTY:${TARGET_NAME},COMPILE_OPTIONS>")
|
||||
set(_include_directories "$<$<BOOL:${_include_directories}>:-I$<JOIN:${_include_directories},\n-I>\n>")
|
||||
set(_compile_definitions "$<$<BOOL:${_compile_definitions}>:-D$<JOIN:${_compile_definitions},\n-D>\n>")
|
||||
set(_compile_flags "$<$<BOOL:${_compile_flags}>:$<JOIN:${_compile_flags},\n>\n>")
|
||||
set(_compile_options "$<$<BOOL:${_compile_options}>:$<JOIN:${_compile_options},\n>\n>")
|
||||
file(GENERATE OUTPUT "${PCH_FLAGS_FILE}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}\n")
|
||||
|
||||
# Gather global compiler options, definitions, etc.
|
||||
string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" CXX_FLAGS)
|
||||
set(COMPILER_FLAGS "${${CXX_FLAGS}} ${CMAKE_CXX_FLAGS}")
|
||||
separate_arguments(COMPILER_FLAGS)
|
||||
|
||||
# Add a custom target for building the precompiled header.
|
||||
add_custom_command(
|
||||
OUTPUT ${OUTPUT_NAME}
|
||||
COMMAND ${CMAKE_CXX_COMPILER} @${PCH_FLAGS_FILE} ${COMPILER_FLAGS} -x c++-header -o ${OUTPUT_NAME} ${PRECOMPILED_HEADER}
|
||||
DEPENDS ${PRECOMPILED_HEADER})
|
||||
add_custom_target(${TARGET_NAME}_gch DEPENDS ${OUTPUT_NAME})
|
||||
add_dependencies(${TARGET_NAME} ${TARGET_NAME}_gch)
|
||||
|
||||
# set_target_properties(${TARGET_NAME} PROPERTIES COMPILE_FLAGS "-include ${PRECOMPILED_HEADER_NAME} -Winvalid-pch")
|
||||
get_target_property(SOURCE_FILES ${TARGET_NAME} SOURCES)
|
||||
get_target_property(asdf ${TARGET_NAME} COMPILE_FLAGS)
|
||||
foreach(SOURCE_FILE ${SOURCE_FILES})
|
||||
if(SOURCE_FILE MATCHES \\.\(c|cc|cxx|cpp\)$)
|
||||
set_source_files_properties(${SOURCE_FILE} PROPERTIES
|
||||
COMPILE_FLAGS "-include ${OUTPUT_DIR}/${PRECOMPILED_HEADER_NAME} -Winvalid-pch"
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown generator for target_precompiled_header. [${CMAKE_CXX_COMPILER_ID}]")
|
||||
endif()
|
||||
endmacro(target_precompiled_header)
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
if (STANDALONE)
|
||||
set(BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED ON)
|
||||
include(FindGoogleBreakpad)
|
||||
else (STANDALONE)
|
||||
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
|
||||
# I think it's incorrect: the second one should go --Aleric
|
||||
set(BREAKPAD_INCLUDE_DIRECTORIES
|
||||
${LIBS_PREBUILT_DIR}/include/google_breakpad
|
||||
${LIBS_PREBUILT_LEGACY_DIR}/include/google_breakpad
|
||||
${LIBS_PREBUILT_DIR}/include/google_breakpad/google_breakpad
|
||||
${LIBS_PREBUILT_LEGACY_DIR}/include/google_breakpad/google_breakpad
|
||||
)
|
||||
endif (STANDALONE)
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
include(Prebuilt)
|
||||
|
||||
if(WORD_SIZE EQUAL 64)
|
||||
if(ADDRESS_SIZE EQUAL 64)
|
||||
set(DISABLE_TCMALLOC TRUE)
|
||||
endif(WORD_SIZE EQUAL 64)
|
||||
endif(ADDRESS_SIZE EQUAL 64)
|
||||
|
||||
if (STANDALONE)
|
||||
include(FindGooglePerfTools)
|
||||
else (STANDALONE)
|
||||
if (LINUX OR WINDOWS AND NOT WORD_SIZE EQUAL 64)
|
||||
if (LINUX OR WINDOWS AND NOT ADDRESS_SIZE EQUAL 64)
|
||||
use_prebuilt_binary(gperftools)
|
||||
endif (LINUX OR WINDOWS AND NOT WORD_SIZE EQUAL 64)
|
||||
endif (LINUX OR WINDOWS AND NOT ADDRESS_SIZE EQUAL 64)
|
||||
if (WINDOWS AND NOT DISABLE_TCMALLOC)
|
||||
set(TCMALLOC_LIBRARIES libtcmalloc_minimal.lib)
|
||||
set(TCMALLOC_LINKER_FLAGS "/INCLUDE:\"__tcmalloc\"")
|
||||
|
||||
@@ -1,741 +0,0 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
InstallRequiredSystemLibraries
|
||||
------------------------------
|
||||
|
||||
Include this module to search for compiler-provided system runtime
|
||||
libraries and add install rules for them. Some optional variables
|
||||
may be set prior to including the module to adjust behavior:
|
||||
|
||||
``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS``
|
||||
Specify additional runtime libraries that may not be detected.
|
||||
After inclusion any detected libraries will be appended to this.
|
||||
|
||||
``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP``
|
||||
Set to TRUE to skip calling the :command:`install(PROGRAMS)` command to
|
||||
allow the includer to specify its own install rule, using the value of
|
||||
``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS`` to get the list of libraries.
|
||||
|
||||
``CMAKE_INSTALL_DEBUG_LIBRARIES``
|
||||
Set to TRUE to install the debug runtime libraries when available
|
||||
with MSVC tools.
|
||||
|
||||
``CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY``
|
||||
Set to TRUE to install only the debug runtime libraries with MSVC
|
||||
tools even if the release runtime libraries are also available.
|
||||
|
||||
``CMAKE_INSTALL_UCRT_LIBRARIES``
|
||||
Set to TRUE to install the Windows Universal CRT libraries for
|
||||
app-local deployment (e.g. to Windows XP). This is meaningful
|
||||
only with MSVC from Visual Studio 2015 or higher.
|
||||
|
||||
One may set a ``CMAKE_WINDOWS_KITS_10_DIR`` *environment variable*
|
||||
to an absolute path to tell CMake to look for Windows 10 SDKs in
|
||||
a custom location. The specified directory is expected to contain
|
||||
``Redist/ucrt/DLLs/*`` directories.
|
||||
|
||||
``CMAKE_INSTALL_MFC_LIBRARIES``
|
||||
Set to TRUE to install the MSVC MFC runtime libraries.
|
||||
|
||||
``CMAKE_INSTALL_OPENMP_LIBRARIES``
|
||||
Set to TRUE to install the MSVC OpenMP runtime libraries
|
||||
|
||||
``CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION``
|
||||
Specify the :command:`install(PROGRAMS)` command ``DESTINATION``
|
||||
option. If not specified, the default is ``bin`` on Windows
|
||||
and ``lib`` elsewhere.
|
||||
|
||||
``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS``
|
||||
Set to TRUE to disable warnings about required library files that
|
||||
do not exist. (For example, Visual Studio Express editions may
|
||||
not provide the redistributable files.)
|
||||
|
||||
``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT``
|
||||
Specify the :command:`install(PROGRAMS)` command ``COMPONENT``
|
||||
option. If not specified, no such option will be used.
|
||||
#]=======================================================================]
|
||||
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
|
||||
|
||||
set(_IRSL_HAVE_Intel FALSE)
|
||||
set(_IRSL_HAVE_MSVC FALSE)
|
||||
foreach(LANG IN ITEMS C CXX Fortran)
|
||||
if("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "Intel")
|
||||
if(NOT _IRSL_HAVE_Intel)
|
||||
get_filename_component(_Intel_basedir "${CMAKE_${LANG}_COMPILER}" PATH)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(_Intel_archdir intel64)
|
||||
else()
|
||||
set(_Intel_archdir x86)
|
||||
endif()
|
||||
set(_Intel_compiler_ver ${CMAKE_${LANG}_COMPILER_VERSION})
|
||||
if(WIN32)
|
||||
get_filename_component(_Intel_redistdir "${_Intel_basedir}/../../redist/${_Intel_archdir}/compiler" ABSOLUTE)
|
||||
elseif(APPLE)
|
||||
get_filename_component(_Intel_redistdir "${_Intel_basedir}/../../compiler/lib" ABSOLUTE)
|
||||
else()
|
||||
if(EXISTS "${_Intel_basedir}/../lib/${_Intel_archdir}_lin")
|
||||
get_filename_component(_Intel_redistdir "${_Intel_basedir}/../lib/${_Intel_archdir}" ABSOLUTE)
|
||||
else()
|
||||
get_filename_component(_Intel_redistdir "${_Intel_basedir}/../../compiler/lib/${_Intel_archdir}_lin" ABSOLUTE)
|
||||
endif()
|
||||
endif()
|
||||
set(_IRSL_HAVE_Intel TRUE)
|
||||
endif()
|
||||
elseif("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "MSVC")
|
||||
set(_IRSL_HAVE_MSVC TRUE)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(MSVC)
|
||||
file(TO_CMAKE_PATH "$ENV{SYSTEMROOT}" SYSTEMROOT)
|
||||
|
||||
if(CMAKE_CL_64)
|
||||
if(MSVC_VERSION GREATER 1599)
|
||||
# VS 10 and later:
|
||||
set(CMAKE_MSVC_ARCH x64)
|
||||
else()
|
||||
# VS 9 and earlier:
|
||||
set(CMAKE_MSVC_ARCH amd64)
|
||||
endif()
|
||||
else()
|
||||
set(CMAKE_MSVC_ARCH x86)
|
||||
endif()
|
||||
|
||||
get_filename_component(devenv_dir "${CMAKE_MAKE_PROGRAM}" PATH)
|
||||
get_filename_component(base_dir "${devenv_dir}/../.." ABSOLUTE)
|
||||
|
||||
if(MSVC_VERSION EQUAL 1300)
|
||||
set(__install__libs
|
||||
"${SYSTEMROOT}/system32/msvcp70.dll"
|
||||
"${SYSTEMROOT}/system32/msvcr70.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MSVC_VERSION EQUAL 1310)
|
||||
set(__install__libs
|
||||
"${SYSTEMROOT}/system32/msvcp71.dll"
|
||||
"${SYSTEMROOT}/system32/msvcr71.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MSVC_TOOLSET_VERSION EQUAL 80)
|
||||
# Find the runtime library redistribution directory.
|
||||
get_filename_component(msvc_install_dir
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0;InstallDir]" ABSOLUTE)
|
||||
if(DEFINED MSVC80_REDIST_DIR AND EXISTS "${MSVC80_REDIST_DIR}")
|
||||
set(MSVC_REDIST_DIR "${MSVC80_REDIST_DIR}") # use old cache entry
|
||||
endif()
|
||||
find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest
|
||||
PATHS
|
||||
"${msvc_install_dir}/../../VC/redist"
|
||||
"${base_dir}/VC/redist"
|
||||
)
|
||||
mark_as_advanced(MSVC_REDIST_DIR)
|
||||
set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT")
|
||||
|
||||
# Install the manifest that allows DLLs to be loaded from the
|
||||
# directory containing the executable.
|
||||
if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
|
||||
set(__install__libs
|
||||
"${MSVC_CRT_DIR}/Microsoft.VC80.CRT.manifest"
|
||||
"${MSVC_CRT_DIR}/msvcm80.dll"
|
||||
"${MSVC_CRT_DIR}/msvcp80.dll"
|
||||
"${MSVC_CRT_DIR}/msvcr80.dll"
|
||||
)
|
||||
else()
|
||||
set(__install__libs)
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_DEBUG_LIBRARIES)
|
||||
set(MSVC_CRT_DIR
|
||||
"${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugCRT")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_CRT_DIR}/Microsoft.VC80.DebugCRT.manifest"
|
||||
"${MSVC_CRT_DIR}/msvcm80d.dll"
|
||||
"${MSVC_CRT_DIR}/msvcp80d.dll"
|
||||
"${MSVC_CRT_DIR}/msvcr80d.dll"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MSVC_TOOLSET_VERSION EQUAL 90)
|
||||
# Find the runtime library redistribution directory.
|
||||
get_filename_component(msvc_install_dir
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0;InstallDir]" ABSOLUTE)
|
||||
get_filename_component(msvc_express_install_dir
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\9.0;InstallDir]" ABSOLUTE)
|
||||
if(DEFINED MSVC90_REDIST_DIR AND EXISTS "${MSVC90_REDIST_DIR}")
|
||||
set(MSVC_REDIST_DIR "${MSVC90_REDIST_DIR}") # use old cache entry
|
||||
endif()
|
||||
find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest
|
||||
PATHS
|
||||
"${msvc_install_dir}/../../VC/redist"
|
||||
"${msvc_express_install_dir}/../../VC/redist"
|
||||
"${base_dir}/VC/redist"
|
||||
)
|
||||
mark_as_advanced(MSVC_REDIST_DIR)
|
||||
set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT")
|
||||
|
||||
# Install the manifest that allows DLLs to be loaded from the
|
||||
# directory containing the executable.
|
||||
if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
|
||||
set(__install__libs
|
||||
"${MSVC_CRT_DIR}/Microsoft.VC90.CRT.manifest"
|
||||
"${MSVC_CRT_DIR}/msvcm90.dll"
|
||||
"${MSVC_CRT_DIR}/msvcp90.dll"
|
||||
"${MSVC_CRT_DIR}/msvcr90.dll"
|
||||
)
|
||||
else()
|
||||
set(__install__libs)
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_DEBUG_LIBRARIES)
|
||||
set(MSVC_CRT_DIR
|
||||
"${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugCRT")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_CRT_DIR}/Microsoft.VC90.DebugCRT.manifest"
|
||||
"${MSVC_CRT_DIR}/msvcm90d.dll"
|
||||
"${MSVC_CRT_DIR}/msvcp90d.dll"
|
||||
"${MSVC_CRT_DIR}/msvcr90d.dll"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(MSVC_REDIST_NAME "")
|
||||
set(_MSVC_DLL_VERSION "")
|
||||
set(_MSVC_IDE_VERSION "")
|
||||
if(MSVC_VERSION GREATER_EQUAL 2000)
|
||||
message(WARNING "MSVC ${MSVC_VERSION} not yet supported.")
|
||||
elseif(MSVC_VERSION_VERSION GREATER_EQUAL 143)
|
||||
message(WARNING "MSVC toolset v${MSVC_VERSION_VERSION} not yet supported.")
|
||||
elseif(MSVC_TOOLSET_VERSION EQUAL 142)
|
||||
set(MSVC_REDIST_NAME VC142)
|
||||
set(_MSVC_DLL_VERSION 140)
|
||||
set(_MSVC_IDE_VERSION 16)
|
||||
if(MSVC_VERSION EQUAL 1920)
|
||||
# VS2019 named this differently prior to update 1.
|
||||
set(MSVC_REDIST_NAME VC141)
|
||||
endif()
|
||||
elseif(MSVC_TOOLSET_VERSION EQUAL 141)
|
||||
set(MSVC_REDIST_NAME VC141)
|
||||
set(_MSVC_DLL_VERSION 140)
|
||||
set(_MSVC_IDE_VERSION 15)
|
||||
if(MSVC_VERSION EQUAL 1910)
|
||||
# VS2017 named this differently prior to update 3.
|
||||
set(MSVC_REDIST_NAME VC150)
|
||||
endif()
|
||||
elseif(MSVC_TOOLSET_VERSION)
|
||||
set(MSVC_REDIST_NAME VC${MSVC_TOOLSET_VERSION})
|
||||
math(EXPR _MSVC_DLL_VERSION "${MSVC_TOOLSET_VERSION} / 10 * 10")
|
||||
math(EXPR _MSVC_IDE_VERSION "${MSVC_TOOLSET_VERSION} / 10")
|
||||
endif()
|
||||
|
||||
set(_MSVCRT_DLL_VERSION "")
|
||||
set(_MSVCRT_IDE_VERSION "")
|
||||
if(_MSVC_IDE_VERSION GREATER_EQUAL 10)
|
||||
set(_MSVCRT_DLL_VERSION "${_MSVC_DLL_VERSION}")
|
||||
set(_MSVCRT_IDE_VERSION "${_MSVC_IDE_VERSION}")
|
||||
endif()
|
||||
|
||||
if(_MSVCRT_DLL_VERSION)
|
||||
set(v "${_MSVCRT_DLL_VERSION}")
|
||||
set(vs "${_MSVCRT_IDE_VERSION}")
|
||||
|
||||
# Find the runtime library redistribution directory.
|
||||
if(vs VERSION_LESS 15 AND DEFINED MSVC${vs}_REDIST_DIR AND EXISTS "${MSVC${vs}_REDIST_DIR}")
|
||||
set(MSVC_REDIST_DIR "${MSVC${vs}_REDIST_DIR}") # use old cache entry
|
||||
endif()
|
||||
if(NOT vs VERSION_LESS 15)
|
||||
set(_vs_redist_paths "")
|
||||
cmake_host_system_information(RESULT _vs_dir QUERY VS_${vs}_DIR) # undocumented query
|
||||
if(IS_DIRECTORY "${_vs_dir}")
|
||||
file(GLOB _vs_redist_paths "${_vs_dir}/VC/Redist/MSVC/*")
|
||||
endif()
|
||||
unset(_vs_dir)
|
||||
else()
|
||||
get_filename_component(_vs_dir
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${vs}.0;InstallDir]" ABSOLUTE)
|
||||
set(programfilesx86 "ProgramFiles(x86)")
|
||||
set(_vs_redist_paths
|
||||
"${_vs_dir}/../../VC/redist"
|
||||
"${base_dir}/VC/redist"
|
||||
"$ENV{ProgramFiles}/Microsoft Visual Studio ${vs}.0/VC/redist"
|
||||
"$ENV{${programfilesx86}}/Microsoft Visual Studio ${vs}.0/VC/redist"
|
||||
)
|
||||
unset(_vs_dir)
|
||||
unset(programfilesx86)
|
||||
endif()
|
||||
find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.CRT PATHS ${_vs_redist_paths})
|
||||
unset(_vs_redist_paths)
|
||||
mark_as_advanced(MSVC_REDIST_DIR)
|
||||
set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.CRT")
|
||||
|
||||
if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
|
||||
set(__install__libs
|
||||
"${MSVC_CRT_DIR}/msvcp${v}.dll"
|
||||
)
|
||||
if(NOT vs VERSION_LESS 14)
|
||||
file(GLOB __msvcr_dlls "${MSVC_CRT_DIR}/*.dll")
|
||||
list(APPEND __install__libs ${__msvcr_dlls})
|
||||
else()
|
||||
list(APPEND __install__libs "${MSVC_CRT_DIR}/msvcr${v}.dll")
|
||||
endif()
|
||||
else()
|
||||
set(__install__libs)
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_DEBUG_LIBRARIES)
|
||||
set(MSVC_CRT_DIR
|
||||
"${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.DebugCRT")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_CRT_DIR}/msvcp${v}d.dll"
|
||||
)
|
||||
if(NOT vs VERSION_LESS 14)
|
||||
list(APPEND __install__libs
|
||||
"${MSVC_CRT_DIR}/vcruntime${v}d.dll"
|
||||
"${MSVC_CRT_DIR}/concrt${v}d.dll"
|
||||
)
|
||||
else()
|
||||
list(APPEND __install__libs "${MSVC_CRT_DIR}/msvcr${v}d.dll")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_UCRT_LIBRARIES AND NOT vs VERSION_LESS 14)
|
||||
# Find the Windows Kits directory.
|
||||
get_filename_component(windows_kits_dir
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot10]" ABSOLUTE)
|
||||
set(programfilesx86 "ProgramFiles(x86)")
|
||||
if(";${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION};$ENV{UCRTVersion};$ENV{WindowsSDKVersion};" MATCHES [=[;(10\.[0-9.]+)[;\]]=])
|
||||
set(__ucrt_version "${CMAKE_MATCH_1}/")
|
||||
else()
|
||||
set(__ucrt_version "")
|
||||
endif()
|
||||
find_path(WINDOWS_KITS_DIR
|
||||
NAMES
|
||||
Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
|
||||
Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
|
||||
PATHS
|
||||
$ENV{CMAKE_WINDOWS_KITS_10_DIR}
|
||||
"${windows_kits_dir}"
|
||||
"$ENV{ProgramFiles}/Windows Kits/10"
|
||||
"$ENV{${programfilesx86}}/Windows Kits/10"
|
||||
)
|
||||
mark_as_advanced(WINDOWS_KITS_DIR)
|
||||
|
||||
# Glob the list of UCRT DLLs.
|
||||
if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
|
||||
if(EXISTS "${WINDOWS_KITS_DIR}/Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll")
|
||||
file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
|
||||
else()
|
||||
file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
|
||||
endif()
|
||||
list(APPEND __install__libs ${__ucrt_dlls})
|
||||
endif()
|
||||
if(CMAKE_INSTALL_DEBUG_LIBRARIES)
|
||||
if(EXISTS "${WINDOWS_KITS_DIR}/bin/${__ucrt_version}${CMAKE_MSVC_ARCH}/ucrt/ucrtbased.dll")
|
||||
file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${__ucrt_version}${CMAKE_MSVC_ARCH}/ucrt/*.dll")
|
||||
else()
|
||||
file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${CMAKE_MSVC_ARCH}/ucrt/*.dll")
|
||||
endif()
|
||||
list(APPEND __install__libs ${__ucrt_dlls})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_INSTALL_MFC_LIBRARIES)
|
||||
if(MSVC_VERSION EQUAL 1300)
|
||||
set(__install__libs ${__install__libs}
|
||||
"${SYSTEMROOT}/system32/mfc70.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MSVC_VERSION EQUAL 1310)
|
||||
set(__install__libs ${__install__libs}
|
||||
"${SYSTEMROOT}/system32/mfc71.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MSVC_VERSION EQUAL 1400)
|
||||
if(CMAKE_INSTALL_DEBUG_LIBRARIES)
|
||||
set(MSVC_MFC_DIR
|
||||
"${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugMFC")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/Microsoft.VC80.DebugMFC.manifest"
|
||||
"${MSVC_MFC_DIR}/mfc80d.dll"
|
||||
"${MSVC_MFC_DIR}/mfc80ud.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm80d.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm80ud.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
set(MSVC_MFC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFC")
|
||||
# Install the manifest that allows DLLs to be loaded from the
|
||||
# directory containing the executable.
|
||||
if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/Microsoft.VC80.MFC.manifest"
|
||||
"${MSVC_MFC_DIR}/mfc80.dll"
|
||||
"${MSVC_MFC_DIR}/mfc80u.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm80.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm80u.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
# include the language dll's for vs8 as well as the actual dll's
|
||||
set(MSVC_MFCLOC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFCLOC")
|
||||
# Install the manifest that allows DLLs to be loaded from the
|
||||
# directory containing the executable.
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFCLOC_DIR}/Microsoft.VC80.MFCLOC.manifest"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80chs.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80cht.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80enu.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80esp.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80deu.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80fra.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80ita.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80jpn.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc80kor.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MSVC_VERSION EQUAL 1500)
|
||||
if(CMAKE_INSTALL_DEBUG_LIBRARIES)
|
||||
set(MSVC_MFC_DIR
|
||||
"${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugMFC")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/Microsoft.VC90.DebugMFC.manifest"
|
||||
"${MSVC_MFC_DIR}/mfc90d.dll"
|
||||
"${MSVC_MFC_DIR}/mfc90ud.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm90d.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm90ud.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
set(MSVC_MFC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFC")
|
||||
# Install the manifest that allows DLLs to be loaded from the
|
||||
# directory containing the executable.
|
||||
if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/Microsoft.VC90.MFC.manifest"
|
||||
"${MSVC_MFC_DIR}/mfc90.dll"
|
||||
"${MSVC_MFC_DIR}/mfc90u.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm90.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm90u.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
# include the language dll's for vs9 as well as the actual dll's
|
||||
set(MSVC_MFCLOC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFCLOC")
|
||||
# Install the manifest that allows DLLs to be loaded from the
|
||||
# directory containing the executable.
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFCLOC_DIR}/Microsoft.VC90.MFCLOC.manifest"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90chs.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90cht.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90enu.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90esp.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90deu.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90fra.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90ita.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90jpn.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc90kor.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
set(_MFC_DLL_VERSION "")
|
||||
set(_MFC_IDE_VERSION "")
|
||||
if(_MSVC_IDE_VERSION GREATER_EQUAL 10)
|
||||
set(_MFC_DLL_VERSION ${_MSVC_DLL_VERSION})
|
||||
set(_MFC_IDE_VERSION ${_MSVC_IDE_VERSION})
|
||||
endif()
|
||||
|
||||
if(_MFC_DLL_VERSION)
|
||||
set(v "${_MFC_DLL_VERSION}")
|
||||
set(vs "${_MFC_IDE_VERSION}")
|
||||
|
||||
# Starting with VS 15 the MFC DLLs may be in a different directory.
|
||||
if (NOT vs VERSION_LESS 15)
|
||||
file(GLOB _MSVC_REDIST_DIRS "${MSVC_REDIST_DIR}/../*")
|
||||
find_path(MSVC_REDIST_MFC_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFC
|
||||
PATHS ${_MSVC_REDIST_DIRS} NO_DEFAULT_PATH)
|
||||
mark_as_advanced(MSVC_REDIST_MFC_DIR)
|
||||
unset(_MSVC_REDIST_DIRS)
|
||||
else()
|
||||
set(MSVC_REDIST_MFC_DIR "${MSVC_REDIST_DIR}")
|
||||
endif()
|
||||
|
||||
# Multi-Byte Character Set versions of MFC are available as optional
|
||||
# addon since Visual Studio 12. So for version 12 or higher, check
|
||||
# whether they are available and exclude them if they are not.
|
||||
|
||||
if(CMAKE_INSTALL_DEBUG_LIBRARIES)
|
||||
set(MSVC_MFC_DIR
|
||||
"${MSVC_REDIST_MFC_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.DebugMFC")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/mfc${v}ud.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm${v}ud.dll"
|
||||
)
|
||||
if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfc${v}d.dll")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/mfc${v}d.dll"
|
||||
)
|
||||
endif()
|
||||
if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfcm${v}d.dll")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/mfcm${v}d.dll"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(MSVC_MFC_DIR "${MSVC_REDIST_MFC_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFC")
|
||||
if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/mfc${v}u.dll"
|
||||
"${MSVC_MFC_DIR}/mfcm${v}u.dll"
|
||||
)
|
||||
if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfc${v}.dll")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/mfc${v}.dll"
|
||||
)
|
||||
endif()
|
||||
if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfcm${v}.dll")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFC_DIR}/mfcm${v}.dll"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# include the language dll's as well as the actual dll's
|
||||
set(MSVC_MFCLOC_DIR "${MSVC_REDIST_MFC_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFCLOC")
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}chs.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}cht.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}deu.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}enu.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}esn.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}fra.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}ita.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}jpn.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}kor.dll"
|
||||
"${MSVC_MFCLOC_DIR}/mfc${v}rus.dll"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# MSVC 8 was the first version with OpenMP
|
||||
# Furthermore, there is no debug version of this
|
||||
if(CMAKE_INSTALL_OPENMP_LIBRARIES AND _IRSL_HAVE_MSVC)
|
||||
set(_MSOMP_DLL_VERSION ${_MSVC_DLL_VERSION})
|
||||
set(_MSOMP_IDE_VERSION ${_MSVC_IDE_VERSION})
|
||||
|
||||
if(_MSOMP_DLL_VERSION)
|
||||
set(v "${_MSOMP_DLL_VERSION}")
|
||||
set(vs "${_MSOMP_IDE_VERSION}")
|
||||
set(MSVC_OPENMP_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.OPENMP")
|
||||
|
||||
if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
|
||||
set(__install__libs ${__install__libs}
|
||||
"${MSVC_OPENMP_DIR}/vcomp${v}.dll")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
foreach(lib
|
||||
${__install__libs}
|
||||
)
|
||||
if(EXISTS ${lib})
|
||||
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
|
||||
${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib})
|
||||
else()
|
||||
if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
|
||||
message(WARNING "system runtime library file does not exist: '${lib}'")
|
||||
# This warning indicates an incomplete Visual Studio installation
|
||||
# or a bug somewhere above here in this file.
|
||||
# If you would like to avoid this warning, fix the real problem, or
|
||||
# set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including
|
||||
# this file.
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(_IRSL_HAVE_Intel)
|
||||
unset(__install_libs)
|
||||
if(CMAKE_INSTALL_OPENMP_LIBRARIES)
|
||||
if(WIN32)
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/libiomp5md.dll" "${_Intel_redistdir}/libiompstubs5md.dll")
|
||||
elseif(APPLE)
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/libiomp5.dylib" "${_Intel_redistdir}/libiompstubs5.dylib")
|
||||
else()
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/libiomp5.so" "${_Intel_redistdir}/libiompstubs5.so")
|
||||
if(_Intel_compiler_ver VERSION_LESS 17)
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/libomp_db.so")
|
||||
endif()
|
||||
if(_Intel_compiler_ver VERSION_LESS 13)
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/libiompprof5.so")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
if(WIN32)
|
||||
set(__install_dirs "${_Intel_redistdir}/1033")
|
||||
if(EXISTS "${_Intel_redistdir}/1041")
|
||||
list(APPEND __install_dirs "${_Intel_redistdir}/1041")
|
||||
endif()
|
||||
if(_Intel_compiler_ver VERSION_LESS 18)
|
||||
list(APPEND __install_dirs "${_Intel_redistdir}/irml" "${_Intel_redistdir}/irml_c")
|
||||
endif()
|
||||
foreach(__Intel_lib IN ITEMS cilkrts20.dll libchkp.dll libioffload_host.dll libirngmd.dll
|
||||
libmmd.dll libmmdd.dll libmpx.dll liboffload.dll svml_dispmd.dll)
|
||||
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL Intel OR CMAKE_CXX_COMPILER_ID STREQUAL Intel)
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/libgfxoffload.dll")
|
||||
endif()
|
||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL Intel)
|
||||
foreach(__Intel_lib IN ITEMS ifdlg100.dll libicaf.dll libifcoremd.dll libifcoremdd.dll libifcorert.dll libifcorertd.dll libifportmd.dll)
|
||||
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
endif()
|
||||
elseif(APPLE)
|
||||
foreach(__Intel_lib IN ITEMS libchkp.dylib libcilkrts.5.dylib libcilkrts.dylib libimf.dylib libintlc.dylib libirc.dylib libirng.dylib libsvml.dylib)
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL Intel OR CMAKE_CXX_COMPILER_ID STREQUAL Intel)
|
||||
if(_Intel_compiler_ver VERSION_LESS 17)
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/libistrconv.dylib")
|
||||
endif()
|
||||
endif()
|
||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL Intel)
|
||||
foreach(__Intel_lib IN ITEMS libifcore.dylib libifcoremt.dylib libifport.dylib libifportmt.dylib)
|
||||
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
endif()
|
||||
else()
|
||||
foreach(__Intel_lib IN ITEMS libchkp.so libcilkrts.so libcilkrts.so.5 libimf.so libintlc.so libintlc.so.5 libirc.so libpdbx.so libpdbx.so.5 libsvml.so)
|
||||
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
if(_Intel_compiler_ver VERSION_GREATER_EQUAL 13)
|
||||
foreach(__Intel_lib IN ITEMS libirng.so liboffload.so liboffload.so.5)
|
||||
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
endif()
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL Intel OR CMAKE_CXX_COMPILER_ID STREQUAL Intel)
|
||||
set(__install_dirs "${_Intel_redistdir}/irml")
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/cilk_db.so")
|
||||
if(_Intel_compiler_ver VERSION_GREATER_EQUAL 15)
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/libistrconv.so" "${_Intel_redistdir}/libgfxoffload.so")
|
||||
endif()
|
||||
endif()
|
||||
if(_Intel_compiler_ver VERSION_GREATER_EQUAL 16)
|
||||
foreach(__Intel_lib IN ITEMS libioffload_host.so libioffload_host.so.5 libioffload_target.so libioffload_target.so.5 libmpx.so offload_main)
|
||||
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
endif()
|
||||
if(_Intel_compiler_ver VERSION_LESS 15)
|
||||
foreach(__Intel_lib IN ITEMS libcxaguard.so libcxaguard.so.5)
|
||||
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
endif()
|
||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL Intel)
|
||||
foreach(__Intel_lib IN ITEMS libicaf.so libifcore.so libifcore.so.5 libifcoremt.so libifcoremt.so.5 libifport.so libifport.so.5)
|
||||
|
||||
list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
foreach(lib IN LISTS __install_libs)
|
||||
if(EXISTS ${lib})
|
||||
list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib})
|
||||
else()
|
||||
if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
|
||||
message(WARNING "system runtime library file does not exist: '${lib}'")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
foreach(dir IN LISTS __install_dirs)
|
||||
if(EXISTS ${dir})
|
||||
list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_DIRECTORIES ${dir})
|
||||
else()
|
||||
if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
|
||||
message(WARNING "system runtime library file does not exist: '${dir}'")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(WATCOM)
|
||||
get_filename_component( CompilerPath ${CMAKE_C_COMPILER} PATH )
|
||||
if(CMAKE_C_COMPILER_VERSION)
|
||||
set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
|
||||
else()
|
||||
set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
|
||||
endif()
|
||||
string(REGEX MATCHALL "[0-9]+" _watcom_version_list "${_compiler_version}")
|
||||
list(GET _watcom_version_list 0 _watcom_major)
|
||||
list(GET _watcom_version_list 1 _watcom_minor)
|
||||
set( __install__libs
|
||||
${CompilerPath}/clbr${_watcom_major}${_watcom_minor}.dll
|
||||
${CompilerPath}/mt7r${_watcom_major}${_watcom_minor}.dll
|
||||
${CompilerPath}/plbr${_watcom_major}${_watcom_minor}.dll )
|
||||
foreach(lib
|
||||
${__install__libs}
|
||||
)
|
||||
if(EXISTS ${lib})
|
||||
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
|
||||
${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib})
|
||||
else()
|
||||
if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
|
||||
message(WARNING "system runtime library file does not exist: '${lib}'")
|
||||
# This warning indicates an incomplete Watcom installation
|
||||
# or a bug somewhere above here in this file.
|
||||
# If you would like to avoid this warning, fix the real problem, or
|
||||
# set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including
|
||||
# this file.
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
|
||||
# Include system runtime libraries in the installation if any are
|
||||
# specified by CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS.
|
||||
if(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
|
||||
if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP)
|
||||
if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION)
|
||||
if(WIN32)
|
||||
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION bin)
|
||||
else()
|
||||
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION lib)
|
||||
endif()
|
||||
endif()
|
||||
if(CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT)
|
||||
set(_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT
|
||||
COMPONENT ${CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT})
|
||||
endif()
|
||||
install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
|
||||
DESTINATION ${CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION}
|
||||
${_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT}
|
||||
)
|
||||
|
||||
install(DIRECTORY ${CMAKE_INSTALL_SYSTEM_RUNTIME_DIRECTORIES}
|
||||
DESTINATION ${CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION}
|
||||
${_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
cmake_policy(POP)
|
||||
@@ -7,6 +7,6 @@ set(LLAUDIO_INCLUDE_DIRS
|
||||
${LIBS_OPEN_DIR}/llaudio
|
||||
)
|
||||
|
||||
add_definitions(-DOV_EXCLUDE_STATIC_CALLBACKS)
|
||||
#add_definitions(-DOV_EXCLUDE_STATIC_CALLBACKS)
|
||||
|
||||
set(LLAUDIO_LIBRARIES llaudio ${OPENAL_LIBRARIES})
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
include(APR)
|
||||
include(Boost)
|
||||
include(EXPAT)
|
||||
include(Linking)
|
||||
include(ZLIB)
|
||||
|
||||
if (DARWIN)
|
||||
@@ -10,7 +11,6 @@ if (DARWIN)
|
||||
find_library(CORESERVICES_LIBRARY CoreServices)
|
||||
endif (DARWIN)
|
||||
|
||||
|
||||
set(LLCOMMON_INCLUDE_DIRS
|
||||
${LIBS_OPEN_DIR}/cwdebug
|
||||
${LIBS_OPEN_DIR}/llcommon
|
||||
@@ -19,14 +19,9 @@ set(LLCOMMON_INCLUDE_DIRS
|
||||
${Boost_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
if (LINUX)
|
||||
# In order to support using ld.gold on linux, we need to explicitely
|
||||
# specify all libraries that llcommon uses.
|
||||
# llcommon uses `clock_gettime' which is provided by librt on linux.
|
||||
set(LLCOMMON_LIBRARIES llcommon rt)
|
||||
else (LINUX)
|
||||
set(LLCOMMON_LIBRARIES llcommon)
|
||||
endif (LINUX)
|
||||
set(LLCOMMON_LIBRARIES llcommon
|
||||
fmt::fmt
|
||||
)
|
||||
|
||||
set(LLCOMMON_LINK_SHARED OFF CACHE BOOL "Build the llcommon target as a shared library.")
|
||||
if(LLCOMMON_LINK_SHARED)
|
||||
|
||||
@@ -5,10 +5,4 @@ set(LLPLUGIN_INCLUDE_DIRS
|
||||
${LIBS_OPEN_DIR}/llplugin
|
||||
)
|
||||
|
||||
if (LINUX)
|
||||
# In order to support using ld.gold on linux, we need to explicitely
|
||||
# specify all libraries that llplugin uses.
|
||||
set(LLPLUGIN_LIBRARIES llplugin pthread)
|
||||
else (LINUX)
|
||||
set(LLPLUGIN_LIBRARIES llplugin)
|
||||
endif (LINUX)
|
||||
set(LLPLUGIN_LIBRARIES llplugin)
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
# -*- cmake -*-
|
||||
|
||||
include(OpenGL)
|
||||
include(Prebuilt)
|
||||
|
||||
if (STANDALONE)
|
||||
if (LINUX)
|
||||
include(FindSDL)
|
||||
|
||||
# This should be done by FindSDL. Sigh.
|
||||
@@ -12,14 +11,7 @@ if (STANDALONE)
|
||||
SDL_INCLUDE_DIR
|
||||
SDL_LIBRARY
|
||||
)
|
||||
else (STANDALONE)
|
||||
if (LINUX)
|
||||
use_prebuilt_binary(SDL)
|
||||
set (SDL_FOUND TRUE)
|
||||
set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
set (SDL_LIBRARY SDL)
|
||||
endif (LINUX)
|
||||
endif (STANDALONE)
|
||||
endif (LINUX)
|
||||
|
||||
if (SDL_FOUND)
|
||||
add_definitions(-DLL_SDL=1)
|
||||
|
||||
@@ -27,15 +27,15 @@ endif (WINDOWS)
|
||||
# windows) and CMAKE_BUILD_TYPE on Makefile based generators (like linux). The reason for this is
|
||||
# that CMAKE_BUILD_TYPE is essentially meaningless at configuration time for IDE generators and
|
||||
# CMAKE_CFG_INTDIR is meaningless at build time for Makefile generators
|
||||
if(WINDOWS OR DARWIN)
|
||||
if(GEN_IS_MULTI_CONFIG)
|
||||
# the cmake xcode and VS generators implicitly append ${CMAKE_CFG_INTDIR} to the library paths for us
|
||||
# fortunately both windows and darwin are case insensitive filesystems so this works.
|
||||
set(AUTOBUILD_LIBS_INSTALL_DIRS "${AUTOBUILD_INSTALL_DIR}/lib/")
|
||||
else(WINDOWS OR DARWIN)
|
||||
else()
|
||||
# else block is for linux and any other makefile based generators
|
||||
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
|
||||
set(AUTOBUILD_LIBS_INSTALL_DIRS ${AUTOBUILD_INSTALL_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER})
|
||||
endif(WINDOWS OR DARWIN)
|
||||
endif()
|
||||
|
||||
if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
||||
# When we're building something other than Release, append the
|
||||
@@ -48,9 +48,11 @@ link_directories(${AUTOBUILD_LIBS_INSTALL_DIRS})
|
||||
|
||||
if (LINUX)
|
||||
set(DL_LIBRARY dl)
|
||||
set(RT_LIBRARY rt)
|
||||
set(PTHREAD_LIBRARY pthread)
|
||||
else (LINUX)
|
||||
set(DL_LIBRARY "")
|
||||
set(RT_LIBRARY "")
|
||||
set(PTHREAD_LIBRARY "")
|
||||
endif (LINUX)
|
||||
|
||||
@@ -73,6 +75,6 @@ else (WINDOWS)
|
||||
set(WINDOWS_LIBRARIES "")
|
||||
endif (WINDOWS)
|
||||
|
||||
mark_as_advanced(DL_LIBRARY PTHREAD_LIBRARY WINDOWS_LIBRARIES)
|
||||
mark_as_advanced(DL_LIBRARY RT_LIBRARY PTHREAD_LIBRARY WINDOWS_LIBRARIES)
|
||||
|
||||
endif(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
include(Prebuilt)
|
||||
include(Variables)
|
||||
|
||||
if (NVAPI)
|
||||
if (USE_NVAPI)
|
||||
if (WINDOWS)
|
||||
use_prebuilt_binary(nvapi)
|
||||
if (WORD_SIZE EQUAL 32)
|
||||
if (ADDRESS_SIZE EQUAL 32)
|
||||
set(NVAPI_LIBRARY nvapi)
|
||||
elseif (WORD_SIZE EQUAL 64)
|
||||
elseif (ADDRESS_SIZE EQUAL 64)
|
||||
set(NVAPI_LIBRARY nvapi64)
|
||||
endif (WORD_SIZE EQUAL 32)
|
||||
endif (ADDRESS_SIZE EQUAL 32)
|
||||
else (WINDOWS)
|
||||
set(NVAPI_LIBRARY "")
|
||||
endif (WINDOWS)
|
||||
else (NVAPI)
|
||||
else (USE_NVAPI)
|
||||
set(NVAPI_LIBRARY "")
|
||||
endif (NVAPI)
|
||||
endif (USE_NVAPI)
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
include(Linking)
|
||||
include(Prebuilt)
|
||||
|
||||
if(NOT FMOD)
|
||||
if (LINUX)
|
||||
set(OPENAL ON CACHE BOOL "Enable OpenAL")
|
||||
else (LINUX)
|
||||
@@ -10,6 +9,7 @@ else (LINUX)
|
||||
endif (LINUX)
|
||||
|
||||
if (OPENAL)
|
||||
set(OPENAL_LIB_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/AL")
|
||||
if (STANDALONE)
|
||||
include(FindPkgConfig)
|
||||
include(FindOpenAL)
|
||||
@@ -18,15 +18,16 @@ if (OPENAL)
|
||||
else (STANDALONE)
|
||||
use_prebuilt_binary(openal)
|
||||
endif (STANDALONE)
|
||||
if(WINDOWS)
|
||||
set(OPENAL_LIBRARIES
|
||||
openal
|
||||
OpenAL32
|
||||
alut
|
||||
)
|
||||
set(OPENAL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
||||
endif (OPENAL)
|
||||
|
||||
if (OPENAL)
|
||||
else()
|
||||
set(OPENAL_LIBRARIES
|
||||
openal
|
||||
alut
|
||||
)
|
||||
endif()
|
||||
message(STATUS "Building with OpenAL audio support")
|
||||
set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL")
|
||||
endif (OPENAL)
|
||||
endif(NOT FMOD)
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
include(FreeType)
|
||||
|
||||
if (STANDALONE)
|
||||
if (LINUX)
|
||||
include(FindPkgConfig)
|
||||
|
||||
if (LINUX)
|
||||
|
||||
set(PKGCONFIG_PACKAGES
|
||||
atk
|
||||
cairo
|
||||
@@ -21,8 +19,8 @@ if (STANDALONE)
|
||||
pangox
|
||||
pangoxft
|
||||
sdl
|
||||
x11
|
||||
)
|
||||
endif (LINUX)
|
||||
|
||||
foreach(pkg ${PKGCONFIG_PACKAGES})
|
||||
pkg_check_modules(${pkg} REQUIRED ${pkg})
|
||||
@@ -31,39 +29,6 @@ if (STANDALONE)
|
||||
list(APPEND UI_LIBRARIES ${${pkg}_LIBRARIES})
|
||||
add_definitions(${${pkg}_CFLAGS_OTHERS})
|
||||
endforeach(pkg)
|
||||
else (STANDALONE)
|
||||
if (LINUX)
|
||||
use_prebuilt_binary(gtk-atk-pango-glib)
|
||||
set(UI_LIBRARIES
|
||||
atk-1.0
|
||||
cairo
|
||||
gdk-x11-2.0
|
||||
gdk_pixbuf-2.0
|
||||
Xinerama
|
||||
glib-2.0
|
||||
gio-2.0
|
||||
gmodule-2.0
|
||||
gobject-2.0
|
||||
gthread-2.0
|
||||
gtk-x11-2.0
|
||||
pango-1.0
|
||||
pangoft2-1.0
|
||||
pangoxft-1.0
|
||||
pangocairo-1.0
|
||||
pixman-1
|
||||
X11
|
||||
${FREETYPE_LIBRARIES}
|
||||
)
|
||||
endif (LINUX)
|
||||
|
||||
include_directories (
|
||||
${LIBS_PREBUILT_DIR}/include
|
||||
)
|
||||
foreach(include ${${LL_ARCH}_INCLUDES})
|
||||
include_directories(${LIBS_PREBUILT_DIR}/include/${include})
|
||||
endforeach(include)
|
||||
endif (STANDALONE)
|
||||
|
||||
if (LINUX)
|
||||
add_definitions(-DLL_GTK=1 -DLL_X11=1)
|
||||
endif (LINUX)
|
||||
|
||||
@@ -17,24 +17,59 @@ if(NOT DEFINED COMMON_CMAKE_DIR)
|
||||
set(COMMON_CMAKE_DIR "${CMAKE_SOURCE_DIR}/cmake")
|
||||
endif(NOT DEFINED COMMON_CMAKE_DIR)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# https://blog.kitware.com/upcoming-in-cmake-2-8-12-osx-rpath-support/
|
||||
set(CMAKE_MACOSX_RPATH ON)
|
||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
|
||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH OFF)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||
option(GEN_IS_MULTI_CONFIG "" ${_isMultiConfig})
|
||||
mark_as_advanced(GEN_IS_MULTI_CONFIG)
|
||||
|
||||
set(LIBS_CLOSED_PREFIX)
|
||||
set(LIBS_OPEN_PREFIX)
|
||||
set(SCRIPTS_PREFIX ../scripts)
|
||||
set(VIEWER_PREFIX)
|
||||
set(INTEGRATION_TESTS_PREFIX)
|
||||
option(LL_TESTS "Build and run unit and integration tests (disable for build timing runs to reduce variation" OFF)
|
||||
|
||||
option(LL_TESTS "Build and run unit and integration tests (disable for build timing runs to reduce variation" OFF)
|
||||
option(BUILD_TESTING "Build test suite" OFF)
|
||||
option(UNATTENDED "Disable use of uneeded tooling for automated builds" OFF)
|
||||
|
||||
# Compiler and toolchain options
|
||||
option(USESYSTEMLIBS "Use libraries from your system rather than Linden-supplied prebuilt libraries." OFF)
|
||||
option(STANDALONE "Use libraries from your system rather than Linden-supplied prebuilt libraries." OFF)
|
||||
if (USESYSTEMLIBS)
|
||||
set(STANDALONE ON)
|
||||
elseif (STANDALONE)
|
||||
set(USESYSTEMLIBS ON)
|
||||
endif (USESYSTEMLIBS)
|
||||
option(INCREMENTAL_LINK "Use incremental linking on win32 builds (enable for faster links on some machines)" OFF)
|
||||
option(USE_PRECOMPILED_HEADERS "Enable use of precompiled header directives where supported." ON)
|
||||
option(USE_LTO "Enable Whole Program Optimization and related folding and binary reduction routines" OFF)
|
||||
option(UNATTENDED "Disable use of uneeded tooling for automated builds" OFF)
|
||||
option(USE_LTO "Enable global and interprocedural optimizations" OFF)
|
||||
|
||||
# Configure crash reporting
|
||||
option(USE_CRASHPAD "Build support for crashpad reporting engine" OFF)
|
||||
if (DEFINED ENV{VIEWER_USE_CRASHPAD})
|
||||
set(USE_CRASHPAD $ENV{VIEWER_USE_CRASHPAD})
|
||||
endif()
|
||||
|
||||
if (DEFINED ENV{VIEWER_CRASHPAD_URL})
|
||||
set(CRASHPAD_URL $ENV{VIEWER_CRASHPAD_URL} CACHE STRING "Viewer Channel Base Name")
|
||||
else()
|
||||
set(CRASHPAD_URL "" CACHE STRING "Crashpad endpoint url")
|
||||
endif()
|
||||
|
||||
set(VIEWER_SYMBOL_FILE "" CACHE STRING "Name of tarball into which to place symbol files")
|
||||
|
||||
# Media Plugins
|
||||
option(ENABLE_MEDIA_PLUGINS "Turn off building media plugins if they are imported by third-party library mechanism" ON)
|
||||
option(LIBVLCPLUGIN "Turn off building support for libvlc plugin" ON)
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(LIBVLCPLUGIN OFF)
|
||||
endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
@@ -44,13 +79,11 @@ set(DISABLE_TCMALLOC OFF CACHE BOOL "Disable linkage of TCMalloc. (64bit builds
|
||||
set(DISABLE_FATAL_WARNINGS TRUE CACHE BOOL "Set this to FALSE to enable fatal warnings.")
|
||||
|
||||
# Audio Engines
|
||||
option(FMODSTUDIO "Build with support for the FMOD Studio audio engine" ON)
|
||||
|
||||
# Window implementation
|
||||
option(LLWINDOW_SDL2 "Use SDL2 for window and input handling" OFF)
|
||||
option(USE_FMODSTUDIO "Build with support for the FMOD Studio audio engine" OFF)
|
||||
|
||||
# Proprietary Library Features
|
||||
option(NVAPI "Use nvapi driver interface library" OFF)
|
||||
option(USE_NVAPI "Use nvapi driver interface library" OFF)
|
||||
|
||||
|
||||
if(LIBS_CLOSED_DIR)
|
||||
file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR)
|
||||
@@ -77,7 +110,7 @@ if (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
|
||||
set(INSTALL_PROPRIETARY ON CACHE BOOL "Install proprietary binaries")
|
||||
endif (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
|
||||
set(TEMPLATE_VERIFIER_OPTIONS "" CACHE STRING "Options for scripts/template_verifier.py")
|
||||
set(TEMPLATE_VERIFIER_MASTER_URL "https://forge.alchemyviewer.org/alchemy/tools/Master-Message-Template/raw/master/message_template.msg" CACHE STRING "Location of the master message template")
|
||||
set(TEMPLATE_VERIFIER_MASTER_URL "https://git.alchemyviewer.org/alchemy/master-message-template/raw/master/message_template.msg" CACHE STRING "Location of the master message template")
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
|
||||
@@ -86,7 +119,6 @@ endif (NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
# If someone has specified an address size, use that to determine the
|
||||
# architecture. Otherwise, let the architecture specify the address size.
|
||||
set(ADDRESS_SIZE ${WORD_SIZE})
|
||||
if (ADDRESS_SIZE EQUAL 32)
|
||||
#message(STATUS "ADDRESS_SIZE is 32")
|
||||
set(ARCH i686)
|
||||
@@ -94,34 +126,32 @@ elseif (ADDRESS_SIZE EQUAL 64)
|
||||
#message(STATUS "ADDRESS_SIZE is 64")
|
||||
set(ARCH x86_64)
|
||||
else (ADDRESS_SIZE EQUAL 32)
|
||||
#message(STATUS "ADDRESS_SIZE is UNRECOGNIZED: '${ADDRESS_SIZE}'")
|
||||
# Use Python's platform.machine() since uname -m isn't available everywhere.
|
||||
# Even if you can assume cygwin uname -m, the answer depends on whether
|
||||
# you're running 32-bit cygwin or 64-bit cygwin! But even 32-bit Python will
|
||||
# report a 64-bit processor.
|
||||
execute_process(COMMAND
|
||||
"${Python2_EXECUTABLE}" "-c"
|
||||
"import platform; print platform.machine()"
|
||||
OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
# We expect values of the form i386, i686, x86_64, AMD64.
|
||||
# In CMake, expressing ARCH.endswith('64') is awkward:
|
||||
string(LENGTH "${ARCH}" ARCH_LENGTH)
|
||||
math(EXPR ARCH_LEN_2 "${ARCH_LENGTH} - 2")
|
||||
string(SUBSTRING "${ARCH}" ${ARCH_LEN_2} 2 ARCH_LAST_2)
|
||||
if (ARCH_LAST_2 STREQUAL 64)
|
||||
#message(STATUS "ARCH is detected as 64; ARCH is ${ARCH}")
|
||||
set(ADDRESS_SIZE 64)
|
||||
else()
|
||||
#message(STATUS "ARCH is detected as 32; ARCH is ${ARCH}")
|
||||
set(ADDRESS_SIZE 32)
|
||||
endif ()
|
||||
#message(STATUS "ADDRESS_SIZE is UNDEFINED")
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
message(STATUS "Size of void pointer is detected as 8; ARCH is 64-bit")
|
||||
set(ARCH x86_64)
|
||||
set(ADDRESS_SIZE 64)
|
||||
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
message(STATUS "Size of void pointer is detected as 4; ARCH is 32-bit")
|
||||
set(ADDRESS_SIZE 32)
|
||||
set(ARCH i686)
|
||||
else()
|
||||
message(FATAL_ERROR "Unkown Architecture!")
|
||||
endif()
|
||||
endif (ADDRESS_SIZE EQUAL 32)
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||
set(WINDOWS ON BOOL FORCE)
|
||||
if (ADDRESS_SIZE EQUAL 64)
|
||||
set(LL_ARCH ${ARCH}_win64)
|
||||
set(LL_ARCH_DIR ${ARCH}-win64)
|
||||
elseif (ADDRESS_SIZE EQUAL 32)
|
||||
set(LL_ARCH ${ARCH}_win32)
|
||||
set(LL_ARCH_DIR ${ARCH}-win32)
|
||||
endif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
else()
|
||||
message(FATAL_ERROR "Unkown Architecture!")
|
||||
endif ()
|
||||
endif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
set(LINUX ON BOOL FORCE)
|
||||
@@ -152,7 +182,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(DARWIN 1)
|
||||
set(DARWIN ON BOOL FORCE)
|
||||
|
||||
# Architecture
|
||||
set(CMAKE_OSX_SYSROOT macosx10.14)
|
||||
@@ -192,57 +222,62 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(LL_ARCH_DIR universal-darwin)
|
||||
endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
|
||||
# Platform specific
|
||||
if (WINDOWS)
|
||||
option(LLWINDOW_SDL2 "Use SDL2 for window and input handling. Windows only" OFF)
|
||||
endif()
|
||||
|
||||
# Default deploy grid
|
||||
set(GRID agni CACHE STRING "Target Grid")
|
||||
|
||||
set(VIEWER_PRODUCT_NAME "Singularity" CACHE STRING "Viewer Base Name")
|
||||
string(TOLOWER ${VIEWER_PRODUCT_NAME} VIEWER_PRODUCT_NAME_LOWER)
|
||||
if (DEFINED ENV{VIEWER_CHANNEL_BASE})
|
||||
set(VIEWER_CHANNEL_BASE $ENV{VIEWER_CHANNEL_BASE} CACHE STRING "Viewer Channel Base Name" FORCE)
|
||||
else()
|
||||
set(VIEWER_CHANNEL_BASE "Singularity" CACHE STRING "Viewer Channel Base Name")
|
||||
endif()
|
||||
|
||||
if (DEFINED ENV{VIEWER_CHANNEL_TYPE})
|
||||
set(VIEWER_CHANNEL_TYPE $ENV{VIEWER_CHANNEL_TYPE} CACHE STRING "Viewer Channel Type Name" FORCE)
|
||||
else()
|
||||
set(VIEWER_CHANNEL_TYPE "Test" CACHE STRING "Viewer Channel Type Name")
|
||||
endif()
|
||||
|
||||
if (DEFINED ENV{VIEWER_CHANNEL_CODENAME})
|
||||
set(VIEWER_CHANNEL_CODENAME $ENV{VIEWER_CHANNEL_CODENAME} CACHE STRING "Viewer Channel Code Name for Project type" FORCE)
|
||||
else()
|
||||
set(VIEWER_CHANNEL_CODENAME "Default" CACHE STRING "Viewer Channel Code Name for Project type")
|
||||
endif()
|
||||
|
||||
if("${VIEWER_CHANNEL_TYPE}" STREQUAL "Project")
|
||||
set(VIEWER_CHANNEL "${VIEWER_CHANNEL_BASE} ${VIEWER_CHANNEL_TYPE} ${VIEWER_CHANNEL_CODENAME}")
|
||||
else()
|
||||
set(VIEWER_CHANNEL "${VIEWER_CHANNEL_BASE} ${VIEWER_CHANNEL_TYPE}")
|
||||
endif()
|
||||
|
||||
string(TOLOWER "${VIEWER_CHANNEL_BASE}" VIEWER_BRANDING_ID)
|
||||
string(REPLACE " " "-" VIEWER_BRANDING_ID ${VIEWER_BRANDING_ID})
|
||||
set(VIEWER_BINARY_NAME "${VIEWER_BRANDING_ID}-bin" CACHE STRING
|
||||
"The name of the viewer executable to create.")
|
||||
|
||||
set(VIEWER_CHANNEL_BASE "Test" CACHE STRING "Viewer Channel Name")
|
||||
set(VIEWER_CHANNEL "${VIEWER_PRODUCT_NAME} ${VIEWER_CHANNEL_BASE}")
|
||||
string(TOLOWER ${VIEWER_CHANNEL} VIEWER_CHANNEL_LOWER)
|
||||
string(REPLACE " " "" VIEWER_CHANNEL_ONEWORD ${VIEWER_CHANNEL})
|
||||
set(VIEWER_CHANNEL_NOSPACE ${VIEWER_CHANNEL_ONEWORD} CACHE STRING "Prefix used for resulting artifacts.")
|
||||
|
||||
option(VIEWER_CHANNEL_GRK "Greek character(s) to represent the viewer channel for support purposes, override only for special branches" "")
|
||||
if (NOT VIEWER_CHANNEL_GRK)
|
||||
if (VIEWER_CHANNEL_BASE MATCHES "Test")
|
||||
set(VIEWER_CHANNEL_GRK "\\u03C4") # "τ"
|
||||
elseif (VIEWER_CHANNEL_BASE MATCHES "Alpha")
|
||||
set(VIEWER_CHANNEL_GRK "\\u03B1") # "α"
|
||||
elseif (VIEWER_CHANNEL_BASE MATCHES "Beta")
|
||||
set(VIEWER_CHANNEL_GRK "\\u03B2") # "β"
|
||||
endif ()
|
||||
if (VIEWER_CHANNEL_TYPE MATCHES "Test")
|
||||
set(VIEWER_CHANNEL_GRK "\\u03C4") # "τ"
|
||||
elseif (VIEWER_CHANNEL_TYPE MATCHES "Alpha")
|
||||
set(VIEWER_CHANNEL_GRK "\\u03B1") # "α"
|
||||
elseif (VIEWER_CHANNEL_TYPE MATCHES "Beta")
|
||||
set(VIEWER_CHANNEL_GRK "\\u03B2") # "β"
|
||||
else()
|
||||
set(VIEWER_CHANNEL_GRK "")
|
||||
endif ()
|
||||
endif (NOT VIEWER_CHANNEL_GRK)
|
||||
|
||||
if(VIEWER_CHANNEL_LOWER MATCHES "^${VIEWER_PRODUCT_NAME_LOWER} release")
|
||||
set(VIEWER_PACKAGE_ID "${VIEWER_PRODUCT_NAME}Release")
|
||||
set(VIEWER_EXE_STRING "${VIEWER_PRODUCT_NAME}Viewer")
|
||||
set(VIEWER_SHORTCUT_STRING "${VIEWER_PRODUCT_NAME} Viewer")
|
||||
else()
|
||||
set(VIEWER_PACKAGE_ID ${VIEWER_CHANNEL_ONEWORD})
|
||||
set(VIEWER_EXE_STRING ${VIEWER_CHANNEL_ONEWORD})
|
||||
set(VIEWER_SHORTCUT_STRING ${VIEWER_CHANNEL})
|
||||
endif()
|
||||
|
||||
set(VIEWER_CHANNEL_NOSPACE ${VIEWER_CHANNEL_ONEWORD} CACHE STRING "Prefix used for resulting artifacts.")
|
||||
|
||||
set(VIEWER_BRANDING_ID "singularity" CACHE STRING "Viewer branding id")
|
||||
|
||||
option(ENABLE_SIGNING "Enable signing the viewer" OFF)
|
||||
set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.")
|
||||
|
||||
set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")
|
||||
# Compiler and toolchain options
|
||||
option(USESYSTEMLIBS "Use libraries from your system rather than Linden-supplied prebuilt libraries." OFF)
|
||||
option(STANDALONE "Use libraries from your system rather than Linden-supplied prebuilt libraries." OFF)
|
||||
if (USESYSTEMLIBS)
|
||||
set(STANDALONE ON)
|
||||
elseif (STANDALONE)
|
||||
set(USESYSTEMLIBS ON)
|
||||
endif (USESYSTEMLIBS)
|
||||
|
||||
|
||||
|
||||
source_group("CMake Rules" FILES CMakeLists.txt)
|
||||
|
||||
endif(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
|
||||
|
||||
@@ -3,9 +3,6 @@ include(Prebuilt)
|
||||
|
||||
if (NOT STANDALONE)
|
||||
use_prebuilt_binary(slvoice)
|
||||
if(LINUX)
|
||||
use_prebuilt_binary(fontconfig)
|
||||
endif(LINUX)
|
||||
else (NOT STANDALONE)
|
||||
# Download there even when using standalone.
|
||||
set(STANDALONE OFF)
|
||||
@@ -16,4 +13,9 @@ else (NOT STANDALONE)
|
||||
set(STANDALONE ON)
|
||||
endif(NOT STANDALONE)
|
||||
|
||||
if(LINUX)
|
||||
include(FindPkgConfig)
|
||||
pkg_check_modules(FONTCONFIG REQUIRED fontconfig)
|
||||
endif(LINUX)
|
||||
|
||||
use_prebuilt_binary(fonts)
|
||||
|
||||
62
indra/deps/CMakeLists.txt
Normal file
62
indra/deps/CMakeLists.txt
Normal file
@@ -0,0 +1,62 @@
|
||||
project(deps)
|
||||
|
||||
include(FetchContent)
|
||||
|
||||
set(CMAKE_FOLDER "Third Party")
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
FetchContent_Declare(
|
||||
Catch2
|
||||
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
||||
GIT_TAG v2.11.0
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_Declare(
|
||||
fmt
|
||||
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
|
||||
GIT_TAG 8d78045e7cb44d39ad4cd95dd27816b8749e1944
|
||||
)
|
||||
FetchContent_Declare(
|
||||
nlohmann_json
|
||||
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
||||
GIT_TAG v3.7.3
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_Declare(
|
||||
absl
|
||||
GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git
|
||||
GIT_TAG 768eb2ca2857342673fcd462792ce04b8bac3fa3
|
||||
)
|
||||
|
||||
# This is a hack because absl has dumb cmake
|
||||
set(OLD_BUILD_TEST ${BUILD_TESTING})
|
||||
set(BUILD_TESTING OFF)
|
||||
FetchContent_MakeAvailable(absl)
|
||||
set(BUILD_TESTING ${OLD_BUILD_TEST})
|
||||
|
||||
# Supress warnings inside abseil under MSVC
|
||||
if(WINDOWS)
|
||||
target_compile_options(absl_strings PRIVATE /wd4018)
|
||||
target_compile_options(absl_str_format_internal PRIVATE /wd4018)
|
||||
target_compile_options(absl_flags_usage_internal PRIVATE /wd4018)
|
||||
endif()
|
||||
|
||||
|
||||
if (BUILD_TESTING)
|
||||
FetchContent_MakeAvailable(Catch2)
|
||||
endif()
|
||||
|
||||
#Download the rest of the libraries
|
||||
FetchContent_MakeAvailable(fmt)
|
||||
|
||||
# Typically you don't care so much for a third party library's tests to be
|
||||
# run from your own project's code.
|
||||
set(JSON_BuildTests OFF CACHE INTERNAL "")
|
||||
|
||||
# If you only include this third party in PRIVATE source files, you do not
|
||||
# need to install it when your main project gets installed.
|
||||
set(JSON_Install OFF CACHE INTERNAL "")
|
||||
FetchContent_MakeAvailable(nlohmann_json)
|
||||
|
||||
unset(CMAKE_FOLDER)
|
||||
unset(CMAKE_POSITION_INDEPENDENT_CODE)
|
||||
@@ -26,6 +26,7 @@ set(openjpeg_SOURCE_FILES
|
||||
mct.c
|
||||
mqc.c
|
||||
openjpeg.c
|
||||
opj_malloc.c
|
||||
phix_manager.c
|
||||
pi.c
|
||||
ppix_manager.c
|
||||
|
||||
@@ -31,11 +31,16 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#define OPJ_SKIP_POISON
|
||||
#include "opj_includes.h"
|
||||
|
||||
#ifdef __SSE__
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
|
||||
#include "opj_includes.h"
|
||||
#if defined(__GNUC__)
|
||||
#pragma GCC poison malloc calloc realloc free
|
||||
#endif
|
||||
|
||||
/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */
|
||||
/*@{*/
|
||||
@@ -499,7 +504,7 @@ void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec) {
|
||||
/* <summary> */
|
||||
/* Determine maximum computed resolution level for inverse wavelet transform */
|
||||
/* </summary> */
|
||||
static int dwt_decode_max_resolution(opj_tcd_resolution_t* restrict r, int i) {
|
||||
static int dwt_decode_max_resolution(opj_tcd_resolution_t* OPJ_RESTRICT r, int i) {
|
||||
int mr = 1;
|
||||
int w;
|
||||
while( --i ) {
|
||||
@@ -531,7 +536,7 @@ static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int numres, DWT1DFN dwt_1
|
||||
v.mem = h.mem;
|
||||
|
||||
while( --numres) {
|
||||
int * restrict tiledp = tilec->data;
|
||||
int * OPJ_RESTRICT tiledp = tilec->data;
|
||||
int j;
|
||||
|
||||
++tr;
|
||||
@@ -565,48 +570,49 @@ static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int numres, DWT1DFN dwt_1
|
||||
opj_aligned_free(h.mem);
|
||||
}
|
||||
|
||||
static void v4dwt_interleave_h(v4dwt_t* restrict w, float* restrict a, int x, int size){
|
||||
float* restrict bi = (float*) (w->wavelet + w->cas);
|
||||
static void v4dwt_interleave_h(v4dwt_t* OPJ_RESTRICT w, float* OPJ_RESTRICT a, int x, int size) {
|
||||
float* OPJ_RESTRICT bi = (float*)(w->wavelet + w->cas);
|
||||
int count = w->sn;
|
||||
int i, k;
|
||||
for(k = 0; k < 2; ++k){
|
||||
if (count + 3 * x < size && ((size_t) a & 0x0f) == 0 && ((size_t) bi & 0x0f) == 0 && (x & 0x0f) == 0) {
|
||||
for (k = 0; k < 2; ++k) {
|
||||
if (count + 3 * x < size && ((size_t)a & 0x0f) == 0 && ((size_t)bi & 0x0f) == 0 && (x & 0x0f) == 0) {
|
||||
/* Fast code path */
|
||||
for(i = 0; i < count; ++i){
|
||||
for (i = 0; i < count; ++i) {
|
||||
int j = i;
|
||||
bi[i*8 ] = a[j];
|
||||
bi[i * 8] = a[j];
|
||||
j += x;
|
||||
bi[i*8 + 1] = a[j];
|
||||
bi[i * 8 + 1] = a[j];
|
||||
j += x;
|
||||
bi[i*8 + 2] = a[j];
|
||||
bi[i * 8 + 2] = a[j];
|
||||
j += x;
|
||||
bi[i*8 + 3] = a[j];
|
||||
bi[i * 8 + 3] = a[j];
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
/* Slow code path */
|
||||
for(i = 0; i < count; ++i){
|
||||
int j = i;
|
||||
bi[i*8 ] = a[j];
|
||||
j += x;
|
||||
if(j > size) continue;
|
||||
bi[i*8 + 1] = a[j];
|
||||
j += x;
|
||||
if(j > size) continue;
|
||||
bi[i*8 + 2] = a[j];
|
||||
j += x;
|
||||
if(j > size) continue;
|
||||
bi[i*8 + 3] = a[j];
|
||||
for (i = 0; i < count; ++i) {
|
||||
int j = i;
|
||||
bi[i * 8] = a[j];
|
||||
j += x;
|
||||
if (j > size) continue;
|
||||
bi[i * 8 + 1] = a[j];
|
||||
j += x;
|
||||
if (j > size) continue;
|
||||
bi[i * 8 + 2] = a[j];
|
||||
j += x;
|
||||
if (j > size) continue;
|
||||
bi[i * 8 + 3] = a[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
bi = (float*) (w->wavelet + 1 - w->cas);
|
||||
bi = (float*)(w->wavelet + 1 - w->cas);
|
||||
a += w->sn;
|
||||
size -= w->sn;
|
||||
count = w->dn;
|
||||
}
|
||||
}
|
||||
|
||||
static void v4dwt_interleave_v(v4dwt_t* restrict v , float* restrict a , int x){
|
||||
v4* restrict bi = v->wavelet + v->cas;
|
||||
static void v4dwt_interleave_v(v4dwt_t* OPJ_RESTRICT v , float* OPJ_RESTRICT a , int x){
|
||||
v4* OPJ_RESTRICT bi = v->wavelet + v->cas;
|
||||
int i;
|
||||
for(i = 0; i < v->sn; ++i){
|
||||
memcpy(&bi[i*2], &a[i*x], 4 * sizeof(float));
|
||||
@@ -621,7 +627,7 @@ static void v4dwt_interleave_v(v4dwt_t* restrict v , float* restrict a , int x){
|
||||
#ifdef __SSE__
|
||||
|
||||
static void v4dwt_decode_step1_sse(v4* w, int count, const __m128 c){
|
||||
__m128* restrict vw = (__m128*) w;
|
||||
__m128* OPJ_RESTRICT vw = (__m128*) w;
|
||||
int i;
|
||||
/* 4x unrolled loop */
|
||||
for(i = 0; i < count >> 2; ++i){
|
||||
@@ -642,22 +648,39 @@ static void v4dwt_decode_step1_sse(v4* w, int count, const __m128 c){
|
||||
}
|
||||
|
||||
static void v4dwt_decode_step2_sse(v4* l, v4* w, int k, int m, __m128 c){
|
||||
__m128* restrict vl = (__m128*) l;
|
||||
__m128* restrict vw = (__m128*) w;
|
||||
__m128* OPJ_RESTRICT vl = (__m128*) l;
|
||||
__m128* OPJ_RESTRICT vw = (__m128*) w;
|
||||
int i;
|
||||
__m128 tmp1, tmp2, tmp3;
|
||||
tmp1 = vl[0];
|
||||
for(i = 0; i < m; ++i){
|
||||
for (i = 0; i < m - 3; i += 4) {
|
||||
__m128 tmp4, tmp5, tmp6, tmp7, tmp8, tmp9;
|
||||
tmp2 = vw[-1];
|
||||
tmp3 = vw[0];
|
||||
tmp4 = vw[1];
|
||||
tmp5 = vw[2];
|
||||
tmp6 = vw[3];
|
||||
tmp7 = vw[4];
|
||||
tmp8 = vw[5];
|
||||
tmp9 = vw[6];
|
||||
vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c));
|
||||
vw[1] = _mm_add_ps(tmp4, _mm_mul_ps(_mm_add_ps(tmp3, tmp5), c));
|
||||
vw[3] = _mm_add_ps(tmp6, _mm_mul_ps(_mm_add_ps(tmp5, tmp7), c));
|
||||
vw[5] = _mm_add_ps(tmp8, _mm_mul_ps(_mm_add_ps(tmp7, tmp9), c));
|
||||
tmp1 = tmp9;
|
||||
vw += 8;
|
||||
}
|
||||
for ( ; i < m; ++i) {
|
||||
tmp2 = vw[-1];
|
||||
tmp3 = vw[ 0];
|
||||
vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c));
|
||||
tmp1 = tmp3;
|
||||
vw += 2;
|
||||
}
|
||||
vl = vw - 2;
|
||||
if(m >= k){
|
||||
return;
|
||||
}
|
||||
vl = vw - 2;
|
||||
c = _mm_add_ps(c, c);
|
||||
c = _mm_mul_ps(c, vl[0]);
|
||||
for(; m < k; ++m){
|
||||
@@ -670,7 +693,7 @@ static void v4dwt_decode_step2_sse(v4* l, v4* w, int k, int m, __m128 c){
|
||||
#else
|
||||
|
||||
static void v4dwt_decode_step1(v4* w, int count, const float c){
|
||||
float* restrict fw = (float*) w;
|
||||
float* OPJ_RESTRICT fw = (float*) w;
|
||||
int i;
|
||||
for(i = 0; i < count; ++i){
|
||||
float tmp1 = fw[i*8 ];
|
||||
@@ -685,8 +708,8 @@ static void v4dwt_decode_step1(v4* w, int count, const float c){
|
||||
}
|
||||
|
||||
static void v4dwt_decode_step2(v4* l, v4* w, int k, int m, float c){
|
||||
float* restrict fl = (float*) l;
|
||||
float* restrict fw = (float*) w;
|
||||
float* OPJ_RESTRICT fl = (float*) l;
|
||||
float* OPJ_RESTRICT fw = (float*) w;
|
||||
int i;
|
||||
for(i = 0; i < m; ++i){
|
||||
float tmp1_1 = fl[0];
|
||||
@@ -737,42 +760,44 @@ static void v4dwt_decode_step2(v4* l, v4* w, int k, int m, float c){
|
||||
/* <summary> */
|
||||
/* Inverse 9-7 wavelet transform in 1-D. */
|
||||
/* </summary> */
|
||||
static void v4dwt_decode(v4dwt_t* restrict dwt){
|
||||
static void v4dwt_decode(v4dwt_t* OPJ_RESTRICT dwt){
|
||||
int a, b;
|
||||
if(dwt->cas == 0) {
|
||||
if(!((dwt->dn > 0) || (dwt->sn > 1))){
|
||||
if (dwt->dn <= 0 && dwt->sn <= 1) {
|
||||
return;
|
||||
}
|
||||
a = 0;
|
||||
b = 1;
|
||||
}else{
|
||||
if(!((dwt->sn > 0) || (dwt->dn > 1))) {
|
||||
if (dwt->sn <= 0 && dwt->dn <= 1) {
|
||||
return;
|
||||
}
|
||||
a = 1;
|
||||
b = 0;
|
||||
}
|
||||
v4* OPJ_RESTRICT waveleta = dwt->wavelet + a;
|
||||
v4* OPJ_RESTRICT waveletb = dwt->wavelet + b;
|
||||
#ifdef __SSE__
|
||||
v4dwt_decode_step1_sse(dwt->wavelet+a, dwt->sn, _mm_set1_ps(K));
|
||||
v4dwt_decode_step1_sse(dwt->wavelet+b, dwt->dn, _mm_set1_ps(c13318));
|
||||
v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_delta));
|
||||
v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_gamma));
|
||||
v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_beta));
|
||||
v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_alpha));
|
||||
v4dwt_decode_step1_sse(waveleta, dwt->sn, _mm_set1_ps(K));
|
||||
v4dwt_decode_step1_sse(waveletb, dwt->dn, _mm_set1_ps(c13318));
|
||||
v4dwt_decode_step2_sse(waveletb, waveleta + 1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_delta));
|
||||
v4dwt_decode_step2_sse(waveleta, waveletb + 1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_gamma));
|
||||
v4dwt_decode_step2_sse(waveletb, waveleta + 1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_beta));
|
||||
v4dwt_decode_step2_sse(waveleta, waveletb + 1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_alpha));
|
||||
#else
|
||||
v4dwt_decode_step1(dwt->wavelet+a, dwt->sn, K);
|
||||
v4dwt_decode_step1(dwt->wavelet+b, dwt->dn, c13318);
|
||||
v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_delta);
|
||||
v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_gamma);
|
||||
v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_beta);
|
||||
v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_alpha);
|
||||
v4dwt_decode_step1(waveleta, dwt->sn, K);
|
||||
v4dwt_decode_step1(waveletb, dwt->dn, c13318);
|
||||
v4dwt_decode_step2(waveletb, waveleta + 1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_delta);
|
||||
v4dwt_decode_step2(waveleta, waveletb + 1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_gamma);
|
||||
v4dwt_decode_step2(waveletb, waveleta + 1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_beta);
|
||||
v4dwt_decode_step2(waveleta, waveletb + 1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_alpha);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* <summary> */
|
||||
/* Inverse 9-7 wavelet transform in 2-D. */
|
||||
/* </summary> */
|
||||
void dwt_decode_real(opj_tcd_tilecomp_t* restrict tilec, int numres){
|
||||
void dwt_decode_real(opj_tcd_tilecomp_t* OPJ_RESTRICT tilec, int numres){
|
||||
v4dwt_t h;
|
||||
v4dwt_t v;
|
||||
|
||||
@@ -787,7 +812,7 @@ void dwt_decode_real(opj_tcd_tilecomp_t* restrict tilec, int numres){
|
||||
v.wavelet = h.wavelet;
|
||||
|
||||
while( --numres) {
|
||||
float * restrict aj = (float*) tilec->data;
|
||||
float * OPJ_RESTRICT aj = (float*) tilec->data;
|
||||
int bufsize = (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0);
|
||||
int j;
|
||||
|
||||
|
||||
@@ -29,11 +29,16 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#define OPJ_SKIP_POISON
|
||||
#include "opj_includes.h"
|
||||
|
||||
#ifdef __SSE__
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
|
||||
#include "opj_includes.h"
|
||||
#if defined(__GNUC__)
|
||||
#pragma GCC poison malloc calloc realloc free
|
||||
#endif
|
||||
|
||||
/* <summary> */
|
||||
/* This table contains the norms of the basis function of the reversible MCT. */
|
||||
@@ -49,17 +54,38 @@ static const double mct_norms_real[3] = { 1.732, 1.805, 1.573 };
|
||||
/* Foward reversible MCT. */
|
||||
/* </summary> */
|
||||
void mct_encode(
|
||||
int* restrict c0,
|
||||
int* restrict c1,
|
||||
int* restrict c2,
|
||||
int* OPJ_RESTRICT c0,
|
||||
int* OPJ_RESTRICT c1,
|
||||
int* OPJ_RESTRICT c2,
|
||||
int n)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < n; ++i) {
|
||||
int i = 0;
|
||||
#ifdef __SSE2__
|
||||
/* Buffers are normally aligned on 16 bytes... */
|
||||
if (((size_t)c0 & 0xf) == 0 && ((size_t)c1 & 0xf) == 0 && ((size_t)c2 & 0xf) == 0) {
|
||||
const int cnt = n & ~3U;
|
||||
for (; i < cnt; i += 4) {
|
||||
__m128i y, u, v;
|
||||
__m128i r = _mm_load_si128((const __m128i*) & (c0[i]));
|
||||
__m128i g = _mm_load_si128((const __m128i*) & (c1[i]));
|
||||
__m128i b = _mm_load_si128((const __m128i*) & (c2[i]));
|
||||
y = _mm_add_epi32(g, g);
|
||||
y = _mm_add_epi32(y, b);
|
||||
y = _mm_add_epi32(y, r);
|
||||
y = _mm_srai_epi32(y, 2);
|
||||
u = _mm_sub_epi32(b, g);
|
||||
v = _mm_sub_epi32(r, g);
|
||||
_mm_store_si128((__m128i*) & (c0[i]), y);
|
||||
_mm_store_si128((__m128i*) & (c1[i]), u);
|
||||
_mm_store_si128((__m128i*) & (c2[i]), v);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
for (; i < n; ++i) {
|
||||
int r = c0[i];
|
||||
int g = c1[i];
|
||||
int b = c2[i];
|
||||
int y = (r + (g * 2) + b) >> 2;
|
||||
int y = (r + g + g + b) >> 2;
|
||||
int u = b - g;
|
||||
int v = r - g;
|
||||
c0[i] = y;
|
||||
@@ -72,13 +98,32 @@ void mct_encode(
|
||||
/* Inverse reversible MCT. */
|
||||
/* </summary> */
|
||||
void mct_decode(
|
||||
int* restrict c0,
|
||||
int* restrict c1,
|
||||
int* restrict c2,
|
||||
int* OPJ_RESTRICT c0,
|
||||
int* OPJ_RESTRICT c1,
|
||||
int* OPJ_RESTRICT c2,
|
||||
int n)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < n; ++i) {
|
||||
int i = 0;
|
||||
#ifdef __SSE2__
|
||||
/* Buffers are normally aligned on 16 bytes... */
|
||||
if (((size_t)c0 & 0xf) == 0 && ((size_t)c1 & 0xf) == 0 && ((size_t)c2 & 0xf) == 0) {
|
||||
const int cnt = n & ~3U;
|
||||
for (; i < cnt; i += 4) {
|
||||
__m128i r, g, b;
|
||||
__m128i y = _mm_load_si128((const __m128i*) & (c0[i]));
|
||||
__m128i u = _mm_load_si128((const __m128i*) & (c1[i]));
|
||||
__m128i v = _mm_load_si128((const __m128i*) & (c2[i]));
|
||||
g = y;
|
||||
g = _mm_sub_epi32(g, _mm_srai_epi32(_mm_add_epi32(u, v), 2));
|
||||
r = _mm_add_epi32(v, g);
|
||||
b = _mm_add_epi32(u, g);
|
||||
_mm_store_si128((__m128i*) & (c0[i]), r);
|
||||
_mm_store_si128((__m128i*) & (c1[i]), g);
|
||||
_mm_store_si128((__m128i*) & (c2[i]), b);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
for (; i < n; ++i) {
|
||||
int y = c0[i];
|
||||
int u = c1[i];
|
||||
int v = c2[i];
|
||||
@@ -102,13 +147,119 @@ double mct_getnorm(int compno) {
|
||||
/* Foward irreversible MCT. */
|
||||
/* </summary> */
|
||||
void mct_encode_real(
|
||||
int* restrict c0,
|
||||
int* restrict c1,
|
||||
int* restrict c2,
|
||||
int* OPJ_RESTRICT c0,
|
||||
int* OPJ_RESTRICT c1,
|
||||
int* OPJ_RESTRICT c2,
|
||||
int n)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < n; ++i) {
|
||||
int i = 0;
|
||||
#ifdef __SSE4_1__
|
||||
/* Buffers are normally aligned on 16 bytes... */
|
||||
if (((size_t)c0 & 0xf) == 0 && ((size_t)c1 & 0xf) == 0 && ((size_t)c2 & 0xf) == 0) {
|
||||
const int cnt = n & ~3U;
|
||||
const __m128i ry = _mm_set1_epi32(2449);
|
||||
const __m128i gy = _mm_set1_epi32(4809);
|
||||
const __m128i by = _mm_set1_epi32(934);
|
||||
const __m128i ru = _mm_set1_epi32(1382);
|
||||
const __m128i gu = _mm_set1_epi32(2714);
|
||||
const __m128i gv = _mm_set1_epi32(3430);
|
||||
const __m128i bv = _mm_set1_epi32(666);
|
||||
const __m128i mulround = _mm_shuffle_epi32(_mm_cvtsi32_si128(4096), _MM_SHUFFLE(1, 0, 1, 0));
|
||||
for (; i < cnt; i += 4) {
|
||||
__m128i lo, hi, y, u, v;
|
||||
__m128i r = _mm_load_si128((const __m128i*) & (c0[i]));
|
||||
__m128i g = _mm_load_si128((const __m128i*) & (c1[i]));
|
||||
__m128i b = _mm_load_si128((const __m128i*) & (c2[i]));
|
||||
|
||||
hi = _mm_shuffle_epi32(r, _MM_SHUFFLE(3, 3, 1, 1));
|
||||
lo = _mm_mul_epi32(r, ry);
|
||||
hi = _mm_mul_epi32(hi, ry);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
y = _mm_blend_epi16(lo, hi, 0xCC);
|
||||
|
||||
hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
|
||||
lo = _mm_mul_epi32(g, gy);
|
||||
hi = _mm_mul_epi32(hi, gy);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
y = _mm_add_epi32(y, _mm_blend_epi16(lo, hi, 0xCC));
|
||||
|
||||
hi = _mm_shuffle_epi32(b, _MM_SHUFFLE(3, 3, 1, 1));
|
||||
lo = _mm_mul_epi32(b, by);
|
||||
hi = _mm_mul_epi32(hi, by);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
y = _mm_add_epi32(y, _mm_blend_epi16(lo, hi, 0xCC));
|
||||
_mm_store_si128((__m128i*) & (c0[i]), y);
|
||||
|
||||
lo = _mm_cvtepi32_epi64(_mm_shuffle_epi32(b, _MM_SHUFFLE(3, 2, 2, 0)));
|
||||
hi = _mm_cvtepi32_epi64(_mm_shuffle_epi32(b, _MM_SHUFFLE(3, 2, 3, 1)));
|
||||
lo = _mm_slli_epi64(lo, 12);
|
||||
hi = _mm_slli_epi64(hi, 12);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
u = _mm_blend_epi16(lo, hi, 0xCC);
|
||||
|
||||
hi = _mm_shuffle_epi32(r, _MM_SHUFFLE(3, 3, 1, 1));
|
||||
lo = _mm_mul_epi32(r, ru);
|
||||
hi = _mm_mul_epi32(hi, ru);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
u = _mm_sub_epi32(u, _mm_blend_epi16(lo, hi, 0xCC));
|
||||
|
||||
hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
|
||||
lo = _mm_mul_epi32(g, gu);
|
||||
hi = _mm_mul_epi32(hi, gu);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
u = _mm_sub_epi32(u, _mm_blend_epi16(lo, hi, 0xCC));
|
||||
_mm_store_si128((__m128i*) & (c1[i]), u);
|
||||
|
||||
lo = _mm_cvtepi32_epi64(_mm_shuffle_epi32(r, _MM_SHUFFLE(3, 2, 2, 0)));
|
||||
hi = _mm_cvtepi32_epi64(_mm_shuffle_epi32(r, _MM_SHUFFLE(3, 2, 3, 1)));
|
||||
lo = _mm_slli_epi64(lo, 12);
|
||||
hi = _mm_slli_epi64(hi, 12);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
v = _mm_blend_epi16(lo, hi, 0xCC);
|
||||
|
||||
hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
|
||||
lo = _mm_mul_epi32(g, gv);
|
||||
hi = _mm_mul_epi32(hi, gv);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
v = _mm_sub_epi32(v, _mm_blend_epi16(lo, hi, 0xCC));
|
||||
|
||||
hi = _mm_shuffle_epi32(b, _MM_SHUFFLE(3, 3, 1, 1));
|
||||
lo = _mm_mul_epi32(b, bv);
|
||||
hi = _mm_mul_epi32(hi, bv);
|
||||
lo = _mm_add_epi64(lo, mulround);
|
||||
hi = _mm_add_epi64(hi, mulround);
|
||||
lo = _mm_srli_epi64(lo, 13);
|
||||
hi = _mm_slli_epi64(hi, 32 - 13);
|
||||
v = _mm_sub_epi32(v, _mm_blend_epi16(lo, hi, 0xCC));
|
||||
_mm_store_si128((__m128i*) & (c2[i]), v);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
for (; i < n; ++i) {
|
||||
int r = c0[i];
|
||||
int g = c1[i];
|
||||
int b = c2[i];
|
||||
@@ -125,19 +276,21 @@ void mct_encode_real(
|
||||
/* Inverse irreversible MCT. */
|
||||
/* </summary> */
|
||||
void mct_decode_real(
|
||||
float* restrict c0,
|
||||
float* restrict c1,
|
||||
float* restrict c2,
|
||||
float* OPJ_RESTRICT c0,
|
||||
float* OPJ_RESTRICT c1,
|
||||
float* OPJ_RESTRICT c2,
|
||||
int n)
|
||||
{
|
||||
int i;
|
||||
#ifdef __SSE__
|
||||
int count;
|
||||
__m128 vrv, vgu, vgv, vbu;
|
||||
vrv = _mm_set1_ps(1.402f);
|
||||
vgu = _mm_set1_ps(0.34413f);
|
||||
vgv = _mm_set1_ps(0.71414f);
|
||||
vbu = _mm_set1_ps(1.772f);
|
||||
for (i = 0; i < (n >> 3); ++i) {
|
||||
count = n >> 3;
|
||||
for (i = 0; i < count; ++i) {
|
||||
__m128 vy, vu, vv;
|
||||
__m128 vr, vg, vb;
|
||||
|
||||
@@ -174,7 +327,7 @@ void mct_decode_real(
|
||||
float u = c1[i];
|
||||
float v = c2[i];
|
||||
float r = y + (v * 1.402f);
|
||||
float g = y - (u * 0.34413f) - (v * (0.71414f));
|
||||
float g = y - (u * 0.34413f) - (v * 0.71414f);
|
||||
float b = y + (u * 1.772f);
|
||||
c0[i] = r;
|
||||
c1[i] = g;
|
||||
|
||||
@@ -40,33 +40,71 @@
|
||||
==========================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
The inline keyword is supported by C99 but not by C90.
|
||||
Most compilers implement their own version of this keyword ...
|
||||
*/
|
||||
#ifndef INLINE
|
||||
#if defined(_MSC_VER)
|
||||
#define INLINE __forceinline
|
||||
#elif defined(__GNUC__)
|
||||
#define INLINE __inline__
|
||||
#elif defined(__MWERKS__)
|
||||
#define INLINE inline
|
||||
#else
|
||||
/* add other compilers here ... */
|
||||
#define INLINE
|
||||
#endif /* defined(<Compiler>) */
|
||||
#endif /* INLINE */
|
||||
#if defined(OPJ_STATIC) || !defined(_WIN32)
|
||||
#define OPJ_API
|
||||
#define OPJ_CALLCONV
|
||||
#else
|
||||
#define OPJ_CALLCONV __stdcall
|
||||
/*
|
||||
The following ifdef block is the standard way of creating macros which make exporting
|
||||
The following ifdef block is the standard way of creating macros which make exporting
|
||||
from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS
|
||||
symbol defined on the command line. this symbol should not be defined on any project
|
||||
that uses this DLL. This way any other project whose source files include this file see
|
||||
OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols
|
||||
that uses this DLL. This way any other project whose source files include this file see
|
||||
OPJ_API functions as being imported from a DLL, whereas this DLL sees symbols
|
||||
defined with this macro as being exported.
|
||||
*/
|
||||
#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
|
||||
#define OPJ_API __declspec(dllexport)
|
||||
#else
|
||||
#define OPJ_API __declspec(dllimport)
|
||||
#endif /* OPJ_EXPORTS */
|
||||
# if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
|
||||
# define OPJ_API __declspec(dllexport)
|
||||
# else
|
||||
# define OPJ_API __declspec(dllimport)
|
||||
# endif /* OPJ_EXPORTS */
|
||||
#endif /* !OPJ_STATIC || !_WIN32 */
|
||||
|
||||
typedef int opj_bool;
|
||||
#define OPJ_TRUE 1
|
||||
#define OPJ_FALSE 0
|
||||
|
||||
typedef char OPJ_CHAR;
|
||||
typedef float OPJ_FLOAT32;
|
||||
typedef double OPJ_FLOAT64;
|
||||
typedef unsigned char OPJ_BYTE;
|
||||
|
||||
#include "opj_stdint.h"
|
||||
|
||||
typedef int8_t OPJ_INT8;
|
||||
typedef uint8_t OPJ_UINT8;
|
||||
typedef int16_t OPJ_INT16;
|
||||
typedef uint16_t OPJ_UINT16;
|
||||
typedef int32_t OPJ_INT32;
|
||||
typedef uint32_t OPJ_UINT32;
|
||||
typedef int64_t OPJ_INT64;
|
||||
typedef uint64_t OPJ_UINT64;
|
||||
|
||||
typedef int64_t OPJ_OFF_T; /* 64-bit file offset type */
|
||||
|
||||
#include <stdio.h>
|
||||
typedef size_t OPJ_SIZE_T;
|
||||
|
||||
/* Avoid compile-time warning because parameter is not used */
|
||||
#define OPJ_ARG_NOT_USED(x) (void)(x)
|
||||
/*
|
||||
|
||||
/*
|
||||
==========================================================
|
||||
Useful constant definitions
|
||||
==========================================================
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <ctype.h>
|
||||
#include <assert.h>
|
||||
#include <limits.h>
|
||||
|
||||
/*
|
||||
==========================================================
|
||||
@@ -54,56 +56,115 @@
|
||||
==========================================================
|
||||
*/
|
||||
|
||||
/* Are restricted pointers available? (C99) */
|
||||
#if (__STDC_VERSION__ >= 199901L)
|
||||
#define OPJ_RESTRICT restrict
|
||||
#else
|
||||
/* Not a C99 compiler */
|
||||
#if defined(__GNUC__)
|
||||
#define OPJ_RESTRICT __restrict__
|
||||
#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#define OPJ_RESTRICT __restrict
|
||||
#else
|
||||
#define OPJ_RESTRICT /* restrict */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Ignore GCC attributes if this is not GCC */
|
||||
#ifndef __GNUC__
|
||||
#define __attribute__(x) /* __attribute__(x) */
|
||||
#endif
|
||||
|
||||
/*
|
||||
The inline keyword is supported by C99 but not by C90.
|
||||
Most compilers implement their own version of this keyword ...
|
||||
*/
|
||||
#ifndef INLINE
|
||||
#if defined(_MSC_VER)
|
||||
#define INLINE __forceinline
|
||||
#elif defined(__GNUC__)
|
||||
#define INLINE __inline__
|
||||
#elif defined(__MWERKS__)
|
||||
#define INLINE inline
|
||||
#else
|
||||
/* add other compilers here ... */
|
||||
#define INLINE
|
||||
#endif /* defined(<Compiler>) */
|
||||
#endif /* INLINE */
|
||||
|
||||
/* Are restricted pointers available? (C99) */
|
||||
#if (__STDC_VERSION__ != 199901L)
|
||||
/* Not a C99 compiler */
|
||||
#ifdef __GNUC__
|
||||
#define restrict __restrict__
|
||||
#else
|
||||
#define restrict /* restrict */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* MSVC and Borland C do not have lrintf */
|
||||
#if defined(_MSC_VER) || defined(__BORLANDC__)
|
||||
static INLINE long lrintf(float f){
|
||||
/* MSVC before 2013 and Borland C do not have lrintf */
|
||||
#if defined(_MSC_VER)
|
||||
#include <intrin.h>
|
||||
static INLINE long opj_lrintf(float f)
|
||||
{
|
||||
#ifdef _M_X64
|
||||
return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f));
|
||||
#else
|
||||
return _mm_cvt_ss2si(_mm_load_ss(&f));
|
||||
|
||||
/* commented out line breaks many tests */
|
||||
/* return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f)); */
|
||||
#elif defined(_M_IX86)
|
||||
int i;
|
||||
|
||||
_asm{
|
||||
fld f
|
||||
fistp i
|
||||
};
|
||||
|
||||
|
||||
return i;
|
||||
#else
|
||||
return (long)((f>0.0f) ? (f + 0.5f) : (f - 0.5f));
|
||||
#endif
|
||||
}
|
||||
#elif defined(__BORLANDC__)
|
||||
static INLINE long opj_lrintf(float f)
|
||||
{
|
||||
#ifdef _M_X64
|
||||
return (long)((f > 0.0f) ? (f + 0.5f) : (f - 0.5f));
|
||||
#else
|
||||
int i;
|
||||
|
||||
_asm {
|
||||
fld f
|
||||
fistp i
|
||||
};
|
||||
|
||||
return i;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
static INLINE long opj_lrintf(float f)
|
||||
{
|
||||
return lrintf(f);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1400)
|
||||
#define vsnprintf _vsnprintf
|
||||
#endif
|
||||
|
||||
/* MSVC x86 is really bad at doing int64 = int32 * int32 on its own. Use intrinsic. */
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__INTEL_COMPILER) && defined(_M_IX86)
|
||||
# include <intrin.h>
|
||||
# pragma intrinsic(__emul)
|
||||
#endif
|
||||
|
||||
/* Apparently Visual Studio doesn't define __SSE__ / __SSE2__ macros */
|
||||
#if defined(_M_X64)
|
||||
/* Intel 64bit support SSE and SSE2 */
|
||||
# ifndef __SSE__
|
||||
# define __SSE__ 1
|
||||
# endif
|
||||
# ifndef __SSE2__
|
||||
# define __SSE2__ 1
|
||||
# endif
|
||||
# if !defined(__SSE4_1__) && defined(__AVX__)
|
||||
# define __SSE4_1__ 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* For x86, test the value of the _M_IX86_FP macro. */
|
||||
/* See https://msdn.microsoft.com/en-us/library/b0084kay.aspx */
|
||||
#if defined(_M_IX86_FP)
|
||||
# if _M_IX86_FP >= 1
|
||||
# ifndef __SSE__
|
||||
# define __SSE__ 1
|
||||
# endif
|
||||
# endif
|
||||
# if _M_IX86_FP >= 2
|
||||
# ifndef __SSE2__
|
||||
# define __SSE2__ 1
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Type to use for bit-fields in internal headers */
|
||||
typedef unsigned int OPJ_BITFIELD;
|
||||
|
||||
#define OPJ_UNUSED(x) (void)x
|
||||
|
||||
#include "j2k_lib.h"
|
||||
#include "opj_malloc.h"
|
||||
#include "event.h"
|
||||
|
||||
249
indra/libopenjpeg/opj_malloc.c
Normal file
249
indra/libopenjpeg/opj_malloc.c
Normal file
@@ -0,0 +1,249 @@
|
||||
/*
|
||||
* The copyright in this software is being made available under the 2-clauses
|
||||
* BSD License, included below. This software may be subject to other third
|
||||
* party and contributor rights, including patent rights, and no such rights
|
||||
* are granted under this license.
|
||||
*
|
||||
* Copyright (c) 2015, Mathieu Malaterre <mathieu.malaterre@gmail.com>
|
||||
* Copyright (c) 2015, Matthieu Darbois
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#define OPJ_SKIP_POISON
|
||||
#include "opj_includes.h"
|
||||
|
||||
#if defined(OPJ_HAVE_MALLOC_H) && defined(OPJ_HAVE_MEMALIGN)
|
||||
# include <malloc.h>
|
||||
#endif
|
||||
|
||||
#ifndef SIZE_MAX
|
||||
# define SIZE_MAX ((size_t) -1)
|
||||
#endif
|
||||
|
||||
static INLINE void *opj_aligned_alloc_n(size_t alignment, size_t size)
|
||||
{
|
||||
void* ptr;
|
||||
|
||||
/* alignment shall be power of 2 */
|
||||
assert((alignment != 0U) && ((alignment & (alignment - 1U)) == 0U));
|
||||
/* alignment shall be at least sizeof(void*) */
|
||||
assert(alignment >= sizeof(void*));
|
||||
|
||||
if (size == 0U) { /* prevent implementation defined behavior of realloc */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#if defined(OPJ_HAVE_POSIX_MEMALIGN)
|
||||
/* aligned_alloc requires c11, restrict to posix_memalign for now. Quote:
|
||||
* This function was introduced in POSIX 1003.1d. Although this function is
|
||||
* superseded by aligned_alloc, it is more portable to older POSIX systems
|
||||
* that do not support ISO C11. */
|
||||
if (posix_memalign(&ptr, alignment, size)) {
|
||||
ptr = NULL;
|
||||
}
|
||||
/* older linux */
|
||||
#elif defined(OPJ_HAVE_MEMALIGN)
|
||||
ptr = memalign(alignment, size);
|
||||
/* _MSC_VER */
|
||||
#elif defined(OPJ_HAVE__ALIGNED_MALLOC)
|
||||
ptr = _aligned_malloc(size, alignment);
|
||||
#else
|
||||
/*
|
||||
* Generic aligned malloc implementation.
|
||||
* Uses size_t offset for the integer manipulation of the pointer,
|
||||
* as uintptr_t is not available in C89 to do
|
||||
* bitwise operations on the pointer itself.
|
||||
*/
|
||||
alignment--;
|
||||
{
|
||||
size_t offset;
|
||||
OPJ_UINT8 *mem;
|
||||
|
||||
/* Room for padding and extra pointer stored in front of allocated area */
|
||||
size_t overhead = alignment + sizeof(void *);
|
||||
|
||||
/* let's be extra careful */
|
||||
assert(alignment <= (SIZE_MAX - sizeof(void *)));
|
||||
|
||||
/* Avoid integer overflow */
|
||||
if (size > (SIZE_MAX - overhead)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mem = (OPJ_UINT8*)malloc(size + overhead);
|
||||
if (mem == NULL) {
|
||||
return mem;
|
||||
}
|
||||
/* offset = ((alignment + 1U) - ((size_t)(mem + sizeof(void*)) & alignment)) & alignment; */
|
||||
/* Use the fact that alignment + 1U is a power of 2 */
|
||||
offset = ((alignment ^ ((size_t)(mem + sizeof(void*)) & alignment)) + 1U) &
|
||||
alignment;
|
||||
ptr = (void *)(mem + sizeof(void*) + offset);
|
||||
((void**) ptr)[-1] = mem;
|
||||
}
|
||||
#endif
|
||||
return ptr;
|
||||
}
|
||||
static INLINE void *opj_aligned_realloc_n(void *ptr, size_t alignment,
|
||||
size_t new_size)
|
||||
{
|
||||
void *r_ptr;
|
||||
|
||||
/* alignment shall be power of 2 */
|
||||
assert((alignment != 0U) && ((alignment & (alignment - 1U)) == 0U));
|
||||
/* alignment shall be at least sizeof(void*) */
|
||||
assert(alignment >= sizeof(void*));
|
||||
|
||||
if (new_size == 0U) { /* prevent implementation defined behavior of realloc */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* no portable aligned realloc */
|
||||
#if defined(OPJ_HAVE_POSIX_MEMALIGN) || defined(OPJ_HAVE_MEMALIGN)
|
||||
/* glibc doc states one can mix aligned malloc with realloc */
|
||||
r_ptr = realloc(ptr, new_size); /* fast path */
|
||||
/* we simply use `size_t` to cast, since we are only interest in binary AND
|
||||
* operator */
|
||||
if (((size_t)r_ptr & (alignment - 1U)) != 0U) {
|
||||
/* this is non-trivial to implement a portable aligned realloc, so use a
|
||||
* simple approach where we do not need a function that return the size of an
|
||||
* allocated array (eg. _msize on Windows, malloc_size on MacOS,
|
||||
* malloc_usable_size on systems with glibc) */
|
||||
void *a_ptr = opj_aligned_alloc_n(alignment, new_size);
|
||||
if (a_ptr != NULL) {
|
||||
memcpy(a_ptr, r_ptr, new_size);
|
||||
}
|
||||
free(r_ptr);
|
||||
r_ptr = a_ptr;
|
||||
}
|
||||
/* _MSC_VER */
|
||||
#elif defined(OPJ_HAVE__ALIGNED_MALLOC)
|
||||
r_ptr = _aligned_realloc(ptr, new_size, alignment);
|
||||
#else
|
||||
if (ptr == NULL) {
|
||||
return opj_aligned_alloc_n(alignment, new_size);
|
||||
}
|
||||
alignment--;
|
||||
{
|
||||
void *oldmem;
|
||||
OPJ_UINT8 *newmem;
|
||||
size_t overhead = alignment + sizeof(void *);
|
||||
|
||||
/* let's be extra careful */
|
||||
assert(alignment <= (SIZE_MAX - sizeof(void *)));
|
||||
|
||||
/* Avoid integer overflow */
|
||||
if (new_size > SIZE_MAX - overhead) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
oldmem = ((void**) ptr)[-1];
|
||||
newmem = (OPJ_UINT8*)realloc(oldmem, new_size + overhead);
|
||||
if (newmem == NULL) {
|
||||
return newmem;
|
||||
}
|
||||
|
||||
if (newmem == oldmem) {
|
||||
r_ptr = ptr;
|
||||
} else {
|
||||
size_t old_offset;
|
||||
size_t new_offset;
|
||||
|
||||
/* realloc created a new copy, realign the copied memory block */
|
||||
old_offset = (size_t)((OPJ_UINT8*)ptr - (OPJ_UINT8*)oldmem);
|
||||
|
||||
/* offset = ((alignment + 1U) - ((size_t)(mem + sizeof(void*)) & alignment)) & alignment; */
|
||||
/* Use the fact that alignment + 1U is a power of 2 */
|
||||
new_offset = ((alignment ^ ((size_t)(newmem + sizeof(void*)) & alignment)) +
|
||||
1U) & alignment;
|
||||
new_offset += sizeof(void*);
|
||||
r_ptr = (void *)(newmem + new_offset);
|
||||
|
||||
if (new_offset != old_offset) {
|
||||
memmove(newmem + new_offset, newmem + old_offset, new_size);
|
||||
}
|
||||
((void**) r_ptr)[-1] = newmem;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return r_ptr;
|
||||
}
|
||||
void * opj_malloc(size_t size)
|
||||
{
|
||||
if (size == 0U) { /* prevent implementation defined behavior of realloc */
|
||||
return NULL;
|
||||
}
|
||||
return malloc(size);
|
||||
}
|
||||
void * opj_calloc(size_t num, size_t size)
|
||||
{
|
||||
if (num == 0 || size == 0) {
|
||||
/* prevent implementation defined behavior of realloc */
|
||||
return NULL;
|
||||
}
|
||||
return calloc(num, size);
|
||||
}
|
||||
|
||||
void *opj_aligned_malloc(size_t size)
|
||||
{
|
||||
return opj_aligned_alloc_n(16U, size);
|
||||
}
|
||||
void * opj_aligned_realloc(void *ptr, size_t size)
|
||||
{
|
||||
return opj_aligned_realloc_n(ptr, 16U, size);
|
||||
}
|
||||
|
||||
void *opj_aligned_32_malloc(size_t size)
|
||||
{
|
||||
return opj_aligned_alloc_n(32U, size);
|
||||
}
|
||||
void * opj_aligned_32_realloc(void *ptr, size_t size)
|
||||
{
|
||||
return opj_aligned_realloc_n(ptr, 32U, size);
|
||||
}
|
||||
|
||||
void opj_aligned_free(void* ptr)
|
||||
{
|
||||
#if defined(OPJ_HAVE_POSIX_MEMALIGN) || defined(OPJ_HAVE_MEMALIGN)
|
||||
free(ptr);
|
||||
#elif defined(OPJ_HAVE__ALIGNED_MALLOC)
|
||||
_aligned_free(ptr);
|
||||
#else
|
||||
/* Generic implementation has malloced pointer stored in front of used area */
|
||||
if (ptr != NULL) {
|
||||
free(((void**) ptr)[-1]);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void * opj_realloc(void *ptr, size_t new_size)
|
||||
{
|
||||
if (new_size == 0U) { /* prevent implementation defined behavior of realloc */
|
||||
return NULL;
|
||||
}
|
||||
return realloc(ptr, new_size);
|
||||
}
|
||||
void opj_free(void *ptr)
|
||||
{
|
||||
free(ptr);
|
||||
}
|
||||
@@ -1,4 +1,9 @@
|
||||
/*
|
||||
* The copyright in this software is being made available under the 2-clauses
|
||||
* BSD License, included below. This software may be subject to other third
|
||||
* party and contributor rights, including patent rights, and no such rights
|
||||
* are granted under this license.
|
||||
*
|
||||
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
|
||||
* All rights reserved.
|
||||
@@ -24,8 +29,10 @@
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef __OPJ_MALLOC_H
|
||||
#define __OPJ_MALLOC_H
|
||||
#ifndef OPJ_MALLOC_H
|
||||
#define OPJ_MALLOC_H
|
||||
|
||||
#include <stddef.h>
|
||||
/**
|
||||
@file opj_malloc.h
|
||||
@brief Internal functions
|
||||
@@ -36,6 +43,17 @@ The functions in opj_malloc.h are internal utilities used for memory management.
|
||||
/** @defgroup MISC MISC - Miscellaneous internal functions */
|
||||
/*@{*/
|
||||
|
||||
/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */
|
||||
#ifdef _WIN32
|
||||
#define OPJ_HAVE__ALIGNED_MALLOC
|
||||
#else /* Not _WIN32 */
|
||||
#if defined(__sun)
|
||||
#define OPJ_HAVE_MEMALIGN
|
||||
#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
|
||||
#define OPJ_HAVE_POSIX_MEMALIGN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** @name Exported functions */
|
||||
/*@{*/
|
||||
/* ----------------------------------------------------------------------- */
|
||||
@@ -45,90 +63,32 @@ Allocate an uninitialized memory block
|
||||
@param size Bytes to allocate
|
||||
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
||||
*/
|
||||
#ifdef ALLOC_PERF_OPT
|
||||
void * OPJ_CALLCONV opj_malloc(size_t size);
|
||||
#else
|
||||
#define opj_malloc(size) malloc(size)
|
||||
#endif
|
||||
void * opj_malloc(size_t size);
|
||||
|
||||
/**
|
||||
Allocate a memory block with elements initialized to 0
|
||||
@param num Blocks to allocate
|
||||
@param size Bytes per block to allocate
|
||||
@param numOfElements Blocks to allocate
|
||||
@param sizeOfElements Bytes per block to allocate
|
||||
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
||||
*/
|
||||
#ifdef ALLOC_PERF_OPT
|
||||
void * OPJ_CALLCONV opj_calloc(size_t _NumOfElements, size_t _SizeOfElements);
|
||||
#else
|
||||
#define opj_calloc(num, size) calloc(num, size)
|
||||
#endif
|
||||
void * opj_calloc(size_t numOfElements, size_t sizeOfElements);
|
||||
|
||||
/**
|
||||
Allocate memory aligned to a 16 byte boundry
|
||||
Allocate memory aligned to a 16 byte boundary
|
||||
@param size Bytes to allocate
|
||||
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
||||
*/
|
||||
/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */
|
||||
#ifdef _WIN32
|
||||
/* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */
|
||||
#ifdef __GNUC__
|
||||
#include <mm_malloc.h>
|
||||
#define HAVE_MM_MALLOC
|
||||
#else /* MSVC, Intel C++ */
|
||||
#include <malloc.h>
|
||||
#ifdef _mm_malloc
|
||||
#define HAVE_MM_MALLOC
|
||||
#endif
|
||||
#endif
|
||||
#else /* Not _WIN32 */
|
||||
#if defined(__sun)
|
||||
#define HAVE_MEMALIGN
|
||||
#elif defined(__FreeBSD__)
|
||||
#define HAVE_POSIX_MEMALIGN
|
||||
/* Linux x86_64 and OSX always align allocations to 16 bytes */
|
||||
#elif !defined(__amd64__) && !defined(__APPLE__) && !defined(_AIX)
|
||||
#define HAVE_MEMALIGN
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
#endif
|
||||
void * opj_aligned_malloc(size_t size);
|
||||
void * opj_aligned_realloc(void *ptr, size_t size);
|
||||
void opj_aligned_free(void* ptr);
|
||||
|
||||
#define opj_aligned_malloc(size) malloc(size)
|
||||
#define opj_aligned_free(m) free(m)
|
||||
|
||||
#ifdef HAVE_MM_MALLOC
|
||||
#undef opj_aligned_malloc
|
||||
#define opj_aligned_malloc(size) _mm_malloc(size, 16)
|
||||
#undef opj_aligned_free
|
||||
#define opj_aligned_free(m) _mm_free(m)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MEMALIGN
|
||||
extern void* memalign(size_t, size_t);
|
||||
#undef opj_aligned_malloc
|
||||
#define opj_aligned_malloc(size) memalign(16, (size))
|
||||
#undef opj_aligned_free
|
||||
#define opj_aligned_free(m) free(m)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_POSIX_MEMALIGN
|
||||
#undef opj_aligned_malloc
|
||||
extern int posix_memalign(void**, size_t, size_t);
|
||||
|
||||
static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){
|
||||
void* mem = NULL;
|
||||
posix_memalign(&mem, 16, size);
|
||||
return mem;
|
||||
}
|
||||
#undef opj_aligned_free
|
||||
#define opj_aligned_free(m) free(m)
|
||||
#endif
|
||||
|
||||
#ifdef ALLOC_PERF_OPT
|
||||
#undef opj_aligned_malloc
|
||||
#define opj_aligned_malloc(size) opj_malloc(size)
|
||||
#undef opj_aligned_free
|
||||
#define opj_aligned_free(m) opj_free(m)
|
||||
#endif
|
||||
/**
|
||||
Allocate memory aligned to a 32 byte boundary
|
||||
@param size Bytes to allocate
|
||||
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
||||
*/
|
||||
void * opj_aligned_32_malloc(size_t size);
|
||||
void * opj_aligned_32_realloc(void *ptr, size_t size);
|
||||
|
||||
/**
|
||||
Reallocate memory blocks.
|
||||
@@ -136,23 +96,15 @@ Reallocate memory blocks.
|
||||
@param s New size in bytes
|
||||
@return Returns a void pointer to the reallocated (and possibly moved) memory block
|
||||
*/
|
||||
#ifdef ALLOC_PERF_OPT
|
||||
void * OPJ_CALLCONV opj_realloc(void * m, size_t s);
|
||||
#else
|
||||
#define opj_realloc(m, s) realloc(m, s)
|
||||
#endif
|
||||
void * opj_realloc(void * m, size_t s);
|
||||
|
||||
/**
|
||||
Deallocates or frees a memory block.
|
||||
@param m Previously allocated memory block to be freed
|
||||
*/
|
||||
#ifdef ALLOC_PERF_OPT
|
||||
void OPJ_CALLCONV opj_free(void * m);
|
||||
#else
|
||||
#define opj_free(m) free(m)
|
||||
#endif
|
||||
void opj_free(void * m);
|
||||
|
||||
#ifdef __GNUC__
|
||||
#if defined(__GNUC__) && !defined(OPJ_SKIP_POISON)
|
||||
#pragma GCC poison malloc calloc realloc free
|
||||
#endif
|
||||
|
||||
@@ -161,5 +113,5 @@ void OPJ_CALLCONV opj_free(void * m);
|
||||
|
||||
/*@}*/
|
||||
|
||||
#endif /* __OPJ_MALLOC_H */
|
||||
#endif /* OPJ_MALLOC_H */
|
||||
|
||||
|
||||
51
indra/libopenjpeg/opj_stdint.h
Normal file
51
indra/libopenjpeg/opj_stdint.h
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* The copyright in this software is being made available under the 2-clauses
|
||||
* BSD License, included below. This software may be subject to other third
|
||||
* party and contributor rights, including patent rights, and no such rights
|
||||
* are granted under this license.
|
||||
*
|
||||
* Copyright (c) 2012, Mathieu Malaterre <mathieu.malaterre@gmail.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef OPJ_STDINT_H
|
||||
#define OPJ_STDINT_H
|
||||
|
||||
#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || _MSC_VER >= 1900
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#if defined(_WIN32)
|
||||
typedef signed __int8 int8_t;
|
||||
typedef unsigned __int8 uint8_t;
|
||||
typedef signed __int16 int16_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
typedef signed __int32 int32_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef signed __int64 int64_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#else
|
||||
#error unsupported platform
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* OPJ_STDINT_H */
|
||||
@@ -1427,7 +1427,7 @@ void t1_encode_cblks(
|
||||
opj_tcd_resolution_t *res = &tilec->resolutions[resno];
|
||||
|
||||
for (bandno = 0; bandno < res->numbands; ++bandno) {
|
||||
opj_tcd_band_t* restrict band = &res->bands[bandno];
|
||||
opj_tcd_band_t* OPJ_RESTRICT band = &res->bands[bandno];
|
||||
int bandconst = 8192 * 8192 / ((int) floor(band->stepsize * 8192));
|
||||
|
||||
for (precno = 0; precno < res->pw * res->ph; ++precno) {
|
||||
@@ -1435,8 +1435,8 @@ void t1_encode_cblks(
|
||||
|
||||
for (cblkno = 0; cblkno < prc->cw * prc->ch; ++cblkno) {
|
||||
opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
|
||||
int* restrict datap;
|
||||
int* restrict tiledp;
|
||||
int* OPJ_RESTRICT datap;
|
||||
int* OPJ_RESTRICT tiledp;
|
||||
int cblk_w;
|
||||
int cblk_h;
|
||||
int i, j;
|
||||
@@ -1517,14 +1517,14 @@ void t1_decode_cblks(
|
||||
opj_tcd_resolution_t* res = &tilec->resolutions[resno];
|
||||
|
||||
for (bandno = 0; bandno < res->numbands; ++bandno) {
|
||||
opj_tcd_band_t* restrict band = &res->bands[bandno];
|
||||
opj_tcd_band_t* OPJ_RESTRICT band = &res->bands[bandno];
|
||||
|
||||
for (precno = 0; precno < res->pw * res->ph; ++precno) {
|
||||
opj_tcd_precinct_t* precinct = &band->precincts[precno];
|
||||
|
||||
for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) {
|
||||
opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno];
|
||||
int* restrict datap;
|
||||
int* OPJ_RESTRICT datap;
|
||||
int cblk_w, cblk_h;
|
||||
int x, y;
|
||||
int i, j;
|
||||
@@ -1566,7 +1566,7 @@ void t1_decode_cblks(
|
||||
}
|
||||
|
||||
if (tccp->qmfbid == 1) {
|
||||
int* restrict tiledp = &tilec->data[(y * tile_w) + x];
|
||||
int* OPJ_RESTRICT tiledp = &tilec->data[(y * tile_w) + x];
|
||||
for (j = 0; j < cblk_h; ++j) {
|
||||
for (i = 0; i < cblk_w; ++i) {
|
||||
int tmp = datap[(j * cblk_w) + i];
|
||||
@@ -1574,9 +1574,9 @@ void t1_decode_cblks(
|
||||
}
|
||||
}
|
||||
} else { /* if (tccp->qmfbid == 0) */
|
||||
float* restrict tiledp = (float*) &tilec->data[(y * tile_w) + x];
|
||||
float* OPJ_RESTRICT tiledp = (float*) &tilec->data[(y * tile_w) + x];
|
||||
for (j = 0; j < cblk_h; ++j) {
|
||||
float* restrict tiledp2 = tiledp;
|
||||
float* OPJ_RESTRICT tiledp2 = tiledp;
|
||||
for (i = 0; i < cblk_w; ++i) {
|
||||
float tmp = *datap * band->stepsize;
|
||||
*tiledp2 = tmp;
|
||||
|
||||
@@ -194,7 +194,7 @@ int main(){
|
||||
|
||||
printf("/* This file was automatically generated by t1_generate_luts.c */\n\n");
|
||||
|
||||
// lut_ctxno_zc
|
||||
/* lut_ctxno_zc */
|
||||
for (j = 0; j < 4; ++j) {
|
||||
for (i = 0; i < 256; ++i) {
|
||||
int orient = j;
|
||||
@@ -215,7 +215,7 @@ int main(){
|
||||
}
|
||||
printf("%i\n};\n\n", lut_ctxno_zc[1023]);
|
||||
|
||||
// lut_ctxno_sc
|
||||
/* lut_ctxno_sc */
|
||||
printf("static char lut_ctxno_sc[256] = {\n ");
|
||||
for (i = 0; i < 255; ++i) {
|
||||
printf("0x%x, ", t1_init_ctxno_sc(i << 4));
|
||||
@@ -224,7 +224,7 @@ int main(){
|
||||
}
|
||||
printf("0x%x\n};\n\n", t1_init_ctxno_sc(255 << 4));
|
||||
|
||||
// lut_spb
|
||||
/* lut_spb */
|
||||
printf("static char lut_spb[256] = {\n ");
|
||||
for (i = 0; i < 255; ++i) {
|
||||
printf("%i, ", t1_init_spb(i << 4));
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
*/
|
||||
|
||||
#include "opj_includes.h"
|
||||
#include <assert.h>
|
||||
|
||||
/** @defgroup T2 T2 - Implementation of a tier-2 coding */
|
||||
/*@{*/
|
||||
@@ -340,13 +341,15 @@ static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_t
|
||||
int precno = pi->precno; /* precinct value */
|
||||
int layno = pi->layno; /* quality layer value */
|
||||
|
||||
opj_tcd_resolution_t* res = &tile->comps[compno].resolutions[resno];
|
||||
|
||||
unsigned char *hd = NULL;
|
||||
int present;
|
||||
|
||||
opj_bio_t *bio = NULL; /* BIO component */
|
||||
|
||||
|
||||
opj_tcd_resolution_t* res;
|
||||
assert(&tile->comps[compno] != NULL);
|
||||
res = &tile->comps[compno].resolutions[resno];
|
||||
|
||||
if (layno == 0) {
|
||||
for (bandno = 0; bandno < res->numbands; bandno++) {
|
||||
opj_tcd_band_t *band = &res->bands[bandno];
|
||||
|
||||
@@ -1507,7 +1507,7 @@ opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno
|
||||
for(j = res->y0; j < res->y1; ++j) {
|
||||
for(i = res->x0; i < res->x1; ++i) {
|
||||
float tmp = ((float*)tilec->data)[i - res->x0 + (j - res->y0) * tw];
|
||||
int v = lrintf(tmp);
|
||||
int v = opj_lrintf(tmp);
|
||||
v += adjust;
|
||||
imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
|
||||
}
|
||||
|
||||
@@ -24,11 +24,6 @@
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if LL_MSVC
|
||||
// disable warning about boost::lexical_cast returning uninitialized data
|
||||
// when it fails to parse the string
|
||||
#pragma warning (disable:4701)
|
||||
#endif
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
@@ -230,7 +225,7 @@ void LLAvatarAppearance::initInstance()
|
||||
for (U32 lod = 0; lod < mesh_dict->mLOD; lod++)
|
||||
{
|
||||
LLAvatarJointMesh* mesh = createAvatarJointMesh();
|
||||
std::string mesh_name = "m" + mesh_dict->mName + std::to_string(lod);
|
||||
std::string mesh_name = fmt::format(FMT_STRING("m{:s}{:d}"), mesh_dict->mName, lod);
|
||||
// We pre-pended an m - need to capitalize first character for camelCase
|
||||
mesh_name[1] = toupper(mesh_name[1]);
|
||||
mesh->setName(mesh_name);
|
||||
@@ -1565,6 +1560,21 @@ BOOL LLAvatarAppearance::teToColorParams( ETextureIndex te, U32 *param_name )
|
||||
param_name[1] = 1072; //"tattoo_green";
|
||||
param_name[2] = 1073; //"tattoo_blue";
|
||||
break;
|
||||
case TEX_HEAD_UNIVERSAL_TATTOO:
|
||||
case TEX_UPPER_UNIVERSAL_TATTOO:
|
||||
case TEX_LOWER_UNIVERSAL_TATTOO:
|
||||
case TEX_SKIRT_TATTOO:
|
||||
case TEX_HAIR_TATTOO:
|
||||
case TEX_EYES_TATTOO:
|
||||
case TEX_LEFT_ARM_TATTOO:
|
||||
case TEX_LEFT_LEG_TATTOO:
|
||||
case TEX_AUX1_TATTOO:
|
||||
case TEX_AUX2_TATTOO:
|
||||
case TEX_AUX3_TATTOO:
|
||||
param_name[0] = 1238; //"tattoo_universal_red";
|
||||
param_name[1] = 1239; //"tattoo_universal_green";
|
||||
param_name[2] = 1240; //"tattoo_universal_blue";
|
||||
break;
|
||||
|
||||
default:
|
||||
llassert(0);
|
||||
|
||||
@@ -27,8 +27,11 @@
|
||||
#include "linden_common.h"
|
||||
#include "llavatarappearancedefines.h"
|
||||
|
||||
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH = 512;
|
||||
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT = 512;
|
||||
#include "indra_constants.h"
|
||||
#include <utility>
|
||||
|
||||
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH = 1024;
|
||||
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT = 1024;
|
||||
const S32 LLAvatarAppearanceDefines::IMPOSTOR_PERIOD = 2;
|
||||
|
||||
using namespace LLAvatarAppearanceDefines;
|
||||
@@ -65,12 +68,30 @@ LLAvatarAppearanceDictionary::Textures::Textures()
|
||||
addEntry(TEX_UPPER_TATTOO, new TextureEntry("upper_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_TATTOO));
|
||||
addEntry(TEX_LOWER_TATTOO, new TextureEntry("lower_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_TATTOO));
|
||||
|
||||
addEntry(TEX_HEAD_UNIVERSAL_TATTOO, new TextureEntry("head_universal_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_UPPER_UNIVERSAL_TATTOO, new TextureEntry("upper_universal_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LOWER_UNIVERSAL_TATTOO, new TextureEntry("lower_universal_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_SKIRT_TATTOO, new TextureEntry("skirt_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_HAIR_TATTOO, new TextureEntry("hair_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_EYES_TATTOO, new TextureEntry("eyes_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LEFT_ARM_TATTOO, new TextureEntry("leftarm_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LEFT_LEG_TATTOO, new TextureEntry("leftleg_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX1_TATTOO, new TextureEntry("aux1_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX2_TATTOO, new TextureEntry("aux2_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX3_TATTOO, new TextureEntry("aux3_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
|
||||
addEntry(TEX_HEAD_BAKED, new TextureEntry("head-baked", FALSE, BAKED_HEAD, "head"));
|
||||
addEntry(TEX_UPPER_BAKED, new TextureEntry("upper-baked", FALSE, BAKED_UPPER, "upper"));
|
||||
addEntry(TEX_LOWER_BAKED, new TextureEntry("lower-baked", FALSE, BAKED_LOWER, "lower"));
|
||||
addEntry(TEX_EYES_BAKED, new TextureEntry("eyes-baked", FALSE, BAKED_EYES, "eyes"));
|
||||
addEntry(TEX_HAIR_BAKED, new TextureEntry("hair-baked", FALSE, BAKED_HAIR, "hair"));
|
||||
addEntry(TEX_SKIRT_BAKED, new TextureEntry("skirt-baked", FALSE, BAKED_SKIRT, "skirt"));
|
||||
addEntry(TEX_LEFT_ARM_BAKED, new TextureEntry("leftarm-baked", FALSE, BAKED_LEFT_ARM, "leftarm"));
|
||||
addEntry(TEX_LEFT_LEG_BAKED, new TextureEntry("leftleg-baked", FALSE, BAKED_LEFT_LEG, "leftleg"));
|
||||
addEntry(TEX_AUX1_BAKED, new TextureEntry("aux1-baked", FALSE, BAKED_AUX1, "aux1"));
|
||||
addEntry(TEX_AUX2_BAKED, new TextureEntry("aux2-baked", FALSE, BAKED_AUX2, "aux2"));
|
||||
addEntry(TEX_AUX3_BAKED, new TextureEntry("aux3-baked", FALSE, BAKED_AUX3, "aux3"));
|
||||
}
|
||||
|
||||
LLAvatarAppearanceDictionary::BakedTextures::BakedTextures()
|
||||
@@ -78,35 +99,60 @@ LLAvatarAppearanceDictionary::BakedTextures::BakedTextures()
|
||||
// Baked textures
|
||||
addEntry(BAKED_HEAD, new BakedEntry(TEX_HEAD_BAKED,
|
||||
"head", "a4b9dc38-e13b-4df9-b284-751efb0566ff",
|
||||
3, TEX_HEAD_BODYPAINT, TEX_HEAD_TATTOO, TEX_HEAD_ALPHA,
|
||||
5, LLWearableType::WT_SHAPE, LLWearableType::WT_SKIN, LLWearableType::WT_HAIR, LLWearableType::WT_TATTOO, LLWearableType::WT_ALPHA));
|
||||
4, TEX_HEAD_BODYPAINT, TEX_HEAD_TATTOO, TEX_HEAD_ALPHA, TEX_HEAD_UNIVERSAL_TATTOO,
|
||||
6, LLWearableType::WT_SHAPE, LLWearableType::WT_SKIN, LLWearableType::WT_HAIR, LLWearableType::WT_TATTOO, LLWearableType::WT_ALPHA, LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
addEntry(BAKED_UPPER, new BakedEntry(TEX_UPPER_BAKED,
|
||||
"upper_body", "5943ff64-d26c-4a90-a8c0-d61f56bd98d4",
|
||||
7, TEX_UPPER_SHIRT,TEX_UPPER_BODYPAINT, TEX_UPPER_JACKET,
|
||||
TEX_UPPER_GLOVES, TEX_UPPER_UNDERSHIRT, TEX_UPPER_TATTOO, TEX_UPPER_ALPHA,
|
||||
8, LLWearableType::WT_SHAPE, LLWearableType::WT_SKIN, LLWearableType::WT_SHIRT, LLWearableType::WT_JACKET, LLWearableType::WT_GLOVES, LLWearableType::WT_UNDERSHIRT, LLWearableType::WT_TATTOO, LLWearableType::WT_ALPHA));
|
||||
8, TEX_UPPER_SHIRT,TEX_UPPER_BODYPAINT, TEX_UPPER_JACKET,
|
||||
TEX_UPPER_GLOVES, TEX_UPPER_UNDERSHIRT, TEX_UPPER_TATTOO, TEX_UPPER_ALPHA, TEX_UPPER_UNIVERSAL_TATTOO,
|
||||
9, LLWearableType::WT_SHAPE, LLWearableType::WT_SKIN, LLWearableType::WT_SHIRT, LLWearableType::WT_JACKET, LLWearableType::WT_GLOVES, LLWearableType::WT_UNDERSHIRT, LLWearableType::WT_TATTOO, LLWearableType::WT_ALPHA, LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
addEntry(BAKED_LOWER, new BakedEntry(TEX_LOWER_BAKED,
|
||||
"lower_body", "2944ee70-90a7-425d-a5fb-d749c782ed7d",
|
||||
8, TEX_LOWER_PANTS,TEX_LOWER_BODYPAINT,TEX_LOWER_SHOES, TEX_LOWER_SOCKS,
|
||||
TEX_LOWER_JACKET, TEX_LOWER_UNDERPANTS, TEX_LOWER_TATTOO, TEX_LOWER_ALPHA,
|
||||
9, LLWearableType::WT_SHAPE, LLWearableType::WT_SKIN, LLWearableType::WT_PANTS, LLWearableType::WT_SHOES, LLWearableType::WT_SOCKS, LLWearableType::WT_JACKET, LLWearableType::WT_UNDERPANTS, LLWearableType::WT_TATTOO, LLWearableType::WT_ALPHA));
|
||||
9, TEX_LOWER_PANTS,TEX_LOWER_BODYPAINT,TEX_LOWER_SHOES, TEX_LOWER_SOCKS,
|
||||
TEX_LOWER_JACKET, TEX_LOWER_UNDERPANTS, TEX_LOWER_TATTOO, TEX_LOWER_ALPHA, TEX_LOWER_UNIVERSAL_TATTOO,
|
||||
10, LLWearableType::WT_SHAPE, LLWearableType::WT_SKIN, LLWearableType::WT_PANTS, LLWearableType::WT_SHOES, LLWearableType::WT_SOCKS, LLWearableType::WT_JACKET, LLWearableType::WT_UNDERPANTS, LLWearableType::WT_TATTOO, LLWearableType::WT_ALPHA, LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
addEntry(BAKED_EYES, new BakedEntry(TEX_EYES_BAKED,
|
||||
"eyes", "27b1bc0f-979f-4b13-95fe-b981c2ba9788",
|
||||
2, TEX_EYES_IRIS, TEX_EYES_ALPHA,
|
||||
2, LLWearableType::WT_EYES, LLWearableType::WT_ALPHA));
|
||||
3, TEX_EYES_IRIS, TEX_EYES_TATTOO, TEX_EYES_ALPHA,
|
||||
3, LLWearableType::WT_EYES, LLWearableType::WT_UNIVERSAL, LLWearableType::WT_ALPHA));
|
||||
|
||||
addEntry(BAKED_SKIRT, new BakedEntry(TEX_SKIRT_BAKED,
|
||||
"skirt", "03e7e8cb-1368-483b-b6f3-74850838ba63",
|
||||
1, TEX_SKIRT,
|
||||
1, LLWearableType::WT_SKIRT));
|
||||
2, TEX_SKIRT, TEX_SKIRT_TATTOO,
|
||||
2, LLWearableType::WT_SKIRT, LLWearableType::WT_UNIVERSAL ));
|
||||
|
||||
addEntry(BAKED_HAIR, new BakedEntry(TEX_HAIR_BAKED,
|
||||
"hair", "a60e85a9-74e8-48d8-8a2d-8129f28d9b61",
|
||||
2, TEX_HAIR, TEX_HAIR_ALPHA,
|
||||
2, LLWearableType::WT_HAIR, LLWearableType::WT_ALPHA));
|
||||
3, TEX_HAIR, TEX_HAIR_TATTOO, TEX_HAIR_ALPHA,
|
||||
3, LLWearableType::WT_HAIR, LLWearableType::WT_UNIVERSAL, LLWearableType::WT_ALPHA));
|
||||
|
||||
addEntry(BAKED_LEFT_ARM, new BakedEntry(TEX_LEFT_ARM_BAKED,
|
||||
"leftarm", "9f39febf-22d7-0087-79d1-e9e8c6c9ed19",
|
||||
1, TEX_LEFT_ARM_TATTOO,
|
||||
1, LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
addEntry(BAKED_LEFT_LEG, new BakedEntry(TEX_LEFT_LEG_BAKED,
|
||||
"leftleg", "054a7a58-8ed5-6386-0add-3b636fb28b78",
|
||||
1, TEX_LEFT_LEG_TATTOO,
|
||||
1, LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
addEntry(BAKED_AUX1, new BakedEntry(TEX_AUX1_BAKED,
|
||||
"aux1", "790c11be-b25c-c17e-b4d2-6a4ad786b752",
|
||||
1, TEX_AUX1_TATTOO,
|
||||
1, LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
addEntry(BAKED_AUX2, new BakedEntry(TEX_AUX2_BAKED,
|
||||
"aux2", "d78c478f-48c7-5928-5864-8d99fb1f521e",
|
||||
1, TEX_AUX2_TATTOO,
|
||||
1, LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
addEntry(BAKED_AUX3, new BakedEntry(TEX_AUX3_BAKED,
|
||||
"aux3", "6a95dd53-edd9-aac8-f6d3-27ed99f3c3eb",
|
||||
1, TEX_AUX3_TATTOO,
|
||||
1, LLWearableType::WT_UNIVERSAL));
|
||||
}
|
||||
|
||||
LLAvatarAppearanceDictionary::MeshEntries::MeshEntries()
|
||||
@@ -267,3 +313,112 @@ LLWearableType::EType LLAvatarAppearanceDictionary::getTEWearableType(ETextureIn
|
||||
return getInstance()->getTexture(index)->mWearableType;
|
||||
}
|
||||
|
||||
// static
|
||||
BOOL LLAvatarAppearanceDictionary::isBakedImageId(const LLUUID& id)
|
||||
{
|
||||
if ((id == IMG_USE_BAKED_EYES) || (id == IMG_USE_BAKED_HAIR) || (id == IMG_USE_BAKED_HEAD) || (id == IMG_USE_BAKED_LOWER) || (id == IMG_USE_BAKED_SKIRT) || (id == IMG_USE_BAKED_UPPER)
|
||||
|| (id == IMG_USE_BAKED_LEFTARM) || (id == IMG_USE_BAKED_LEFTLEG) || (id == IMG_USE_BAKED_AUX1) || (id == IMG_USE_BAKED_AUX2) || (id == IMG_USE_BAKED_AUX3) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// static
|
||||
EBakedTextureIndex LLAvatarAppearanceDictionary::assetIdToBakedTextureIndex(const LLUUID& id)
|
||||
{
|
||||
if (id == IMG_USE_BAKED_EYES)
|
||||
{
|
||||
return BAKED_EYES;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_HAIR)
|
||||
{
|
||||
return BAKED_HAIR;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_HEAD)
|
||||
{
|
||||
return BAKED_HEAD;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_LOWER)
|
||||
{
|
||||
return BAKED_LOWER;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_SKIRT)
|
||||
{
|
||||
return BAKED_SKIRT;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_UPPER)
|
||||
{
|
||||
return BAKED_UPPER;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_LEFTARM)
|
||||
{
|
||||
return BAKED_LEFT_ARM;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_LEFTLEG)
|
||||
{
|
||||
return BAKED_LEFT_LEG;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_AUX1)
|
||||
{
|
||||
return BAKED_AUX1;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_AUX2)
|
||||
{
|
||||
return BAKED_AUX2;
|
||||
}
|
||||
else if (id == IMG_USE_BAKED_AUX3)
|
||||
{
|
||||
return BAKED_AUX3;
|
||||
}
|
||||
|
||||
return BAKED_NUM_INDICES;
|
||||
}
|
||||
|
||||
//static
|
||||
LLUUID LLAvatarAppearanceDictionary::localTextureIndexToMagicId(ETextureIndex t)
|
||||
{
|
||||
LLUUID id = LLUUID::null;
|
||||
|
||||
switch (t)
|
||||
{
|
||||
case LLAvatarAppearanceDefines::TEX_HEAD_BAKED:
|
||||
id = IMG_USE_BAKED_HEAD;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_UPPER_BAKED:
|
||||
id = IMG_USE_BAKED_UPPER;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_LOWER_BAKED:
|
||||
id = IMG_USE_BAKED_LOWER;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_EYES_BAKED:
|
||||
id = IMG_USE_BAKED_EYES;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_SKIRT_BAKED:
|
||||
id = IMG_USE_BAKED_SKIRT;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_HAIR_BAKED:
|
||||
id = IMG_USE_BAKED_HAIR;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_LEFT_ARM_BAKED:
|
||||
id = IMG_USE_BAKED_LEFTARM;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_LEFT_LEG_BAKED:
|
||||
id = IMG_USE_BAKED_LEFTLEG;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_AUX1_BAKED:
|
||||
id = IMG_USE_BAKED_AUX1;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_AUX2_BAKED:
|
||||
id = IMG_USE_BAKED_AUX2;
|
||||
break;
|
||||
case LLAvatarAppearanceDefines::TEX_AUX3_BAKED:
|
||||
id = IMG_USE_BAKED_AUX3;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
/**
|
||||
* @file llavatarappearancedefines.h
|
||||
* @brief Various LLAvatarAppearance related definitions
|
||||
@@ -78,6 +79,22 @@ enum ETextureIndex
|
||||
TEX_HEAD_TATTOO,
|
||||
TEX_UPPER_TATTOO,
|
||||
TEX_LOWER_TATTOO,
|
||||
TEX_HEAD_UNIVERSAL_TATTOO,
|
||||
TEX_UPPER_UNIVERSAL_TATTOO,
|
||||
TEX_LOWER_UNIVERSAL_TATTOO,
|
||||
TEX_SKIRT_TATTOO,
|
||||
TEX_HAIR_TATTOO,
|
||||
TEX_EYES_TATTOO,
|
||||
TEX_LEFT_ARM_TATTOO,
|
||||
TEX_LEFT_LEG_TATTOO,
|
||||
TEX_AUX1_TATTOO,
|
||||
TEX_AUX2_TATTOO,
|
||||
TEX_AUX3_TATTOO,
|
||||
TEX_LEFT_ARM_BAKED, // Pre-composited
|
||||
TEX_LEFT_LEG_BAKED, // Pre-composited
|
||||
TEX_AUX1_BAKED, // Pre-composited
|
||||
TEX_AUX2_BAKED, // Pre-composited
|
||||
TEX_AUX3_BAKED, // Pre-composited
|
||||
TEX_NUM_INDICES
|
||||
};
|
||||
|
||||
@@ -89,6 +106,11 @@ enum EBakedTextureIndex
|
||||
BAKED_EYES,
|
||||
BAKED_SKIRT,
|
||||
BAKED_HAIR,
|
||||
BAKED_LEFT_ARM,
|
||||
BAKED_LEFT_LEG,
|
||||
BAKED_AUX1,
|
||||
BAKED_AUX2,
|
||||
BAKED_AUX3,
|
||||
BAKED_NUM_INDICES
|
||||
};
|
||||
|
||||
@@ -224,6 +246,9 @@ public:
|
||||
// Given a texture entry, determine which wearable type owns it.
|
||||
static LLWearableType::EType getTEWearableType(ETextureIndex index);
|
||||
|
||||
static BOOL isBakedImageId(const LLUUID& id);
|
||||
static EBakedTextureIndex assetIdToBakedTextureIndex(const LLUUID& id);
|
||||
static LLUUID localTextureIndexToMagicId(ETextureIndex t);
|
||||
}; // End LLAvatarAppearanceDictionary
|
||||
|
||||
} // End namespace LLAvatarAppearanceDefines
|
||||
|
||||
@@ -184,7 +184,7 @@ void LLWearable::createLayers(S32 te, LLAvatarAppearance *avatarp)
|
||||
{
|
||||
LLTexLayerSet *layer_set = NULL;
|
||||
const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = LLAvatarAppearanceDictionary::getInstance()->getTexture((ETextureIndex)te);
|
||||
if (texture_dict->mIsUsedByBakedTexture)
|
||||
if (texture_dict && texture_dict->mIsUsedByBakedTexture)
|
||||
{
|
||||
const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
|
||||
|
||||
@@ -197,7 +197,7 @@ void LLWearable::createLayers(S32 te, LLAvatarAppearance *avatarp)
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "could not find layerset for LTO in wearable!" << LL_ENDL;
|
||||
LL_WARNS() << "could not find layerset for LTO in wearable!" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -438,6 +438,12 @@ LLWearable::EImportResult LLWearable::importStream( std::istream& input_stream,
|
||||
return LLWearable::FAILURE;
|
||||
}
|
||||
|
||||
if (te >= ETextureIndex::TEX_NUM_INDICES) //createLayers() converts to ETextureIndex
|
||||
{
|
||||
LL_WARNS() << "Bad Wearable asset: bad texture index: " << te << LL_ENDL;
|
||||
return LLWearable::FAILURE;
|
||||
}
|
||||
|
||||
if( !LLUUID::validate( uuid_buffer ) )
|
||||
{
|
||||
LL_WARNS() << "Bad Wearable asset: bad texture uuid: "
|
||||
|
||||
@@ -98,6 +98,7 @@ LLWearableDictionary::LLWearableDictionary()
|
||||
addEntry(LLWearableType::WT_SKIRT, new WearableEntry("skirt", "New Skirt", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SKIRT, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_ALPHA, new WearableEntry("alpha", "New Alpha", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_ALPHA, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_TATTOO, new WearableEntry("tattoo", "New Tattoo", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_TATTOO, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_UNIVERSAL, new WearableEntry("universal", "New Universal", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_UNIVERSAL, FALSE, TRUE));
|
||||
|
||||
// [SL:KB] - Patch: Appearance-Misc | Checked: 2011-05-29 (Catznip-2.6)
|
||||
addEntry(LLWearableType::WT_PHYSICS, new WearableEntry("physics", "New Physics", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_PHYSICS, TRUE, FALSE));
|
||||
|
||||
@@ -54,10 +54,12 @@ public:
|
||||
WT_ALPHA = 13,
|
||||
WT_TATTOO = 14,
|
||||
WT_PHYSICS = 15,
|
||||
WT_UNKNOWN = 16, // Singu note: used for corrupt wearables that do not have their type set in the inventory database.
|
||||
WT_UNIVERSAL = 16,
|
||||
WT_UNKNOWN = 17, // Singu note: used for corrupt wearables that do not have their type set in the inventory database.
|
||||
// While all the above values are serialized and stored in the database, this value is local only:
|
||||
// When a new item with value 16 is added by upstream, just increase this value to 17 (and WT_COUNT to 18).
|
||||
WT_COUNT = 17,
|
||||
// When a new item with value 17 is added by upstream, just increase this value to 18 (and WT_COUNT to 19).
|
||||
// Keep WT_UNKNOWN and WT_COUNT in sync with llinventory.cpp
|
||||
WT_COUNT = 18,
|
||||
|
||||
WT_INVALID = 255,
|
||||
WT_NONE = -1,
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
project(llaudio)
|
||||
|
||||
include(00-Common)
|
||||
include(Audio)
|
||||
include(LLAudio)
|
||||
include(FMODSTUDIO)
|
||||
include(OPENAL)
|
||||
include(LLCommon)
|
||||
@@ -12,10 +10,6 @@ include(LLMath)
|
||||
include(LLMessage)
|
||||
include(LLVFS)
|
||||
|
||||
if (FMOD)
|
||||
include_directories(${FMOD_INCLUDE_DIR})
|
||||
endif(FMOD)
|
||||
|
||||
include_directories(
|
||||
${LLAUDIO_INCLUDE_DIRS}
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
@@ -26,7 +20,7 @@ include_directories(
|
||||
${VORBISENC_INCLUDE_DIRS}
|
||||
${VORBISFILE_INCLUDE_DIRS}
|
||||
${VORBIS_INCLUDE_DIRS}
|
||||
${OPENAL_INCLUDE_DIRS}
|
||||
${OPENAL_LIB_INCLUDE_DIRS}
|
||||
${FREEAULT_LIB_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
@@ -49,7 +43,10 @@ set(llaudio_HEADER_FILES
|
||||
llwindgen.h
|
||||
)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
if (USE_FMODSTUDIO)
|
||||
include_directories(
|
||||
${FMODSTUDIO_INCLUDE_DIR}
|
||||
)
|
||||
list(APPEND llaudio_SOURCE_FILES
|
||||
llaudioengine_fmodstudio.cpp
|
||||
lllistener_fmodstudio.cpp
|
||||
@@ -61,7 +58,7 @@ if (FMODSTUDIO)
|
||||
lllistener_fmodstudio.h
|
||||
llstreamingaudio_fmodstudio.h
|
||||
)
|
||||
endif (FMODSTUDIO)
|
||||
endif (USE_FMODSTUDIO)
|
||||
|
||||
if (OPENAL)
|
||||
list(APPEND llaudio_SOURCE_FILES
|
||||
|
||||
@@ -12,8 +12,6 @@ include(Linking)
|
||||
include(Boost)
|
||||
include(OpenSSL)
|
||||
include(LLSharedLibs)
|
||||
include(Json)
|
||||
include(GoogleBreakpad)
|
||||
include(Copy3rdPartyLibs)
|
||||
include(ZLIB)
|
||||
include(URIPARSER)
|
||||
@@ -270,12 +268,6 @@ list(APPEND llcommon_SOURCE_FILES ${cwdebug_SOURCE_FILES})
|
||||
|
||||
list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES})
|
||||
|
||||
if(NOT WORD_SIZE EQUAL 32)
|
||||
if(NOT WINDOWS)
|
||||
add_definitions(-fPIC)
|
||||
endif(NOT WINDOWS)
|
||||
endif(NOT WORD_SIZE EQUAL 32)
|
||||
|
||||
if(LLCOMMON_LINK_SHARED)
|
||||
add_library (llcommon SHARED ${llcommon_SOURCE_FILES})
|
||||
if(WINDOWS)
|
||||
@@ -287,11 +279,12 @@ else(LLCOMMON_LINK_SHARED)
|
||||
add_library (llcommon ${llcommon_SOURCE_FILES})
|
||||
endif(LLCOMMON_LINK_SHARED)
|
||||
|
||||
set_target_properties(llcommon PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
|
||||
|
||||
target_link_libraries(
|
||||
llcommon
|
||||
PUBLIC
|
||||
absl::hash
|
||||
${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}
|
||||
${APRUTIL_LIBRARIES}
|
||||
${APR_LIBRARIES}
|
||||
${EXPAT_LIBRARIES}
|
||||
@@ -306,6 +299,10 @@ target_link_libraries(
|
||||
${Boost_SYSTEM_LIBRARY}
|
||||
${CORESERVICES_LIBRARY}
|
||||
${URIPARSER_LIBRARY}
|
||||
fmt::fmt
|
||||
nlohmann_json::nlohmann_json
|
||||
absl::strings
|
||||
${RT_LIBRARY}
|
||||
)
|
||||
|
||||
if (DARWIN)
|
||||
|
||||
@@ -132,7 +132,7 @@ class LL_COMMON_API AIArgs
|
||||
// Add another replacement.
|
||||
AIArgs& operator()(char const* key, std::string const& replacement) { mArgs[key] = replacement; return *this; }
|
||||
// The destructor may not throw.
|
||||
~AIArgs() throw() { }
|
||||
~AIArgs() noexcept { }
|
||||
|
||||
// Accessor.
|
||||
LLStringUtil::format_map_t const& operator*() const { return mArgs; }
|
||||
@@ -193,7 +193,7 @@ class LL_COMMON_API Line
|
||||
Line(std::string const& xml_desc, AIArgs const& args, bool newline = false) : mNewline(newline), mXmlDesc(xml_desc), mArgs(args), mType(normal) { }
|
||||
Line(Prefix const& prefix, bool newline = false) : mNewline(newline), mXmlDesc("AIPrefix"), mArgs("[PREFIX]", prefix.str()), mType(prefix.type()) { }
|
||||
// The destructor may not throw.
|
||||
~Line() throw() { }
|
||||
~Line() noexcept { }
|
||||
|
||||
// Prepend a newline before this line.
|
||||
void set_newline(void) { mNewline = true; }
|
||||
@@ -225,7 +225,7 @@ class LL_COMMON_API Error : public std::exception
|
||||
typedef std::deque<Line> lines_type;
|
||||
|
||||
// The destructor may not throw.
|
||||
~Error() throw() { }
|
||||
~Error() noexcept { }
|
||||
|
||||
// Accessors.
|
||||
lines_type const& lines(void) const { return mLines; }
|
||||
@@ -267,7 +267,7 @@ class LL_COMMON_API ErrorCode : public Error
|
||||
|
||||
public:
|
||||
// The destructor may not throw.
|
||||
~ErrorCode() throw() { }
|
||||
~ErrorCode() noexcept { }
|
||||
|
||||
// Accessor.
|
||||
int getCode(void) const { return mCode; }
|
||||
|
||||
@@ -45,3 +45,15 @@ const LLUUID GOVERNOR_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1");
|
||||
const LLUUID REALESTATE_LINDEN_ID("3d6181b0-6a4b-97ef-18d8-722652995cf1");
|
||||
// Maintenance's group id.
|
||||
const LLUUID MAINTENANCE_GROUP_ID("dc7b21cd-3c89-fcaa-31c8-25f9ffd224cd");
|
||||
|
||||
const LLUUID IMG_USE_BAKED_HEAD ("5a9f4a74-30f2-821c-b88d-70499d3e7183");
|
||||
const LLUUID IMG_USE_BAKED_UPPER ("ae2de45c-d252-50b8-5c6e-19f39ce79317");
|
||||
const LLUUID IMG_USE_BAKED_LOWER ("24daea5f-0539-cfcf-047f-fbc40b2786ba");
|
||||
const LLUUID IMG_USE_BAKED_EYES ("52cc6bb6-2ee5-e632-d3ad-50197b1dcb8a");
|
||||
const LLUUID IMG_USE_BAKED_SKIRT ("43529ce8-7faa-ad92-165a-bc4078371687");
|
||||
const LLUUID IMG_USE_BAKED_HAIR ("09aac1fb-6bce-0bee-7d44-caac6dbb6c63");
|
||||
const LLUUID IMG_USE_BAKED_LEFTARM ("ff62763f-d60a-9855-890b-0c96f8f8cd98");
|
||||
const LLUUID IMG_USE_BAKED_LEFTLEG ("8e915e25-31d1-cc95-ae08-d58a47488251");
|
||||
const LLUUID IMG_USE_BAKED_AUX1 ("9742065b-19b5-297c-858a-29711d539043");
|
||||
const LLUUID IMG_USE_BAKED_AUX2 ("03642e83-2bd1-4eb9-34b4-4c47ed586d2d");
|
||||
const LLUUID IMG_USE_BAKED_AUX3 ("edd51b77-fc10-ce7a-4b3d-011dfc349e4f");
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
/**
|
||||
* @file indra_constants.h
|
||||
* @brief some useful short term constants for Indra
|
||||
@@ -243,7 +244,6 @@ const U8 SIM_ACCESS_DOWN = 254;
|
||||
const U8 SIM_ACCESS_MAX = SIM_ACCESS_ADULT;
|
||||
|
||||
// attachment constants
|
||||
const U32 MAX_AGENT_ATTACHMENTS = 38;
|
||||
const U8 ATTACHMENT_ADD = 0x80;
|
||||
|
||||
// god levels
|
||||
@@ -294,6 +294,19 @@ const U32 START_LOCATION_ID_COUNT = 6;
|
||||
// group constants
|
||||
const U32 GROUP_MIN_SIZE = 2;
|
||||
|
||||
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_HEAD;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_UPPER;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_LOWER;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_EYES;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_SKIRT;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_HAIR;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_LEFTARM;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_LEFTLEG;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_AUX1;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_AUX2;
|
||||
LL_COMMON_API extern const LLUUID IMG_USE_BAKED_AUX3;
|
||||
|
||||
// radius within which a chat message is fully audible
|
||||
const F32 CHAT_WHISPER_RADIUS = 10.f;
|
||||
const F32 CHAT_NORMAL_RADIUS = 20.f;
|
||||
@@ -354,13 +367,6 @@ const U32 MAP_ITEM_CLASSIFIED = 0x08;
|
||||
const U32 MAP_ITEM_ADULT_EVENT = 0x09;
|
||||
const U32 MAP_ITEM_LAND_FOR_SALE_ADULT = 0x0a;
|
||||
|
||||
// Crash reporter behavior
|
||||
const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
|
||||
const char* const CRASH_BEHAVIOR_SETTING = "CrashSubmitBehavior";
|
||||
const S32 CRASH_BEHAVIOR_ASK = 0;
|
||||
const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
|
||||
const S32 CRASH_BEHAVIOR_NEVER_SEND = 2;
|
||||
|
||||
// Export/Import return values
|
||||
const S32 EXPORT_SUCCESS = 0;
|
||||
const S32 EXPORT_ERROR_PERMISSIONS = -1;
|
||||
|
||||
@@ -25,9 +25,8 @@
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
#include "llapp.h"
|
||||
|
||||
#include <cstdlib>
|
||||
#include "llapp.h"
|
||||
|
||||
#ifdef LL_DARWIN
|
||||
#include <sys/types.h>
|
||||
@@ -45,7 +44,6 @@
|
||||
#include "llstl.h" // for DeletePointer()
|
||||
#include "llstring.h"
|
||||
#include "lleventtimer.h"
|
||||
#include "exception_handler.h"
|
||||
|
||||
//
|
||||
// Signal handling
|
||||
@@ -57,12 +55,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()
|
||||
@@ -70,18 +62,6 @@ bool windows_post_minidump_callback(const wchar_t* dump_path,
|
||||
void setup_signals();
|
||||
void default_unix_signal_handler(int signum, siginfo_t *info, void *);
|
||||
|
||||
#if LL_LINUX
|
||||
#include "client/linux/handler/minidump_descriptor.h"
|
||||
static bool unix_minidump_callback(const google_breakpad::MinidumpDescriptor& minidump_desc,
|
||||
void* context,
|
||||
bool succeeded);
|
||||
#else
|
||||
// Called by breakpad exception handler after the minidump has been generated.
|
||||
bool unix_post_minidump_callback(const char *dump_dir,
|
||||
const char *minidump_id,
|
||||
void *context, bool succeeded);
|
||||
#endif
|
||||
|
||||
# if LL_DARWIN
|
||||
/* OSX doesn't support SIGRT* */
|
||||
S32 LL_SMACKDOWN_SIGNAL = SIGUSR1;
|
||||
@@ -98,7 +78,7 @@ S32 LL_HEARTBEAT_SIGNAL = (SIGRTMAX >= 0) ? (SIGRTMAX-0) : SIGUSR2;
|
||||
#endif // LL_WINDOWS
|
||||
|
||||
// the static application instance
|
||||
LLApp* LLApp::sApplication = NULL;
|
||||
LLApp* LLApp::sApplication = nullptr;
|
||||
|
||||
// Allows the generation of core files for post mortem under gdb
|
||||
// and disables crashlogger
|
||||
@@ -110,7 +90,7 @@ BOOL LLApp::sLogInSignal = FALSE;
|
||||
|
||||
// static
|
||||
LLApp::EAppStatus LLApp::sStatus = LLApp::APP_STATUS_STOPPED; // Keeps track of application status
|
||||
LLAppErrorHandler LLApp::sErrorHandler = NULL;
|
||||
LLAppErrorHandler LLApp::sErrorHandler = nullptr;
|
||||
BOOL LLApp::sErrorThreadRunning = FALSE;
|
||||
#if !LL_WINDOWS
|
||||
LLApp::child_map LLApp::sChildMap;
|
||||
@@ -119,13 +99,12 @@ LLAppChildCallback LLApp::sDefaultChildCallback = NULL;
|
||||
#endif
|
||||
|
||||
|
||||
LLApp::LLApp() : mThreadErrorp(NULL)
|
||||
LLApp::LLApp()
|
||||
: mThreadErrorp(nullptr)
|
||||
{
|
||||
commonCtor();
|
||||
}
|
||||
|
||||
static void* sCrashLoggerReserve = NULL;
|
||||
|
||||
void LLApp::commonCtor()
|
||||
{
|
||||
// Set our status to running
|
||||
@@ -150,34 +129,11 @@ void LLApp::commonCtor()
|
||||
// Set the application to this instance.
|
||||
sApplication = this;
|
||||
|
||||
mExceptionHandler = 0;
|
||||
|
||||
#if LL_WINDOWS
|
||||
sCrashLoggerReserve = VirtualAlloc(NULL, 512*1024, MEM_COMMIT|MEM_RESERVE, PAGE_NOACCESS);
|
||||
#else
|
||||
sCrashLoggerReserve = malloc(512*1024);
|
||||
#endif
|
||||
|
||||
// initialize the buffer to write the minidump filename to
|
||||
// (this is used to avoid allocating memory in the crash handler)
|
||||
memset(mMinidumpPath, 0, MAX_MINDUMP_PATH_LENGTH);
|
||||
mCrashReportPipeStr = L"\\\\.\\pipe\\LLCrashReporterPipe";
|
||||
}
|
||||
|
||||
#if LL_WINDOWS
|
||||
static bool clear_CrashLoggerReserve_callback(void* context, EXCEPTION_POINTERS* exinfo, MDRawAssertionInfo* assertion)
|
||||
{
|
||||
VirtualFree(sCrashLoggerReserve, 0, MEM_RELEASE);
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
static bool clear_CrashLoggerReserve_callback(void* context)
|
||||
{
|
||||
free(sCrashLoggerReserve);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
LLApp::LLApp(LLErrorThread *error_thread) :
|
||||
mThreadErrorp(error_thread)
|
||||
{
|
||||
@@ -198,11 +154,9 @@ LLApp::~LLApp()
|
||||
if (mThreadErrorp)
|
||||
{
|
||||
delete mThreadErrorp;
|
||||
mThreadErrorp = NULL;
|
||||
mThreadErrorp = nullptr;
|
||||
}
|
||||
|
||||
if(mExceptionHandler != 0) delete mExceptionHandler;
|
||||
|
||||
LLCommon::cleanupClass();
|
||||
}
|
||||
|
||||
@@ -216,8 +170,8 @@ LLApp* LLApp::instance()
|
||||
LLSD LLApp::getOption(const std::string& name) const
|
||||
{
|
||||
LLSD rv;
|
||||
LLSD::array_const_iterator iter = mOptions.beginArray();
|
||||
LLSD::array_const_iterator end = mOptions.endArray();
|
||||
auto iter = mOptions.beginArray();
|
||||
auto end = mOptions.endArray();
|
||||
for(; iter != end; ++iter)
|
||||
{
|
||||
rv = (*iter)[name];
|
||||
@@ -264,9 +218,9 @@ bool LLApp::parseCommandOptions(int argc, char** argv)
|
||||
|
||||
#if LL_WINDOWS
|
||||
//Windows changed command line parsing. Deal with it.
|
||||
S32 slen = value.length() - 1;
|
||||
S32 start = 0;
|
||||
S32 end = slen;
|
||||
size_t slen = value.length() - 1;
|
||||
size_t start = 0;
|
||||
size_t end = slen;
|
||||
if (argv[ii][start]=='"')start++;
|
||||
if (argv[ii][end]=='"')end--;
|
||||
if (start!=0 || end!=slen)
|
||||
@@ -343,92 +297,17 @@ void LLApp::setupErrorHandling()
|
||||
// Error handling is done by starting up an error handling thread, which just sleeps and
|
||||
// occasionally checks to see if the app is in an error state, and sees if it needs to be run.
|
||||
|
||||
#if LL_WINDOWS
|
||||
|
||||
#if LL_SEND_CRASH_REPORTS
|
||||
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)
|
||||
{
|
||||
mExceptionHandler = new google_breakpad::ExceptionHandler(
|
||||
std::wstring(mDumpPath.begin(),mDumpPath.end()), //Dump path
|
||||
clear_CrashLoggerReserve_callback,
|
||||
windows_post_minidump_callback,
|
||||
0,
|
||||
google_breakpad::ExceptionHandler::HANDLER_ALL);
|
||||
if (mExceptionHandler)
|
||||
{
|
||||
mExceptionHandler->set_handle_debug_exceptions(true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#if !LL_WINDOWS
|
||||
//
|
||||
// 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 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;
|
||||
}
|
||||
|
||||
if(installHandler && (mExceptionHandler == 0))
|
||||
{
|
||||
mExceptionHandler = new google_breakpad::ExceptionHandler(mDumpPath, clear_CrashLoggerReserve_callback, &unix_post_minidump_callback, 0, true, 0);
|
||||
}
|
||||
#endif
|
||||
#elif LL_LINUX
|
||||
if(installHandler && (mExceptionHandler == 0))
|
||||
{
|
||||
if (mDumpPath.empty())
|
||||
{
|
||||
mDumpPath = "/tmp";
|
||||
}
|
||||
google_breakpad::MinidumpDescriptor desc(mDumpPath);
|
||||
mExceptionHandler = new google_breakpad::ExceptionHandler(desc, clear_CrashLoggerReserve_callback, unix_minidump_callback, NULL, true, -1);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // ! LL_WINDOWS
|
||||
#if !defined(USE_CRASHPAD)
|
||||
startErrorThread();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -466,7 +345,6 @@ void LLApp::setErrorHandler(LLAppErrorHandler handler)
|
||||
LLApp::sErrorHandler = handler;
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLApp::runErrorHandler()
|
||||
{
|
||||
@@ -479,7 +357,6 @@ void LLApp::runErrorHandler()
|
||||
LLApp::setStopped();
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLApp::setStatus(EAppStatus status)
|
||||
{
|
||||
@@ -494,43 +371,12 @@ 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
|
||||
wchar_t buffer[MAX_MINDUMP_PATH_LENGTH];
|
||||
mbstowcs(buffer, mDumpPath.c_str(), MAX_MINDUMP_PATH_LENGTH);
|
||||
mExceptionHandler->set_dump_path(std::wstring(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";
|
||||
mDynamicDebugFileName = path + "dynamic_debug_info.log";
|
||||
}
|
||||
|
||||
void LLApp::writeMiniDump()
|
||||
{
|
||||
if(mExceptionHandler == 0) return;
|
||||
mExceptionHandler->WriteMinidump();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLApp::setQuitting()
|
||||
{
|
||||
@@ -585,13 +431,6 @@ bool LLApp::isExiting()
|
||||
|
||||
void LLApp::disableCrashlogger()
|
||||
{
|
||||
// Disable Breakpad exception handler.
|
||||
if (mExceptionHandler != 0)
|
||||
{
|
||||
delete mExceptionHandler;
|
||||
mExceptionHandler = 0;
|
||||
}
|
||||
|
||||
sDisableCrashlogger = TRUE;
|
||||
}
|
||||
|
||||
@@ -660,12 +499,6 @@ LONG WINAPI default_windows_exception_handler(struct _EXCEPTION_POINTERS *except
|
||||
ms_sleep(10);
|
||||
}
|
||||
|
||||
//
|
||||
// Generate a minidump if we can.
|
||||
//
|
||||
// TODO: This needs to be ported over form the viewer-specific
|
||||
// LLWinDebug class
|
||||
|
||||
//
|
||||
// At this point, we always want to exit the app. There's no graceful
|
||||
// recovery for an unhandled exception.
|
||||
@@ -965,150 +798,4 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if LL_LINUX
|
||||
bool unix_minidump_callback(const google_breakpad::MinidumpDescriptor& minidump_desc, void* context, bool succeeded)
|
||||
{
|
||||
// Copy minidump file path into fixed buffer in the app instance to avoid
|
||||
// heap allocations in a crash handler.
|
||||
|
||||
// path format: <dump_dir>/<minidump_id>.dmp
|
||||
|
||||
//HACK: *path points to the buffer in getMiniDumpFilename which has already allocated space
|
||||
//to avoid doing allocation during crash.
|
||||
char * path = LLApp::instance()->getMiniDumpFilename();
|
||||
int dir_path_len = strlen(path);
|
||||
|
||||
// The path must not be truncated.
|
||||
S32 remaining = LLApp::MAX_MINDUMP_PATH_LENGTH - dir_path_len;
|
||||
|
||||
llassert( (remaining - strlen(minidump_desc.path())) > 5);
|
||||
|
||||
path += dir_path_len;
|
||||
|
||||
if (dir_path_len > 0 && path[-1] != '/')
|
||||
{
|
||||
*path++ = '/';
|
||||
--remaining;
|
||||
}
|
||||
|
||||
strncpy(path, minidump_desc.path(), remaining);
|
||||
|
||||
LL_INFOS() << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << LL_ENDL;
|
||||
LLApp::runErrorHandler();
|
||||
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
clear_signals();
|
||||
return false;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
bool unix_post_minidump_callback(const char *dump_dir,
|
||||
const char *minidump_id,
|
||||
void *context, bool succeeded)
|
||||
{
|
||||
// Copy minidump file path into fixed buffer in the app instance to avoid
|
||||
// heap allocations in a crash handler.
|
||||
|
||||
// path format: <dump_dir>/<minidump_id>.dmp
|
||||
int dirPathLength = strlen(dump_dir);
|
||||
int idLength = strlen(minidump_id);
|
||||
|
||||
// The path must not be truncated.
|
||||
llassert((dirPathLength + idLength + 5) <= LLApp::MAX_MINDUMP_PATH_LENGTH);
|
||||
|
||||
char * path = LLApp::instance()->getMiniDumpFilename();
|
||||
S32 remaining = LLApp::MAX_MINDUMP_PATH_LENGTH;
|
||||
strncpy(path, dump_dir, remaining);
|
||||
remaining -= dirPathLength;
|
||||
path += dirPathLength;
|
||||
if (remaining > 0 && dirPathLength > 0 && path[-1] != '/')
|
||||
{
|
||||
*path++ = '/';
|
||||
--remaining;
|
||||
}
|
||||
if (remaining > 0)
|
||||
{
|
||||
strncpy(path, minidump_id, remaining);
|
||||
remaining -= idLength;
|
||||
path += idLength;
|
||||
strncpy(path, ".dmp", remaining);
|
||||
}
|
||||
|
||||
LL_INFOS() << "generated minidump: " << path << LL_ENDL;
|
||||
LLApp::runErrorHandler();
|
||||
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
clear_signals();
|
||||
return false;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
#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;
|
||||
|
||||
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() << "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
|
||||
|
||||
@@ -60,10 +60,6 @@ public:
|
||||
};
|
||||
#endif
|
||||
|
||||
namespace google_breakpad {
|
||||
class ExceptionHandler; // See exception_handler.h
|
||||
}
|
||||
|
||||
class LL_COMMON_API LLApp : public LLOptionInterface
|
||||
{
|
||||
friend class LLErrorThread;
|
||||
@@ -233,22 +229,11 @@ public:
|
||||
static void runErrorHandler(); // run shortly after we detect an error, ran in the relatively robust context of the LLErrorThread - preferred.
|
||||
//@}
|
||||
|
||||
// the maximum length of the minidump filename returned by getMiniDumpFilename()
|
||||
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.
|
||||
char *getMiniDumpFilename() { return mMinidumpPath; }
|
||||
std::string* getStaticDebugFile() { return &mStaticDebugFileName; }
|
||||
std::string* getDynamicDebugFile() { return &mDynamicDebugFileName; }
|
||||
|
||||
// Write out a Google Breakpad minidump file.
|
||||
void writeMiniDump();
|
||||
|
||||
|
||||
#if !LL_WINDOWS
|
||||
//
|
||||
// Child process handling (Unix only for now)
|
||||
@@ -281,8 +266,6 @@ protected:
|
||||
static BOOL sDisableCrashlogger; // Let the OS handle crashes for us.
|
||||
std::wstring mCrashReportPipeStr; //Name of pipe to use for crash reporting.
|
||||
|
||||
std::string mDumpPath; //output path for google breakpad. Dependency workaround.
|
||||
|
||||
#if !LL_WINDOWS
|
||||
static LLAtomicU32* sSigChildCount; // Number of SIGCHLDs received.
|
||||
typedef std::map<pid_t, LLChildInfo> child_map; // Map key is a PID
|
||||
@@ -290,16 +273,13 @@ protected:
|
||||
static LLAppChildCallback sDefaultChildCallback;
|
||||
#endif
|
||||
|
||||
void startErrorThread();
|
||||
|
||||
/**
|
||||
* @brief This method is called at the end, just prior to deinitializing curl.
|
||||
*/
|
||||
void stopErrorThread();
|
||||
|
||||
private:
|
||||
// Contains the filename of the minidump file after a crash.
|
||||
char mMinidumpPath[MAX_MINDUMP_PATH_LENGTH];
|
||||
void startErrorThread();
|
||||
|
||||
std::string mStaticDebugFileName;
|
||||
std::string mDynamicDebugFileName;
|
||||
@@ -323,11 +303,8 @@ private:
|
||||
std::vector<LLLiveFile*> mLiveFiles;
|
||||
//@}
|
||||
|
||||
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 *);
|
||||
|
||||
@@ -1338,7 +1338,7 @@ namespace LLError
|
||||
}
|
||||
|
||||
#if LL_WINDOWS
|
||||
// VC80 was optimizing the error away.
|
||||
// MSVC is optimizing the error away.
|
||||
#pragma optimize("", off)
|
||||
#endif
|
||||
void crashAndLoop(const std::string& message)
|
||||
@@ -1347,9 +1347,8 @@ namespace LLError
|
||||
DoutFatal(dc::core, message);
|
||||
#else
|
||||
// Now, we go kaboom!
|
||||
int* make_me_crash = NULL;
|
||||
|
||||
*make_me_crash = 0;
|
||||
int* make_me_crash = nullptr;
|
||||
*make_me_crash = 0xDEADBEEF;
|
||||
|
||||
while(true)
|
||||
{
|
||||
|
||||
@@ -353,8 +353,14 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
|
||||
|
||||
// NEW Macros for debugging, allow the passing of a string tag
|
||||
|
||||
#ifdef SHOW_DEBUG
|
||||
#define DO_DEBUG_LOG
|
||||
#else
|
||||
#define DO_DEBUG_LOG if (false)
|
||||
#endif
|
||||
|
||||
// Pass comma separated list of tags (currently only supports up to 0, 1, or 2)
|
||||
#define LL_DEBUGS(...) lllog(LLError::LEVEL_DEBUG, false, false, ##__VA_ARGS__)
|
||||
#define LL_DEBUGS(...) DO_DEBUG_LOG lllog(LLError::LEVEL_DEBUG, false, false, ##__VA_ARGS__)
|
||||
#define LL_INFOS(...) lllog(LLError::LEVEL_INFO, false, false, ##__VA_ARGS__)
|
||||
#define LL_WARNS(...) lllog(LLError::LEVEL_WARN, false, false, ##__VA_ARGS__)
|
||||
#define LL_ERRS(...) lllog(LLError::LEVEL_ERROR, false, false, ##__VA_ARGS__)
|
||||
@@ -363,12 +369,12 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
|
||||
|
||||
// Only print the log message once (good for warnings or infos that would otherwise
|
||||
// spam the log file over and over, such as tighter loops).
|
||||
#define LL_DEBUGS_ONCE(...) lllog(LLError::LEVEL_DEBUG, true, false, ##__VA_ARGS__)
|
||||
#define LL_DEBUGS_ONCE(...) DO_DEBUG_LOG lllog(LLError::LEVEL_DEBUG, true, false, ##__VA_ARGS__)
|
||||
#define LL_INFOS_ONCE(...) lllog(LLError::LEVEL_INFO, true, false, ##__VA_ARGS__)
|
||||
#define LL_WARNS_ONCE(...) lllog(LLError::LEVEL_WARN, true, false, ##__VA_ARGS__)
|
||||
|
||||
// No function name
|
||||
#define LL_DEBUGS_NF(...) lllog(LLError::LEVEL_DEBUG, false, true, ##__VA_ARGS__)
|
||||
#define LL_DEBUGS_NF(...) DO_DEBUG_LOG {lllog(LLError::LEVEL_DEBUG, false, true, ##__VA_ARGS__)
|
||||
#define LL_INFOS_NF(...) lllog(LLError::LEVEL_INFO, false, true, ##__VA_ARGS__)
|
||||
#define LL_WARNS_NF(...) lllog(LLError::LEVEL_WARN, false, true, ##__VA_ARGS__)
|
||||
#define LL_ERRS_NF(...) lllog(LLError::LEVEL_ERROR, false, true, ##__VA_ARGS__)
|
||||
|
||||
@@ -412,7 +412,7 @@ public:
|
||||
std::runtime_error(what),
|
||||
mData(data)
|
||||
{}
|
||||
virtual ~LLErrorEvent() throw() {}
|
||||
virtual ~LLErrorEvent() noexcept {}
|
||||
|
||||
LLSD getData() const { return mData; }
|
||||
|
||||
|
||||
@@ -381,10 +381,9 @@ std::string LLSDArgsMapper::formatlist(const LLSD& list)
|
||||
{
|
||||
std::ostringstream out;
|
||||
const char* delim = "";
|
||||
for (LLSD::array_const_iterator li(list.beginArray()), lend(list.endArray());
|
||||
li != lend; ++li)
|
||||
for (auto const& entry : list.array())
|
||||
{
|
||||
out << delim << li->asString();
|
||||
out << delim << entry.asString();
|
||||
delim = ", ";
|
||||
}
|
||||
return out.str();
|
||||
@@ -494,10 +493,9 @@ struct LLEventDispatcher::MapParamsDispatchEntry: public LLEventDispatcher::Para
|
||||
{
|
||||
// Build the set of all param keys, then delete the ones that are
|
||||
// optional. What's left are the ones that are required.
|
||||
for (LLSD::array_const_iterator pi(params.beginArray()), pend(params.endArray());
|
||||
pi != pend; ++pi)
|
||||
for (auto const& entry : params.array())
|
||||
{
|
||||
mRequired[pi->asString()] = LLSD();
|
||||
mRequired[entry.asString()] = LLSD();
|
||||
}
|
||||
|
||||
if (defaults.isArray() || defaults.isUndefined())
|
||||
|
||||
@@ -182,10 +182,10 @@ public:
|
||||
bool operator! () const { return ! mListener; }
|
||||
|
||||
/// explicit accessor
|
||||
const LLEventListener& getListener() const { return *mListener; }
|
||||
const ::LLEventListener& getListener() const { return *mListener; }
|
||||
|
||||
/// implicit conversion to LLEventListener
|
||||
operator LLEventListener() const { return *mListener; }
|
||||
operator ::LLEventListener() const { return *mListener; }
|
||||
|
||||
/// allow calling directly
|
||||
bool operator()(const LLSD& event) const;
|
||||
@@ -277,7 +277,7 @@ namespace LLEventDetail
|
||||
/// Any callable capable of connecting an LLEventListener to an
|
||||
/// LLStandardSignal to produce an LLBoundListener can be mapped to this
|
||||
/// signature.
|
||||
typedef boost::function<LLBoundListener(const LLEventListener&)> ConnectFunc;
|
||||
typedef boost::function<LLBoundListener(const ::LLEventListener&)> ConnectFunc;
|
||||
|
||||
/// overload of visit_and_connect() when we have a string identifier available
|
||||
template <typename LISTENER>
|
||||
@@ -547,7 +547,7 @@ private:
|
||||
virtual void reset();
|
||||
|
||||
private:
|
||||
virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&,
|
||||
virtual LLBoundListener listen_impl(const std::string& name, const ::LLEventListener&,
|
||||
const NameList& after,
|
||||
const NameList& before);
|
||||
std::string mName;
|
||||
@@ -845,7 +845,7 @@ namespace LLEventDetail
|
||||
* Visitor binds a reference to LLEventListener so we can track() any
|
||||
* shared_ptrs we find in the argument list.
|
||||
*/
|
||||
Visitor(LLEventListener& listener):
|
||||
Visitor(::LLEventListener& listener):
|
||||
mListener(listener)
|
||||
{
|
||||
}
|
||||
@@ -988,7 +988,7 @@ namespace LLEventDetail
|
||||
|*==========================================================================*/
|
||||
|
||||
/// Bind a reference to the LLEventListener to call its track() method.
|
||||
LLEventListener& mListener;
|
||||
::LLEventListener& mListener;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1005,7 +1005,7 @@ namespace LLEventDetail
|
||||
const ConnectFunc& connect_func)
|
||||
{
|
||||
// Capture the listener
|
||||
LLEventListener listener(raw_listener);
|
||||
::LLEventListener listener(raw_listener);
|
||||
// Define our Visitor, binding the listener so we can call
|
||||
// listener.track() if we discover any shared_ptr<Foo>.
|
||||
LLEventDetail::Visitor visitor(listener);
|
||||
|
||||
@@ -54,6 +54,7 @@ std::string LLFile::strerr(int errn)
|
||||
{
|
||||
char buffer[256];
|
||||
strerror_s(buffer, errn); // infers sizeof(buffer) -- love it!
|
||||
buffer[255] = 0;
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@@ -281,6 +282,11 @@ int LLFile::rename_nowarn(const std::string& filename, const std::string& newnam
|
||||
int rc = _wrename(utf16filename.c_str(),utf16newname.c_str());
|
||||
#else
|
||||
int rc = ::rename(filename.c_str(),newname.c_str());
|
||||
if (rc == -1 && errno == EXDEV)
|
||||
{
|
||||
rc = std::system(("mv '" + filename + "' '" + newname + '\'').data());
|
||||
errno = 0;
|
||||
}
|
||||
#endif
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,16 @@
|
||||
#ifndef LL_LLFORMAT_H
|
||||
#define LL_LLFORMAT_H
|
||||
|
||||
#if defined(LL_CLANG)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated"
|
||||
#endif
|
||||
#include <fmt/format.h>
|
||||
#include <fmt/printf.h>
|
||||
#if defined(LL_CLANG)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
|
||||
// Use as follows:
|
||||
// LL_INFOS() << llformat("Test:%d (%.2f %.2f)", idx, x, y) << LL_ENDL;
|
||||
//
|
||||
|
||||
@@ -102,39 +102,47 @@ void LLMemory::initMaxHeapSizeGB(F32Gigabytes max_heap_size, BOOL prevent_heap_f
|
||||
//static
|
||||
void LLMemory::updateMemoryInfo()
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
HANDLE self = GetCurrentProcess();
|
||||
PROCESS_MEMORY_COUNTERS counters;
|
||||
|
||||
if (!GetProcessMemoryInfo(self, &counters, sizeof(counters)))
|
||||
#if LL_WINDOWS
|
||||
PROCESS_MEMORY_COUNTERS_EX counters;
|
||||
counters.cb = sizeof(counters);
|
||||
|
||||
if (!GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*) &counters, sizeof(counters)))
|
||||
{
|
||||
LL_WARNS() << "GetProcessMemoryInfo failed" << LL_ENDL;
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
sAllocatedMemInKB = (U32Bytes)(counters.WorkingSetSize) ;
|
||||
sAllocatedPageSizeInKB = (U32Bytes)(counters.PagefileUsage) ;
|
||||
sAllocatedMemInKB = U64Bytes(counters.WorkingSetSize);
|
||||
sAllocatedPageSizeInKB = (counters.PagefileUsage != 0) ? U64Bytes(counters.PagefileUsage) : U64Bytes(counters.PrivateUsage);
|
||||
|
||||
U32Kilobytes avail_phys, avail_virtual;
|
||||
LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ;
|
||||
sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB);
|
||||
|
||||
if(sMaxPhysicalMemInKB > sAllocatedMemInKB)
|
||||
MEMORYSTATUSEX memorystat;
|
||||
memorystat.dwLength = sizeof(memorystat);
|
||||
if (!GlobalMemoryStatusEx(&memorystat))
|
||||
{
|
||||
sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ;
|
||||
LL_WARNS() << "GlobalMemoryStatusEx failed" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
#if (defined(_WIN64) || defined(__amd64__) || defined(__x86_64__))
|
||||
sMaxPhysicalMemInKB = U64Bytes(memorystat.ullTotalPhys);
|
||||
sAvailPhysicalMemInKB = U64Bytes(memorystat.ullAvailPhys);
|
||||
#else
|
||||
sMaxPhysicalMemInKB = llmin(U32Kilobytes(U64Bytes(memorystat.ullTotalPhys)), sMaxHeapSizeInKB);
|
||||
if (sMaxPhysicalMemInKB > sAllocatedMemInKB)
|
||||
{
|
||||
sAvailPhysicalMemInKB = U64Bytes(memorystat.ullAvailPhys);;
|
||||
}
|
||||
else
|
||||
{
|
||||
sAvailPhysicalMemInKB = U32Kilobytes(0);
|
||||
}
|
||||
#else
|
||||
//not valid for other systems for now.
|
||||
sAllocatedMemInKB = (U32Bytes)LLMemory::getCurrentRSS();
|
||||
sMaxPhysicalMemInKB = (U32Bytes)U32_MAX ;
|
||||
sAvailPhysicalMemInKB = (U32Bytes)U32_MAX ;
|
||||
#endif
|
||||
|
||||
return ;
|
||||
#else
|
||||
//not valid for other systems for now.
|
||||
sAllocatedMemInKB = U64Bytes(LLMemory::getCurrentRSS());
|
||||
sMaxPhysicalMemInKB = U64Bytes(U32_MAX);
|
||||
sAvailPhysicalMemInKB = U64Bytes(U32_MAX);
|
||||
#endif
|
||||
}
|
||||
|
||||
//
|
||||
@@ -158,7 +166,7 @@ void* LLMemory::tryToAlloc(void* address, U32 size)
|
||||
return address ;
|
||||
#else
|
||||
return (void*)0x01 ; //skip checking
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
//static
|
||||
@@ -233,31 +241,31 @@ bool LLMemory::isMemoryPoolLow()
|
||||
//static
|
||||
U32Kilobytes LLMemory::getAvailableMemKB()
|
||||
{
|
||||
return sAvailPhysicalMemInKB ;
|
||||
return sAvailPhysicalMemInKB;
|
||||
}
|
||||
|
||||
//static
|
||||
U32Kilobytes LLMemory::getMaxMemKB()
|
||||
{
|
||||
return sMaxPhysicalMemInKB ;
|
||||
return sMaxPhysicalMemInKB;
|
||||
}
|
||||
|
||||
//static
|
||||
U32Kilobytes LLMemory::getAllocatedMemKB()
|
||||
{
|
||||
return sAllocatedMemInKB ;
|
||||
return sAllocatedMemInKB;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#if defined(LL_WINDOWS)
|
||||
|
||||
//static
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
{
|
||||
HANDLE self = GetCurrentProcess();
|
||||
PROCESS_MEMORY_COUNTERS counters;
|
||||
|
||||
if (!GetProcessMemoryInfo(self, &counters, sizeof(counters)))
|
||||
|
||||
if (!GetProcessMemoryInfo(GetCurrentProcess(), &counters, sizeof(counters)))
|
||||
{
|
||||
LL_WARNS() << "GetProcessMemoryInfo failed" << LL_ENDL;
|
||||
return 0;
|
||||
@@ -266,35 +274,7 @@ U64 LLMemory::getCurrentRSS()
|
||||
return counters.WorkingSetSize;
|
||||
}
|
||||
|
||||
//static
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
PROCESS_MEMORY_COUNTERS pmc ;
|
||||
U32 ret = 0 ;
|
||||
|
||||
if (GetProcessMemoryInfo( GetCurrentProcess(), &pmc, sizeof(pmc)) )
|
||||
{
|
||||
ret = pmc.WorkingSetSize ;
|
||||
}
|
||||
|
||||
return ret ;
|
||||
}
|
||||
|
||||
#elif defined(LL_DARWIN)
|
||||
|
||||
/*
|
||||
The API used here is not capable of dealing with 64-bit memory sizes, but is available before 10.4.
|
||||
|
||||
Once we start requiring 10.4, we can use the updated API, which looks like this:
|
||||
|
||||
task_basic_info_64_data_t basicInfo;
|
||||
mach_msg_type_number_t basicInfoCount = TASK_BASIC_INFO_64_COUNT;
|
||||
if (task_info(mach_task_self(), TASK_BASIC_INFO_64, (task_info_t)&basicInfo, &basicInfoCount) == KERN_SUCCESS)
|
||||
|
||||
Of course, this doesn't gain us anything unless we start building the viewer as a 64-bit executable, since that's the only way
|
||||
for our memory allocation to exceed 2^32.
|
||||
*/
|
||||
|
||||
// if (sysctl(ctl, 2, &page_size, &size, NULL, 0) == -1)
|
||||
// {
|
||||
// LL_WARNS() << "Couldn't get page size" << LL_ENDL;
|
||||
@@ -307,16 +287,15 @@ U32 LLMemory::getWorkingSetSize()
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
{
|
||||
U64 residentSize = 0;
|
||||
task_basic_info_data_t basicInfo;
|
||||
mach_msg_type_number_t basicInfoCount = TASK_BASIC_INFO_COUNT;
|
||||
if (task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&basicInfo, &basicInfoCount) == KERN_SUCCESS)
|
||||
mach_task_basic_info_data_t basicInfo;
|
||||
mach_msg_type_number_t basicInfoCount = MACH_TASK_BASIC_INFO_COUNT;
|
||||
if (task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&basicInfo, &basicInfoCount) == KERN_SUCCESS)
|
||||
{
|
||||
residentSize = basicInfo.resident_size;
|
||||
|
||||
// If we ever wanted it, the process virtual size is also available as:
|
||||
// virtualSize = basicInfo.virtual_size;
|
||||
|
||||
// LL_INFOS() << "resident size is " << residentSize << LL_ENDL;
|
||||
// residentSize = basicInfo.resident_size;
|
||||
// Although this method is defined to return the "resident set size,"
|
||||
// in fact what callers want from it is the total virtual memory
|
||||
// consumed by the application.
|
||||
residentSize = basicInfo.virtual_size;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -326,11 +305,6 @@ U64 LLMemory::getCurrentRSS()
|
||||
return residentSize;
|
||||
}
|
||||
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
#elif defined(LL_LINUX)
|
||||
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
@@ -342,7 +316,7 @@ U64 LLMemory::getCurrentRSS()
|
||||
if (fp == NULL)
|
||||
{
|
||||
LL_WARNS() << "couldn't open " << statPath << LL_ENDL;
|
||||
goto bail;
|
||||
return rss;
|
||||
}
|
||||
|
||||
// Eee-yew! See Documentation/filesystems/proc.txt in your
|
||||
@@ -361,49 +335,8 @@ U64 LLMemory::getCurrentRSS()
|
||||
|
||||
fclose(fp);
|
||||
|
||||
bail:
|
||||
return rss;
|
||||
}
|
||||
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
#elif LL_SOLARIS
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#define _STRUCTURED_PROC 1
|
||||
#include <sys/procfs.h>
|
||||
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
{
|
||||
char path [LL_MAX_PATH]; /* Flawfinder: ignore */
|
||||
|
||||
sprintf(path, "/proc/%d/psinfo", (int)getpid());
|
||||
int proc_fd = -1;
|
||||
if((proc_fd = open(path, O_RDONLY)) == -1){
|
||||
LL_WARNS() << "LLmemory::getCurrentRSS() unable to open " << path << ". Returning 0 RSS!" << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
psinfo_t proc_psinfo;
|
||||
if(read(proc_fd, &proc_psinfo, sizeof(psinfo_t)) != sizeof(psinfo_t)){
|
||||
LL_WARNS() << "LLmemory::getCurrentRSS() Unable to read from " << path << ". Returning 0 RSS!" << LL_ENDL;
|
||||
close(proc_fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
close(proc_fd);
|
||||
|
||||
return((U64)proc_psinfo.pr_rssize * 1024);
|
||||
}
|
||||
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
@@ -411,11 +344,6 @@ U64 LLMemory::getCurrentRSS()
|
||||
return 0;
|
||||
}
|
||||
|
||||
U32 LLMemory::getWorkingSetSize()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -427,7 +355,7 @@ LLMemTracker* LLMemTracker::sInstance = NULL ;
|
||||
|
||||
LLMemTracker::LLMemTracker()
|
||||
{
|
||||
mLastAllocatedMem = LLMemory::getWorkingSetSize() ;
|
||||
mLastAllocatedMem = LLMemory::getCurrentRSS() ;
|
||||
mCapacity = 128 ;
|
||||
mCurIndex = 0 ;
|
||||
mCounter = 0 ;
|
||||
@@ -480,7 +408,7 @@ void LLMemTracker::track(const char* function, const int line)
|
||||
return ;
|
||||
}
|
||||
|
||||
U32 allocated_mem = LLMemory::getWorkingSetSize() ;
|
||||
U64 allocated_mem = LLMemory::getCurrentRSS() ;
|
||||
|
||||
LLMutexLock lock(mMutexp) ;
|
||||
|
||||
|
||||
@@ -133,11 +133,15 @@ template <typename T> T* LL_NEXT_ALIGNED_ADDRESS_64(T* address)
|
||||
#if defined(LL_WINDOWS)
|
||||
return _aligned_malloc(size, align);
|
||||
#else
|
||||
char* aligned = NULL;
|
||||
void* mem = malloc( size + (align - 1) + sizeof(void*) );
|
||||
char* aligned = ((char*)mem) + sizeof(void*);
|
||||
aligned += align - ((uintptr_t)aligned & (align - 1));
|
||||
if (mem)
|
||||
{
|
||||
aligned = ((char*)mem) + sizeof(void*);
|
||||
aligned += align - ((uintptr_t)aligned & (align - 1));
|
||||
|
||||
((void**)aligned)[-1] = mem;
|
||||
((void**)aligned)[-1] = mem;
|
||||
}
|
||||
return aligned;
|
||||
#endif
|
||||
}
|
||||
@@ -365,7 +369,6 @@ public:
|
||||
// Return the resident set size of the current process, in bytes.
|
||||
// Return value is zero if not known.
|
||||
static U64 getCurrentRSS();
|
||||
static U32 getWorkingSetSize();
|
||||
static void* tryToAlloc(void* address, U32 size);
|
||||
static void initMaxHeapSizeGB(F32Gigabytes max_heap_size, BOOL prevent_heap_failure);
|
||||
static void updateMemoryInfo() ;
|
||||
|
||||
@@ -126,9 +126,9 @@ public:
|
||||
virtual Date asDate() const { return LLDate(); }
|
||||
virtual URI asURI() const { return LLURI(); }
|
||||
virtual const Binary& asBinary() const { static const std::vector<U8> empty; return empty; }
|
||||
|
||||
virtual const String& asStringRef() const { static const std::string empty; return empty; }
|
||||
|
||||
virtual const String& asStringRef() const { static const std::string empty; return empty; }
|
||||
|
||||
virtual bool has(const String&) const { return false; }
|
||||
virtual LLSD get(const String&) const { return LLSD(); }
|
||||
virtual LLSD getKeys() const { return LLSD::emptyArray(); }
|
||||
@@ -140,10 +140,14 @@ public:
|
||||
virtual void erase(Integer) { }
|
||||
virtual const LLSD& ref(Integer) const { return undef(); }
|
||||
|
||||
virtual LLSD::map_const_iterator beginMap() const { return endMap(); }
|
||||
virtual LLSD::map_const_iterator endMap() const { static const std::map<String, LLSD> empty; return empty.end(); }
|
||||
virtual LLSD::array_const_iterator beginArray() const { return endArray(); }
|
||||
virtual LLSD::array_const_iterator endArray() const { static const std::vector<LLSD> empty; return empty.end(); }
|
||||
virtual const std::map<String, LLSD>& map() const { static const std::map<String, LLSD> empty; return empty; }
|
||||
virtual std::map<String, LLSD>& map() { static std::map<String, LLSD> empty; return empty; }
|
||||
LLSD::map_const_iterator beginMap() const { return map().begin(); }
|
||||
LLSD::map_const_iterator endMap() const { return map().end(); }
|
||||
virtual const std::vector<LLSD>& array() const { static const std::vector<LLSD> empty; return empty; }
|
||||
virtual std::vector<LLSD>& array() { static std::vector<LLSD> empty; return empty; }
|
||||
LLSD::array_const_iterator beginArray() const { return array().begin(); }
|
||||
LLSD::array_const_iterator endArray() const { return array().end(); }
|
||||
|
||||
virtual void dumpStats() const;
|
||||
virtual void calcStats(S32 type_counts[], S32 share_counts[]) const;
|
||||
@@ -183,10 +187,11 @@ namespace
|
||||
public:
|
||||
ImplBase(DataRef value) : mValue(value) { }
|
||||
|
||||
virtual LLSD::Type type() const { return T; }
|
||||
LLSD::Type type() const override { return T; }
|
||||
|
||||
using LLSD::Impl::assign; // Unhiding base class virtuals...
|
||||
virtual void assign(LLSD::Impl*& var, DataRef value) {
|
||||
void assign(LLSD::Impl*& var, DataRef value) override
|
||||
{
|
||||
if (shared())
|
||||
{
|
||||
Impl::assign(var, value);
|
||||
@@ -199,16 +204,16 @@ namespace
|
||||
};
|
||||
|
||||
|
||||
class ImplBoolean
|
||||
class ImplBoolean final
|
||||
: public ImplBase<LLSD::TypeBoolean, LLSD::Boolean>
|
||||
{
|
||||
public:
|
||||
ImplBoolean(LLSD::Boolean v) : Base(v) { }
|
||||
|
||||
virtual LLSD::Boolean asBoolean() const { return mValue; }
|
||||
virtual LLSD::Integer asInteger() const { return mValue ? 1 : 0; }
|
||||
virtual LLSD::Real asReal() const { return mValue ? 1 : 0; }
|
||||
virtual LLSD::String asString() const;
|
||||
LLSD::Boolean asBoolean() const override { return mValue; }
|
||||
LLSD::Integer asInteger() const override { return mValue ? 1 : 0; }
|
||||
LLSD::Real asReal() const override { return mValue ? 1 : 0; }
|
||||
LLSD::String asString() const override;
|
||||
};
|
||||
|
||||
LLSD::String ImplBoolean::asString() const
|
||||
@@ -220,32 +225,32 @@ namespace
|
||||
{ return mValue ? "true" : ""; }
|
||||
|
||||
|
||||
class ImplInteger
|
||||
class ImplInteger final
|
||||
: public ImplBase<LLSD::TypeInteger, LLSD::Integer>
|
||||
{
|
||||
public:
|
||||
ImplInteger(LLSD::Integer v) : Base(v) { }
|
||||
|
||||
virtual LLSD::Boolean asBoolean() const { return mValue != 0; }
|
||||
virtual LLSD::Integer asInteger() const { return mValue; }
|
||||
virtual LLSD::Real asReal() const { return mValue; }
|
||||
virtual LLSD::String asString() const;
|
||||
LLSD::Boolean asBoolean() const override { return mValue != 0; }
|
||||
LLSD::Integer asInteger() const override { return mValue; }
|
||||
LLSD::Real asReal() const override { return mValue; }
|
||||
LLSD::String asString() const override;
|
||||
};
|
||||
|
||||
LLSD::String ImplInteger::asString() const
|
||||
{ return llformat("%d", mValue); }
|
||||
|
||||
|
||||
class ImplReal
|
||||
class ImplReal final
|
||||
: public ImplBase<LLSD::TypeReal, LLSD::Real>
|
||||
{
|
||||
public:
|
||||
ImplReal(LLSD::Real v) : Base(v) { }
|
||||
|
||||
virtual LLSD::Boolean asBoolean() const;
|
||||
virtual LLSD::Integer asInteger() const;
|
||||
virtual LLSD::Real asReal() const { return mValue; }
|
||||
virtual LLSD::String asString() const;
|
||||
LLSD::Boolean asBoolean() const override;
|
||||
LLSD::Integer asInteger() const override;
|
||||
LLSD::Real asReal() const override { return mValue; }
|
||||
LLSD::String asString() const override;
|
||||
};
|
||||
|
||||
LLSD::Boolean ImplReal::asBoolean() const
|
||||
@@ -258,21 +263,21 @@ namespace
|
||||
{ return llformat("%lg", mValue); }
|
||||
|
||||
|
||||
class ImplString
|
||||
class ImplString final
|
||||
: public ImplBase<LLSD::TypeString, LLSD::String, const LLSD::String&>
|
||||
{
|
||||
public:
|
||||
ImplString(const LLSD::String& v) : Base(v) { }
|
||||
|
||||
virtual LLSD::Boolean asBoolean() const { return !mValue.empty(); }
|
||||
virtual LLSD::Integer asInteger() const;
|
||||
virtual LLSD::Real asReal() const;
|
||||
virtual LLSD::String asString() const { return mValue; }
|
||||
virtual LLSD::UUID asUUID() const { return LLUUID(mValue); }
|
||||
virtual LLSD::Date asDate() const { return LLDate(mValue); }
|
||||
virtual LLSD::URI asURI() const { return LLURI(mValue); }
|
||||
virtual int size() const { return mValue.size(); }
|
||||
virtual const LLSD::String& asStringRef() const { return mValue; }
|
||||
LLSD::Boolean asBoolean() const override { return !mValue.empty(); }
|
||||
LLSD::Integer asInteger() const override;
|
||||
LLSD::Real asReal() const override;
|
||||
LLSD::String asString() const override { return mValue; }
|
||||
LLSD::UUID asUUID() const override { return LLUUID(mValue); }
|
||||
LLSD::Date asDate() const override { return LLDate(mValue); }
|
||||
LLSD::URI asURI() const override { return LLURI(mValue); }
|
||||
int size() const override { return mValue.size(); }
|
||||
const LLSD::String& asStringRef() const override { return mValue; }
|
||||
};
|
||||
|
||||
LLSD::Integer ImplString::asInteger() const
|
||||
@@ -302,18 +307,18 @@ namespace
|
||||
}
|
||||
|
||||
|
||||
class ImplUUID
|
||||
class ImplUUID final
|
||||
: public ImplBase<LLSD::TypeUUID, LLSD::UUID, const LLSD::UUID&>
|
||||
{
|
||||
public:
|
||||
ImplUUID(const LLSD::UUID& v) : Base(v) { }
|
||||
|
||||
virtual LLSD::String asString() const{ return mValue.asString(); }
|
||||
virtual LLSD::UUID asUUID() const { return mValue; }
|
||||
LLSD::String asString() const override { return mValue.asString(); }
|
||||
LLSD::UUID asUUID() const override { return mValue; }
|
||||
};
|
||||
|
||||
|
||||
class ImplDate
|
||||
class ImplDate final
|
||||
: public ImplBase<LLSD::TypeDate, LLSD::Date, const LLSD::Date&>
|
||||
{
|
||||
public:
|
||||
@@ -321,41 +326,42 @@ namespace
|
||||
: ImplBase<LLSD::TypeDate, LLSD::Date, const LLSD::Date&>(v)
|
||||
{ }
|
||||
|
||||
virtual LLSD::Integer asInteger() const
|
||||
LLSD::Integer asInteger() const override
|
||||
{
|
||||
return (LLSD::Integer)(mValue.secondsSinceEpoch());
|
||||
}
|
||||
virtual LLSD::Real asReal() const
|
||||
LLSD::Real asReal() const override
|
||||
{
|
||||
return mValue.secondsSinceEpoch();
|
||||
}
|
||||
virtual LLSD::String asString() const{ return mValue.asString(); }
|
||||
virtual LLSD::Date asDate() const { return mValue; }
|
||||
|
||||
LLSD::String asString() const override { return mValue.asString(); }
|
||||
LLSD::Date asDate() const override { return mValue; }
|
||||
};
|
||||
|
||||
|
||||
class ImplURI
|
||||
class ImplURI final
|
||||
: public ImplBase<LLSD::TypeURI, LLSD::URI, const LLSD::URI&>
|
||||
{
|
||||
public:
|
||||
ImplURI(const LLSD::URI& v) : Base(v) { }
|
||||
|
||||
virtual LLSD::String asString() const{ return mValue.asString(); }
|
||||
virtual LLSD::URI asURI() const { return mValue; }
|
||||
LLSD::String asString() const override { return mValue.asString(); }
|
||||
LLSD::URI asURI() const override { return mValue; }
|
||||
};
|
||||
|
||||
|
||||
class ImplBinary
|
||||
class ImplBinary final
|
||||
: public ImplBase<LLSD::TypeBinary, LLSD::Binary, const LLSD::Binary&>
|
||||
{
|
||||
public:
|
||||
ImplBinary(const LLSD::Binary& v) : Base(v) { }
|
||||
|
||||
virtual const LLSD::Binary& asBinary() const{ return mValue; }
|
||||
const LLSD::Binary& asBinary() const override { return mValue; }
|
||||
};
|
||||
|
||||
|
||||
class ImplMap : public LLSD::Impl
|
||||
class ImplMap final : public LLSD::Impl
|
||||
{
|
||||
private:
|
||||
typedef std::map<LLSD::String, LLSD> DataMap;
|
||||
@@ -368,33 +374,31 @@ namespace
|
||||
public:
|
||||
ImplMap() { }
|
||||
|
||||
virtual ImplMap& makeMap(LLSD::Impl*&);
|
||||
ImplMap& makeMap(LLSD::Impl*&) override;
|
||||
|
||||
virtual LLSD::Type type() const { return LLSD::TypeMap; }
|
||||
LLSD::Type type() const override { return LLSD::TypeMap; }
|
||||
|
||||
virtual LLSD::Boolean asBoolean() const { return !mData.empty(); }
|
||||
LLSD::Boolean asBoolean() const override { return !mData.empty(); }
|
||||
|
||||
virtual bool has(const LLSD::String&) const;
|
||||
bool has(const LLSD::String&) const override;
|
||||
|
||||
using LLSD::Impl::get; // Unhiding get(LLSD::Integer)
|
||||
using LLSD::Impl::erase; // Unhiding erase(LLSD::Integer)
|
||||
using LLSD::Impl::ref; // Unhiding ref(LLSD::Integer)
|
||||
virtual LLSD get(const LLSD::String&) const;
|
||||
virtual LLSD getKeys() const;
|
||||
LLSD get(const LLSD::String&) const override;
|
||||
LLSD getKeys() const override;
|
||||
void insert(const LLSD::String& k, const LLSD& v);
|
||||
virtual void erase(const LLSD::String&);
|
||||
void erase(const LLSD::String&) override;
|
||||
LLSD& ref(const LLSD::String&);
|
||||
virtual const LLSD& ref(const LLSD::String&) const;
|
||||
const LLSD& ref(const LLSD::String&) const override;
|
||||
|
||||
virtual int size() const { return mData.size(); }
|
||||
int size() const override { return mData.size(); }
|
||||
|
||||
LLSD::map_iterator beginMap() { return mData.begin(); }
|
||||
LLSD::map_iterator endMap() { return mData.end(); }
|
||||
virtual LLSD::map_const_iterator beginMap() const { return mData.begin(); }
|
||||
virtual LLSD::map_const_iterator endMap() const { return mData.end(); }
|
||||
DataMap& map() final override { return mData; }
|
||||
const DataMap& map() const final override { return mData; }
|
||||
|
||||
virtual void dumpStats() const;
|
||||
virtual void calcStats(S32 type_counts[], S32 share_counts[]) const;
|
||||
void dumpStats() const override;
|
||||
void calcStats(S32 type_counts[], S32 share_counts[]) const override;
|
||||
};
|
||||
|
||||
ImplMap& ImplMap::makeMap(LLSD::Impl*& var)
|
||||
@@ -481,7 +485,7 @@ namespace
|
||||
{
|
||||
//std::cout << " " << (*iter).first << ": " << (*iter).second << std::endl;
|
||||
Impl::calcStats((*iter).second, type_counts, share_counts);
|
||||
iter++;
|
||||
++iter;
|
||||
}
|
||||
|
||||
// Add in the values for this map
|
||||
@@ -489,7 +493,7 @@ namespace
|
||||
}
|
||||
|
||||
|
||||
class ImplArray : public LLSD::Impl
|
||||
class ImplArray final : public LLSD::Impl
|
||||
{
|
||||
private:
|
||||
typedef std::vector<LLSD> DataVector;
|
||||
@@ -502,32 +506,28 @@ namespace
|
||||
public:
|
||||
ImplArray() { }
|
||||
|
||||
virtual ImplArray& makeArray(Impl*&);
|
||||
ImplArray& makeArray(Impl*&) override;
|
||||
|
||||
virtual LLSD::Type type() const { return LLSD::TypeArray; }
|
||||
LLSD::Type type() const override { return LLSD::TypeArray; }
|
||||
|
||||
virtual LLSD::Boolean asBoolean() const { return !mData.empty(); }
|
||||
LLSD::Boolean asBoolean() const override { return !mData.empty(); }
|
||||
|
||||
using LLSD::Impl::get; // Unhiding get(LLSD::String)
|
||||
using LLSD::Impl::erase; // Unhiding erase(LLSD::String)
|
||||
using LLSD::Impl::ref; // Unhiding ref(LLSD::String)
|
||||
virtual int size() const;
|
||||
virtual LLSD get(LLSD::Integer) const;
|
||||
int size() const override;
|
||||
LLSD get(LLSD::Integer) const override;
|
||||
void set(LLSD::Integer, const LLSD&);
|
||||
void insert(LLSD::Integer, const LLSD&);
|
||||
LLSD& append(const LLSD&);
|
||||
virtual void erase(LLSD::Integer);
|
||||
void erase(LLSD::Integer) override;
|
||||
LLSD& ref(LLSD::Integer);
|
||||
virtual const LLSD& ref(LLSD::Integer) const;
|
||||
const LLSD& ref(LLSD::Integer) const override;
|
||||
|
||||
LLSD::array_iterator beginArray() { return mData.begin(); }
|
||||
LLSD::array_iterator endArray() { return mData.end(); }
|
||||
LLSD::reverse_array_iterator rbeginArray() { return mData.rbegin(); }
|
||||
LLSD::reverse_array_iterator rendArray() { return mData.rend(); }
|
||||
virtual LLSD::array_const_iterator beginArray() const { return mData.begin(); }
|
||||
virtual LLSD::array_const_iterator endArray() const { return mData.end(); }
|
||||
DataVector& array() final override { return mData; }
|
||||
const DataVector& array() const final override { return mData; }
|
||||
|
||||
virtual void calcStats(S32 type_counts[], S32 share_counts[]) const;
|
||||
void calcStats(S32 type_counts[], S32 share_counts[]) const override;
|
||||
};
|
||||
|
||||
ImplArray& ImplArray::makeArray(Impl*& var)
|
||||
@@ -631,7 +631,7 @@ namespace
|
||||
while (iter != endArray())
|
||||
{ // Add values for all items held in the array
|
||||
Impl::calcStats((*iter), type_counts, share_counts);
|
||||
iter++;
|
||||
++iter;
|
||||
}
|
||||
|
||||
// Add in the values for this array
|
||||
@@ -703,7 +703,7 @@ void LLSD::Impl::assign(Impl*& var, const Impl* other)
|
||||
|
||||
void LLSD::Impl::assignUndefined(Impl*& var)
|
||||
{
|
||||
reset(var, 0);
|
||||
reset(var, nullptr);
|
||||
}
|
||||
|
||||
void LLSD::Impl::assign(Impl*& var, LLSD::Boolean v)
|
||||
@@ -779,7 +779,7 @@ void LLSD::Impl::calcStats(S32 type_counts[], S32 share_counts[]) const
|
||||
S32 tp = S32(type());
|
||||
if (0 <= tp && tp < LLSD::TypeLLSDNumTypes)
|
||||
{
|
||||
type_counts[tp]++;
|
||||
type_counts[tp]++;
|
||||
if (shared())
|
||||
{
|
||||
share_counts[tp]++;
|
||||
@@ -813,10 +813,10 @@ namespace
|
||||
}
|
||||
|
||||
|
||||
LLSD::LLSD() : impl(0) { ALLOC_LLSD_OBJECT; }
|
||||
LLSD::~LLSD() { FREE_LLSD_OBJECT; Impl::reset(impl, 0); }
|
||||
LLSD::LLSD() : impl(nullptr) { ALLOC_LLSD_OBJECT; }
|
||||
LLSD::~LLSD() { FREE_LLSD_OBJECT; Impl::reset(impl, nullptr); }
|
||||
|
||||
LLSD::LLSD(const LLSD& other) : impl(0) { ALLOC_LLSD_OBJECT; assign(other); }
|
||||
LLSD::LLSD(const LLSD& other) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(other); }
|
||||
void LLSD::assign(const LLSD& other) { Impl::assign(impl, other.impl); }
|
||||
|
||||
|
||||
@@ -825,17 +825,17 @@ void LLSD::clear() { Impl::assignUndefined(impl); }
|
||||
LLSD::Type LLSD::type() const { return safe(impl).type(); }
|
||||
|
||||
// Scalar Constructors
|
||||
LLSD::LLSD(Boolean v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(Integer v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(Real v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const UUID& v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const String& v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const Date& v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const URI& v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const Binary& v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(Boolean v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(Integer v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(Real v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const UUID& v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const String& v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const Date& v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const URI& v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const Binary& v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
|
||||
// Convenience Constructors
|
||||
LLSD::LLSD(F32 v) : impl(0) { ALLOC_LLSD_OBJECT; assign((Real)v); }
|
||||
LLSD::LLSD(F32 v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign((Real)v); }
|
||||
|
||||
// Scalar Assignment
|
||||
void LLSD::assign(Boolean v) { safe(impl).assign(impl, v); }
|
||||
@@ -860,7 +860,7 @@ const LLSD::Binary& LLSD::asBinary() const { return safe(impl).asBinary(); }
|
||||
const LLSD::String& LLSD::asStringRef() const { return safe(impl).asStringRef(); }
|
||||
|
||||
// const char * helpers
|
||||
LLSD::LLSD(const char* v) : impl(0) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
LLSD::LLSD(const char* v) : impl(nullptr) { ALLOC_LLSD_OBJECT; assign(v); }
|
||||
void LLSD::assign(const char* v)
|
||||
{
|
||||
if(v) assign(std::string(v));
|
||||
@@ -927,7 +927,7 @@ static const char *llsd_dump(const LLSD &llsd, bool useXMLFormat)
|
||||
// sStorage will point to the result of the last call. This will actually
|
||||
// be one leak, but since this is used only when running under the
|
||||
// debugger, it should not be an issue.
|
||||
static char *sStorage = NULL;
|
||||
static char *sStorage = nullptr;
|
||||
delete[] sStorage;
|
||||
std::string out_string;
|
||||
{
|
||||
@@ -938,7 +938,7 @@ static const char *llsd_dump(const LLSD &llsd, bool useXMLFormat)
|
||||
out << LLSDNotationStreamer(llsd);
|
||||
out_string = out.str();
|
||||
}
|
||||
int len = out_string.length();
|
||||
size_t len = out_string.length();
|
||||
sStorage = new char[len + 1];
|
||||
memcpy(sStorage, out_string.c_str(), len);
|
||||
sStorage[len] = '\0';
|
||||
@@ -957,18 +957,24 @@ const char *LLSD::dump(const LLSD &llsd)
|
||||
return llsd_dump(llsd, false);
|
||||
}
|
||||
|
||||
LLSD::map_iterator LLSD::beginMap() { return makeMap(impl).beginMap(); }
|
||||
LLSD::map_iterator LLSD::endMap() { return makeMap(impl).endMap(); }
|
||||
LLSD::map_const_iterator LLSD::beginMap() const { return safe(impl).beginMap(); }
|
||||
LLSD::map_const_iterator LLSD::endMap() const { return safe(impl).endMap(); }
|
||||
std::map<LLSD::String, LLSD>& LLSD::map() { return makeMap(impl).map(); }
|
||||
const std::map<LLSD::String, LLSD>& LLSD::map() const { return safe(impl).map(); }
|
||||
|
||||
LLSD::array_iterator LLSD::beginArray() { return makeArray(impl).beginArray(); }
|
||||
LLSD::array_iterator LLSD::endArray() { return makeArray(impl).endArray(); }
|
||||
LLSD::array_const_iterator LLSD::beginArray() const{ return safe(impl).beginArray(); }
|
||||
LLSD::array_const_iterator LLSD::endArray() const { return safe(impl).endArray(); }
|
||||
LLSD::map_iterator LLSD::beginMap() { return map().begin(); }
|
||||
LLSD::map_iterator LLSD::endMap() { return map().end(); }
|
||||
LLSD::map_const_iterator LLSD::beginMap() const { return map().cbegin(); }
|
||||
LLSD::map_const_iterator LLSD::endMap() const { return map().cend(); }
|
||||
|
||||
LLSD::reverse_array_iterator LLSD::rbeginArray() { return makeArray(impl).rbeginArray(); }
|
||||
LLSD::reverse_array_iterator LLSD::rendArray() { return makeArray(impl).rendArray(); }
|
||||
std::vector<LLSD>& LLSD::array() { return makeArray(impl).array(); }
|
||||
const std::vector<LLSD>& LLSD::array() const { return safe(impl).array(); }
|
||||
|
||||
LLSD::array_iterator LLSD::beginArray() { return array().begin(); }
|
||||
LLSD::array_iterator LLSD::endArray() { return array().end(); }
|
||||
LLSD::array_const_iterator LLSD::beginArray() const{ return array().cbegin(); }
|
||||
LLSD::array_const_iterator LLSD::endArray() const { return array().cend(); }
|
||||
|
||||
LLSD::reverse_array_iterator LLSD::rbeginArray() { return array().rbegin(); }
|
||||
LLSD::reverse_array_iterator LLSD::rendArray() { return array().rend(); }
|
||||
|
||||
namespace llsd
|
||||
{
|
||||
|
||||
@@ -320,6 +320,8 @@ public:
|
||||
typedef std::map<String, LLSD>::iterator map_iterator;
|
||||
typedef std::map<String, LLSD>::const_iterator map_const_iterator;
|
||||
|
||||
std::map<String, LLSD>& map();
|
||||
const std::map<String, LLSD>& map() const;
|
||||
map_iterator beginMap();
|
||||
map_iterator endMap();
|
||||
map_const_iterator beginMap() const;
|
||||
@@ -329,6 +331,8 @@ public:
|
||||
typedef std::vector<LLSD>::const_iterator array_const_iterator;
|
||||
typedef std::vector<LLSD>::reverse_iterator reverse_array_iterator;
|
||||
|
||||
std::vector<LLSD>& array();
|
||||
const std::vector<LLSD>& array() const;
|
||||
array_iterator beginArray();
|
||||
array_iterator endArray();
|
||||
array_const_iterator beginArray() const;
|
||||
@@ -385,9 +389,9 @@ public:
|
||||
using an arbitrary pointer or scalar type to std::string.
|
||||
*/
|
||||
//@{
|
||||
LLSD(const void*); ///< construct from aribrary pointers
|
||||
void assign(const void*); ///< assign from arbitrary pointers
|
||||
LLSD& operator=(const void*); ///< assign from arbitrary pointers
|
||||
LLSD(const void*) = delete; ///< construct from aribrary pointers
|
||||
void assign(const void*) = delete; ///< assign from arbitrary pointers
|
||||
LLSD& operator=(const void*) = delete; ///< assign from arbitrary pointers
|
||||
|
||||
bool has(Integer) const; ///< has() only works for Maps
|
||||
//@}
|
||||
|
||||
@@ -79,6 +79,17 @@ LLSD LlsdFromJson(const nlohmann::json &val)
|
||||
return result;
|
||||
}
|
||||
|
||||
LLSD LlsdFromJsonString(const std::string& str)
|
||||
{
|
||||
auto json = nlohmann::json::parse(str, nullptr, false);
|
||||
if (json.is_discarded())
|
||||
{
|
||||
LL_WARNS() << "Cannot parse invalid json string:\n" << str << LL_ENDL;
|
||||
return LLSD();
|
||||
}
|
||||
return LlsdFromJson(json);
|
||||
}
|
||||
|
||||
//=========================================================================
|
||||
nlohmann::json LlsdToJson(const LLSD &val)
|
||||
{
|
||||
@@ -111,9 +122,9 @@ nlohmann::json LlsdToJson(const LLSD &val)
|
||||
}
|
||||
break;
|
||||
case LLSD::TypeArray:
|
||||
for (LLSD::array_const_iterator it = val.beginArray(); it != val.endArray(); ++it)
|
||||
for (auto const& entry : val.array())
|
||||
{
|
||||
result.push_back(LlsdToJson(*it));
|
||||
result.push_back(LlsdToJson(entry));
|
||||
}
|
||||
break;
|
||||
case LLSD::TypeBinary:
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
/// For maps and arrays child entries will be converted and added to the structure.
|
||||
/// Order is preserved for an array but not for objects.
|
||||
LLSD LlsdFromJson(const nlohmann::json &val);
|
||||
LLSD LlsdFromJsonString(const std::string& body);
|
||||
|
||||
/// Convert an LLSD object into Parsed JSON object maintaining member names and
|
||||
/// array indexs.
|
||||
|
||||
@@ -267,12 +267,10 @@ void LLParamSDParserUtilities::readSDValues(read_sd_cb_t cb, const LLSD& sd, LLI
|
||||
}
|
||||
else if (sd.isArray())
|
||||
{
|
||||
for (LLSD::array_const_iterator it = sd.beginArray();
|
||||
it != sd.endArray();
|
||||
++it)
|
||||
for (auto const& entry : sd.array())
|
||||
{
|
||||
stack.push_back(make_pair(std::string(), true));
|
||||
readSDValues(cb, *it, stack);
|
||||
readSDValues(cb, entry, stack);
|
||||
stack.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, S32 max_bytes)
|
||||
fail_if_not_legacy = true;
|
||||
}
|
||||
|
||||
if (!strncasecmp(LEGACY_NON_HEADER, hdr_buf, strlen(LEGACY_NON_HEADER))) /* Flawfinder: ignore */
|
||||
if (!strnicmp(LEGACY_NON_HEADER, hdr_buf, strlen(LEGACY_NON_HEADER))) /* Flawfinder: ignore */
|
||||
{
|
||||
legacy_no_header = true;
|
||||
inbuf = (int)str.gcount();
|
||||
@@ -141,9 +141,8 @@ bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, S32 max_bytes)
|
||||
}
|
||||
header = hdr_buf;
|
||||
|
||||
std::string::size_type start = std::string::npos;
|
||||
std::string::size_type start = header.find_first_not_of("<? ");
|
||||
std::string::size_type end = std::string::npos;
|
||||
start = header.find_first_not_of("<? ");
|
||||
if (start != std::string::npos)
|
||||
{
|
||||
end = header.find_first_of(" ?", start);
|
||||
@@ -1073,8 +1072,8 @@ S32 LLSDBinaryParser::doParse(std::istream& istr, LLSD& data) const
|
||||
// the size, and read it.
|
||||
U32 size_nbo = 0;
|
||||
read(istr, (char*)&size_nbo, sizeof(U32)); /*Flawfinder: ignore*/
|
||||
S32 size = (S32)ntohl(size_nbo);
|
||||
if(mCheckLimits && (size > mMaxBytesLeft))
|
||||
S32 size = (S32)ntohl(size_nbo); // Can return negative size if > 2^31.
|
||||
if(size < 0 || mCheckLimits && (size > mMaxBytesLeft))
|
||||
{
|
||||
parse_count = PARSE_FAILURE;
|
||||
}
|
||||
@@ -1114,7 +1113,11 @@ S32 LLSDBinaryParser::parseMap(std::istream& istr, LLSD& map) const
|
||||
map = LLSD::emptyMap();
|
||||
U32 value_nbo = 0;
|
||||
read(istr, (char*)&value_nbo, sizeof(U32)); /*Flawfinder: ignore*/
|
||||
S32 size = (S32)ntohl(value_nbo);
|
||||
S32 size = (S32)ntohl(value_nbo); // Can return negative size if > 2^31.
|
||||
if (size < 0)
|
||||
{
|
||||
return PARSE_FAILURE;
|
||||
}
|
||||
S32 parse_count = 0;
|
||||
S32 count = 0;
|
||||
char c = get(istr);
|
||||
@@ -1168,7 +1171,11 @@ S32 LLSDBinaryParser::parseArray(std::istream& istr, LLSD& array) const
|
||||
array = LLSD::emptyArray();
|
||||
U32 value_nbo = 0;
|
||||
read(istr, (char*)&value_nbo, sizeof(U32)); /*Flawfinder: ignore*/
|
||||
S32 size = (S32)ntohl(value_nbo);
|
||||
S32 size = (S32)ntohl(value_nbo); // Can return negative size if > 2^31.
|
||||
if (size < 0)
|
||||
{
|
||||
return PARSE_FAILURE;
|
||||
}
|
||||
|
||||
// *FIX: This would be a good place to reserve some space in the
|
||||
// array...
|
||||
@@ -1209,8 +1216,8 @@ bool LLSDBinaryParser::parseString(
|
||||
// *FIX: This is memory inefficient.
|
||||
U32 value_nbo = 0;
|
||||
read(istr, (char*)&value_nbo, sizeof(U32)); /*Flawfinder: ignore*/
|
||||
S32 size = (S32)ntohl(value_nbo);
|
||||
if(mCheckLimits && (size > mMaxBytesLeft)) return false;
|
||||
S32 size = (S32)ntohl(value_nbo); // Can return negative size if > 2^31.
|
||||
if(size < 0 || mCheckLimits && (size > mMaxBytesLeft)) return false;
|
||||
std::vector<char> buf;
|
||||
if(size)
|
||||
{
|
||||
@@ -1304,8 +1311,8 @@ S32 LLSDNotationFormatter::format_impl(const LLSD& data, std::ostream& ostr, U32
|
||||
}
|
||||
|
||||
bool need_comma = false;
|
||||
LLSD::map_const_iterator iter = data.beginMap();
|
||||
LLSD::map_const_iterator end = data.endMap();
|
||||
auto iter = data.beginMap();
|
||||
auto end = data.endMap();
|
||||
for(; iter != end; ++iter)
|
||||
{
|
||||
if(need_comma) ostr << ",";
|
||||
@@ -1323,13 +1330,11 @@ S32 LLSDNotationFormatter::format_impl(const LLSD& data, std::ostream& ostr, U32
|
||||
{
|
||||
ostr << post << pre << "[";
|
||||
bool need_comma = false;
|
||||
LLSD::array_const_iterator iter = data.beginArray();
|
||||
LLSD::array_const_iterator end = data.endArray();
|
||||
for(; iter != end; ++iter)
|
||||
for (const auto& entry : data.array())
|
||||
{
|
||||
if(need_comma) ostr << ",";
|
||||
if (need_comma) ostr << ",";
|
||||
need_comma = true;
|
||||
format_count += format_impl(*iter, ostr, options, level + 1);
|
||||
format_count += format_impl(entry, ostr, options, level + 1);
|
||||
}
|
||||
ostr << "]";
|
||||
break;
|
||||
@@ -1392,22 +1397,22 @@ S32 LLSDNotationFormatter::format_impl(const LLSD& data, std::ostream& ostr, U32
|
||||
// *FIX: memory inefficient.
|
||||
const std::vector<U8>& buffer = data.asBinary();
|
||||
ostr << "b(" << buffer.size() << ")\"";
|
||||
if(buffer.size())
|
||||
if(!buffer.empty())
|
||||
{
|
||||
if (options & LLSDFormatter::OPTIONS_PRETTY_BINARY)
|
||||
{
|
||||
std::ios_base::fmtflags old_flags = ostr.flags();
|
||||
ostr.setf( std::ios::hex, std::ios::basefield );
|
||||
ostr << "0x";
|
||||
for (size_t i = 0; i < buffer.size(); i++)
|
||||
for (unsigned char i : buffer)
|
||||
{
|
||||
ostr << (int) buffer[i];
|
||||
ostr << static_cast<int>(i);
|
||||
}
|
||||
ostr.flags(old_flags);
|
||||
}
|
||||
else
|
||||
{
|
||||
ostr.write((const char*)&buffer[0], buffer.size());
|
||||
ostr.write(reinterpret_cast<const char*>(&buffer[0]), buffer.size());
|
||||
}
|
||||
}
|
||||
ostr << "\"";
|
||||
@@ -1444,9 +1449,9 @@ S32 LLSDBinaryFormatter::format(const LLSD& data, std::ostream& ostr, U32 option
|
||||
{
|
||||
ostr.put('{');
|
||||
U32 size_nbo = htonl(data.size());
|
||||
ostr.write((const char*)(&size_nbo), sizeof(U32));
|
||||
LLSD::map_const_iterator iter = data.beginMap();
|
||||
LLSD::map_const_iterator end = data.endMap();
|
||||
ostr.write(reinterpret_cast<const char*>(&size_nbo), sizeof(U32));
|
||||
auto iter = data.beginMap();
|
||||
auto end = data.endMap();
|
||||
for(; iter != end; ++iter)
|
||||
{
|
||||
ostr.put('k');
|
||||
@@ -1461,12 +1466,10 @@ S32 LLSDBinaryFormatter::format(const LLSD& data, std::ostream& ostr, U32 option
|
||||
{
|
||||
ostr.put('[');
|
||||
U32 size_nbo = htonl(data.size());
|
||||
ostr.write((const char*)(&size_nbo), sizeof(U32));
|
||||
LLSD::array_const_iterator iter = data.beginArray();
|
||||
LLSD::array_const_iterator end = data.endArray();
|
||||
for(; iter != end; ++iter)
|
||||
ostr.write(reinterpret_cast<const char*>(&size_nbo), sizeof(U32));
|
||||
for (const auto& entry : data.array())
|
||||
{
|
||||
format_count += format(*iter, ostr);
|
||||
format_count += format(entry, ostr);
|
||||
}
|
||||
ostr.put(']');
|
||||
break;
|
||||
@@ -1529,7 +1532,7 @@ S32 LLSDBinaryFormatter::format(const LLSD& data, std::ostream& ostr, U32 option
|
||||
const std::vector<U8>& buffer = data.asBinary();
|
||||
U32 size_nbo = htonl(buffer.size());
|
||||
ostr.write((const char*)(&size_nbo), sizeof(U32));
|
||||
if(buffer.size()) ostr.write((const char*)&buffer[0], buffer.size());
|
||||
if(!buffer.empty()) ostr.write((const char*)&buffer[0], buffer.size());
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1706,12 +1709,12 @@ int deserialize_string_raw(
|
||||
// *FIX: This is memory inefficient.
|
||||
S32 len = strtol(buf + 1, NULL, 0);
|
||||
if((max_bytes>0)&&(len>max_bytes)) return LLSDParser::PARSE_FAILURE;
|
||||
std::vector<char> buf;
|
||||
std::vector<char> buf2;
|
||||
if(len)
|
||||
{
|
||||
buf.resize(len);
|
||||
count += (int)fullread(istr, (char *)&buf[0], len);
|
||||
value.assign(buf.begin(), buf.end());
|
||||
buf2.resize(len);
|
||||
count += (int)fullread(istr, (char *)&buf2[0], len);
|
||||
value.assign(buf2.begin(), buf2.end());
|
||||
}
|
||||
c = istr.get();
|
||||
++count;
|
||||
@@ -2095,7 +2098,18 @@ std::string zip_llsd(LLSD& data)
|
||||
}
|
||||
|
||||
have = CHUNK-strm.avail_out;
|
||||
output = (U8*) realloc(output, cur_size+have);
|
||||
U8* new_output = (U8*) realloc(output, cur_size+have);
|
||||
if (new_output == NULL)
|
||||
{
|
||||
LL_WARNS() << "Failed to compress LLSD block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL;
|
||||
deflateEnd(&strm);
|
||||
if (output)
|
||||
{
|
||||
free(output);
|
||||
}
|
||||
return std::string();
|
||||
}
|
||||
output = new_output;
|
||||
memcpy(output+cur_size, out, have);
|
||||
cur_size += have;
|
||||
}
|
||||
@@ -2114,15 +2128,6 @@ std::string zip_llsd(LLSD& data)
|
||||
deflateEnd(&strm);
|
||||
free(output);
|
||||
|
||||
#if 0 //verify results work with unzip_llsd
|
||||
std::istringstream test(result);
|
||||
LLSD test_sd;
|
||||
if (!unzip_llsd(test_sd, test, result.size()))
|
||||
{
|
||||
LL_ERRS() << "Invalid compression result!" << LL_ENDL;
|
||||
}
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2173,7 +2178,19 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
||||
|
||||
U32 have = CHUNK-strm.avail_out;
|
||||
|
||||
result = (U8*) realloc(result, cur_size + have);
|
||||
U8* new_result = (U8*)realloc(result, cur_size + have);
|
||||
if (new_result == NULL)
|
||||
{
|
||||
LL_WARNS() << "Failed to unzip LLSD block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL;
|
||||
inflateEnd(&strm);
|
||||
if (result)
|
||||
{
|
||||
free(result);
|
||||
}
|
||||
delete in;
|
||||
return false;
|
||||
}
|
||||
result = new_result;
|
||||
memcpy(result+cur_size, out, have);
|
||||
cur_size += have;
|
||||
|
||||
@@ -2219,6 +2236,11 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
||||
//and trailers are different for the formats.
|
||||
U8* unzip_llsdNavMesh( bool& valid, unsigned int& outsize, std::istream& is, S32 size )
|
||||
{
|
||||
if (size == 0)
|
||||
{
|
||||
LL_WARNS() << "No data to unzip." << LL_ENDL;
|
||||
return NULL;
|
||||
}
|
||||
U8* result = NULL;
|
||||
U32 cur_size = 0;
|
||||
z_stream strm;
|
||||
@@ -2258,7 +2280,23 @@ U8* unzip_llsdNavMesh( bool& valid, unsigned int& outsize, std::istream& is, S32
|
||||
}
|
||||
U32 have = CHUNK-strm.avail_out;
|
||||
|
||||
result = (U8*) realloc(result, cur_size + have);
|
||||
U8* new_result = (U8*) realloc(result, cur_size + have);
|
||||
if (new_result == NULL)
|
||||
{
|
||||
LL_WARNS() << "Failed to unzip LLSD NavMesh block: can't reallocate memory, current size: " << cur_size
|
||||
<< " bytes; requested " << cur_size + have
|
||||
<< " bytes; total syze: ." << size << " bytes."
|
||||
<< LL_ENDL;
|
||||
inflateEnd(&strm);
|
||||
if (result)
|
||||
{
|
||||
free(result);
|
||||
}
|
||||
delete [] in;
|
||||
valid = false;
|
||||
return NULL;
|
||||
}
|
||||
result = new_result;
|
||||
memcpy(result+cur_size, out, have);
|
||||
cur_size += have;
|
||||
|
||||
|
||||
@@ -116,11 +116,9 @@ S32 LLSDXMLFormatter::format_impl(const LLSD& data, std::ostream& ostr, U32 opti
|
||||
else
|
||||
{
|
||||
ostr << pre << "<array>" << post;
|
||||
LLSD::array_const_iterator iter = data.beginArray();
|
||||
LLSD::array_const_iterator end = data.endArray();
|
||||
for(; iter != end; ++iter)
|
||||
for (const auto& entry : data.array())
|
||||
{
|
||||
format_count += format_impl(*iter, ostr, options, level + 1);
|
||||
format_count += format_impl(entry, ostr, options, level + 1);
|
||||
}
|
||||
ostr << pre << "</array>" << post;
|
||||
}
|
||||
|
||||
@@ -891,9 +891,9 @@ LLSD llsd_clone(LLSD value, LLSD filter)
|
||||
break;
|
||||
case LLSD::TypeArray:
|
||||
clone = LLSD::emptyArray();
|
||||
for (LLSD::array_const_iterator ita = value.beginArray(); ita != value.endArray(); ++ita)
|
||||
for (auto const& entry : value.array())
|
||||
{
|
||||
clone.append(llsd_clone(*ita, filter));
|
||||
clone.append(llsd_clone(entry, filter));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -943,9 +943,9 @@ LLSD llsd_shallow(LLSD value, LLSD filter)
|
||||
else if (value.isArray())
|
||||
{
|
||||
shallow = LLSD::emptyArray();
|
||||
for (LLSD::array_const_iterator ita = value.beginArray(); ita != value.endArray(); ++ita)
|
||||
for (auto const& entry : value.array())
|
||||
{
|
||||
shallow.append(*ita);
|
||||
shallow.append(entry);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -139,7 +139,7 @@ bool skip_to_end_of_next_keyword(const char* keyword, std::istream& input_stream
|
||||
}
|
||||
else
|
||||
{
|
||||
int key_index = 1;
|
||||
size_t key_index = 1;
|
||||
while ( key_index < key_length
|
||||
&& keyword[key_index - 1] == c
|
||||
&& input_stream.good())
|
||||
|
||||
@@ -577,7 +577,7 @@ std::string utf8str_truncate(const std::string& utf8str, const S32 max_len)
|
||||
}
|
||||
|
||||
// [RLVa:KB] - Checked: RLVa-2.1.0
|
||||
std::string utf8str_substr(const std::string& utf8str, const S32 index, const S32 max_len)
|
||||
std::string utf8str_substr(const std::string& utf8str, const size_t index, const size_t max_len)
|
||||
{
|
||||
if (0 == max_len)
|
||||
{
|
||||
@@ -589,7 +589,7 @@ std::string utf8str_substr(const std::string& utf8str, const S32 index, const S3
|
||||
}
|
||||
else
|
||||
{
|
||||
S32 cur_char = max_len;
|
||||
size_t cur_char = max_len;
|
||||
|
||||
// If we're ASCII, we don't need to do anything
|
||||
if ((U8)utf8str[index + cur_char] > 0x7f)
|
||||
@@ -648,7 +648,7 @@ void utf8str_split(std::list<std::string>& split_list, const std::string& utf8st
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
std::string utf8str_symbol_truncate(const std::string& utf8str, const S32 symbol_len)
|
||||
std::string utf8str_symbol_truncate(const std::string& utf8str, const size_t symbol_len)
|
||||
{
|
||||
if (0 == symbol_len)
|
||||
{
|
||||
@@ -660,7 +660,7 @@ std::string utf8str_symbol_truncate(const std::string& utf8str, const S32 symbol
|
||||
}
|
||||
else
|
||||
{
|
||||
int len = 0, byteIndex = 0;
|
||||
size_t len = 0, byteIndex = 0;
|
||||
const char* aStr = utf8str.c_str();
|
||||
size_t origSize = utf8str.size();
|
||||
|
||||
@@ -1340,7 +1340,8 @@ void LLStringUtil::formatNumber(std::string& numStr, std::string decimals)
|
||||
// std::locale() throws if the locale is unknown! (EXT-7926)
|
||||
try
|
||||
{
|
||||
strStream.imbue(std::locale(sLocale.c_str()));
|
||||
std::locale locale(sLocale.c_str());
|
||||
strStream.imbue(locale);
|
||||
} catch (const std::exception &)
|
||||
{
|
||||
LL_WARNS_ONCE("Locale") << "Cannot set locale to " << sLocale << LL_ENDL;
|
||||
@@ -1353,8 +1354,7 @@ void LLStringUtil::formatNumber(std::string& numStr, std::string decimals)
|
||||
|
||||
if (convertToS32(numStr, intStr))
|
||||
{
|
||||
strStream << intStr;
|
||||
numStr = strStream.str();
|
||||
numStr = fmt::to_string(intStr);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1434,14 +1434,14 @@ bool LLStringUtil::formatDatetime(std::string& replacement, std::string token,
|
||||
{
|
||||
struct tm * gmt = gmtime (&loc_seconds);
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[MDAY]"] = llformat ("%d", gmt->tm_mday);
|
||||
args["[MDAY]"] = fmt::to_string(gmt->tm_mday);
|
||||
replacement = LLStringOps::sDayFormat;
|
||||
LLStringUtil::format(replacement, args);
|
||||
}
|
||||
else if (code == "%-d")
|
||||
{
|
||||
struct tm * gmt = gmtime (&loc_seconds);
|
||||
replacement = llformat ("%d", gmt->tm_mday); // day of the month without leading zero
|
||||
replacement = fmt::to_string(gmt->tm_mday); // day of the month without leading zero
|
||||
}
|
||||
else if( !LLStringOps::sAM.empty() && !LLStringOps::sPM.empty() && code == "%p" )
|
||||
{
|
||||
|
||||
@@ -29,6 +29,16 @@
|
||||
|
||||
#include <boost/optional/optional.hpp>
|
||||
#include <string>
|
||||
|
||||
#if __cplusplus < 201606
|
||||
#include <absl/strings/string_view.h>
|
||||
namespace std {
|
||||
typedef absl::string_view string_view;
|
||||
}
|
||||
#else
|
||||
#include <string_view>
|
||||
#endif
|
||||
|
||||
#include <cstdio>
|
||||
//#include <locale>
|
||||
#include <iomanip>
|
||||
@@ -243,7 +253,7 @@ public:
|
||||
bool operator<(const LLFormatMapString& rhs) const { return mString < rhs.mString; }
|
||||
std::size_t length() const { return mString.length(); }
|
||||
// The destructor may not throw.
|
||||
~LLFormatMapString() throw() { }
|
||||
~LLFormatMapString() noexcept { }
|
||||
|
||||
private:
|
||||
std::string mString;
|
||||
|
||||
@@ -702,28 +702,10 @@ LLMemoryInfo::LLMemoryInfo()
|
||||
refresh();
|
||||
}
|
||||
|
||||
#if LL_WINDOWS
|
||||
static U32Kilobytes LLMemoryAdjustKBResult(U32Kilobytes inKB)
|
||||
{
|
||||
// Moved this here from llfloaterabout.cpp
|
||||
|
||||
//! \bug
|
||||
// For some reason, the reported amount of memory is always wrong.
|
||||
// The original adjustment assumes it's always off by one meg, however
|
||||
// errors of as much as 2520 KB have been observed in the value
|
||||
// returned from the GetMemoryStatusEx function. Here we keep the
|
||||
// original adjustment from llfoaterabout.cpp until this can be
|
||||
// fixed somehow.
|
||||
inKB += U32Megabytes(1);
|
||||
|
||||
return inKB;
|
||||
}
|
||||
#endif
|
||||
|
||||
U32Kilobytes LLMemoryInfo::getPhysicalMemoryKB() const
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
return LLMemoryAdjustKBResult(U32Kilobytes(mStatsMap["Total Physical KB"].asInteger()));
|
||||
return U32Kilobytes(mStatsMap["Total Physical KB"].asInteger());
|
||||
|
||||
#elif LL_DARWIN
|
||||
// This might work on Linux as well. Someone check...
|
||||
@@ -740,43 +722,22 @@ U32Kilobytes LLMemoryInfo::getPhysicalMemoryKB() const
|
||||
phys = (U64)(getpagesize()) * (U64)(get_phys_pages());
|
||||
return U64Bytes(phys);
|
||||
|
||||
#elif LL_SOLARIS
|
||||
U64 phys = 0;
|
||||
phys = (U64)(getpagesize()) * (U64)(sysconf(_SC_PHYS_PAGES));
|
||||
return U64Bytes(phys);
|
||||
|
||||
#else
|
||||
return 0;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
U32Bytes LLMemoryInfo::getPhysicalMemoryClamped() const
|
||||
{
|
||||
// Return the total physical memory in bytes, but clamp it
|
||||
// to no more than U32_MAX
|
||||
|
||||
U32Kilobytes phys_kb = getPhysicalMemoryKB();
|
||||
if (phys_kb >= U32Gigabytes(4))
|
||||
{
|
||||
return U32Bytes(U32_MAX);
|
||||
}
|
||||
else
|
||||
{
|
||||
return phys_kb;
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
void LLMemoryInfo::getAvailableMemoryKB(U32Kilobytes& avail_physical_mem_kb, U32Kilobytes& avail_virtual_mem_kb)
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
// Sigh, this shouldn't be a static method, then we wouldn't have to
|
||||
// reload this data separately from refresh()
|
||||
LLSD statsMap(loadStatsMap());
|
||||
MEMORYSTATUSEX state;
|
||||
state.dwLength = sizeof(state);
|
||||
GlobalMemoryStatusEx(&state);
|
||||
|
||||
avail_physical_mem_kb = (U32Kilobytes)statsMap["Avail Physical KB"].asInteger();
|
||||
avail_virtual_mem_kb = (U32Kilobytes)statsMap["Avail Virtual KB"].asInteger();
|
||||
avail_physical_mem_kb = U64Bytes(state.ullAvailPhys);
|
||||
avail_virtual_mem_kb = U64Bytes(state.ullAvailVirtual);
|
||||
|
||||
#elif LL_DARWIN
|
||||
// mStatsMap is derived from vm_stat, look for (e.g.) "kb free":
|
||||
@@ -924,7 +885,7 @@ LLSD LLMemoryInfo::loadStatsMap()
|
||||
|
||||
DWORDLONG div = 1024;
|
||||
|
||||
stats.add("Percent Memory use", state.dwMemoryLoad/div);
|
||||
stats.add("Percent Memory use", state.dwMemoryLoad);
|
||||
stats.add("Total Physical KB", state.ullTotalPhys/div);
|
||||
stats.add("Avail Physical KB", state.ullAvailPhys/div);
|
||||
stats.add("Total page KB", state.ullTotalPageFile/div);
|
||||
@@ -973,27 +934,33 @@ LLSD LLMemoryInfo::loadStatsMap()
|
||||
stats.add("PrivateUsage KB", pmem.PrivateUsage/div);
|
||||
|
||||
#elif LL_DARWIN
|
||||
|
||||
const vm_size_t pagekb(vm_page_size / 1024);
|
||||
vm_size_t page_size_kb;
|
||||
if (host_page_size(mach_host_self(), &page_size_kb) != KERN_SUCCESS)
|
||||
{
|
||||
LL_WARNS() << "Unable to get host page size. Using default value." << LL_ENDL;
|
||||
page_size_kb = 4096;
|
||||
}
|
||||
|
||||
page_size_kb = page_size_kb / 1024;
|
||||
|
||||
//
|
||||
// Collect the vm_stat's
|
||||
//
|
||||
|
||||
{
|
||||
vm_statistics_data_t vmstat;
|
||||
mach_msg_type_number_t vmstatCount = HOST_VM_INFO_COUNT;
|
||||
vm_statistics64_data_t vmstat;
|
||||
mach_msg_type_number_t vmstatCount = HOST_VM_INFO64_COUNT;
|
||||
|
||||
if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t) &vmstat, &vmstatCount) != KERN_SUCCESS)
|
||||
if (host_statistics64(mach_host_self(), HOST_VM_INFO64, (host_info64_t) &vmstat, &vmstatCount) != KERN_SUCCESS)
|
||||
{
|
||||
LL_WARNS("LLMemoryInfo") << "Unable to collect memory information" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
stats.add("Pages free KB", pagekb * vmstat.free_count);
|
||||
stats.add("Pages active KB", pagekb * vmstat.active_count);
|
||||
stats.add("Pages inactive KB", pagekb * vmstat.inactive_count);
|
||||
stats.add("Pages wired KB", pagekb * vmstat.wire_count);
|
||||
stats.add("Pages free KB", page_size_kb * vmstat.free_count);
|
||||
stats.add("Pages active KB", page_size_kb * vmstat.active_count);
|
||||
stats.add("Pages inactive KB", page_size_kb * vmstat.inactive_count);
|
||||
stats.add("Pages wired KB", page_size_kb * vmstat.wire_count);
|
||||
|
||||
stats.add("Pages zero fill", vmstat.zero_fill_count);
|
||||
stats.add("Page reactivations", vmstat.reactivations);
|
||||
@@ -1042,20 +1009,20 @@ LLSD LLMemoryInfo::loadStatsMap()
|
||||
//
|
||||
|
||||
{
|
||||
task_basic_info_64_data_t taskinfo;
|
||||
unsigned taskinfoSize = sizeof(taskinfo);
|
||||
|
||||
if (task_info(mach_task_self(), TASK_BASIC_INFO_64, (task_info_t) &taskinfo, &taskinfoSize) != KERN_SUCCESS)
|
||||
mach_task_basic_info_data_t taskinfo;
|
||||
mach_msg_type_number_t task_count = MACH_TASK_BASIC_INFO_COUNT;
|
||||
if (task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t) &taskinfo, &task_count) != KERN_SUCCESS)
|
||||
{
|
||||
LL_WARNS("LLMemoryInfo") << "Unable to collect task information" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
stats.add("Basic suspend count", taskinfo.suspend_count);
|
||||
stats.add("Basic virtual memory KB", taskinfo.virtual_size / 1024);
|
||||
stats.add("Basic resident memory KB", taskinfo.resident_size / 1024);
|
||||
stats.add("Basic new thread policy", taskinfo.policy);
|
||||
}
|
||||
LL_WARNS("LLMemoryInfo") << "Unable to collect task information" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
stats.add("Basic virtual memory KB", taskinfo.virtual_size / 1024);
|
||||
stats.add("Basic resident memory KB", taskinfo.resident_size / 1024);
|
||||
stats.add("Basic max resident memory KB", taskinfo.resident_size_max / 1024);
|
||||
stats.add("Basic new thread policy", taskinfo.policy);
|
||||
stats.add("Basic suspend count", taskinfo.suspend_count);
|
||||
}
|
||||
}
|
||||
|
||||
#elif LL_SOLARIS
|
||||
@@ -1307,7 +1274,7 @@ BOOL gunzip_file(const std::string& srcfile, const std::string& dstfile)
|
||||
const S32 UNCOMPRESS_BUFFER_SIZE = 32768;
|
||||
BOOL retval = FALSE;
|
||||
gzFile src = NULL;
|
||||
U8 buffer[UNCOMPRESS_BUFFER_SIZE];
|
||||
std::array<U8, UNCOMPRESS_BUFFER_SIZE> buffer;
|
||||
LLFILE *dst = NULL;
|
||||
S32 bytes = 0;
|
||||
tmpfile = dstfile + ".t";
|
||||
@@ -1321,8 +1288,8 @@ BOOL gunzip_file(const std::string& srcfile, const std::string& dstfile)
|
||||
if (! dst) goto err;
|
||||
do
|
||||
{
|
||||
bytes = gzread(src, buffer, UNCOMPRESS_BUFFER_SIZE);
|
||||
size_t nwrit = fwrite(buffer, sizeof(U8), bytes, dst);
|
||||
bytes = gzread(src, buffer.data(), buffer.size());
|
||||
size_t nwrit = fwrite(buffer.data(), sizeof(U8), bytes, dst);
|
||||
if (nwrit < (size_t) bytes)
|
||||
{
|
||||
LL_WARNS() << "Short write on " << tmpfile << ": Wrote " << nwrit << " of " << bytes << " bytes." << LL_ENDL;
|
||||
@@ -1344,7 +1311,7 @@ BOOL gzip_file(const std::string& srcfile, const std::string& dstfile)
|
||||
const S32 COMPRESS_BUFFER_SIZE = 32768;
|
||||
std::string tmpfile;
|
||||
BOOL retval = FALSE;
|
||||
U8 buffer[COMPRESS_BUFFER_SIZE];
|
||||
std::array<U8, COMPRESS_BUFFER_SIZE> buffer;
|
||||
gzFile dst = NULL;
|
||||
LLFILE *src = NULL;
|
||||
S32 bytes = 0;
|
||||
@@ -1358,9 +1325,9 @@ BOOL gzip_file(const std::string& srcfile, const std::string& dstfile)
|
||||
src = LLFile::fopen(srcfile, "rb"); /* Flawfinder: ignore */
|
||||
if (! src) goto err;
|
||||
|
||||
while ((bytes = (S32)fread(buffer, sizeof(U8), COMPRESS_BUFFER_SIZE, src)) > 0)
|
||||
while ((bytes = (S32)fread(buffer.data(), sizeof(U8), buffer.size(), src)) > 0)
|
||||
{
|
||||
if (gzwrite(dst, buffer, bytes) <= 0)
|
||||
if (gzwrite(dst, buffer.data(), bytes) <= 0)
|
||||
{
|
||||
LL_WARNS() << "gzwrite failed: " << gzerror(dst, NULL) << LL_ENDL;
|
||||
goto err;
|
||||
|
||||
@@ -114,11 +114,6 @@ public:
|
||||
|
||||
U32Kilobytes getPhysicalMemoryKB() const;
|
||||
|
||||
/*! Memory size in bytes, if total memory is >= 4GB then U32_MAX will
|
||||
** be returned.
|
||||
*/
|
||||
U32Bytes getPhysicalMemoryClamped() const; ///< Memory size in clamped bytes
|
||||
|
||||
//get the available memory infomation in KiloBytes.
|
||||
static void getAvailableMemoryKB(U32Kilobytes& avail_physical_mem_kb, U32Kilobytes& avail_virtual_mem_kb);
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ include_directories(
|
||||
|
||||
set(llinventory_SOURCE_FILES
|
||||
llcategory.cpp
|
||||
lleconomy.cpp
|
||||
llfoldertype.cpp
|
||||
llinventory.cpp
|
||||
llinventorydefines.cpp
|
||||
@@ -40,7 +39,6 @@ set(llinventory_HEADER_FILES
|
||||
CMakeLists.txt
|
||||
|
||||
llcategory.h
|
||||
lleconomy.h
|
||||
llfoldertype.h
|
||||
llinventory.h
|
||||
llinventorydefines.h
|
||||
|
||||
@@ -1,288 +0,0 @@
|
||||
/**
|
||||
* @file lleconomy.cpp
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&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 "lleconomy.h"
|
||||
#include "llerror.h"
|
||||
#include "message.h"
|
||||
#include "v3math.h"
|
||||
|
||||
|
||||
LLGlobalEconomy::LLGlobalEconomy()
|
||||
: mObjectCount( -1 ),
|
||||
mObjectCapacity( -1 ),
|
||||
mPriceObjectClaim( -1 ),
|
||||
mPricePublicObjectDecay( -1 ),
|
||||
mPricePublicObjectDelete( -1 ),
|
||||
mPriceEnergyUnit( -1 ),
|
||||
mPriceUpload( -1 ),
|
||||
mPriceRentLight( -1 ),
|
||||
mTeleportMinPrice( -1 ),
|
||||
mTeleportPriceExponent( -1 ),
|
||||
mPriceGroupCreate( -1 )
|
||||
{ }
|
||||
|
||||
LLGlobalEconomy::~LLGlobalEconomy()
|
||||
{ }
|
||||
|
||||
void LLGlobalEconomy::addObserver(LLEconomyObserver* observer)
|
||||
{
|
||||
mObservers.push_back(observer);
|
||||
}
|
||||
|
||||
void LLGlobalEconomy::removeObserver(LLEconomyObserver* observer)
|
||||
{
|
||||
std::list<LLEconomyObserver*>::iterator it =
|
||||
std::find(mObservers.begin(), mObservers.end(), observer);
|
||||
if (it != mObservers.end())
|
||||
{
|
||||
mObservers.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
void LLGlobalEconomy::notifyObservers()
|
||||
{
|
||||
for (std::list<LLEconomyObserver*>::iterator it = mObservers.begin();
|
||||
it != mObservers.end();
|
||||
++it)
|
||||
{
|
||||
(*it)->onEconomyDataChange();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLGlobalEconomy::processEconomyData(LLMessageSystem *msg, LLGlobalEconomy* econ_data)
|
||||
{
|
||||
S32 i;
|
||||
F32 f;
|
||||
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCapacity, i);
|
||||
econ_data->setObjectCapacity(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCount, i);
|
||||
econ_data->setObjectCount(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceEnergyUnit, i);
|
||||
econ_data->setPriceEnergyUnit(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceObjectClaim, i);
|
||||
econ_data->setPriceObjectClaim(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDecay, i);
|
||||
econ_data->setPricePublicObjectDecay(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDelete, i);
|
||||
econ_data->setPricePublicObjectDelete(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceUpload, i);
|
||||
econ_data->setPriceUpload(i);
|
||||
#if LL_LINUX
|
||||
// We can optionally fake the received upload price for testing.
|
||||
// Note that the server is within its rights to not obey our fake
|
||||
// price. :)
|
||||
const char* fakeprice_str = getenv("LL_FAKE_UPLOAD_PRICE");
|
||||
if (fakeprice_str)
|
||||
{
|
||||
S32 fakeprice = (S32)atoi(fakeprice_str);
|
||||
LL_WARNS() << "LL_FAKE_UPLOAD_PRICE: Faking upload price as L$" << fakeprice << LL_ENDL;
|
||||
econ_data->setPriceUpload(fakeprice);
|
||||
}
|
||||
#endif
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceRentLight, i);
|
||||
econ_data->setPriceRentLight(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_TeleportMinPrice, i);
|
||||
econ_data->setTeleportMinPrice(i);
|
||||
msg->getF32Fast(_PREHASH_Info, _PREHASH_TeleportPriceExponent, f);
|
||||
econ_data->setTeleportPriceExponent(f);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceGroupCreate, i);
|
||||
econ_data->setPriceGroupCreate(i);
|
||||
|
||||
econ_data->notifyObservers();
|
||||
}
|
||||
|
||||
S32 LLGlobalEconomy::calculateTeleportCost(F32 distance) const
|
||||
{
|
||||
S32 min_cost = getTeleportMinPrice();
|
||||
F32 exponent = getTeleportPriceExponent();
|
||||
F32 divisor = 100.f * pow(3.f, exponent);
|
||||
S32 cost = (U32)(distance * pow(log10(distance), exponent) / divisor);
|
||||
if (cost < 0)
|
||||
{
|
||||
cost = 0;
|
||||
}
|
||||
else if (cost < min_cost)
|
||||
{
|
||||
cost = min_cost;
|
||||
}
|
||||
|
||||
return cost;
|
||||
}
|
||||
|
||||
S32 LLGlobalEconomy::calculateLightRent(const LLVector3& object_size) const
|
||||
{
|
||||
F32 intensity_mod = llmax(object_size.magVec(), 1.f);
|
||||
return (S32)(intensity_mod * getPriceRentLight());
|
||||
}
|
||||
|
||||
void LLGlobalEconomy::print()
|
||||
{
|
||||
LL_INFOS() << "Global Economy Settings: " << LL_ENDL;
|
||||
LL_INFOS() << "Object Capacity: " << mObjectCapacity << LL_ENDL;
|
||||
LL_INFOS() << "Object Count: " << mObjectCount << LL_ENDL;
|
||||
LL_INFOS() << "Claim Price Per Object: " << mPriceObjectClaim << LL_ENDL;
|
||||
LL_INFOS() << "Claim Price Per Public Object: " << mPricePublicObjectDecay << LL_ENDL;
|
||||
LL_INFOS() << "Delete Price Per Public Object: " << mPricePublicObjectDelete << LL_ENDL;
|
||||
LL_INFOS() << "Release Price Per Public Object: " << getPricePublicObjectRelease() << LL_ENDL;
|
||||
LL_INFOS() << "Price Per Energy Unit: " << mPriceEnergyUnit << LL_ENDL;
|
||||
LL_INFOS() << "Price Per Upload: " << mPriceUpload << LL_ENDL;
|
||||
LL_INFOS() << "Light Base Price: " << mPriceRentLight << LL_ENDL;
|
||||
LL_INFOS() << "Teleport Min Price: " << mTeleportMinPrice << LL_ENDL;
|
||||
LL_INFOS() << "Teleport Price Exponent: " << mTeleportPriceExponent << LL_ENDL;
|
||||
LL_INFOS() << "Price for group creation: " << mPriceGroupCreate << LL_ENDL;
|
||||
}
|
||||
|
||||
LLRegionEconomy::LLRegionEconomy()
|
||||
: LLGlobalEconomy(),
|
||||
mPriceObjectRent( -1.f ),
|
||||
mPriceObjectScaleFactor( -1.f ),
|
||||
mEnergyEfficiency( -1.f ),
|
||||
mBasePriceParcelClaimDefault(-1),
|
||||
mBasePriceParcelClaimActual(-1),
|
||||
mPriceParcelClaimFactor(-1.f),
|
||||
mBasePriceParcelRent(-1),
|
||||
mAreaOwned(-1.f),
|
||||
mAreaTotal(-1.f)
|
||||
{ }
|
||||
|
||||
LLRegionEconomy::~LLRegionEconomy()
|
||||
{ }
|
||||
|
||||
BOOL LLRegionEconomy::hasData() const
|
||||
{
|
||||
return (mBasePriceParcelRent != -1);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLRegionEconomy::processEconomyData(LLMessageSystem *msg, void** user_data)
|
||||
{
|
||||
S32 i;
|
||||
F32 f;
|
||||
|
||||
LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data;
|
||||
|
||||
LLGlobalEconomy::processEconomyData(msg, this_ptr);
|
||||
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceParcelClaim, i);
|
||||
this_ptr->setBasePriceParcelClaimDefault(i);
|
||||
msg->getF32(_PREHASH_Info, _PREHASH_PriceParcelClaimFactor, f);
|
||||
this_ptr->setPriceParcelClaimFactor(f);
|
||||
msg->getF32Fast(_PREHASH_Info, _PREHASH_EnergyEfficiency, f);
|
||||
this_ptr->setEnergyEfficiency(f);
|
||||
msg->getF32Fast(_PREHASH_Info, _PREHASH_PriceObjectRent, f);
|
||||
this_ptr->setPriceObjectRent(f);
|
||||
msg->getF32Fast(_PREHASH_Info, _PREHASH_PriceObjectScaleFactor, f);
|
||||
this_ptr->setPriceObjectScaleFactor(f);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceParcelRent, i);
|
||||
this_ptr->setBasePriceParcelRent(i);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLRegionEconomy::processEconomyDataRequest(LLMessageSystem *msg, void **user_data)
|
||||
{
|
||||
LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data;
|
||||
if (!this_ptr->hasData())
|
||||
{
|
||||
LL_WARNS() << "Dropping EconomyDataRequest, because EconomyData message "
|
||||
<< "has not been processed" << LL_ENDL;
|
||||
}
|
||||
|
||||
msg->newMessageFast(_PREHASH_EconomyData);
|
||||
msg->nextBlockFast(_PREHASH_Info);
|
||||
msg->addS32Fast(_PREHASH_ObjectCapacity, this_ptr->getObjectCapacity());
|
||||
msg->addS32Fast(_PREHASH_ObjectCount, this_ptr->getObjectCount());
|
||||
msg->addS32Fast(_PREHASH_PriceEnergyUnit, this_ptr->getPriceEnergyUnit());
|
||||
msg->addS32Fast(_PREHASH_PriceObjectClaim, this_ptr->getPriceObjectClaim());
|
||||
msg->addS32Fast(_PREHASH_PricePublicObjectDecay, this_ptr->getPricePublicObjectDecay());
|
||||
msg->addS32Fast(_PREHASH_PricePublicObjectDelete, this_ptr->getPricePublicObjectDelete());
|
||||
msg->addS32Fast(_PREHASH_PriceParcelClaim, this_ptr->mBasePriceParcelClaimActual);
|
||||
msg->addF32Fast(_PREHASH_PriceParcelClaimFactor, this_ptr->mPriceParcelClaimFactor);
|
||||
msg->addS32Fast(_PREHASH_PriceUpload, this_ptr->getPriceUpload());
|
||||
msg->addS32Fast(_PREHASH_PriceRentLight, this_ptr->getPriceRentLight());
|
||||
msg->addS32Fast(_PREHASH_TeleportMinPrice, this_ptr->getTeleportMinPrice());
|
||||
msg->addF32Fast(_PREHASH_TeleportPriceExponent, this_ptr->getTeleportPriceExponent());
|
||||
|
||||
msg->addF32Fast(_PREHASH_EnergyEfficiency, this_ptr->getEnergyEfficiency());
|
||||
msg->addF32Fast(_PREHASH_PriceObjectRent, this_ptr->getPriceObjectRent());
|
||||
msg->addF32Fast(_PREHASH_PriceObjectScaleFactor, this_ptr->getPriceObjectScaleFactor());
|
||||
msg->addS32Fast(_PREHASH_PriceParcelRent, this_ptr->getPriceParcelRent());
|
||||
msg->addS32Fast(_PREHASH_PriceGroupCreate, this_ptr->getPriceGroupCreate());
|
||||
|
||||
msg->sendReliable(msg->getSender());
|
||||
}
|
||||
|
||||
|
||||
S32 LLRegionEconomy::getPriceParcelClaim() const
|
||||
{
|
||||
//return (S32)((F32)mBasePriceParcelClaim * (mAreaTotal / (mAreaTotal - mAreaOwned)));
|
||||
return (S32)((F32)mBasePriceParcelClaimActual * mPriceParcelClaimFactor);
|
||||
}
|
||||
|
||||
S32 LLRegionEconomy::getPriceParcelRent() const
|
||||
{
|
||||
return mBasePriceParcelRent;
|
||||
}
|
||||
|
||||
|
||||
void LLRegionEconomy::print()
|
||||
{
|
||||
this->LLGlobalEconomy::print();
|
||||
|
||||
LL_INFOS() << "Region Economy Settings: " << LL_ENDL;
|
||||
LL_INFOS() << "Land (square meters): " << mAreaTotal << LL_ENDL;
|
||||
LL_INFOS() << "Owned Land (square meters): " << mAreaOwned << LL_ENDL;
|
||||
LL_INFOS() << "Daily Object Rent: " << mPriceObjectRent << LL_ENDL;
|
||||
LL_INFOS() << "Daily Land Rent (per meter): " << getPriceParcelRent() << LL_ENDL;
|
||||
LL_INFOS() << "Energey Efficiency: " << mEnergyEfficiency << LL_ENDL;
|
||||
}
|
||||
|
||||
|
||||
void LLRegionEconomy::setBasePriceParcelClaimDefault(S32 val)
|
||||
{
|
||||
mBasePriceParcelClaimDefault = val;
|
||||
if(mBasePriceParcelClaimActual == -1)
|
||||
{
|
||||
mBasePriceParcelClaimActual = val;
|
||||
}
|
||||
}
|
||||
|
||||
void LLRegionEconomy::setBasePriceParcelClaimActual(S32 val)
|
||||
{
|
||||
mBasePriceParcelClaimActual = val;
|
||||
}
|
||||
|
||||
void LLRegionEconomy::setPriceParcelClaimFactor(F32 val)
|
||||
{
|
||||
mPriceParcelClaimFactor = val;
|
||||
}
|
||||
|
||||
void LLRegionEconomy::setBasePriceParcelRent(S32 val)
|
||||
{
|
||||
mBasePriceParcelRent = val;
|
||||
}
|
||||
@@ -1,159 +0,0 @@
|
||||
/**
|
||||
* @file lleconomy.h
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLECONOMY_H
|
||||
#define LL_LLECONOMY_H
|
||||
|
||||
#include "llsingleton.h"
|
||||
|
||||
class LLMessageSystem;
|
||||
class LLVector3;
|
||||
|
||||
/**
|
||||
* Register an observer to be notified of economy data updates coming from server.
|
||||
*/
|
||||
class LLEconomyObserver
|
||||
{
|
||||
public:
|
||||
virtual ~LLEconomyObserver() {}
|
||||
virtual void onEconomyDataChange() = 0;
|
||||
};
|
||||
|
||||
class LLGlobalEconomy
|
||||
{
|
||||
public:
|
||||
LLGlobalEconomy();
|
||||
virtual ~LLGlobalEconomy();
|
||||
|
||||
// This class defines its singleton internally as a typedef instead of inheriting from
|
||||
// LLSingleton like most others because the LLRegionEconomy sub-class might also
|
||||
// become a singleton and this pattern will more easily disambiguate them.
|
||||
typedef LLSingleton<LLGlobalEconomy> Singleton;
|
||||
|
||||
void initSingleton() { }
|
||||
|
||||
virtual void print();
|
||||
|
||||
void addObserver(LLEconomyObserver* observer);
|
||||
void removeObserver(LLEconomyObserver* observer);
|
||||
void notifyObservers();
|
||||
|
||||
static void processEconomyData(LLMessageSystem *msg, LLGlobalEconomy* econ_data);
|
||||
|
||||
S32 calculateTeleportCost(F32 distance) const;
|
||||
S32 calculateLightRent(const LLVector3& object_size) const;
|
||||
|
||||
S32 getObjectCount() const { return mObjectCount; }
|
||||
S32 getObjectCapacity() const { return mObjectCapacity; }
|
||||
S32 getPriceObjectClaim() const { return mPriceObjectClaim; }
|
||||
S32 getPricePublicObjectDecay() const { return mPricePublicObjectDecay; }
|
||||
S32 getPricePublicObjectDelete() const { return mPricePublicObjectDelete; }
|
||||
S32 getPricePublicObjectRelease() const { return mPriceObjectClaim - mPricePublicObjectDelete; }
|
||||
S32 getPriceEnergyUnit() const { return mPriceEnergyUnit; }
|
||||
S32 getPriceUpload() const { return mPriceUpload; }
|
||||
S32 getPriceRentLight() const { return mPriceRentLight; }
|
||||
S32 getTeleportMinPrice() const { return mTeleportMinPrice; }
|
||||
F32 getTeleportPriceExponent() const { return mTeleportPriceExponent; }
|
||||
S32 getPriceGroupCreate() const { return mPriceGroupCreate; }
|
||||
|
||||
|
||||
void setObjectCount(S32 val) { mObjectCount = val; }
|
||||
void setObjectCapacity(S32 val) { mObjectCapacity = val; }
|
||||
void setPriceObjectClaim(S32 val) { mPriceObjectClaim = val; }
|
||||
void setPricePublicObjectDecay(S32 val) { mPricePublicObjectDecay = val; }
|
||||
void setPricePublicObjectDelete(S32 val) { mPricePublicObjectDelete = val; }
|
||||
void setPriceEnergyUnit(S32 val) { mPriceEnergyUnit = val; }
|
||||
void setPriceUpload(S32 val) { mPriceUpload = val; }
|
||||
void setPriceRentLight(S32 val) { mPriceRentLight = val; }
|
||||
void setTeleportMinPrice(S32 val) { mTeleportMinPrice = val; }
|
||||
void setTeleportPriceExponent(F32 val) { mTeleportPriceExponent = val; }
|
||||
void setPriceGroupCreate(S32 val) { mPriceGroupCreate = val; }
|
||||
|
||||
private:
|
||||
S32 mObjectCount;
|
||||
S32 mObjectCapacity;
|
||||
S32 mPriceObjectClaim; // per primitive
|
||||
S32 mPricePublicObjectDecay; // per primitive
|
||||
S32 mPricePublicObjectDelete; // per primitive
|
||||
S32 mPriceEnergyUnit;
|
||||
S32 mPriceUpload;
|
||||
S32 mPriceRentLight;
|
||||
S32 mTeleportMinPrice;
|
||||
F32 mTeleportPriceExponent;
|
||||
S32 mPriceGroupCreate;
|
||||
|
||||
std::list<LLEconomyObserver*> mObservers;
|
||||
};
|
||||
|
||||
|
||||
class LLRegionEconomy : public LLGlobalEconomy
|
||||
{
|
||||
public:
|
||||
LLRegionEconomy();
|
||||
~LLRegionEconomy();
|
||||
|
||||
static void processEconomyData(LLMessageSystem *msg, void **user_data);
|
||||
static void processEconomyDataRequest(LLMessageSystem *msg, void **user_data);
|
||||
|
||||
void print();
|
||||
|
||||
BOOL hasData() const;
|
||||
F32 getPriceObjectRent() const { return mPriceObjectRent; }
|
||||
F32 getPriceObjectScaleFactor() const {return mPriceObjectScaleFactor;}
|
||||
F32 getEnergyEfficiency() const { return mEnergyEfficiency; }
|
||||
S32 getPriceParcelClaim() const;
|
||||
S32 getPriceParcelRent() const;
|
||||
F32 getAreaOwned() const { return mAreaOwned; }
|
||||
F32 getAreaTotal() const { return mAreaTotal; }
|
||||
S32 getBasePriceParcelClaimActual() const { return mBasePriceParcelClaimActual; }
|
||||
|
||||
void setPriceObjectRent(F32 val) { mPriceObjectRent = val; }
|
||||
void setPriceObjectScaleFactor(F32 val) { mPriceObjectScaleFactor = val; }
|
||||
void setEnergyEfficiency(F32 val) { mEnergyEfficiency = val; }
|
||||
|
||||
void setBasePriceParcelClaimDefault(S32 val);
|
||||
void setBasePriceParcelClaimActual(S32 val);
|
||||
void setPriceParcelClaimFactor(F32 val);
|
||||
void setBasePriceParcelRent(S32 val);
|
||||
|
||||
void setAreaOwned(F32 val) { mAreaOwned = val; }
|
||||
void setAreaTotal(F32 val) { mAreaTotal = val; }
|
||||
|
||||
private:
|
||||
F32 mPriceObjectRent;
|
||||
F32 mPriceObjectScaleFactor;
|
||||
F32 mEnergyEfficiency;
|
||||
|
||||
S32 mBasePriceParcelClaimDefault;
|
||||
S32 mBasePriceParcelClaimActual;
|
||||
F32 mPriceParcelClaimFactor;
|
||||
S32 mBasePriceParcelRent;
|
||||
|
||||
F32 mAreaOwned;
|
||||
F32 mAreaTotal;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1165,8 +1165,10 @@ bool LLInventoryItem::fromLLSD(const LLSD& sd, bool is_new)
|
||||
// mType, these are the two asset types that are IT_WEARABLE:
|
||||
static U32 AT_BODYPART = 13; // LLAssetType::AT_BODYPART
|
||||
// Viewer local values:
|
||||
static U32 WT_UNKNOWN = 16; // LLWearableType::WT_UNKNOWN
|
||||
static U32 WT_COUNT = 17; // LLWearableType::WT_COUNT
|
||||
static U32 WT_UNKNOWN = 17; // LLWearableType::WT_UNKNOWN
|
||||
static U32 WT_COUNT = 18; // LLWearableType::WT_COUNT
|
||||
// Keep WT_UNKNOWN and WT_COUNT
|
||||
// in sync with llwearabletype.h
|
||||
// The last 8 bits of mFlags contain the wearable type.
|
||||
static U32 II_FLAGS_SUBTYPE_MASK = 0xff; // LLInventoryItemFlags::II_FLAGS_SUBTYPE_MASK
|
||||
|
||||
|
||||
@@ -100,6 +100,7 @@ public:
|
||||
ICONNAME_CLOTHING_SKIRT,
|
||||
ICONNAME_CLOTHING_ALPHA,
|
||||
ICONNAME_CLOTHING_TATTOO,
|
||||
ICONNAME_CLOTHING_UNIVERSAL,
|
||||
|
||||
ICONNAME_ANIMATION,
|
||||
ICONNAME_GESTURE,
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
#include "llsdutil_math.h"
|
||||
#include "message.h"
|
||||
#include "u64.h"
|
||||
#include "llregionflags.h"
|
||||
#include <boost/range/adaptor/map.hpp>
|
||||
|
||||
static const F32 SOME_BIG_NUMBER = 1000.0f;
|
||||
static const F32 SOME_BIG_NEG_NUMBER = -1000.0f;
|
||||
@@ -742,8 +744,8 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
|
||||
void LLParcel::packAccessEntries(LLMessageSystem* msg,
|
||||
const std::map<LLUUID,LLAccessEntry>& list)
|
||||
{
|
||||
access_map_const_iterator cit = list.begin();
|
||||
access_map_const_iterator end = list.end();
|
||||
LLAccessEntry::map::const_iterator cit = list.begin();
|
||||
LLAccessEntry::map::const_iterator end = list.end();
|
||||
|
||||
if (cit == end)
|
||||
{
|
||||
@@ -794,9 +796,28 @@ void LLParcel::unpackAccessEntries(LLMessageSystem* msg,
|
||||
}
|
||||
|
||||
|
||||
void LLParcel::unpackExperienceEntries(LLMessageSystem* msg, U32 type)
|
||||
{
|
||||
LLUUID id;
|
||||
|
||||
S32 i;
|
||||
S32 count = msg->getNumberOfBlocksFast(_PREHASH_List);
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
msg->getUUIDFast(_PREHASH_List, _PREHASH_ID, id, i);
|
||||
|
||||
if (id.notNull())
|
||||
{
|
||||
mExperienceKeys[id] = type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LLParcel::expirePasses(S32 now)
|
||||
{
|
||||
access_map_iterator itor = mAccessList.begin();
|
||||
LLAccessEntry::map::iterator itor = mAccessList.begin();
|
||||
while (itor != mAccessList.end())
|
||||
{
|
||||
const LLAccessEntry& entry = (*itor).second;
|
||||
@@ -886,7 +907,7 @@ BOOL LLParcel::addToAccessList(const LLUUID& agent_id, S32 time)
|
||||
// Can't add owner to these lists
|
||||
return FALSE;
|
||||
}
|
||||
access_map_iterator itor = mAccessList.begin();
|
||||
LLAccessEntry::map::iterator itor = mAccessList.begin();
|
||||
while (itor != mAccessList.end())
|
||||
{
|
||||
const LLAccessEntry& entry = (*itor).second;
|
||||
@@ -931,7 +952,7 @@ BOOL LLParcel::addToBanList(const LLUUID& agent_id, S32 time)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
access_map_iterator itor = mBanList.begin();
|
||||
LLAccessEntry::map::iterator itor = mBanList.begin();
|
||||
while (itor != mBanList.end())
|
||||
{
|
||||
const LLAccessEntry& entry = (*itor).second;
|
||||
@@ -970,7 +991,7 @@ BOOL remove_from_access_array(std::map<LLUUID,LLAccessEntry>* list,
|
||||
const LLUUID& agent_id)
|
||||
{
|
||||
BOOL removed = FALSE;
|
||||
access_map_iterator itor = list->begin();
|
||||
LLAccessEntry::map::iterator itor = list->begin();
|
||||
while (itor != list->end())
|
||||
{
|
||||
const LLAccessEntry& entry = (*itor).second;
|
||||
@@ -1091,7 +1112,7 @@ void LLParcel::startSale(const LLUUID& buyer_id, BOOL is_buyer_group)
|
||||
mSaleTimerExpires.start();
|
||||
mSaleTimerExpires.setTimerExpirySec(U64Microseconds(DEFAULT_USEC_SALE_TIMEOUT));
|
||||
mStatus = OS_LEASE_PENDING;
|
||||
mClaimDate = time(NULL);
|
||||
mClaimDate = time(nullptr);
|
||||
setAuctionID(0);
|
||||
// clear the autoreturn whenever land changes hands
|
||||
setCleanOtherTime(0);
|
||||
@@ -1313,3 +1334,58 @@ LLParcel::ECategory category_ui_string_to_category(const std::string& s)
|
||||
// is a distinct option from "None" and "Other"
|
||||
return LLParcel::C_ANY;
|
||||
}
|
||||
|
||||
LLAccessEntry::map LLParcel::getExperienceKeysByType(U32 type) const
|
||||
{
|
||||
LLAccessEntry::map access;
|
||||
LLAccessEntry entry;
|
||||
xp_type_map_t::const_iterator it = mExperienceKeys.begin();
|
||||
for(/**/; it != mExperienceKeys.end(); ++it)
|
||||
{
|
||||
if(it->second == type)
|
||||
{
|
||||
entry.mID = it->first;
|
||||
access[entry.mID] = entry;
|
||||
}
|
||||
}
|
||||
return access;
|
||||
}
|
||||
|
||||
void LLParcel::clearExperienceKeysByType(U32 type)
|
||||
{
|
||||
xp_type_map_t::iterator it = mExperienceKeys.begin();
|
||||
while(it != mExperienceKeys.end())
|
||||
{
|
||||
if(it->second == type)
|
||||
{
|
||||
mExperienceKeys.erase(it++);
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLParcel::setExperienceKeyType(const LLUUID& experience_key, U32 type)
|
||||
{
|
||||
if (type == EXPERIENCE_KEY_TYPE_NONE)
|
||||
{
|
||||
mExperienceKeys.erase(experience_key);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (countExperienceKeyType(type) < PARCEL_MAX_EXPERIENCE_LIST)
|
||||
{
|
||||
mExperienceKeys[experience_key] = type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
U32 LLParcel::countExperienceKeyType(U32 type)
|
||||
{
|
||||
return std::count_if(
|
||||
boost::begin(mExperienceKeys | boost::adaptors::map_values),
|
||||
boost::end(mExperienceKeys | boost::adaptors::map_values),
|
||||
std::bind2nd(std::equal_to<U32>(), type));
|
||||
}
|
||||
|
||||
@@ -60,6 +60,9 @@ const S32 PARCEL_MAX_ACCESS_LIST = 300;
|
||||
//for access/ban lists.
|
||||
const F32 PARCEL_MAX_ENTRIES_PER_PACKET = 48.f;
|
||||
|
||||
// Maximum number of experiences
|
||||
const S32 PARCEL_MAX_EXPERIENCE_LIST = 24;
|
||||
|
||||
// Weekly charge for listing a parcel in the directory
|
||||
const S32 PARCEL_DIRECTORY_FEE = 30;
|
||||
|
||||
@@ -141,9 +144,11 @@ class LLSD;
|
||||
class LLAccessEntry
|
||||
{
|
||||
public:
|
||||
|
||||
typedef std::map<LLUUID,LLAccessEntry> map;
|
||||
|
||||
LLAccessEntry()
|
||||
: mID(),
|
||||
mTime(0),
|
||||
: mTime(0),
|
||||
mFlags(0)
|
||||
{}
|
||||
|
||||
@@ -152,8 +157,6 @@ public:
|
||||
U32 mFlags; // Not used - currently should always be zero
|
||||
};
|
||||
|
||||
typedef std::map<LLUUID,LLAccessEntry>::iterator access_map_iterator;
|
||||
typedef std::map<LLUUID,LLAccessEntry>::const_iterator access_map_const_iterator;
|
||||
|
||||
class LLParcel
|
||||
{
|
||||
@@ -331,6 +334,9 @@ public:
|
||||
void unpackAccessEntries(LLMessageSystem* msg,
|
||||
std::map<LLUUID,LLAccessEntry>* list);
|
||||
|
||||
void unpackExperienceEntries(LLMessageSystem* msg, U32 type);
|
||||
|
||||
|
||||
void setAABBMin(const LLVector3& min) { mAABBMin = min; }
|
||||
void setAABBMax(const LLVector3& max) { mAABBMax = max; }
|
||||
|
||||
@@ -707,6 +713,17 @@ public:
|
||||
std::map<LLUUID,LLAccessEntry> mTempBanList;
|
||||
std::map<LLUUID,LLAccessEntry> mTempAccessList;
|
||||
|
||||
typedef std::map<LLUUID, U32> xp_type_map_t;
|
||||
|
||||
void setExperienceKeyType(const LLUUID& experience_key, U32 type);
|
||||
U32 countExperienceKeyType(U32 type);
|
||||
U32 getExperienceKeyType(const LLUUID& experience_key)const;
|
||||
LLAccessEntry::map getExperienceKeysByType(U32 type)const;
|
||||
void clearExperienceKeysByType(U32 type);
|
||||
|
||||
private:
|
||||
xp_type_map_t mExperienceKeys;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,31 +1,25 @@
|
||||
/**
|
||||
* @file llparcelflags.h
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* 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.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* 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.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* 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$
|
||||
*/
|
||||
|
||||
@@ -97,8 +91,10 @@ const U32 PF_DEFAULT = PF_ALLOW_FLY
|
||||
| PF_USE_ESTATE_VOICE_CHAN;
|
||||
|
||||
// Access list flags
|
||||
const U32 AL_ACCESS = (1 << 0);
|
||||
const U32 AL_BAN = (1 << 1);
|
||||
const U32 AL_ACCESS = (1 << 0);
|
||||
const U32 AL_BAN = (1 << 1);
|
||||
const U32 AL_ALLOW_EXPERIENCE = (1 << 3);
|
||||
const U32 AL_BLOCK_EXPERIENCE = (1 << 4);
|
||||
//const U32 AL_RENTER = (1 << 2);
|
||||
|
||||
// Block access return values. BA_ALLOWED is the only success case
|
||||
|
||||
@@ -103,9 +103,9 @@ LLSD LLSettingsBase::combineSDMaps(const LLSD &settings, const LLSD &other) cons
|
||||
break;
|
||||
case LLSD::TypeArray:
|
||||
newSettings[key_name] = LLSD::emptyArray();
|
||||
for (LLSD::array_const_iterator ita = value.beginArray(); ita != value.endArray(); ++ita)
|
||||
for (auto const& entry : value.array())
|
||||
{
|
||||
newSettings[key_name].append(*ita);
|
||||
newSettings[key_name].append(entry);
|
||||
}
|
||||
break;
|
||||
//case LLSD::TypeInteger:
|
||||
@@ -137,9 +137,9 @@ LLSD LLSettingsBase::combineSDMaps(const LLSD &settings, const LLSD &other) cons
|
||||
break;
|
||||
case LLSD::TypeArray:
|
||||
newSettings[key_name] = LLSD::emptyArray();
|
||||
for (LLSD::array_const_iterator ita = value.beginArray(); ita != value.endArray(); ++ita)
|
||||
for (auto const& entry : value.array())
|
||||
{
|
||||
newSettings[key_name].append(*ita);
|
||||
newSettings[key_name].append(entry);
|
||||
}
|
||||
break;
|
||||
//case LLSD::TypeInteger:
|
||||
|
||||
@@ -240,16 +240,16 @@ bool LLSettingsDay::initialize(bool validate_frames)
|
||||
{
|
||||
mDayTracks[i].clear();
|
||||
LLSD curtrack = tracks[i];
|
||||
for (LLSD::array_const_iterator it = curtrack.beginArray(); it != curtrack.endArray(); ++it)
|
||||
for (const auto& entry : curtrack.array())
|
||||
{
|
||||
LLSettingsBase::TrackPosition keyframe = LLSettingsBase::TrackPosition((*it)[SETTING_KEYKFRAME].asReal());
|
||||
LLSettingsBase::TrackPosition keyframe = LLSettingsBase::TrackPosition(entry[SETTING_KEYKFRAME].asReal());
|
||||
keyframe = llclamp(keyframe, 0.0f, 1.0f);
|
||||
LLSettingsBase::ptr_t setting;
|
||||
|
||||
|
||||
if ((*it).has(SETTING_KEYNAME))
|
||||
if (entry.has(SETTING_KEYNAME))
|
||||
{
|
||||
std::string key_name = (*it)[SETTING_KEYNAME];
|
||||
std::string key_name = entry[SETTING_KEYNAME];
|
||||
if (i == TRACK_WATER)
|
||||
{
|
||||
setting = used[key_name];
|
||||
@@ -469,36 +469,36 @@ namespace
|
||||
|
||||
S32 framecount(0);
|
||||
|
||||
for (LLSD::array_iterator track = value.beginArray(); track != value.endArray(); ++track)
|
||||
for (auto& entry : value.array())
|
||||
{
|
||||
S32 index = 0;
|
||||
while (index < (*track).size())
|
||||
while (index < entry.size())
|
||||
{
|
||||
LLSD& elem = (*track)[index];
|
||||
LLSD& elem = entry[index];
|
||||
|
||||
++framecount;
|
||||
if (index >= LLSettingsDay::FRAME_MAX)
|
||||
{
|
||||
(*track).erase(index);
|
||||
entry.erase(index);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!elem.has(LLSettingsDay::SETTING_KEYKFRAME))
|
||||
{
|
||||
(*track).erase(index);
|
||||
entry.erase(index);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!elem[LLSettingsDay::SETTING_KEYKFRAME].isReal())
|
||||
{
|
||||
(*track).erase(index);
|
||||
entry.erase(index);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!elem.has(LLSettingsDay::SETTING_KEYNAME) &&
|
||||
!elem.has(LLSettingsDay::SETTING_KEYID))
|
||||
{
|
||||
(*track).erase(index);
|
||||
entry.erase(index);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -608,7 +608,7 @@ LLSettingsDay::validation_list_t LLSettingsDay::validationList()
|
||||
return validation;
|
||||
}
|
||||
|
||||
LLSettingsDay::CycleTrack_t& LLSettingsDay::getCycleTrack(S32 track)
|
||||
LLSettingsDay::CycleTrack_t& LLSettingsDay::getCycleTrack(size_t track)
|
||||
{
|
||||
static CycleTrack_t emptyTrack;
|
||||
if (mDayTracks.size() <= track)
|
||||
@@ -617,7 +617,7 @@ LLSettingsDay::CycleTrack_t& LLSettingsDay::getCycleTrack(S32 track)
|
||||
return mDayTracks[track];
|
||||
}
|
||||
|
||||
const LLSettingsDay::CycleTrack_t& LLSettingsDay::getCycleTrackConst(S32 track) const
|
||||
const LLSettingsDay::CycleTrack_t& LLSettingsDay::getCycleTrackConst(size_t track) const
|
||||
{
|
||||
static CycleTrack_t emptyTrack;
|
||||
if (mDayTracks.size() <= track)
|
||||
|
||||
@@ -118,8 +118,8 @@ public:
|
||||
virtual LLSettingsWaterPtr_t buildWater(LLSD) const = 0;
|
||||
|
||||
void setInitialized(bool value = true) { mInitialized = value; }
|
||||
CycleTrack_t & getCycleTrack(S32 track);
|
||||
const CycleTrack_t & getCycleTrackConst(S32 track) const;
|
||||
CycleTrack_t & getCycleTrack(size_t track);
|
||||
const CycleTrack_t & getCycleTrackConst(size_t track) const;
|
||||
bool clearCycleTrack(S32 track);
|
||||
bool replaceCycleTrack(S32 track, const CycleTrack_t &source);
|
||||
bool isTrackEmpty(S32 track) const;
|
||||
|
||||
@@ -126,9 +126,12 @@ public:
|
||||
// Returns true if this rotation is orthonormal with det ~= 1
|
||||
inline bool isOkRotation() const;
|
||||
} LL_ALIGN_POSTFIX(16);
|
||||
|
||||
#if !defined(LL_DEBUG)
|
||||
static_assert(std::is_trivial<LLMatrix3a>::value, "LLMatrix3a must be a trivial type");
|
||||
static_assert(std::is_standard_layout<LLMatrix3a>::value, "LLMatrix3a must be a standard layout type");
|
||||
|
||||
static_assert(std::is_trivial<LLRotation>::value, "LLRotation must be a trivial type");
|
||||
static_assert(std::is_standard_layout<LLRotation>::value, "LLRotation must be a standard layout type");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -718,6 +718,8 @@ inline std::ostream& operator<<(std::ostream& s, const LLMatrix4a& m)
|
||||
|
||||
void matMulBoundBox(const LLMatrix4a &a, const LLVector4a *in_extents, LLVector4a *out_extents);
|
||||
|
||||
#if !defined(LL_DEBUG)
|
||||
static_assert(std::is_trivial<LLMatrix4a>::value, "LLMatrix4a must be a trivial type");
|
||||
static_assert(std::is_standard_layout<LLMatrix4a>::value, "LLMatrix4a must be a standard layout type");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#endif
|
||||
|
||||
extern U32 gOctreeMaxCapacity;
|
||||
extern float gOctreeMinSize;
|
||||
extern U32 gOctreeReserveCapacity;
|
||||
#if LL_DEBUG
|
||||
#define LL_OCTREE_PARANOIA_CHECK 0
|
||||
@@ -404,7 +405,7 @@ public:
|
||||
F32 size = mSize[0];
|
||||
F32 p_size = size * 2.f;
|
||||
|
||||
return (radius <= 0.001f && size <= 0.001f) ||
|
||||
return (radius <= gOctreeMinSize && size <= gOctreeMinSize) ||
|
||||
(radius <= p_size && radius > size);
|
||||
}
|
||||
|
||||
@@ -425,7 +426,7 @@ public:
|
||||
}
|
||||
|
||||
void accept(oct_traveler* visitor) { visitor->visit(this); }
|
||||
virtual bool isLeaf() const { return mChildCount == 0; }
|
||||
bool isLeaf() const { return mChildCount == 0; }
|
||||
|
||||
U32 getElementCount() const { return mData.size(); }
|
||||
bool isEmpty() const { return mData.size() == 0; }
|
||||
@@ -498,7 +499,7 @@ public:
|
||||
return node;
|
||||
}
|
||||
|
||||
virtual bool insert(T* data)
|
||||
bool insert(T* data) override
|
||||
{
|
||||
OctreeGuard::checkGuarded(this);
|
||||
if (data == NULL || data->getBinIndex() != -1)
|
||||
@@ -511,7 +512,7 @@ public:
|
||||
//is it here?
|
||||
if (isInside(data->getPositionGroup()))
|
||||
{
|
||||
if (((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius())) ||
|
||||
if ((((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius())) ||
|
||||
(data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= gOctreeMaxCapacity)))
|
||||
{ //it belongs here
|
||||
/*mElementCount++;
|
||||
@@ -537,7 +538,7 @@ public:
|
||||
OctreeStats::getInstance()->realloc(old_cap,mData.capacity());
|
||||
#endif
|
||||
|
||||
BaseType::insert(data);
|
||||
LLOctreeNode<T>::notifyAddition(data);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
@@ -566,8 +567,9 @@ public:
|
||||
LLVector4a val;
|
||||
val.setSub(center, getCenter());
|
||||
val.setAbs(val);
|
||||
|
||||
S32 lt = val.lessThan(LLVector4a::getEpsilon()).getGatheredBits() & 0x7;
|
||||
LLVector4a min_diff(gOctreeMinSize);
|
||||
|
||||
S32 lt = val.lessThan(min_diff).getGatheredBits() & 0x7;
|
||||
|
||||
if( lt == 0x7 )
|
||||
{
|
||||
@@ -593,7 +595,7 @@ public:
|
||||
OctreeStats::getInstance()->realloc(old_cap,mData.capacity());
|
||||
#endif
|
||||
|
||||
BaseType::insert(data);
|
||||
LLOctreeNode<T>::notifyAddition(data);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -616,6 +618,7 @@ public:
|
||||
}
|
||||
#endif
|
||||
|
||||
llassert(size[0] >= gOctreeMinSize*0.5f);
|
||||
//make the new kid
|
||||
child = new LLOctreeNode<T>(center, size, this);
|
||||
addChild(child);
|
||||
@@ -623,10 +626,7 @@ public:
|
||||
child->insert(data);
|
||||
}
|
||||
}
|
||||
// Singu note: now that we allow wider range in octree, discard them here
|
||||
// if they fall out of range
|
||||
#if 0
|
||||
else
|
||||
else if (parent)
|
||||
{
|
||||
//it's not in here, give it to the root
|
||||
OCT_ERRS << "Octree insertion failed, starting over from root!" << LL_ENDL;
|
||||
@@ -639,12 +639,15 @@ public:
|
||||
parent = node->getOctParent();
|
||||
}
|
||||
|
||||
if(node != this)
|
||||
{
|
||||
node->insert(data);
|
||||
}
|
||||
node->insert(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
// It's not in here, and we are root.
|
||||
// LLOctreeRoot::insert() should have expanded
|
||||
// root by now, something is wrong
|
||||
OCT_ERRS << "Octree insertion failed! Root expansion failed." << LL_ENDL;
|
||||
}
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -708,7 +711,7 @@ public:
|
||||
checkAlive();
|
||||
}
|
||||
|
||||
bool remove(T* data)
|
||||
bool remove(T* data) final override
|
||||
{
|
||||
OctreeGuard::checkGuarded(this);
|
||||
S32 i = data->getBinIndex();
|
||||
@@ -849,10 +852,9 @@ public:
|
||||
|
||||
if (!silent)
|
||||
{
|
||||
for (U32 i = 0; i < this->getListenerCount(); i++)
|
||||
for (auto& entry : this->mListeners)
|
||||
{
|
||||
oct_listener* listener = getOctListener(i);
|
||||
listener->handleChildAddition(this, child);
|
||||
((oct_listener*)entry.get())->handleChildAddition(this, child);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -861,16 +863,17 @@ public:
|
||||
{
|
||||
OctreeGuard::checkGuarded(this);
|
||||
|
||||
for (U32 i = 0; i < this->getListenerCount(); i++)
|
||||
oct_node* child = getChild(index);
|
||||
|
||||
for (auto& entry : this->mListeners)
|
||||
{
|
||||
oct_listener* listener = getOctListener(i);
|
||||
listener->handleChildRemoval(this, getChild(index));
|
||||
((oct_listener*)entry.get())->handleChildRemoval(this, child);
|
||||
}
|
||||
|
||||
if (destroy)
|
||||
{
|
||||
mChild[index]->destroy();
|
||||
delete mChild[index];
|
||||
child->destroy();
|
||||
delete child;
|
||||
}
|
||||
|
||||
--mChildCount;
|
||||
@@ -1012,7 +1015,7 @@ public:
|
||||
}
|
||||
|
||||
// LLOctreeRoot::insert
|
||||
bool insert(T* data)
|
||||
bool insert(T* data) final override
|
||||
{
|
||||
if (data == NULL)
|
||||
{
|
||||
@@ -1050,10 +1053,15 @@ public:
|
||||
{
|
||||
LLOctreeNode<T>::insert(data);
|
||||
}
|
||||
else
|
||||
else if (node->isInside(data->getPositionGroup()))
|
||||
{
|
||||
node->insert(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
// calling node->insert(data) will return us to root
|
||||
OCT_ERRS << "Failed to insert data at child node" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else if (this->getChildCount() == 0)
|
||||
{
|
||||
@@ -1088,6 +1096,8 @@ public:
|
||||
this->setSize(size2);
|
||||
this->updateMinMax();
|
||||
|
||||
llassert(size[0] >= gOctreeMinSize);
|
||||
|
||||
//copy our children to a new branch
|
||||
LLOctreeNode<T>* newnode = new LLOctreeNode<T>(center, size, this);
|
||||
|
||||
|
||||
@@ -104,7 +104,8 @@ private:
|
||||
LL_ALIGN_16(LLVector4a mV);
|
||||
} LL_ALIGN_POSTFIX(16);
|
||||
|
||||
#if !defined(LL_DEBUG)
|
||||
static_assert(std::is_trivial<LLPlane>::value, "LLPlane must be a trivial type");
|
||||
static_assert(std::is_standard_layout<LLPlane>::value, "LLPlane must be a standard layout type");
|
||||
|
||||
#endif
|
||||
#endif // LL_LLPLANE_H
|
||||
|
||||
@@ -105,7 +105,9 @@ protected:
|
||||
|
||||
} LL_ALIGN_POSTFIX(16);
|
||||
|
||||
#if !defined(LL_DEBUG)
|
||||
static_assert(std::is_trivial<LLQuaternion2>::value, "LLQuaternion2 must be a trivial type");
|
||||
static_assert(std::is_standard_layout<LLQuaternion2>::value, "LLQuaternion2 must be a standard layout type");
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -44,7 +44,6 @@ public:
|
||||
virtual void handleInsertion(const LLTreeNode<T>* node, T* data) = 0;
|
||||
virtual void handleRemoval(const LLTreeNode<T>* node, T* data) = 0;
|
||||
virtual void handleDestruction(const LLTreeNode<T>* node) = 0;
|
||||
virtual void handleStateChange(const LLTreeNode<T>* node) = 0;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
@@ -53,11 +52,15 @@ class LLTreeNode
|
||||
public:
|
||||
virtual ~LLTreeNode();
|
||||
|
||||
virtual bool insert(T* data);
|
||||
virtual bool remove(T* data);
|
||||
virtual void notifyRemoval(T* data);
|
||||
virtual U32 getListenerCount() { return mListeners.size(); }
|
||||
virtual LLTreeListener<T>* getListener(U32 index) const
|
||||
virtual bool insert(T* data) = 0;
|
||||
virtual bool remove(T* data) = 0;
|
||||
bool notifyAddition(T* data);
|
||||
void notifyRemoval(T* data);
|
||||
U32 getListenerCount() const
|
||||
{
|
||||
return mListeners.size();
|
||||
}
|
||||
LLTreeListener<T>* getListener(U32 index) const
|
||||
{
|
||||
if(index < mListeners.size())
|
||||
{
|
||||
@@ -65,7 +68,10 @@ public:
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
virtual void addListener(LLTreeListener<T>* listener) { mListeners.push_back(listener); }
|
||||
void addListener(LLTreeListener<T>* listener)
|
||||
{
|
||||
mListeners.push_back(listener);
|
||||
}
|
||||
|
||||
protected:
|
||||
void destroyListeners()
|
||||
@@ -97,7 +103,7 @@ LLTreeNode<T>::~LLTreeNode()
|
||||
};
|
||||
|
||||
template <class T>
|
||||
bool LLTreeNode<T>::insert(T* data)
|
||||
bool LLTreeNode<T>::notifyAddition(T* data)
|
||||
{
|
||||
for (U32 i = 0; i < mListeners.size(); i++)
|
||||
{
|
||||
@@ -106,12 +112,6 @@ bool LLTreeNode<T>::insert(T* data)
|
||||
return true;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
bool LLTreeNode<T>::remove(T* data)
|
||||
{
|
||||
return true;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
void LLTreeNode<T>::notifyRemoval(T* data)
|
||||
{
|
||||
|
||||
@@ -350,6 +350,8 @@ inline std::ostream& operator<<(std::ostream& s, const LLVector4a& v)
|
||||
return s;
|
||||
}
|
||||
|
||||
#if !defined(LL_DEBUG)
|
||||
static_assert(std::is_trivial<LLVector4a>::value, "LLVector4a must be a be a trivial type");
|
||||
static_assert(std::is_standard_layout<LLVector4a>::value, "LLVector4a must be a standard layout type");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -6331,7 +6331,9 @@ void LLVolumeFace::allocateIndices(S32 num_indices, bool copy)
|
||||
S32 new_size = ((num_indices * sizeof(U16)) + 0xF) & ~0xF;
|
||||
if (copy && num_indices && mIndices && mNumIndices)
|
||||
{
|
||||
#if !LL_USE_TCMALLOC
|
||||
S32 old_size = ((mNumIndices * sizeof(U16)) + 0xF) & ~0xF;
|
||||
#endif
|
||||
|
||||
mIndices = (U16*)ll_aligned_realloc_16(mIndices, new_size, old_size);
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ class LLVolumeParams;
|
||||
class LLProfile;
|
||||
class LLPath;
|
||||
|
||||
template <class T> class LLOctreeNode;
|
||||
template <class T> class LLOctreeRoot;
|
||||
|
||||
class LLVolumeFace;
|
||||
class LLVolume;
|
||||
@@ -964,7 +964,7 @@ public:
|
||||
// vertices per joint.
|
||||
LLJointRiggingInfoTab mJointRiggingInfoTab;
|
||||
|
||||
LLOctreeNode<LLVolumeTriangle>* mOctree;
|
||||
LLOctreeRoot<LLVolumeTriangle>* mOctree;
|
||||
|
||||
//whether or not face has been cache optimized
|
||||
BOOL mOptimized;
|
||||
|
||||
@@ -112,14 +112,13 @@ public:
|
||||
}
|
||||
|
||||
//LISTENER FUNCTIONS
|
||||
virtual void handleChildAddition(const LLOctreeNode<LLVolumeTriangle>* parent,
|
||||
LLOctreeNode<LLVolumeTriangle>* child);
|
||||
virtual void handleStateChange(const LLTreeNode<LLVolumeTriangle>* node) { }
|
||||
virtual void handleChildRemoval(const LLOctreeNode<LLVolumeTriangle>* parent,
|
||||
const LLOctreeNode<LLVolumeTriangle>* child) { }
|
||||
virtual void handleInsertion(const LLTreeNode<LLVolumeTriangle>* node, LLVolumeTriangle* tri) { }
|
||||
virtual void handleRemoval(const LLTreeNode<LLVolumeTriangle>* node, LLVolumeTriangle* tri) { }
|
||||
virtual void handleDestruction(const LLTreeNode<LLVolumeTriangle>* node) { }
|
||||
void handleChildAddition(const LLOctreeNode<LLVolumeTriangle>* parent,
|
||||
LLOctreeNode<LLVolumeTriangle>* child) final override;
|
||||
void handleChildRemoval(const LLOctreeNode<LLVolumeTriangle>* parent,
|
||||
const LLOctreeNode<LLVolumeTriangle>* child) final override { }
|
||||
void handleInsertion(const LLTreeNode<LLVolumeTriangle>* node, LLVolumeTriangle* tri) final override { }
|
||||
void handleRemoval(const LLTreeNode<LLVolumeTriangle>* node, LLVolumeTriangle* tri) final override { }
|
||||
void handleDestruction(const LLTreeNode<LLVolumeTriangle>* node) final override { }
|
||||
|
||||
|
||||
public:
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user