Compare commits
830 Commits
2.0.3-http
...
2.2.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d46717cfc | ||
|
|
3088371631 | ||
|
|
880a8da68a | ||
|
|
e2c6f50108 | ||
|
|
51ed7a59da | ||
|
|
94ea91ec63 | ||
|
|
76ac8dda54 | ||
|
|
a895729b9e | ||
|
|
aba2acb062 | ||
|
|
a1aad5d165 | ||
|
|
0fe06b3fbb | ||
|
|
86cd2c09a4 | ||
|
|
f1d99dd0ed | ||
|
|
c731f8e5c0 | ||
|
|
24f560aaa2 | ||
|
|
905e104ba2 | ||
|
|
d21ae0f94a | ||
|
|
95b0ad15ef | ||
|
|
19eb6a8a60 | ||
|
|
85f652290b | ||
|
|
feb6baad05 | ||
|
|
37aa4f0257 | ||
|
|
d3208bddb0 | ||
|
|
eb977b8021 | ||
|
|
b30eb59791 | ||
|
|
72a6c34450 | ||
|
|
ec8c99c3b2 | ||
|
|
6d433fecef | ||
|
|
bae9dbc407 | ||
|
|
1cbbcc0d87 | ||
|
|
c0182df05e | ||
|
|
7d6baf53fa | ||
|
|
c6f83b9ca6 | ||
|
|
3bc8a79b9b | ||
|
|
84508e91da | ||
|
|
38cbb42b58 | ||
|
|
2e81751131 | ||
|
|
157f1134bf | ||
|
|
4277364e91 | ||
|
|
4e903e4c50 | ||
|
|
5098866413 | ||
|
|
91d746c5c0 | ||
|
|
e53754d202 | ||
|
|
eb21eeb214 | ||
|
|
2bce9c8add | ||
|
|
c8f5824554 | ||
|
|
7d3c18e1fb | ||
|
|
dce691157e | ||
|
|
611a74d74d | ||
|
|
de5f8082de | ||
|
|
59786d7bd7 | ||
|
|
cb0b948603 | ||
|
|
2e4f1a21b4 | ||
|
|
649a14db84 | ||
|
|
9ebe0b61eb | ||
|
|
4b6dbcaec4 | ||
|
|
8e7fa3d3d6 | ||
|
|
df3051038e | ||
|
|
daef0a358c | ||
|
|
422bc4da30 | ||
|
|
faf36190bd | ||
|
|
d59ca0a9cc | ||
|
|
ea1554915b | ||
|
|
6f9224784e | ||
|
|
34886dc7e0 | ||
|
|
f71d0c0da8 | ||
|
|
c0f668c4bb | ||
|
|
cdad46377b | ||
|
|
8ed8e57012 | ||
|
|
691e60d72b | ||
|
|
a888de19cd | ||
|
|
9ceadac299 | ||
|
|
bb50db40d2 | ||
|
|
35c6df2535 | ||
|
|
98c812a297 | ||
|
|
32100be47a | ||
|
|
4fed655621 | ||
|
|
8a0085f0f8 | ||
|
|
fab9f2a9fb | ||
|
|
e4ae2f9176 | ||
|
|
5e891c2caa | ||
|
|
2d127b8942 | ||
|
|
7ab6af00bc | ||
|
|
e53ac65518 | ||
|
|
1158294323 | ||
|
|
4ecd9e7e23 | ||
|
|
8a7de4408d | ||
|
|
a766052243 | ||
|
|
31ec840a8d | ||
|
|
e555937214 | ||
|
|
3799833cfa | ||
|
|
231f90a8e5 | ||
|
|
45c2a98b5b | ||
|
|
6b9137ac6c | ||
|
|
35e86efbce | ||
|
|
549eaefdb8 | ||
|
|
b553af8fd0 | ||
|
|
caa49a8ef3 | ||
|
|
9a6a787191 | ||
|
|
836c996544 | ||
|
|
b8028ff318 | ||
|
|
9a7e6850d6 | ||
|
|
fdbed324f7 | ||
|
|
95baf25648 | ||
|
|
48ea024d7e | ||
|
|
6dfeea1980 | ||
|
|
9d6cf95cf0 | ||
|
|
97c8603478 | ||
|
|
7654983d3d | ||
|
|
3c2b4b1560 | ||
|
|
cb63df2bac | ||
|
|
400073c7cc | ||
|
|
7438d6db18 | ||
|
|
719323e9c3 | ||
|
|
a3020b6787 | ||
|
|
702a68307a | ||
|
|
344235b1e1 | ||
|
|
8d70167acf | ||
|
|
b75b9fb7d6 | ||
|
|
f817eaa5c8 | ||
|
|
574c5cf1b2 | ||
|
|
e0e8521eb9 | ||
|
|
46f7d97176 | ||
|
|
f3f6f6a493 | ||
|
|
139658b5c3 | ||
|
|
11607b108c | ||
|
|
62748f6d4c | ||
|
|
a53b111182 | ||
|
|
6ffca842e6 | ||
|
|
107684e393 | ||
|
|
08930ddffb | ||
|
|
458c76d3b7 | ||
|
|
1847312c7a | ||
|
|
3015baf6e6 | ||
|
|
3c51455fa3 | ||
|
|
1028172dfc | ||
|
|
2b6059dee3 | ||
|
|
79ba3a28e6 | ||
|
|
398201f592 | ||
|
|
6f4b5fc71a | ||
|
|
9fc83c7cd5 | ||
|
|
e6cddf797a | ||
|
|
8a1b83048f | ||
|
|
ac5c0c5efa | ||
|
|
bfee734669 | ||
|
|
22d533c451 | ||
|
|
adf61d9878 | ||
|
|
dcc8094ce4 | ||
|
|
c3bd5d21aa | ||
|
|
a75746c7c1 | ||
|
|
eeafe77614 | ||
|
|
54ad927044 | ||
|
|
a2e82dc883 | ||
|
|
6c050c55d9 | ||
|
|
379e17c3bc | ||
|
|
c0640e49ee | ||
|
|
07d4668670 | ||
|
|
1c54d24962 | ||
|
|
aa64b2ee69 | ||
|
|
00dc4b9ace | ||
|
|
c69a978589 | ||
|
|
b69b50c6c6 | ||
|
|
970525cfd4 | ||
|
|
533136fb0e | ||
|
|
3218cb9ace | ||
|
|
147c000ef1 | ||
|
|
8ddd0b2f6f | ||
|
|
1b7b2ff456 | ||
|
|
289e98ed5b | ||
|
|
d1acd75068 | ||
|
|
44085df592 | ||
|
|
a3af8fc0ea | ||
|
|
c6ecf48ccd | ||
|
|
2de5a9d281 | ||
|
|
a6bc3e9790 | ||
|
|
c53f5baceb | ||
|
|
3822625e77 | ||
|
|
00ae123736 | ||
|
|
c167693ae4 | ||
|
|
9a59a124aa | ||
|
|
03f00c5526 | ||
|
|
bdb6153b3e | ||
|
|
70357be029 | ||
|
|
8d6db27b34 | ||
|
|
c06e55df81 | ||
|
|
58463bc3dc | ||
|
|
d1310b3337 | ||
|
|
b3160a17ea | ||
|
|
9f819061cd | ||
|
|
e4e2e886e8 | ||
|
|
278baaac80 | ||
|
|
5c8809e55d | ||
|
|
af4f56abfd | ||
|
|
1870b957f5 | ||
|
|
3640053415 | ||
|
|
d3ed14ebb7 | ||
|
|
4c9b8c7794 | ||
|
|
bf57a28654 | ||
|
|
7040bef27e | ||
|
|
40b4dc3b61 | ||
|
|
b474d34cf0 | ||
|
|
fa7c945363 | ||
|
|
c40a7a5265 | ||
|
|
a94efddfe6 | ||
|
|
99d97acb1d | ||
|
|
eb7f4d2eaa | ||
|
|
2e2e37098f | ||
|
|
ad79162061 | ||
|
|
c613f44991 | ||
|
|
583f60a3f3 | ||
|
|
5792bf1a85 | ||
|
|
75c16d1cbb | ||
|
|
dea65b637c | ||
|
|
b01953a5a3 | ||
|
|
47aec87a56 | ||
|
|
b706e8f1fd | ||
|
|
1f469a7acc | ||
|
|
07050f6e9c | ||
|
|
ab3e009d76 | ||
|
|
5fbf4af596 | ||
|
|
943c3155af | ||
|
|
9477437256 | ||
|
|
c7b4b8d3c3 | ||
|
|
52a264cc2b | ||
|
|
dc3e223875 | ||
|
|
70bd598ead | ||
|
|
f03aec1709 | ||
|
|
3c85d29ece | ||
|
|
2099f977fb | ||
|
|
6f25c4750d | ||
|
|
4e40b6cf3e | ||
|
|
7620baee80 | ||
|
|
4c491d850d | ||
|
|
e2c088a5c9 | ||
|
|
82b3013b0f | ||
|
|
73b0188126 | ||
|
|
82abdeb15f | ||
|
|
4cd461f57a | ||
|
|
5696178de4 | ||
|
|
5f5f7ec3dd | ||
|
|
c9498868e9 | ||
|
|
f95e33cf7b | ||
|
|
c0f62e5633 | ||
|
|
3de4395d5e | ||
|
|
cb283bb95a | ||
|
|
b81d8bf97a | ||
|
|
918db68c52 | ||
|
|
047fe9a422 | ||
|
|
8a78616351 | ||
|
|
89382f6306 | ||
|
|
beba23ea2e | ||
|
|
aba0633a78 | ||
|
|
0aa20f931d | ||
|
|
eefea5444e | ||
|
|
a6e142dd02 | ||
|
|
6c1f023768 | ||
|
|
ea1ffe7fb5 | ||
|
|
36250f5180 | ||
|
|
268f09160d | ||
|
|
7620395f92 | ||
|
|
28678f4e06 | ||
|
|
720ae949aa | ||
|
|
32fe0493c4 | ||
|
|
86e88c18b0 | ||
|
|
e684e230a6 | ||
|
|
a8b647e886 | ||
|
|
bce747e7f9 | ||
|
|
b7546b45b3 | ||
|
|
f183260ad6 | ||
|
|
0f057a8351 | ||
|
|
7ca13b3d51 | ||
|
|
1418712b4c | ||
|
|
e5021ffa01 | ||
|
|
572212c374 | ||
|
|
e0c6981b40 | ||
|
|
0d60cadffc | ||
|
|
26bc2a8c3e | ||
|
|
07dafd697e | ||
|
|
e48f86b289 | ||
|
|
e5c2b44572 | ||
|
|
9307834ef0 | ||
|
|
99036ec151 | ||
|
|
5776f43b98 | ||
|
|
0c755846fe | ||
|
|
19d1fa8e7d | ||
|
|
8937647d5f | ||
|
|
7541f57aeb | ||
|
|
b6a7771a23 | ||
|
|
1d32695f10 | ||
|
|
044feea23a | ||
|
|
0ba19cce4d | ||
|
|
67c6e10f5f | ||
|
|
98e2c311c3 | ||
|
|
be9bd16b4c | ||
|
|
d9ccde94c9 | ||
|
|
93dcf8231f | ||
|
|
b6cfc82b4e | ||
|
|
d50fe46f0e | ||
|
|
18b5b76a80 | ||
|
|
a87fab8d18 | ||
|
|
7608405a1f | ||
|
|
d8ad360b38 | ||
|
|
a3840963e1 | ||
|
|
e6b4528028 | ||
|
|
55a32c58a9 | ||
|
|
da85252347 | ||
|
|
15a288aa5b | ||
|
|
c4d6fa855c | ||
|
|
80fc1e5309 | ||
|
|
506a2b99c5 | ||
|
|
06bbd6e066 | ||
|
|
3fcf342fbc | ||
|
|
7e515d9d5b | ||
|
|
a045594b57 | ||
|
|
0e5a1cc8e4 | ||
|
|
e3602e3c75 | ||
|
|
4cccf28b4d | ||
|
|
558c75a452 | ||
|
|
a661c17eca | ||
|
|
fd9d372e6a | ||
|
|
cf23343911 | ||
|
|
780e23301b | ||
|
|
993f90cb2c | ||
|
|
db1bf88934 | ||
|
|
15c2727a1d | ||
|
|
e01e9715b9 | ||
|
|
98911af396 | ||
|
|
f579345059 | ||
|
|
64dfada038 | ||
|
|
7ca475f968 | ||
|
|
7636a559f9 | ||
|
|
b85941531d | ||
|
|
782d1f17d1 | ||
|
|
e1e8f33f67 | ||
|
|
805600ad44 | ||
|
|
342d49d050 | ||
|
|
992d8a90c7 | ||
|
|
9b92e7f8e8 | ||
|
|
bf9b23539e | ||
|
|
9cfc862b07 | ||
|
|
52991f3d66 | ||
|
|
37441e3fac | ||
|
|
8b04040d7e | ||
|
|
9608464ed1 | ||
|
|
2587bac300 | ||
|
|
504bd40263 | ||
|
|
28ec015ef4 | ||
|
|
65d4a0a8cd | ||
|
|
30847570bc | ||
|
|
51b7ec2b26 | ||
|
|
f12c6bf748 | ||
|
|
1b10aae74c | ||
|
|
3e84c0a91a | ||
|
|
2ff57c2eb7 | ||
|
|
bb04144fe8 | ||
|
|
2f2f3e26c3 | ||
|
|
34f037be92 | ||
|
|
429bef6830 | ||
|
|
15dd783d2c | ||
|
|
7851d3d987 | ||
|
|
8a942422da | ||
|
|
914b848e58 | ||
|
|
1984595d0d | ||
|
|
a58f84a1ff | ||
|
|
8d487d31a4 | ||
|
|
4c0e2af6e3 | ||
|
|
cb51ec61f7 | ||
|
|
2872f1706c | ||
|
|
da0afd3939 | ||
|
|
984602b7a0 | ||
|
|
705b74b3ba | ||
|
|
31494ec327 | ||
|
|
a1e1a33308 | ||
|
|
78acdf9095 | ||
|
|
40851409fb | ||
|
|
a03e354504 | ||
|
|
e91a41401c | ||
|
|
f4791c19e1 | ||
|
|
2ec500f926 | ||
|
|
3c1271b1c4 | ||
|
|
39057a6aa0 | ||
|
|
41f9c3d2a1 | ||
|
|
a7e358c27d | ||
|
|
afdf02b4be | ||
|
|
1e1428c73d | ||
|
|
4b8a2450bd | ||
|
|
b6b2e812c1 | ||
|
|
97150034bc | ||
|
|
1fe75f9420 | ||
|
|
6bd342f63a | ||
|
|
b2fa6fca82 | ||
|
|
5df7b9aa85 | ||
|
|
37c9ad8e8d | ||
|
|
7ec8d4c3f6 | ||
|
|
e81564387c | ||
|
|
3139ae1528 | ||
|
|
cdce9e27fb | ||
|
|
9049d01a5e | ||
|
|
76dcfb5ed0 | ||
|
|
8a69421dc9 | ||
|
|
e2d098dd9b | ||
|
|
cdf54b07c5 | ||
|
|
4e9bf53035 | ||
|
|
d45c2cf0f2 | ||
|
|
3e76f7af0f | ||
|
|
ac0178d2c7 | ||
|
|
7eb7dbe0be | ||
|
|
93c212f28d | ||
|
|
52ab7b8865 | ||
|
|
4061fc7cf8 | ||
|
|
8f15ad06f3 | ||
|
|
5654dc9907 | ||
|
|
a31c423d9e | ||
|
|
6d69f0b547 | ||
|
|
04b3b3dbc5 | ||
|
|
6125988f35 | ||
|
|
0a85279bcb | ||
|
|
3715286eba | ||
|
|
3230206b69 | ||
|
|
0f1c518592 | ||
|
|
9ba88838ba | ||
|
|
48366d245c | ||
|
|
44206cf088 | ||
|
|
84f2520924 | ||
|
|
6e2254c13d | ||
|
|
1f6f7b614c | ||
|
|
4ec2fe556a | ||
|
|
311e7802e5 | ||
|
|
153dc620c8 | ||
|
|
d0ebaff7b4 | ||
|
|
e25e7ff4a2 | ||
|
|
0b48e68a3c | ||
|
|
c248944dc1 | ||
|
|
204bf81dd1 | ||
|
|
f25ad83a02 | ||
|
|
a001553c5e | ||
|
|
9a94c6d85e | ||
|
|
46942413db | ||
|
|
434d0fb1c0 | ||
|
|
2721317fc3 | ||
|
|
18844d096a | ||
|
|
b10cb1c83c | ||
|
|
ed085776c7 | ||
|
|
492e320628 | ||
|
|
d6c48a5cf1 | ||
|
|
44ac7d152b | ||
|
|
70816f90b2 | ||
|
|
093fe5c7ef | ||
|
|
5e664e3a06 | ||
|
|
0f8c12aaf4 | ||
|
|
8a75acb985 | ||
|
|
1cef08e92b | ||
|
|
1d79d342c0 | ||
|
|
a58700c78f | ||
|
|
79ab7a1062 | ||
|
|
fcadee550e | ||
|
|
852d194b39 | ||
|
|
08e50ac72b | ||
|
|
d98249814d | ||
|
|
9715ba0c8a | ||
|
|
7abebabf4f | ||
|
|
0892d1c744 | ||
|
|
a938b7aadb | ||
|
|
d24c9322cc | ||
|
|
ad2ccae5db | ||
|
|
74afd8e819 | ||
|
|
cee297b218 | ||
|
|
873871a42c | ||
|
|
851c7b891e | ||
|
|
0064f5dcfd | ||
|
|
e93e4a9931 | ||
|
|
91761a2bea | ||
|
|
8e91a89a37 | ||
|
|
b2650c5a96 | ||
|
|
8d3e0687a0 | ||
|
|
2d4e08e060 | ||
|
|
5d068dfb23 | ||
|
|
c49aa6beef | ||
|
|
c7defdc06f | ||
|
|
eb23dda99b | ||
|
|
7174549441 | ||
|
|
a27147a75e | ||
|
|
070ad695ec | ||
|
|
a37a90c8c7 | ||
|
|
22f161d178 | ||
|
|
a56bcc8903 | ||
|
|
7613f1b726 | ||
|
|
cc44a833d5 | ||
|
|
f5e75b5933 | ||
|
|
0c47c2016d | ||
|
|
5adc1a12dd | ||
|
|
2ad5e6f06a | ||
|
|
03ab20a4b8 | ||
|
|
b9279f73fa | ||
|
|
d8923123fa | ||
|
|
9d55369c57 | ||
|
|
217e95e425 | ||
|
|
d44b811b0d | ||
|
|
b61ecabed3 | ||
|
|
e0e6f2b8e9 | ||
|
|
ebdb10e7f9 | ||
|
|
c2f3396753 | ||
|
|
1b8366f040 | ||
|
|
7df6d27900 | ||
|
|
e9e92d0892 | ||
|
|
86f2c9d350 | ||
|
|
a0ebbf997d | ||
|
|
9d5d3081dc | ||
|
|
5274826e5c | ||
|
|
79bd1f8121 | ||
|
|
b10b713e48 | ||
|
|
6dcb83f913 | ||
|
|
daf0b72eed | ||
|
|
ac52f73af2 | ||
|
|
832465a2a3 | ||
|
|
3768145c9b | ||
|
|
337161be02 | ||
|
|
510904ebea | ||
|
|
a37b98d95d | ||
|
|
35788f8654 | ||
|
|
ec17199feb | ||
|
|
fa63b3ee01 | ||
|
|
68f033fbbe | ||
|
|
37c7318097 | ||
|
|
012d0ee885 | ||
|
|
9b211928a9 | ||
|
|
fed210dc38 | ||
|
|
b73549fd35 | ||
|
|
5bb6c4d9e4 | ||
|
|
7a344930ec | ||
|
|
b2702efc93 | ||
|
|
d530c21cd7 | ||
|
|
7f51160879 | ||
|
|
5c80c31a70 | ||
|
|
ef53600d74 | ||
|
|
81cdcb4b62 | ||
|
|
ee981c4c19 | ||
|
|
589f76afca | ||
|
|
c33ce8e0e4 | ||
|
|
12f62df49a | ||
|
|
b367e105fa | ||
|
|
7ffbcebe4e | ||
|
|
415b114dac | ||
|
|
606a1f48c8 | ||
|
|
91ce14a410 | ||
|
|
aef17b414c | ||
|
|
a70bf1ffb1 | ||
|
|
7e8679b6c3 | ||
|
|
f1e7167c65 | ||
|
|
145f64bdfc | ||
|
|
3821ea2c74 | ||
|
|
ef082c2e1f | ||
|
|
8a26cfad79 | ||
|
|
38d64a34a1 | ||
|
|
586e6f1e1b | ||
|
|
bf419d18a9 | ||
|
|
94f8650ca4 | ||
|
|
41d5111684 | ||
|
|
b6ea06ba24 | ||
|
|
84222e8078 | ||
|
|
6e7f826e19 | ||
|
|
13c85cdfcb | ||
|
|
c2826bb1af | ||
|
|
8fa070f01c | ||
|
|
3c4af1a194 | ||
|
|
a710181388 | ||
|
|
c6ad476cb7 | ||
|
|
d1b403333c | ||
|
|
425427c96c | ||
|
|
ac4346719b | ||
|
|
e2c9fe8d12 | ||
|
|
423de39ad0 | ||
|
|
6c45fcbfc7 | ||
|
|
51c668a0fd | ||
|
|
8408e7fdb4 | ||
|
|
2975eb315f | ||
|
|
0ac05dbb0f | ||
|
|
7db7747cb0 | ||
|
|
343a1e2a76 | ||
|
|
44c58a66d1 | ||
|
|
8fc11c0791 | ||
|
|
db75d94961 | ||
|
|
26ff528a85 | ||
|
|
f7e9f85668 | ||
|
|
75eb0c6951 | ||
|
|
26fdb19344 | ||
|
|
e31638d3dd | ||
|
|
e12cd83b80 | ||
|
|
040b476359 | ||
|
|
d7633f40ba | ||
|
|
80fc8d4da9 | ||
|
|
9a92d20001 | ||
|
|
2b18089641 | ||
|
|
1da87d1d19 | ||
|
|
0c54276fe2 | ||
|
|
dda9a95163 | ||
|
|
34fa456106 | ||
|
|
0091cb3f23 | ||
|
|
9fe4504623 | ||
|
|
08d68300bd | ||
|
|
e326e2c6b3 | ||
|
|
e94dc226b5 | ||
|
|
2afd21c7ba | ||
|
|
bd2edea1c9 | ||
|
|
00cd0e1ae3 | ||
|
|
05aefc6489 | ||
|
|
5652018cde | ||
|
|
a63ba6bc4f | ||
|
|
c043be3aa4 | ||
|
|
b7180893c6 | ||
|
|
96ca7a8cbc | ||
|
|
c87c811719 | ||
|
|
4dab30ce6f | ||
|
|
75dc21c66d | ||
|
|
b0a4d7278a | ||
|
|
a01607e869 | ||
|
|
a3fd3205a9 | ||
|
|
55084499ac | ||
|
|
3e6f76826b | ||
|
|
01e9d39b63 | ||
|
|
0116d4176a | ||
|
|
7ea306a61a | ||
|
|
cdaab550e9 | ||
|
|
aa6f617715 | ||
|
|
7e4592c1e7 | ||
|
|
b97024c8f6 | ||
|
|
0f44f6752e | ||
|
|
3c9054c36f | ||
|
|
61379d4e05 | ||
|
|
fd2b779bb8 | ||
|
|
202e8ac3a1 | ||
|
|
6796f20683 | ||
|
|
cdc9fddc44 | ||
|
|
6409661a9f | ||
|
|
4ed03c2db2 | ||
|
|
7b2a9f7ea8 | ||
|
|
0d222e138f | ||
|
|
a80c415fc0 | ||
|
|
3f1a75f40a | ||
|
|
ad4bf1ac84 | ||
|
|
11dec27dd1 | ||
|
|
66253e142b | ||
|
|
b22b67c7d9 | ||
|
|
d8662b709a | ||
|
|
e826309d59 | ||
|
|
1554722a83 | ||
|
|
16ed89c471 | ||
|
|
6ccae6cc37 | ||
|
|
292ed892c1 | ||
|
|
bb8b91a100 | ||
|
|
1310b34e9c | ||
|
|
86cdb64b1d | ||
|
|
0456815bd5 | ||
|
|
1c12cd6b9e | ||
|
|
3c687d29d8 | ||
|
|
bb70edfdb3 | ||
|
|
a3f189f452 | ||
|
|
70727895f7 | ||
|
|
cdbf58b2c1 | ||
|
|
fe9bcc254a | ||
|
|
b0270550c5 | ||
|
|
597faee248 | ||
|
|
42c0815cda | ||
|
|
a5f12db6ba | ||
|
|
62808f8342 | ||
|
|
c6e89f938d | ||
|
|
1edc116532 | ||
|
|
40aa92c5f7 | ||
|
|
4eb39dc5ff | ||
|
|
b5cf6c7161 | ||
|
|
198691182b | ||
|
|
72b81bf403 | ||
|
|
8a3ac7a26e | ||
|
|
8878d7c5dc | ||
|
|
9a7b8da279 | ||
|
|
1f9ab7ca5d | ||
|
|
2c00cb555c | ||
|
|
dcbc7ff217 | ||
|
|
20f42aa2cc | ||
|
|
19fef019ed | ||
|
|
ea02de0cc9 | ||
|
|
1525ffc225 | ||
|
|
5458d77980 | ||
|
|
a545dc9264 | ||
|
|
b7c658e8f8 | ||
|
|
de69ecc35f | ||
|
|
b6f754c29a | ||
|
|
39e0708b3b | ||
|
|
5a3ed27fed | ||
|
|
a7cf39c7cd | ||
|
|
01464a7860 | ||
|
|
e17576a6f7 | ||
|
|
f33cd15419 | ||
|
|
fd3fefd6f1 | ||
|
|
36df21d823 | ||
|
|
05774854ef | ||
|
|
9dadafe20a | ||
|
|
6fd7427cae | ||
|
|
9065588a76 | ||
|
|
b4b47ec8fd | ||
|
|
ea9f313416 | ||
|
|
af8e770106 | ||
|
|
10f03795f9 | ||
|
|
2ad7c5c675 | ||
|
|
084a1dd7d2 | ||
|
|
d1793d9bcf | ||
|
|
d7ed33809f | ||
|
|
798041fe11 | ||
|
|
995420ee87 | ||
|
|
341ff3de37 | ||
|
|
ce06fcdbe0 | ||
|
|
b8c93b3572 | ||
|
|
4ea6faae81 | ||
|
|
ca8ddd5f39 | ||
|
|
3924f628b4 | ||
|
|
53e0893b51 | ||
|
|
d988b9e6d2 | ||
|
|
6060f41458 | ||
|
|
569ea3ebdd | ||
|
|
40eafa8adc | ||
|
|
1ca5b72073 | ||
|
|
d7c308c688 | ||
|
|
1e0191a37c | ||
|
|
a8d9e8ba7c | ||
|
|
1a5c18c9bd | ||
|
|
421e6303ae | ||
|
|
a79366f105 | ||
|
|
f85198c60f | ||
|
|
2afa1f0dc8 | ||
|
|
ef06165ea2 | ||
|
|
d398d367c1 | ||
|
|
951fa96848 | ||
|
|
77cc99acd3 | ||
|
|
62190d79be | ||
|
|
f7ee528d41 | ||
|
|
faa055010f | ||
|
|
ba8fd25604 | ||
|
|
9556d8e6da | ||
|
|
5b8b4c8c7b | ||
|
|
82aed2caab | ||
|
|
add4846d79 | ||
|
|
e354a0ee0e | ||
|
|
ccd6704b8f | ||
|
|
9bdb41a727 | ||
|
|
a40f84d519 | ||
|
|
bdb49a36bf | ||
|
|
1458ba6f6f | ||
|
|
007073354f | ||
|
|
be827211d2 | ||
|
|
5bc3924756 | ||
|
|
ff6d78244b | ||
|
|
5f1b9a17ca | ||
|
|
534364454d | ||
|
|
0e65b9b9f8 | ||
|
|
07a41f58d7 | ||
|
|
5b04e195b0 | ||
|
|
9fa2dae68c | ||
|
|
9000bc138f | ||
|
|
9660510cc7 | ||
|
|
298665e32a | ||
|
|
d0a3c08840 | ||
|
|
63a1b49745 | ||
|
|
9547ac0afd | ||
|
|
fa891edb7c | ||
|
|
65992ba6ae | ||
|
|
791a749c2f | ||
|
|
9261d8ae9d | ||
|
|
405b82588b | ||
|
|
0dfd2003f9 | ||
|
|
3d249365c2 | ||
|
|
7fb33653ad | ||
|
|
3cccfd97d2 | ||
|
|
0c40cdc990 | ||
|
|
81392a71dd | ||
|
|
b2f3cc6903 | ||
|
|
19a960856c | ||
|
|
02d2ac904d | ||
|
|
29f93597f2 | ||
|
|
20c3ca7d37 | ||
|
|
9bb2cfcd51 | ||
|
|
6927158daa | ||
|
|
0657d343bf | ||
|
|
37aedc8b03 | ||
|
|
3c89ce97c2 | ||
|
|
753b9c9e67 | ||
|
|
06b1baa454 | ||
|
|
e25cd9ba48 | ||
|
|
e00c6f9c77 | ||
|
|
68cc06dc1f | ||
|
|
1901655669 | ||
|
|
753d1d50d0 | ||
|
|
ac108cd708 | ||
|
|
29be837b97 | ||
|
|
682eac3dbc | ||
|
|
ccec84aef2 | ||
|
|
13983d0e51 | ||
|
|
3f80134f07 | ||
|
|
ad36ec4dfd | ||
|
|
82ace81974 | ||
|
|
13c3743ff5 | ||
|
|
46904fb110 | ||
|
|
8f3ffdcc2a | ||
|
|
6c3c0087dd | ||
|
|
2e9b42688f | ||
|
|
589b6465f8 | ||
|
|
6c7c5443d4 | ||
|
|
fdad028e73 | ||
|
|
3ec29d3b52 | ||
|
|
e97add0c46 | ||
|
|
0138209004 | ||
|
|
f7fd78d715 | ||
|
|
bbd8447afa | ||
|
|
cf2bbbfef1 | ||
|
|
7000e80465 | ||
|
|
24a17c05ab | ||
|
|
7c4129033a | ||
|
|
83e3267f0e | ||
|
|
62cfbf73e1 | ||
|
|
f539d69984 | ||
|
|
ba86c1e1da | ||
|
|
cfb7de0fe9 | ||
|
|
334859726c | ||
|
|
119af3d760 | ||
|
|
3bbf11e26f | ||
|
|
5bb27b2989 | ||
|
|
c4b3f08618 | ||
|
|
6ac773d5ae | ||
|
|
06e08557ac | ||
|
|
95fdefdcc7 | ||
|
|
7a8d4577f1 |
89
.clang-format
Normal file
@@ -0,0 +1,89 @@
|
||||
---
|
||||
Language: Cpp
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveDeclarations: false
|
||||
AlignEscapedNewlinesLeft: false
|
||||
AlignOperands: true
|
||||
AlignTrailingComments: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: None
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: false
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
BraceWrapping:
|
||||
AfterClass: true
|
||||
AfterFunction: true
|
||||
AfterControlStatement: false
|
||||
AfterEnum: false
|
||||
AfterNamespace: false
|
||||
AfterObjCDeclaration: false
|
||||
AfterStruct: false
|
||||
AfterUnion: false
|
||||
BeforeCatch: false
|
||||
BeforeElse: false
|
||||
IndentBraces: false
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Custom
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializersBeforeComma: true
|
||||
ColumnLimit: 120
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
|
||||
IncludeCategories:
|
||||
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||
Priority: 2
|
||||
- Regex: '^(<|"(gtest|isl|json)/)'
|
||||
Priority: 3
|
||||
- Regex: '.*'
|
||||
Priority: 1
|
||||
IndentCaseLabels: false
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: All
|
||||
ObjCBlockIndentWidth: 4
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
PointerAlignment: Left
|
||||
ReflowComments: true
|
||||
SortIncludes: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Cpp11
|
||||
TabWidth: 4
|
||||
UseTab: Never
|
||||
...
|
||||
|
||||
12
.gitattributes
vendored
@@ -1 +1,13 @@
|
||||
src/version.h.cmake export-subst
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
.github export-ignore
|
||||
.travis.yml export-ignore
|
||||
.tx export-ignore
|
||||
snapcraft.yaml export-ignore
|
||||
make_release.sh export-ignore
|
||||
AppImage-Recipe.sh export-ignore
|
||||
|
||||
# github-linguist language hints
|
||||
*.h linguist-language=C++
|
||||
*.cpp linguist-language=C++
|
||||
|
||||
180
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,180 @@
|
||||
# Contributing to KeePassXC
|
||||
|
||||
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
|
||||
|
||||
The following is a set of guidelines for contributing to KeePassXC on GitHub.
|
||||
These are just guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
|
||||
|
||||
#### Table of contents
|
||||
|
||||
[What should I know before I get started?](#what-should-i-know-before-i-get-started)
|
||||
* [Open Source Contribution Policy](#open-source-contribution-policy)
|
||||
|
||||
[How can I contribute?](#how-can-i-contribute)
|
||||
* [Feature requests](#feature-requests)
|
||||
* [Bug reports](#bug-reports)
|
||||
* [Discuss with the team](#discuss-with-the-team)
|
||||
* [Your first code contribution](#your-first-code-contribution)
|
||||
* [Pull requests](#pull-requests)
|
||||
* [Translations](#translations)
|
||||
|
||||
[Styleguides](#styleguides)
|
||||
* [Git branch strategy](#git-branch-strategy)
|
||||
* [Git commit messages](#git-commit-messages)
|
||||
* [Coding styleguide](#coding-styleguide)
|
||||
|
||||
|
||||
## What should I know before I get started?
|
||||
### Open Source Contribution Policy
|
||||
**Source**: [Version 0.3, 2015–11–18](https://medium.com/@jmaynard/a-contribution-policy-for-open-source-that-works-bfc4600c9d83#.i9ntbhmad)
|
||||
|
||||
#### Policy
|
||||
|
||||
We will accept contributions of good code that we can use from anyone.
|
||||
|
||||
#### What this means
|
||||
|
||||
- “We will accept”: This means that we will incorporate your contribution into the project’s codebase, adapt it as needed, and give you full credit for your work.
|
||||
- “contributions”: This means just about anything you wish to contribute to the project, as long as it is good code we can use. The easier you make it for us to accept your contribution, the happier we are, but if it’s good enough, we will do a reasonable amount of work to use it.
|
||||
- “of good code”: This means that we will accept contributions that work well and efficiently, that fit in with the goals of the project, that match the project’s coding style, and that do not impose an undue maintenance workload on us going forward. This does not mean just program code, either, but documentation and artistic works as appropriate to the project.
|
||||
- “that we can use”: This means that your contribution must be given freely and irrevocably, that you must have the right to contribute it for our unrestricted use, and that your contribution is made under a license that is compatible with the license the project has chosen and that permits us to include, distribute, and modify your work without restriction.
|
||||
- “from anyone”: This means exactly that. We don’t care about anything but your code. We don’t care about your race, religion, national origin, biological gender, perceived gender, sexual orientation, lifestyle, political viewpoint, or anything extraneous like that. We will neither reject your contribution nor grant it preferential treatment on any basis except the code itself. We do, however, reserve the right to tell you to go away if you behave too obnoxiously toward us.
|
||||
|
||||
#### If Your Contribution Is Rejected
|
||||
|
||||
If we reject your contribution, it means only that we do not consider it suitable for our project in the form it was submitted. It is not personal. If you ask civilly, we will be happy to discuss it with you and help you understand why it was rejected, and if possible improve it so we can accept it.
|
||||
|
||||
#### Revision History
|
||||
* 0.1, 2011–11–18: Initial draft.
|
||||
* 0.2, 2011–11–18: Added “If Your Contribution Is Rejected” section.
|
||||
* 0.3, 2011–11–19: Added “irrevocably” to “we can use” and changed “it” to “your contribution” in the “if rejected” section. Thanks to Patrick Maupin.
|
||||
|
||||
|
||||
## How can I contribute?
|
||||
### Feature requests
|
||||
|
||||
We're always looking for suggestions to improve our application. If you have a suggestion to improve an existing feature, or would like to suggest a completely new feature for KeePassXC, please use the [issue tracker on GitHub][issues-section]. For more general discussion, try using our [Google Groups][google-groups] forum.
|
||||
|
||||
### Bug reports
|
||||
|
||||
Our software isn't always perfect, but we strive to always improve our work. You may file bug reports in the issue tracker.
|
||||
|
||||
Before submitting a bug report, check if the problem has already been reported. Please refrain from opening a duplicate issue. If you want to add further information to an existing issue, simply add a comment on that issue.
|
||||
|
||||
### Discuss with the team
|
||||
|
||||
As with feature requests, you can talk to the KeePassXC team about bugs, new features, other issues and pull requests on the dedicated issue tracker, using the [Google Groups][google-groups] forum, or in the IRC channel on Freenode (`#keepassxc-dev` on `irc.freenode.net`, or use a [webchat link](https://webchat.freenode.net/?channels=%23keepassxc-dev)).
|
||||
|
||||
### Your first code contribution
|
||||
|
||||
Unsure where to begin contributing to KeePassXC? You can start by looking through these `beginner` and `help-wanted` issues:
|
||||
|
||||
* [Beginner issues][beginner] – issues which should only require a few lines of code, and a test or two.
|
||||
* ['Help wanted' issues][help-wanted] – issues which should be a bit more involved than `beginner` issues.
|
||||
|
||||
Both issue lists are sorted by total number of comments. While not perfect, looking at the number of comments on an issue can give a general idea of how much an impact a given change will have.
|
||||
|
||||
### Pull requests
|
||||
|
||||
Along with our desire to hear your feedback and suggestions, we're also interested in accepting direct assistance in the form of code.
|
||||
|
||||
All pull requests must comply with the above requirements and with the [styleguides](#styleguides).
|
||||
|
||||
### Translations
|
||||
|
||||
Translations are managed on [Transifex](https://www.transifex.com/keepassxc/keepassxc/) which offers a web interface.
|
||||
Please join an existing language team or request a new one if there is none.
|
||||
|
||||
## Styleguides
|
||||
|
||||
### Git branch strategy
|
||||
|
||||
The Branch Strategy is based on [git-flow-lite](http://nvie.com/posts/a-successful-git-branching-model/).
|
||||
|
||||
* **master** – points to the latest public release
|
||||
* **develop** – points to the development of the next release, contains tested and reviewed code
|
||||
* **feature/**[name] – points to a branch with a new feature, one which is candidate for merge into develop (subject to rebase)
|
||||
* **hotfix/**[id]-[description] – points to a branch with a fix for a particular issue ID
|
||||
|
||||
|
||||
### Git commit messages
|
||||
|
||||
* Use the present tense ("Add feature" not "Added feature")
|
||||
* Use the imperative mood ("Move cursor to…" not "Moves cursor to…")
|
||||
* Limit the first line to 72 characters or less
|
||||
* Reference issues and pull requests liberally
|
||||
* When only changing documentation, include `[ci skip]` in the commit description
|
||||
* Consider starting the commit message with an applicable emoji:
|
||||
* :memo: `:memo:` when writing docs
|
||||
* :penguin: `:penguin:` when fixing something on Linux
|
||||
* :apple: `:apple:` when fixing something on macOS
|
||||
* :checkered_flag: `:checkered_flag:` when fixing something on Windows
|
||||
* :bug: `:bug:` when fixing a bug
|
||||
* :fire: `:fire:` when removing code or files
|
||||
* :green_heart: `:green_heart:` when fixing the CI build
|
||||
* :white_check_mark: `:white_check_mark:` when adding tests
|
||||
* :lock: `:lock:` when dealing with security
|
||||
|
||||
|
||||
### Coding styleguide
|
||||
|
||||
This project follows the [Qt Coding Style](https://wiki.qt.io/Qt_Coding_Style). All submissions are expected to follow this style.
|
||||
|
||||
In particular, code must stick to the following rules:
|
||||
|
||||
#### Naming convention
|
||||
`lowerCamelCase`
|
||||
|
||||
For names made of only one word, the first letter should be lowercase.
|
||||
For names made of multiple concatenated words, the first letter of the whole is lowercase, and the first letter of each subsequent word is capitalized.
|
||||
|
||||
#### Indention
|
||||
For **C++ files** (*.cpp .h*): 4 spaces
|
||||
For **Qt-UI files** (*.ui*): 2 spaces
|
||||
|
||||
#### Pointers
|
||||
```c
|
||||
int* count;
|
||||
```
|
||||
|
||||
#### Braces
|
||||
```c
|
||||
if (condition) {
|
||||
doSomething();
|
||||
}
|
||||
|
||||
void ExampleClass::exampleFunction()
|
||||
{
|
||||
doSomething();
|
||||
}
|
||||
```
|
||||
|
||||
#### Switch statement
|
||||
```c
|
||||
switch (a) {
|
||||
case 1:
|
||||
doSomething();
|
||||
break;
|
||||
|
||||
default:
|
||||
doSomethingElse();
|
||||
break;
|
||||
}
|
||||
```
|
||||
|
||||
#### Member variables
|
||||
Use prefix: `m_*`
|
||||
|
||||
Example: `m_variable`
|
||||
|
||||
#### GUI widget names
|
||||
Widget names must be related to the desired program behavior, and preferably end with the widget's classname.
|
||||
|
||||
Example: `<widget class="QCheckBox" name="rememberCheckBox">`
|
||||
|
||||
|
||||
|
||||
[beginner]:https://github.com/keepassxreboot/keepassx/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner+label%3A%22help+wanted%22+sort%3Acomments-desc
|
||||
[help-wanted]:https://github.com/keepassxreboot/keepassx/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+sort%3Acomments-desc
|
||||
[issues-section]:https://github.com/keepassxreboot/keepassxc/issues
|
||||
[google-groups]:https://groups.google.com/forum/#!forum/keepassx-reboot
|
||||
32
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<!--- Provide a general summary of the issue in the title above -->
|
||||
|
||||
## Expected Behavior
|
||||
<!--- If you're describing a bug, tell us what should happen -->
|
||||
<!--- If you're suggesting a change/improvement, tell us how it should work -->
|
||||
|
||||
## Current Behavior
|
||||
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
|
||||
<!--- If suggesting a change/improvement, explain the difference from the current behavior -->
|
||||
|
||||
## Possible Solution
|
||||
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
|
||||
<!--- or ideas how to implement the addition or change -->
|
||||
|
||||
## Steps to Reproduce (for bugs)
|
||||
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
|
||||
<!--- reproduce this bug. Include code to reproduce, if relevant -->
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
|
||||
## Context
|
||||
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
||||
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
||||
|
||||
## Your Environment
|
||||
<!--- Include relevant details about the environment you experienced the bug in -->
|
||||
* KeePassXC version/commit used: (can be found under Help -> About)
|
||||
* Qt version (e.g. Qt 5.3):
|
||||
* Compiler (e.g. Clang++3.6.0):
|
||||
* Operating System and version:
|
||||
34
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
<!--- Provide a general summary of your changes in the title above -->
|
||||
|
||||
## Description
|
||||
<!--- Describe your changes in detail -->
|
||||
|
||||
## Motivation and context
|
||||
<!--- Why is this change required? What problem does it solve? -->
|
||||
<!--- If it fixes an open issue, please link to the issue here. -->
|
||||
|
||||
## How has this been tested?
|
||||
<!--- Please describe in detail how you tested your changes. -->
|
||||
<!--- Include details of your testing environment, and the tests you ran to -->
|
||||
<!--- see how your change affects other areas of the code, etc. -->
|
||||
|
||||
## Screenshots (if appropriate):
|
||||
|
||||
## Types of changes
|
||||
<!--- What types of changes does your code introduce? -->
|
||||
<!--- Please remove all lines which don't apply. -->
|
||||
- ✅ Bug fix (non-breaking change which fixes an issue)
|
||||
- ✅ New feature (non-breaking change which adds functionality)
|
||||
- ✅ Breaking change (fix or feature that would cause existing functionality to change)
|
||||
|
||||
## Checklist:
|
||||
<!--- Please go over all the following points. -->
|
||||
<!--- Again, remove any lines which don't apply. -->
|
||||
<!--- Pull Requests that don't fulfill all [REQUIRED] requisites are likely -->
|
||||
<!--- to be sent back to you for correction or will be rejected. -->
|
||||
- ✅ I have read the **CONTRIBUTING** document. **[REQUIRED]**
|
||||
- ✅ My code follows the code style of this project. **[REQUIRED]**
|
||||
- ✅ All new and existing tests passed. **[REQUIRED]**
|
||||
- ✅ I have compiled and verified my code with `-DWITH_ASAN=ON`. **[REQUIRED]**
|
||||
- ✅ My change requires a change to the documentation and I have updated it accordingly.
|
||||
- ✅ I have added tests to cover my changes.
|
||||
9
.gitignore
vendored
@@ -1,2 +1,9 @@
|
||||
CMakeLists.txt.*
|
||||
build/
|
||||
build*/
|
||||
cmake-build-*/
|
||||
release*/
|
||||
.idea/
|
||||
*.iml
|
||||
*.kdev4
|
||||
|
||||
\.vscode/
|
||||
|
||||
28
.travis.yml
@@ -1,33 +1,47 @@
|
||||
language: cpp
|
||||
sudo: required
|
||||
dist: trusty
|
||||
# FIXME : remove when (https://github.com/google/sanitizers/issues/837) is resolved.
|
||||
group: deprecated-2017Q3
|
||||
services: [docker]
|
||||
|
||||
os:
|
||||
- linux
|
||||
# - osx
|
||||
|
||||
# Define clang compiler without any frills
|
||||
compiler:
|
||||
- clang
|
||||
- gcc
|
||||
# - clang
|
||||
|
||||
env:
|
||||
- CONFIG=Release ASAN_OPTIONS=detect_odr_violation=1:leak_check_at_exit=0
|
||||
- CONFIG=Debug ASAN_OPTIONS=detect_odr_violation=1:leak_check_at_exit=0
|
||||
|
||||
git:
|
||||
depth: 3
|
||||
|
||||
|
||||
before_install:
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq update; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq install cmake libmicrohttpd10 libmicrohttpd-dev libxi-dev qtbase5-dev libqt5x11extras5-dev qttools5-dev qttools5-dev-tools libgcrypt20-dev zlib1g-dev libxtst-dev xvfb; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq install cmake libclang-common-3.5-dev libxi-dev qtbase5-dev libqt5x11extras5-dev qttools5-dev qttools5-dev-tools libgcrypt20-dev zlib1g-dev libxtst-dev xvfb libyubikey-dev libykpers-1-dev; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq cmake || brew install cmake; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq qt5 || brew install qt5; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq libgcrypt || brew install libgcrypt; fi
|
||||
|
||||
|
||||
before_script:
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then CMAKE_ARGS="-DCMAKE_PREFIX_PATH=/usr/local/opt/qt5"; fi
|
||||
- mkdir build && pushd build
|
||||
|
||||
|
||||
script:
|
||||
- cmake -DCMAKE_BUILD_TYPE=Release -DWITH_GUI_TESTS=ON $CMAKE_ARGS ..
|
||||
- make
|
||||
- cmake -DCMAKE_BUILD_TYPE=${CONFIG} -DWITH_GUI_TESTS=ON -DWITH_ASAN=ON -DWITH_XC_HTTP=ON -DWITH_XC_AUTOTYPE=ON -DWITH_XC_YUBIKEY=ON $CMAKE_ARGS ..
|
||||
- make -j2
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then make test ARGS+="-E testgui --output-on-failure"; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then xvfb-run -a --server-args="-screen 0 800x600x24" make test ARGS+="-R testgui --output-on-failure"; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then make test ARGS+="--output-on-failure"; fi
|
||||
|
||||
# Generate snapcraft build when merging into master/develop branches
|
||||
#after_success:
|
||||
# - popd
|
||||
# - "[[ $DEPLOY = 1 ]] && [[ $CONFIG = Release ]] && [[ $TRAVIS_BRANCH =~ (master|develop) ]] && [[ $TRAVIS_PULL_REQUEST = false ]] \
|
||||
# && docker run -v $(pwd):/cwd snapcore/snapcraft sh -c 'cd /cwd && apt update && snapcraft'"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[keepassx.keepassx_ents]
|
||||
[keepassxc.keepassx_ents]
|
||||
source_file = share/translations/keepassx_en.ts
|
||||
file_filter = share/translations/keepassx_<lang>.ts
|
||||
source_lang = en
|
||||
|
||||
102
AppImage-Recipe.sh
Executable file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# KeePassXC AppImage Recipe
|
||||
# Copyright (C) 2017 KeePassXC team <https://keepassxc.org/>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if [ "$1" == "" ] || [ "$2" == "" ]; then
|
||||
echo "Usage: $(basename $0) APP_NAME RELEASE_VERSION" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f CHANGELOG ]; then
|
||||
echo "This recipe must not be run from the sources root." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d ../bin-release ]; then
|
||||
echo "../bin-release does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
APP="$1"
|
||||
LOWERAPP="$(echo "$APP" | tr '[:upper:]' '[:lower:]')"
|
||||
VERSION="$2"
|
||||
export ARCH=x86_64
|
||||
|
||||
mkdir -p $APP.AppDir
|
||||
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
|
||||
. ./functions.sh
|
||||
|
||||
LIB_DIR=./usr/lib
|
||||
if [ -d ./usr/lib/x86_64-linux-gnu ]; then
|
||||
LIB_DIR=./usr/lib/x86_64-linux-gnu
|
||||
elif [ -d ./usr/lib64 ]; then
|
||||
LIB_DIR=./usr/lib64
|
||||
fi
|
||||
|
||||
cd $APP.AppDir
|
||||
cp -a ../../bin-release/* .
|
||||
cp -a ./usr/local/* ./usr
|
||||
rm -R ./usr/local
|
||||
rmdir ./opt 2> /dev/null
|
||||
|
||||
# bundle Qt platform plugins and themes
|
||||
QXCB_PLUGIN="$(find /usr/lib* -name 'libqxcb.so' 2> /dev/null)"
|
||||
if [ "$QXCB_PLUGIN" == "" ]; then
|
||||
QXCB_PLUGIN="$(find /opt/qt*/plugins -name 'libqxcb.so' 2> /dev/null)"
|
||||
fi
|
||||
QT_PLUGIN_PATH="$(dirname $(dirname $QXCB_PLUGIN))"
|
||||
mkdir -p ".${QT_PLUGIN_PATH}/platforms"
|
||||
cp "$QXCB_PLUGIN" ".${QT_PLUGIN_PATH}/platforms/"
|
||||
|
||||
get_apprun
|
||||
copy_deps
|
||||
delete_blacklisted
|
||||
|
||||
# remove dbus and systemd libs as they are not blacklisted
|
||||
find . -name libdbus-1.so.3 -exec rm {} \;
|
||||
find . -name libsystemd.so.0 -exec rm {} \;
|
||||
|
||||
get_desktop
|
||||
get_icon
|
||||
cat << EOF > ./usr/bin/keepassxc_env
|
||||
#!/usr/bin/env bash
|
||||
export LD_LIBRARY_PATH="..$(dirname ${QT_PLUGIN_PATH})/lib:\${LD_LIBRARY_PATH}"
|
||||
export QT_PLUGIN_PATH="..${QT_PLUGIN_PATH}:\${KPXC_QT_PLUGIN_PATH}"
|
||||
|
||||
# unset XDG_DATA_DIRS to make tray icon work in Ubuntu Unity
|
||||
# see https://github.com/AppImage/AppImageKit/issues/351
|
||||
unset XDG_DATA_DIRS
|
||||
|
||||
if [ "\${1}" == "cli" ]; then
|
||||
shift
|
||||
exec keepassxc-cli "\$@"
|
||||
else
|
||||
exec keepassxc "\$@"
|
||||
fi
|
||||
EOF
|
||||
chmod +x ./usr/bin/keepassxc_env
|
||||
sed -i 's/Exec=keepassxc/Exec=keepassxc_env/' org.keepassxc.desktop
|
||||
get_desktopintegration $LOWERAPP
|
||||
|
||||
GLIBC_NEEDED=$(glibc_needed)
|
||||
|
||||
cd ..
|
||||
|
||||
generate_type2_appimage
|
||||
|
||||
mv ../out/*.AppImage ../KeePassXC-${VERSION}-${ARCH}.AppImage
|
||||
rmdir ../out > /dev/null 2>&1
|
||||
135
CHANGELOG
@@ -1,3 +1,138 @@
|
||||
2.2.2 (2017-10-22)
|
||||
=========================
|
||||
|
||||
- Fixed entries with empty URLs being reported to KeePassHTTP clients [#1031]
|
||||
- Fixed YubiKey detection and enabled CLI tool for AppImage binary [#1100]
|
||||
- Added AppStream description [#1082]
|
||||
- Improved TOTP compatibility and added new Base32 implementation [#1069]
|
||||
- Fixed error handling when processing invalid cipher stream [#1099]
|
||||
- Fixed double warning display when opening a database [#1037]
|
||||
- Fixed unlocking databases with --pw-stdin [#1087]
|
||||
- Added ability to override QT_PLUGIN_PATH environment variable for AppImages [#1079]
|
||||
- Fixed transform seed not being regenerated when saving the database [#1068]
|
||||
- Fixed only one YubiKey slot being polled [#1048]
|
||||
- Corrected an issue with entry icons while merging [#1008]
|
||||
- Corrected desktop and tray icons in Snap package [#1030]
|
||||
- Fixed screen lock and Google fallback settings [#1029]
|
||||
|
||||
2.2.1 (2017-10-01)
|
||||
=========================
|
||||
|
||||
- Corrected multiple snap issues [#934, #1011]
|
||||
- Corrected multiple custom icon issues [#708, #719, #994]
|
||||
- Corrected multiple Yubikey issues [#880]
|
||||
- Fixed single instance preventing load on occasion [#997]
|
||||
- Keep entry history when merging databases [#970]
|
||||
- Prevent data loss if passwords were mismatched [#1007]
|
||||
- Fixed crash after merge [#941]
|
||||
- Added configurable auto-type default delay [#703]
|
||||
- Unlock database dialog window comes to front [#663]
|
||||
- Translation and compiling fixes
|
||||
|
||||
2.2.0 (2017-06-23)
|
||||
=========================
|
||||
|
||||
- Added YubiKey 2FA integration for unlocking databases [#127]
|
||||
- Added TOTP support [#519]
|
||||
- Added CSV import tool [#146, #490]
|
||||
- Added KeePassXC CLI tool [#254]
|
||||
- Added diceware password generator [#373]
|
||||
- Added support for entry references [#370, #378]
|
||||
- Added support for Twofish encryption [#167]
|
||||
- Enabled DEP and ASLR for in-memory protection [#371]
|
||||
- Enabled single instance mode [#510]
|
||||
- Enabled portable mode [#645]
|
||||
- Enabled database lock on screensaver and session lock [#545]
|
||||
- Redesigned welcome screen with common features and recent databases [#292]
|
||||
- Multiple updates to search behavior [#168, #213, #374, #471, #603, #654]
|
||||
- Added auto-type fields {CLEARFIELD}, {SPACE}, {{}, {}} [#267, #427, #480]
|
||||
- Fixed auto-type errors on Linux [#550]
|
||||
- Prompt user prior to executing a cmd:// URL [#235]
|
||||
- Entry attributes can be protected (hidden) [#220]
|
||||
- Added extended ascii to password generator [#538]
|
||||
- Added new database icon to toolbar [#289]
|
||||
- Added context menu entry to empty recycle bin in databases [#520]
|
||||
- Added "apply" button to entry and group edit windows [#624]
|
||||
- Added macOS tray icon and enabled minimize on close [#583]
|
||||
- Fixed issues with unclean shutdowns [#170, #580]
|
||||
- Changed keyboard shortcut to create new database to CTRL+SHIFT+N [#515]
|
||||
- Compare window title to entry URLs [#556]
|
||||
- Implemented inline error messages [#162]
|
||||
- Ignore group expansion and other minor changes when making database "dirty" [#464]
|
||||
- Updated license and copyright information on souce files [#632]
|
||||
- Added contributors list to about dialog [#629]
|
||||
|
||||
2.1.4 (2017-04-09)
|
||||
=========================
|
||||
|
||||
- Bumped KeePassHTTP version to 1.8.4.2
|
||||
- KeePassHTTP confirmation window comes to foreground [#466]
|
||||
|
||||
2.1.3 (2017-03-03)
|
||||
=========================
|
||||
|
||||
- Fix possible overflow in zxcvbn library [#363]
|
||||
- Revert HiDPI setting to avoid problems on laptop screens [#332]
|
||||
- Set file meta properties in Windows executable [#330]
|
||||
- Suppress error message when auto-reloading a locked database [#345]
|
||||
- Improve usability of question dialog when database is already locked by a different instance [#346]
|
||||
- Fix compiler warnings in QHttp library [#351]
|
||||
- Use unified toolbar on Mac OS X [#361]
|
||||
- Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 [#362]
|
||||
|
||||
2.1.2 (2017-02-17)
|
||||
=========================
|
||||
|
||||
- Ask for save location when creating a new database [#302]
|
||||
- Remove Libmicrohttpd dependency to clean up the code and ensure better OS X compatibility [#317, #265]
|
||||
- Prevent Qt from degrading Wifi network performance on certain platforms [#318]
|
||||
- Visually refine user interface on OS X and other platforms [#299]
|
||||
- Remove unusable tray icon setting on OS X [#293]
|
||||
- Fix compositing glitches on Ubuntu and prevent flashing when minimizing to the tray at startup [#307]
|
||||
- Fix AppImage tray icon on Ubuntu [#277, #273]
|
||||
- Fix global menu disappearing after restoring KeePassXC from the tray on Ubuntu [#276]
|
||||
- Fix result order in entry search [#320]
|
||||
- Enable HiDPI scaling on supported platforms [#315]
|
||||
- Remove empty directories from installation target [#282]
|
||||
|
||||
2.1.1 (2017-02-06)
|
||||
=========================
|
||||
|
||||
- Enabled HTTP plugin build; plugin is disabled by default and limited to localhost [#147]
|
||||
- Escape HTML in dialog boxes [#247]
|
||||
- Corrected crashes in favicon download and password generator [#233, #226]
|
||||
- Increase font size of password meter [#228]
|
||||
- Fixed compatibility with Qt 5.8 [#211]
|
||||
- Use consistent button heights in password generator [#229]
|
||||
|
||||
2.1.0 (2017-01-22)
|
||||
=========================
|
||||
|
||||
- Show unlock dialog when using autotype on a closed database [#10, #89]
|
||||
- Show different tray icon when database is locked [#37, #46]
|
||||
- Support autotype on Windows and OS X [#42, #60, #63]
|
||||
- Add delay feature to autotype [#76, #77]
|
||||
- Add password strength meter [#84, #92]
|
||||
- Add option for automatically locking the database when minimizing
|
||||
the window [#57]
|
||||
- Add feature to download favicons and use them as entry icons [#30]
|
||||
- Automatically reload and merge database when the file changed on
|
||||
disk [#22, #33, #93]
|
||||
- Add tool for merging two databases [#22, #47, #143]
|
||||
- Add --pw-stdin commandline option to unlock the database by providing
|
||||
a password on STDIN [#54]
|
||||
- Add utility script for reading the database password from KWallet [#55]
|
||||
- Fix some KeePassHTTP settings not being remembered [#34, #65]
|
||||
- Make search box persistent [#15, #67, #157]
|
||||
- Enhance search feature by scoping the search to selected group [#16, #118]
|
||||
- Improve interaction between search field and entry list [#131, #141]
|
||||
- Add stand-alone password-generator [#18, #92]
|
||||
- Don't require password repetition when password is visible [#27, #92]
|
||||
- Add support for entry attributes in autotype sequences [#107]
|
||||
- Always focus password field when opening the database unlock widget [#116, #117]
|
||||
- Fix compilation errors on various platforms [#53, #126, #130]
|
||||
- Restructure and improve kdbx-extract utility [#160]
|
||||
|
||||
2.0.3 (2016-09-04)
|
||||
=========================
|
||||
|
||||
|
||||
126
CMakeLists.txt
@@ -1,4 +1,5 @@
|
||||
# Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
|
||||
# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -15,16 +16,19 @@
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
|
||||
"Choose the type of build, options are: None Debug Release RelWithDebInfo Debug Debugfull Profile MinSizeRel."
|
||||
"Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel."
|
||||
FORCE)
|
||||
endif()
|
||||
|
||||
project(KeePassX)
|
||||
project(KeePassXC)
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||
|
||||
# Support Visual Studio Code
|
||||
include(CMakeToolsHelpers OPTIONAL)
|
||||
|
||||
include(CheckCCompilerFlag)
|
||||
include(CheckCXXCompilerFlag)
|
||||
include(CheckCXXSourceCompiles)
|
||||
@@ -32,9 +36,33 @@ include(CheckCXXSourceCompiles)
|
||||
option(WITH_TESTS "Enable building of unit tests" ON)
|
||||
option(WITH_GUI_TESTS "Enable building of GUI tests" OFF)
|
||||
option(WITH_DEV_BUILD "Use only for development. Disables/warns about deprecated methods." OFF)
|
||||
option(WITH_ASAN "Enable address sanitizer checks (Linux only)" OFF)
|
||||
option(WITH_COVERAGE "Use to build with coverage tests (GCC only)." OFF)
|
||||
option(WITH_APP_BUNDLE "Enable Application Bundle for OS X" ON)
|
||||
|
||||
set(KEEPASSX_VERSION "2.0.3")
|
||||
set(KEEPASSX_VERSION_NUM "2.0.3")
|
||||
option(WITH_XC_AUTOTYPE "Include Auto-Type." ON)
|
||||
option(WITH_XC_HTTP "Include KeePassHTTP and Custom Icon Downloads." OFF)
|
||||
option(WITH_XC_YUBIKEY "Include YubiKey support." OFF)
|
||||
|
||||
# Process ui files automatically from source files
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
|
||||
set(KEEPASSXC_VERSION_MAJOR "2")
|
||||
set(KEEPASSXC_VERSION_MINOR "2")
|
||||
set(KEEPASSXC_VERSION_PATCH "2")
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
|
||||
|
||||
# Distribution info
|
||||
set(KEEPASSXC_DIST True)
|
||||
set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution type")
|
||||
set_property(CACHE KEEPASSXC_DIST_TYPE PROPERTY STRINGS Snap AppImage Other)
|
||||
if(KEEPASSXC_DIST_TYPE STREQUAL "Snap")
|
||||
set(KEEPASSXC_DIST_SNAP True)
|
||||
elseif(KEEPASSXC_DIST_TYPE STREQUAL "AppImage")
|
||||
set(KEEPASSXC_DIST_APPIMAGE True)
|
||||
elseif(KEEPASSXC_DIST_TYPE STREQUAL "Other")
|
||||
unset(KEEPASSXC_DIST)
|
||||
endif()
|
||||
|
||||
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
||||
set(CMAKE_COMPILER_IS_CLANG 1)
|
||||
@@ -61,20 +89,41 @@ macro(add_gcc_compiler_flags FLAGS)
|
||||
add_gcc_compiler_cflags("${FLAGS}")
|
||||
endmacro(add_gcc_compiler_flags)
|
||||
|
||||
add_definitions(-DQT_NO_KEYWORDS -DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
|
||||
add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
|
||||
|
||||
add_gcc_compiler_flags("-fno-common -fstack-protector --param=ssp-buffer-size=4")
|
||||
if(WITH_APP_BUNDLE)
|
||||
add_definitions(-DWITH_APP_BUNDLE)
|
||||
endif()
|
||||
|
||||
add_gcc_compiler_flags("-fno-common")
|
||||
add_gcc_compiler_flags("-Wall -Wextra -Wundef -Wpointer-arith -Wno-long-long")
|
||||
add_gcc_compiler_flags("-Wformat=2 -Wmissing-format-attribute")
|
||||
add_gcc_compiler_flags("-fvisibility=hidden")
|
||||
add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden")
|
||||
|
||||
if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.999) OR CMAKE_COMPILER_IS_CLANGXX)
|
||||
add_gcc_compiler_flags("-fstack-protector-strong")
|
||||
else()
|
||||
add_gcc_compiler_flags("-fstack-protector --param=ssp-buffer-size=4")
|
||||
endif()
|
||||
|
||||
add_gcc_compiler_cxxflags("-fno-exceptions -fno-rtti")
|
||||
add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual")
|
||||
add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings")
|
||||
if(WITH_ASAN)
|
||||
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
message(FATAL_ERROR "WITH_ASAN is only supported on Linux at the moment.")
|
||||
endif()
|
||||
|
||||
add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN")
|
||||
|
||||
if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9))
|
||||
add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
|
||||
if (CMAKE_BUILD_TYPE_LOWER MATCHES (release|relwithdebinfo|minsizerel))
|
||||
if (CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)")
|
||||
add_gcc_compiler_flags("-D_FORTIFY_SOURCE=2")
|
||||
endif()
|
||||
|
||||
@@ -87,6 +136,12 @@ endif()
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align")
|
||||
|
||||
if(WITH_COVERAGE)
|
||||
# Include code coverage, use with -DCMAKE_BUILD_TYPE=Coverage
|
||||
include(CodeCoverage)
|
||||
setup_target_for_coverage(kp_coverage "make test" coverage)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCC)
|
||||
@@ -94,10 +149,14 @@ if(CMAKE_COMPILER_IS_GNUCC)
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
if (CMAKE_COMPILER_IS_CLANGXX)
|
||||
add_gcc_compiler_flags("-Qunused-arguments")
|
||||
endif()
|
||||
add_gcc_compiler_flags("-pie -fPIE")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now")
|
||||
endif()
|
||||
|
||||
add_gcc_compiler_cxxflags("-std=c++11")
|
||||
@@ -116,32 +175,40 @@ if(MINGW)
|
||||
set(CMAKE_RC_COMPILER_INIT windres)
|
||||
enable_language(RC)
|
||||
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
|
||||
if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||
# Enable DEP and ASLR
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(APPLE OR MINGW)
|
||||
set(PROGNAME KeePassX)
|
||||
if(APPLE AND WITH_APP_BUNDLE OR MINGW)
|
||||
set(PROGNAME KeePassXC)
|
||||
else()
|
||||
set(PROGNAME keepassx)
|
||||
set(PROGNAME keepassxc)
|
||||
endif()
|
||||
|
||||
if(APPLE AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local")
|
||||
if(APPLE AND WITH_APP_BUNDLE AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local")
|
||||
set(CMAKE_INSTALL_PREFIX "/Applications")
|
||||
endif()
|
||||
|
||||
if(MINGW)
|
||||
set(CLI_INSTALL_DIR ".")
|
||||
set(BIN_INSTALL_DIR ".")
|
||||
set(PLUGIN_INSTALL_DIR ".")
|
||||
set(DATA_INSTALL_DIR "share")
|
||||
elseif(APPLE)
|
||||
elseif(APPLE AND WITH_APP_BUNDLE)
|
||||
set(CLI_INSTALL_DIR "/usr/local/bin")
|
||||
set(BIN_INSTALL_DIR ".")
|
||||
set(PLUGIN_INSTALL_DIR ".")
|
||||
set(PLUGIN_INSTALL_DIR "${PROGNAME}.app/Contents/PlugIns")
|
||||
set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources")
|
||||
else()
|
||||
include(GNUInstallDirs)
|
||||
|
||||
set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}")
|
||||
set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}")
|
||||
set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassx")
|
||||
set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassx")
|
||||
set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc")
|
||||
set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc")
|
||||
endif()
|
||||
|
||||
if(WITH_TESTS)
|
||||
@@ -149,23 +216,29 @@ if(WITH_TESTS)
|
||||
endif(WITH_TESTS)
|
||||
|
||||
find_package(Qt5Core 5.2 REQUIRED)
|
||||
find_package(Qt5Network 5.2 REQUIRED)
|
||||
find_package(Qt5Concurrent 5.2 REQUIRED)
|
||||
find_package(Qt5Widgets 5.2 REQUIRED)
|
||||
find_package(Qt5Test 5.2 REQUIRED)
|
||||
find_package(Qt5LinguistTools 5.2 REQUIRED)
|
||||
find_package(Qt5Network 5.2 REQUIRED)
|
||||
if (UNIX AND NOT APPLE)
|
||||
find_package(Qt5DBus 5.2 REQUIRED)
|
||||
endif()
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
# Debian sets the the build type to None for package builds.
|
||||
# Make sure we don't enable asserts there.
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG)
|
||||
|
||||
find_package(LibGPGError REQUIRED)
|
||||
|
||||
find_package(Gcrypt 1.6.0 REQUIRED)
|
||||
|
||||
find_package(LibMicroHTTPD REQUIRED)
|
||||
|
||||
find_package(ZLIB REQUIRED)
|
||||
|
||||
set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})
|
||||
|
||||
check_cxx_source_compiles("
|
||||
#include <zlib.h>
|
||||
|
||||
@@ -179,6 +252,13 @@ if(NOT ZLIB_SUPPORTS_GZIP)
|
||||
message(FATAL_ERROR "zlib 1.2.x or higher is required to use the gzip format")
|
||||
endif()
|
||||
|
||||
# Optional
|
||||
if(WITH_XC_YUBIKEY)
|
||||
find_package(YubiKey REQUIRED)
|
||||
|
||||
include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
check_cxx_source_compiles("#include <sys/prctl.h>
|
||||
int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }"
|
||||
@@ -207,11 +287,15 @@ include(FeatureSummary)
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(share)
|
||||
add_subdirectory(utils)
|
||||
if(WITH_TESTS)
|
||||
add_subdirectory(tests)
|
||||
endif(WITH_TESTS)
|
||||
|
||||
if(PRINT_SUMMARY)
|
||||
# This will print ENABLED, REQUIRED and DISABLED
|
||||
feature_summary(WHAT ALL)
|
||||
else()
|
||||
# This will only print ENABLED and DISABLED feature
|
||||
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
|
||||
feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
|
||||
endif()
|
||||
|
||||
82
COPYING
@@ -1,5 +1,5 @@
|
||||
KeePassX - http://www.keepassx.org/
|
||||
Copyright (C) 2010-2012 Felix Geyer <debfx@fobos.de>
|
||||
KeePassXC - http://www.keepassxc.org/
|
||||
Copyright (C) 2016-2017 KeePassXC Team <team@keepassxc.org>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -14,9 +14,9 @@ GNU General Public License for more details.
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Format-Specification: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: KeePassX
|
||||
Upstream-Contact: Felix Geyer <debfx@fobos.de>
|
||||
Source: http://www.keepassx.org/
|
||||
Upstream-Name: KeePassXC
|
||||
Upstream-Contact: KeePassXC Team <team@keepassxc.org>
|
||||
Source: http://www.keepassxc.org/
|
||||
|
||||
Copyright: 2010-2012, Felix Geyer <debfx@fobos.de>
|
||||
2011-2012, Florian Geyer <blueice@fobos.de>
|
||||
@@ -27,26 +27,58 @@ Copyright: 2010-2012, Felix Geyer <debfx@fobos.de>
|
||||
2000-2008, Tom Sato <VEF00200@nifty.ne.jp>
|
||||
2013, Laszlo Papp <lpapp@kde.org>
|
||||
2013, David Faure <faure@kde.org>
|
||||
2016-2017, KeePassXC Team <team@keepassxc.org>
|
||||
License: GPL-2 or GPL-3
|
||||
|
||||
Comment: The "KeePassXC Team" in every copyright notice is formed by the following people:
|
||||
- droidmonkey
|
||||
- phoerious
|
||||
- TheZ3ro <io@thezero.org>
|
||||
- louib
|
||||
- weslly
|
||||
Every other contributor is listed on https://github.com/keepassxreboot/keepassxc/graphs/contributors
|
||||
|
||||
Files: cmake/GNUInstallDirs.cmake
|
||||
Copyright: 2011 Nikita Krupen'ko <krnekit@gmail.com>
|
||||
2011 Kitware, Inc.
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: share/icons/application/*/apps/keepassx.png
|
||||
share/icons/application/scalable/apps/keepassx.svgz
|
||||
Copyright: 2006, Otto Salminen
|
||||
2009, Miguelito Vieira
|
||||
2011-2013, Felix Geyer <debfx@fobos.de>
|
||||
2012, Tobias Tangemann <tobiastangemann@gmail.com>
|
||||
License: GPL-2
|
||||
Files: cmake/CodeCoverage.cmake
|
||||
Copyright: 2012 - 2015, Lars Bilke
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: cmake/FindYubiKey.cmake
|
||||
Copyright: 2014 Kyle Manna <kyle@kylemanna.com>
|
||||
License: GPL-2 or GPL-3
|
||||
|
||||
Files: cmake/GenerateProductVersion.cmake
|
||||
Copyright: 2015 halex2005 <akharlov@gmail.com>
|
||||
License: MIT
|
||||
|
||||
Files: cmake/CodeCoverage.cmake
|
||||
Copyright: 2012 - 2015, Lars Bilke
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: share/icons/application/*/apps/keepassxc.png
|
||||
share/icons/application/scalable/apps/keepassxc.svgz
|
||||
share/icons/application/*/apps/keepassxc-dark.png
|
||||
share/icons/application/scalable/apps/keepassxc-dark.svgz
|
||||
share/icons/application/*/apps/keepassxc-locked.png
|
||||
share/icons/application/scalable/apps/keepassxc-locked.svgz
|
||||
share/icons/application/*/apps/keepassxc-unlocked.png
|
||||
share/icons/application/scalable/apps/keepassxc-unlocked.svgz
|
||||
share/icons/application/*/mimetypes/application-x-keepassxc.png
|
||||
share/icons/application/scalable/mimetypes/application-x-keepassxc.svgz
|
||||
Copyright: 2016, Lorenzo Stella <lorenzo.stl@gmail.com>
|
||||
License: LGPL-2
|
||||
|
||||
Files: share/icons/application/*/actions/auto-type.png
|
||||
share/icons/application/*/actions/database-change-key.png
|
||||
share/icons/application/*/actions/entry-clone.png
|
||||
share/icons/application/*/actions/entry-edit.png
|
||||
share/icons/application/*/actions/entry-new.png
|
||||
share/icons/application/*/actions/group-empty-trash.png
|
||||
share/icons/application/*/actions/help-about.png
|
||||
share/icons/application/*/actions/password-generate.png
|
||||
share/icons/database/C00_Password.png
|
||||
share/icons/database/C01_Package_Network.png
|
||||
@@ -132,17 +164,25 @@ Files: share/icons/application/*/actions/application-exit.png
|
||||
share/icons/application/*/actions/document-encrypt.png
|
||||
share/icons/application/*/actions/document-new.png
|
||||
share/icons/application/*/actions/document-open.png
|
||||
share/icons/application/*/actions/document-properties.png
|
||||
share/icons/application/*/actions/document-save.png
|
||||
share/icons/application/*/actions/document-save-as.png
|
||||
share/icons/application/*/actions/edit-clear-locationbar-ltr.png
|
||||
share/icons/application/*/actions/edit-clear-locationbar-rtl.png
|
||||
share/icons/application/*/actions/key-enter.png
|
||||
share/icons/application/*/actions/password-generator.png
|
||||
share/icons/application/*/actions/password-copy.png
|
||||
share/icons/application/*/actions/password-show-*.png
|
||||
share/icons/application/*/actions/system-search.png
|
||||
share/icons/application/*/actions/username-copy.png
|
||||
share/icons/application/*/actions/view-history.png
|
||||
share/icons/application/*/apps/internet-web-browser.png
|
||||
share/icons/application/*/apps/preferences-desktop-icons.png
|
||||
share/icons/application/*/categories/preferences-other.png
|
||||
share/icons/application/*/status/dialog-error.png
|
||||
share/icons/application/*/status/dialog-information.png
|
||||
share/icons/application/*/status/dialog-warning.png
|
||||
share/icons/application/*/status/security-high.png
|
||||
share/icons/svg/*.svgz
|
||||
Copyright: 2007, Nuno Pinheiro <nuno@oxygen-icons.org>
|
||||
2007, David Vignoni <david@icon-king.com>
|
||||
@@ -174,10 +214,6 @@ Files: share/icons/database/C65_W.png
|
||||
Copyright: none
|
||||
License: public-domain
|
||||
|
||||
Files: src/crypto/salsa20/*
|
||||
Copyright: none
|
||||
License: public-domain
|
||||
|
||||
Files: src/streams/qtiocompressor.*
|
||||
src/streams/QtIOCompressor
|
||||
tests/modeltest.*
|
||||
@@ -187,3 +223,17 @@ License: LGPL-2.1 or GPL-3
|
||||
Files: cmake/GetGitRevisionDescription.cmake*
|
||||
Copyright: 2009-2010, Iowa State University
|
||||
License: Boost-1.0
|
||||
|
||||
Files: src/zxcvbn/zxcvbn.*
|
||||
Copyright: 2015, Tony Evans
|
||||
License: BSD 3-clause
|
||||
|
||||
Files: src/http/qhttp/*
|
||||
Copyright: 2014, Amir Zamani
|
||||
License: MIT
|
||||
|
||||
Files: src/gui/KMessageWidget.h
|
||||
src/gui/KMessageWidget.cpp
|
||||
Copyright: 2011 Aurélien Gâteau <agateau@kde.org>
|
||||
2014 Dominik Haumann <dhaumann@kde.org>
|
||||
License: LGPL-2.1
|
||||
|
||||
81
Dockerfile
Normal file
@@ -0,0 +1,81 @@
|
||||
# KeePassXC Linux Release Build Dockerfile
|
||||
# Copyright (C) 2017 KeePassXC team <https://keepassxc.org/>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
FROM centos:7
|
||||
|
||||
RUN set -x \
|
||||
&& curl "https://copr.fedorainfracloud.org/coprs/bugzy/keepassxc/repo/epel-7/bugzy-keepassxc-epel-7.repo" \
|
||||
> /etc/yum.repos.d/bugzy-keepassxc-epel-7.repo
|
||||
|
||||
RUN set -x \
|
||||
&& curl "https://copr.fedorainfracloud.org/coprs/sic/backports/repo/epel-7/sic-backports-epel-7.repo" \
|
||||
> /etc/yum.repos.d/sic-backports-epel-7.repo
|
||||
|
||||
RUN set -x \
|
||||
&& yum clean -y all \
|
||||
&& yum upgrade -y
|
||||
|
||||
# build and runtime dependencies
|
||||
RUN set -x \
|
||||
&& yum install -y \
|
||||
make \
|
||||
automake \
|
||||
gcc-c++ \
|
||||
cmake \
|
||||
libgcrypt16-devel \
|
||||
qt5-qtbase-devel \
|
||||
qt5-linguist \
|
||||
qt5-qttools \
|
||||
zlib-devel \
|
||||
qt5-qtx11extras \
|
||||
qt5-qtx11extras-devel \
|
||||
libXi-devel \
|
||||
libXtst-devel
|
||||
|
||||
# AppImage dependencies
|
||||
RUN set -x \
|
||||
&& yum install -y \
|
||||
wget \
|
||||
fuse-libs
|
||||
|
||||
# build libyubikey
|
||||
ENV YUBIKEY_VERSION=1.13
|
||||
RUN set -x && yum install -y libusb-devel
|
||||
RUN set -x \
|
||||
&& wget "https://developers.yubico.com/yubico-c/Releases/libyubikey-${YUBIKEY_VERSION}.tar.gz" \
|
||||
&& tar xf libyubikey-${YUBIKEY_VERSION}.tar.gz \
|
||||
&& cd libyubikey-${YUBIKEY_VERSION} \
|
||||
&& ./configure --prefix=/usr --libdir=/usr/lib64 \
|
||||
&& make \
|
||||
&& make install \
|
||||
&& cd .. \
|
||||
&& rm -Rf libyubikey-${YUBIKEY_VERSION}*
|
||||
|
||||
# build libykpers-1
|
||||
ENV YKPERS_VERSION=1.18.0
|
||||
RUN set -x \
|
||||
&& wget "https://developers.yubico.com/yubikey-personalization/Releases/ykpers-${YKPERS_VERSION}.tar.gz" \
|
||||
&& tar xf ykpers-${YKPERS_VERSION}.tar.gz \
|
||||
&& cd ykpers-${YKPERS_VERSION} \
|
||||
&& ./configure --prefix=/usr --libdir=/usr/lib64 \
|
||||
&& make \
|
||||
&& make install \
|
||||
&& cd .. \
|
||||
&& rm -Rf ykpers-${YKPERS_VERSION}*
|
||||
|
||||
VOLUME /keepassxc/src
|
||||
VOLUME /keepassxc/out
|
||||
WORKDIR /keepassxc
|
||||
28
INSTALL
@@ -1,28 +0,0 @@
|
||||
Building:
|
||||
=========
|
||||
mkdir build
|
||||
cd build
|
||||
cmake [CMAKE PARAMETERS] ..
|
||||
make [-jX]
|
||||
|
||||
Common cmake parameters:
|
||||
========================
|
||||
-DCMAKE_INSTALL_PREFIX=/usr/local
|
||||
-DCMAKE_VERBOSE_MAKEFILE=ON
|
||||
-DCMAKE_BUILD_TYPE=<RelWithDebInfo/Debug/Release>
|
||||
-DWITH_GUI_TESTS=ON
|
||||
|
||||
Installing:
|
||||
===========
|
||||
make install [DESTDIR=X]
|
||||
|
||||
Create a bundle on Mac:
|
||||
make package
|
||||
|
||||
Run tests:
|
||||
==========
|
||||
make test [CTEST_OUTPUT_ON_FAILURE=1] [ARGS+=-jX] [ARGS+="-E testgui"]
|
||||
|
||||
OS specific instructions:
|
||||
=========================
|
||||
https://www.keepassx.org/dev/projects/keepassx/wiki/Install_instructions
|
||||
101
INSTALL.md
Normal file
@@ -0,0 +1,101 @@
|
||||
Install KeePassXC
|
||||
=================
|
||||
|
||||
This document will guide you across the steps to install KeePassXC.
|
||||
You can visit the online version of this document a the following link
|
||||
|
||||
https://github.com/keepassxreboot/keepassx/wiki/Install-Instruction-from-Source
|
||||
|
||||
|
||||
Build Dependencies
|
||||
==================
|
||||
|
||||
The following tools must exist within your PATH:
|
||||
|
||||
* make
|
||||
* cmake (>= 2.8.12)
|
||||
* g++ (>= 4.7) or clang++ (>= 3.0)
|
||||
|
||||
The following libraries are required:
|
||||
|
||||
* Qt 5 (>= 5.2): qtbase and qttools5
|
||||
* libgcrypt (>= 1.6)
|
||||
* zlib
|
||||
* libmicrohttpd
|
||||
* libxi, libxtst, qtx11extras (optional for auto-type on X11)
|
||||
|
||||
|
||||
Prepare the Building Environment
|
||||
================================
|
||||
|
||||
Building Environment on Linux ==> https://github.com/keepassxreboot/keepassx/wiki/Building-Environment-on-Linux
|
||||
Building Environment on Windows ==> https://github.com/keepassxreboot/keepassx/wiki/Building-Environment-on-Windows
|
||||
Building Environment on MacOS ==> https://github.com/keepassxreboot/keepassx/wiki/Building-Environment-on-MacOS
|
||||
|
||||
|
||||
Build Steps
|
||||
===========
|
||||
|
||||
To compile from source, open a **Terminal (on Linux/MacOS)** or a **MSYS2-MinGW shell (on Windows)**<br/>
|
||||
**Note:** on Windows make sure you are using a **MINGW shell** by checking the label before the current path
|
||||
|
||||
Navigate to the path you have downloaded KeePassXC and type these commands:
|
||||
|
||||
```
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DWITH_TESTS=OFF
|
||||
make
|
||||
```
|
||||
|
||||
**Note:** If you are on MacOS you must add this parameter to **Cmake**, with the Qt version you have installed<br/> `-DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.2/lib/cmake/`
|
||||
|
||||
You will have the compiled KeePassXC binary inside the `./build/src/` directory.
|
||||
|
||||
Common cmake parameters
|
||||
```
|
||||
-DCMAKE_INSTALL_PREFIX=/usr/local
|
||||
-DCMAKE_VERBOSE_MAKEFILE=ON
|
||||
-DCMAKE_BUILD_TYPE=<RelWithDebInfo/Debug/Release>
|
||||
-DWITH_GUI_TESTS=ON
|
||||
```
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
To install this binary execute the following:
|
||||
|
||||
```bash
|
||||
sudo make install
|
||||
```
|
||||
|
||||
You can specify the destination dir with
|
||||
```
|
||||
DESTDIR=X
|
||||
```
|
||||
|
||||
|
||||
Packaging
|
||||
=========
|
||||
|
||||
You can create a package to redistribute KeePassXC (zip, deb, rpm, dmg, etc..)
|
||||
```
|
||||
make package
|
||||
```
|
||||
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
You can perform test on the executable
|
||||
```
|
||||
make test
|
||||
```
|
||||
|
||||
Common parameters:
|
||||
```
|
||||
CTEST_OUTPUT_ON_FAILURE=1
|
||||
ARGS+=-jX
|
||||
ARGS+="-E testgui"
|
||||
```
|
||||
114
README.md
@@ -1,96 +1,78 @@
|
||||
# KeePassX v2.0.2 + keepasshttp
|
||||
# <img src="https://keepassxc.org/logo.png" width="40" height="40"/> KeePassXC [](https://travis-ci.org/keepassxreboot/keepassxc) [](https://coveralls.io/github/keepassxreboot/keepassxc)
|
||||
|
||||

|
||||
KeePass Cross-platform Community Edition
|
||||
|
||||
## About
|
||||
[KeePassXC](https://keepassxc.org) is a community fork of [KeePassX](https://www.keepassx.org/) with the goal to extend and improve it with new features and bugfixes to provide a feature-rich, fully cross-platform and modern open-source password manager.
|
||||
|
||||
Fork of [KeePassX](https://www.keepassx.org/) with keepasshttp support for use with [PassIFox](https://addons.mozilla.org/en-us/firefox/addon/passifox/) for Mozilla Firefox and [chromeIPass](https://chrome.google.com/webstore/detail/chromeipass/ompiailgknfdndiefoaoiligalphfdae) for Google Chrome.
|
||||
|
||||
KeePassHttp implementation has been forked from jdachtera's repository, which in turn was based on code from code with Francois Ferrand's [keepassx-http](https://gitorious.org/keepassx/keepassx-http/source/master:) repository.
|
||||
## Additional features compared to KeePassX
|
||||
- Auto-Type on all three major platforms (Linux, Windows, OS X)
|
||||
- Stand-alone password generator
|
||||
- Password strength meter
|
||||
- YubiKey HMAC-SHA1 authentication for unlocking databases
|
||||
- Using website favicons as entry icons
|
||||
- Merging of databases
|
||||
- Automatic reload when the database changed on disk
|
||||
- KeePassHTTP support for use with KeePassHTTP-Connector for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepasshttp-connector/) and [Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepasshttp-connector/dafgdjggglmmknipkhngniifhplpcldb), and [passafari](https://github.com/mmichaa/passafari.safariextension/) in Safari.
|
||||
- Many bug fixes
|
||||
|
||||
This is a rebuild from [denk-mal's keepasshttp](https://github.com/denk-mal/keepassx.git) that brings it forward to Qt5 and KeePassX v2.0.2.
|
||||
For a full list of features and changes, read the [CHANGELOG](CHANGELOG) document.
|
||||
|
||||
#### Build Dependencies
|
||||
### Note about KeePassHTTP
|
||||
KeePassHTTP is not a highly secure protocol and has certain flaw which allow an attacker to decrypt your passwords when they manage to intercept communication between a KeePassHTTP server and PassIFox/chromeIPass over a network connection (see [here](https://github.com/pfn/keepasshttp/issues/258) and [here](https://github.com/keepassxreboot/keepassxc/issues/147)). KeePassXC therefore strictly limits communication between itself and the browser plugin to your local computer. As long as your computer is not compromised, your passwords are fairly safe that way, but use it at your own risk!
|
||||
|
||||
The following tools must exist within your PATH:
|
||||
### Installation
|
||||
Pre-compiled binaries can be found on the [downloads page](https://keepassxc.org/download). Additionally, individual Linux distributions may ship their own versions, so please check out your distribution's package list to see if KeePassXC is available.
|
||||
|
||||
* make
|
||||
* cmake (>= 2.8.12)
|
||||
* g++ (>= 4.7) or clang++ (>= 3.0)
|
||||
### Building KeePassXC
|
||||
|
||||
The following libraries are required:
|
||||
*More detailed instructions are available in the INSTALL file or on the [Wiki page](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC).*
|
||||
|
||||
* Qt 5 (>= 5.2): qtbase and qttools5
|
||||
* libgcrypt (>= 1.6)
|
||||
* zlib
|
||||
* libmicrohttpd
|
||||
* libxi, libxtst, qtx11extras (optional for auto-type on X11)
|
||||
First, you must download the KeePassXC [source tarball](https://keepassxc.org/download#source) or check out the latest version from our [Git repository](https://github.com/keepassxreboot/keepassxc).
|
||||
|
||||
On Debian you can install them with:
|
||||
To clone the project from Git, `cd` to a suitable location and run
|
||||
|
||||
```bash
|
||||
sudo apt-get install build-essential cmake libmicrohttpd-dev libxi-dev qtbase5-dev libqt5x11extras5-dev qttools5-dev qttools5-dev-tools libgcrypt20-dev zlib1g-dev
|
||||
git clone https://github.com/keepassxreboot/keepassxc.git
|
||||
```
|
||||
|
||||
#### Build Steps
|
||||
This will clone the entire contents of the repository and check out the current `develop` branch.
|
||||
|
||||
To compile from source:
|
||||
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DWITH_TESTS=OFF ..
|
||||
make [-jX]
|
||||
```
|
||||
|
||||
You will have the compiled KeePassX binary inside the `./build/src/` directory.
|
||||
|
||||
To install this binary execute the following:
|
||||
|
||||
```bash
|
||||
sudo make install
|
||||
```
|
||||
|
||||
More detailed instructions available in the INSTALL file.
|
||||
|
||||
## Contribute
|
||||
|
||||
Coordination of work between developers is handled through the [KeePassX development](https://www.keepassx.org/dev/) site.
|
||||
Requests for enhancements, or reports of bugs encountered, can also be reported through the KeePassX development site.
|
||||
However, members of the open-source community are encouraged to submit pull requests directly through GitHub.
|
||||
|
||||
### Clone Repository
|
||||
|
||||
Clone the repository to a suitable location where you can extend and build this project.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/keepassx/keepassx.git
|
||||
```
|
||||
|
||||
**Note:** This will clone the entire contents of the repository at the HEAD revision.
|
||||
|
||||
To update the project from within the project's folder you can run the following command:
|
||||
To update the project from within the project's folder, you can run the following command:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
```
|
||||
|
||||
### Feature Requests
|
||||
Once you have downloaded the source code, you can `cd` into the source code directory, build and install KeePassXC:
|
||||
|
||||
We're always looking for suggestions to improve our application. If you have a suggestion for improving an existing feature,
|
||||
or would like to suggest a completely new feature for KeePassX, please file a ticket on the [KeePassX development](https://www.keepassx.org/dev/) site.
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DWITH_TESTS=OFF ..
|
||||
make -j8
|
||||
sudo make install
|
||||
```
|
||||
|
||||
### Bug Reports
|
||||
cmake accepts the following options:
|
||||
|
||||
Our software isn't always perfect, but we strive to always improve our work. You may file bug reports on the [KeePassX development](https://www.keepassx.org/dev/) site.
|
||||
```
|
||||
-DWITH_XC_AUTOTYPE=[ON|OFF] Enable/Disable Auto-Type (default: ON)
|
||||
-DWITH_XC_HTTP=[ON|OFF] Enable/Disable KeePassHTTP and custom icon downloads (default: OFF)
|
||||
-DWITH_XC_YUBIKEY=[ON|OFF] Enable/Disable YubiKey HMAC-SHA1 authentication support (default: OFF)
|
||||
|
||||
### Pull Requests
|
||||
-DWITH_TESTS=[ON|OFF] Enable/Disable building of unit tests (default: ON)
|
||||
-DWITH_GUI_TESTS=[ON|OFF] Enable/Disable building of GUI tests (default: OFF)
|
||||
-DWITH_DEV_BUILD=[ON|OFF] Enable/Disable deprecated method warnings (default: OFF)
|
||||
-DWITH_ASAN=[ON|OFF] Enable/Disable address sanitizer checks (Linux only) (default: OFF)
|
||||
-DWITH_COVERAGE=[ON|OFF] Enable/Disable coverage tests (GCC only) (default: OFF)
|
||||
```
|
||||
|
||||
Along with our desire to hear your feedback and suggestions, we're also interested in accepting direct assistance in the form of code.
|
||||
### Contributing
|
||||
|
||||
Issue merge requests against our [GitHub repository](https://github.com/keepassxreboot/keepassx).
|
||||
We are always looking for suggestions how to improve our application. If you find any bugs or have an idea for a new feature, please let us know by opening a report in our [issue tracker](https://github.com/keepassxreboot/keepassxc/issues) on GitHub or join us on IRC on freenode channels #keepassxc or #keepassxc-dev.
|
||||
|
||||
### Translations
|
||||
You can of course also directly contribute your own code. We are happy to accept your pull requests.
|
||||
|
||||
Translations are managed on [Transifex](https://www.transifex.com/projects/p/keepassx/) which offers a web interface.
|
||||
Please join an existing language team or request a new one if there is none.
|
||||
Please read the [CONTRIBUTING document](.github/CONTRIBUTING.md) for further information.
|
||||
|
||||
197
cmake/CodeCoverage.cmake
Normal file
@@ -0,0 +1,197 @@
|
||||
# Copyright (c) 2012 - 2015, Lars Bilke
|
||||
# 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.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
# may be used to endorse or promote products derived from this software without
|
||||
# specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
|
||||
#
|
||||
#
|
||||
#
|
||||
# 2012-01-31, Lars Bilke
|
||||
# - Enable Code Coverage
|
||||
#
|
||||
# 2013-09-17, Joakim Söderberg
|
||||
# - Added support for Clang.
|
||||
# - Some additional usage instructions.
|
||||
#
|
||||
# USAGE:
|
||||
|
||||
# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here:
|
||||
# http://stackoverflow.com/a/22404544/80480
|
||||
#
|
||||
# 1. Copy this file into your cmake modules path.
|
||||
#
|
||||
# 2. Add the following line to your CMakeLists.txt:
|
||||
# INCLUDE(CodeCoverage)
|
||||
#
|
||||
# 3. Set compiler flags to turn off optimization and enable coverage:
|
||||
# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
|
||||
# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
|
||||
#
|
||||
# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target
|
||||
# which runs your test executable and produces a lcov code coverage report:
|
||||
# Example:
|
||||
# SETUP_TARGET_FOR_COVERAGE(
|
||||
# my_coverage_target # Name for custom target.
|
||||
# test_driver # Name of the test driver executable that runs the tests.
|
||||
# # NOTE! This should always have a ZERO as exit code
|
||||
# # otherwise the coverage generation will not complete.
|
||||
# coverage # Name of output directory.
|
||||
# )
|
||||
#
|
||||
# 4. Build a Debug build:
|
||||
# cmake -DCMAKE_BUILD_TYPE=Debug ..
|
||||
# make
|
||||
# make my_coverage_target
|
||||
#
|
||||
#
|
||||
|
||||
# Check prereqs
|
||||
FIND_PROGRAM( GCOV_PATH gcov )
|
||||
FIND_PROGRAM( LCOV_PATH lcov )
|
||||
FIND_PROGRAM( GENHTML_PATH genhtml )
|
||||
FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests)
|
||||
|
||||
IF(NOT GCOV_PATH)
|
||||
MESSAGE(FATAL_ERROR "gcov not found! Aborting...")
|
||||
ENDIF() # NOT GCOV_PATH
|
||||
|
||||
IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
|
||||
IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
|
||||
MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
|
||||
ENDIF()
|
||||
ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX)
|
||||
MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
|
||||
ENDIF() # CHECK VALID COMPILER
|
||||
|
||||
SET(CMAKE_CXX_FLAGS_COVERAGE
|
||||
"-g -O0 --coverage -fprofile-arcs -ftest-coverage"
|
||||
CACHE STRING "Flags used by the C++ compiler during coverage builds."
|
||||
FORCE )
|
||||
SET(CMAKE_C_FLAGS_COVERAGE
|
||||
"-g -O0 --coverage -fprofile-arcs -ftest-coverage"
|
||||
CACHE STRING "Flags used by the C compiler during coverage builds."
|
||||
FORCE )
|
||||
SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE
|
||||
""
|
||||
CACHE STRING "Flags used for linking binaries during coverage builds."
|
||||
FORCE )
|
||||
SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
|
||||
""
|
||||
CACHE STRING "Flags used by the shared libraries linker during coverage builds."
|
||||
FORCE )
|
||||
MARK_AS_ADVANCED(
|
||||
CMAKE_CXX_FLAGS_COVERAGE
|
||||
CMAKE_C_FLAGS_COVERAGE
|
||||
CMAKE_EXE_LINKER_FLAGS_COVERAGE
|
||||
CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
|
||||
|
||||
IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage"))
|
||||
MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" )
|
||||
ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
|
||||
|
||||
|
||||
# Param _targetname The name of new the custom make target
|
||||
# Param _testrunner The name of the target which runs the tests.
|
||||
# MUST return ZERO always, even on errors.
|
||||
# If not, no coverage report will be created!
|
||||
# Param _outputname lcov output is generated as _outputname.info
|
||||
# HTML report is generated in _outputname/index.html
|
||||
# Optional fourth parameter is passed as arguments to _testrunner
|
||||
# Pass them in list form, e.g.: "-j;2" for -j 2
|
||||
FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname)
|
||||
|
||||
IF(NOT LCOV_PATH)
|
||||
MESSAGE(FATAL_ERROR "lcov not found! Aborting...")
|
||||
ENDIF() # NOT LCOV_PATH
|
||||
|
||||
IF(NOT GENHTML_PATH)
|
||||
MESSAGE(FATAL_ERROR "genhtml not found! Aborting...")
|
||||
ENDIF() # NOT GENHTML_PATH
|
||||
|
||||
SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info")
|
||||
SET(coverage_cleaned "${coverage_info}.cleaned")
|
||||
|
||||
SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}")
|
||||
|
||||
# Setup target
|
||||
ADD_CUSTOM_TARGET(${_targetname}
|
||||
|
||||
# Cleanup lcov
|
||||
${LCOV_PATH} --directory . --zerocounters
|
||||
|
||||
# Run tests
|
||||
COMMAND ${test_command} ${ARGV3}
|
||||
|
||||
# Capturing lcov counters and generating report
|
||||
COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info}
|
||||
COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' --output-file ${coverage_cleaned}
|
||||
COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned}
|
||||
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
|
||||
)
|
||||
|
||||
# Show info where to find the report
|
||||
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
|
||||
COMMAND ;
|
||||
COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report."
|
||||
)
|
||||
|
||||
ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE
|
||||
|
||||
# Param _targetname The name of new the custom make target
|
||||
# Param _testrunner The name of the target which runs the tests
|
||||
# Param _outputname cobertura output is generated as _outputname.xml
|
||||
# Optional fourth parameter is passed as arguments to _testrunner
|
||||
# Pass them in list form, e.g.: "-j;2" for -j 2
|
||||
FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname)
|
||||
|
||||
IF(NOT PYTHON_EXECUTABLE)
|
||||
MESSAGE(FATAL_ERROR "Python not found! Aborting...")
|
||||
ENDIF() # NOT PYTHON_EXECUTABLE
|
||||
|
||||
IF(NOT GCOVR_PATH)
|
||||
MESSAGE(FATAL_ERROR "gcovr not found! Aborting...")
|
||||
ENDIF() # NOT GCOVR_PATH
|
||||
|
||||
ADD_CUSTOM_TARGET(${_targetname}
|
||||
|
||||
# Run tests
|
||||
${_testrunner} ${ARGV3}
|
||||
|
||||
# Running gcovr
|
||||
COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Running gcovr to produce Cobertura code coverage report."
|
||||
)
|
||||
|
||||
# Show info where to find the report
|
||||
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
|
||||
COMMAND ;
|
||||
COMMENT "Cobertura code coverage report saved in ${_outputname}.xml."
|
||||
)
|
||||
|
||||
ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
|
||||
# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -13,14 +13,11 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
include_directories(../src)
|
||||
find_path(GPGERROR_INCLUDE_DIR gpg-error.h)
|
||||
|
||||
add_executable(kdbx-extract kdbx-extract.cpp)
|
||||
target_link_libraries(kdbx-extract
|
||||
keepassx_core
|
||||
${MHD_LIBRARIES}
|
||||
Qt5::Core
|
||||
Qt5::Concurrent
|
||||
Qt5::Widgets
|
||||
${GCRYPT_LIBRARIES}
|
||||
${ZLIB_LIBRARIES})
|
||||
find_library(GPGERROR_LIBRARIES gpg-error)
|
||||
|
||||
mark_as_advanced(GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(LibGPGError DEFAULT_MSG GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR)
|
||||
@@ -1,9 +0,0 @@
|
||||
|
||||
find_path(MHD_INCLUDE_DIR microhttpd.h)
|
||||
|
||||
find_library(MHD_LIBRARIES microhttpd)
|
||||
|
||||
mark_as_advanced(MHD_LIBRARIES MHD_INCLUDE_DIR)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(LibMicroHTTPD DEFAULT_MSG MHD_LIBRARIES MHD_INCLUDE_DIR)
|
||||
27
cmake/FindYubiKey.cmake
Normal file
@@ -0,0 +1,27 @@
|
||||
# Copyright (C) 2014 Kyle Manna <kyle@kylemanna.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
find_path(YUBIKEY_CORE_INCLUDE_DIR yubikey.h)
|
||||
find_path(YUBIKEY_PERS_INCLUDE_DIR ykcore.h PATH_SUFFIXES ykpers-1)
|
||||
set(YUBIKEY_INCLUDE_DIRS ${YUBIKEY_CORE_INCLUDE_DIR} ${YUBIKEY_PERS_INCLUDE_DIR})
|
||||
|
||||
find_library(YUBIKEY_CORE_LIBRARY yubikey)
|
||||
find_library(YUBIKEY_PERS_LIBRARY ykpers-1)
|
||||
set(YUBIKEY_LIBRARIES ${YUBIKEY_CORE_LIBRARY} ${YUBIKEY_PERS_LIBRARY})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(YubiKey DEFAULT_MSG YUBIKEY_LIBRARIES YUBIKEY_INCLUDE_DIRS)
|
||||
|
||||
mark_as_advanced(YUBIKEY_LIBRARIES YUBIKEY_INCLUDE_DIRS)
|
||||
118
cmake/GenerateProductVersion.cmake
Normal file
@@ -0,0 +1,118 @@
|
||||
# The MIT License (MIT)
|
||||
#
|
||||
# Copyright (c) 2015, by [halex2005](mailto:akharlov@gmail.com)
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
include (CMakeParseArguments)
|
||||
|
||||
set (GenerateProductVersionCurrentDir ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
# generate_product_version() function
|
||||
#
|
||||
# This function uses VersionInfo.in template file and VersionResource.rc file
|
||||
# to generate WIN32 resource with version information and general resource strings.
|
||||
#
|
||||
# Usage:
|
||||
# generate_product_version(
|
||||
# SomeOutputResourceVariable
|
||||
# NAME MyGreatProject
|
||||
# ICON ${PATH_TO_APP_ICON}
|
||||
# VERSION_MAJOR 2
|
||||
# VERSION_MINOR 3
|
||||
# VERSION_PATH ${BUILD_COUNTER}
|
||||
# VERSION_REVISION ${BUILD_REVISION}
|
||||
# )
|
||||
# where BUILD_COUNTER and BUILD_REVISION could be values from your CI server.
|
||||
#
|
||||
# You can use generated resource for your executable targets:
|
||||
# add_executable(target-name ${target-files} ${SomeOutputResourceVariable})
|
||||
#
|
||||
# You can specify resource strings in arguments:
|
||||
# NAME - name of executable (no defaults, ex: Microsoft Word)
|
||||
# BUNDLE - bundle (${NAME} is default, ex: Microsoft Office)
|
||||
# VERSION_MAJOR - 1 is default
|
||||
# VERSION_MINOR - 0 is default
|
||||
# VERSION_PATCH - 0 is default
|
||||
# COMPANY_NAME - your company name (no defaults)
|
||||
# COMPANY_COPYRIGHT - ${COMPANY_NAME} (C) Copyright ${CURRENT_YEAR} is default
|
||||
# COMMENTS - ${NAME} v${VERSION_MAJOR}.${VERSION_MINOR} is default
|
||||
# ORIGINAL_FILENAME - ${NAME} is default
|
||||
# INTERNAL_NAME - ${NAME} is default
|
||||
# FILE_DESCRIPTION - ${NAME} is default
|
||||
function(generate_product_version outfiles)
|
||||
set (options)
|
||||
set (oneValueArgs
|
||||
NAME
|
||||
BUNDLE
|
||||
VERSION_MAJOR
|
||||
VERSION_MINOR
|
||||
VERSION_PATCH
|
||||
COMPANY_NAME
|
||||
COMPANY_COPYRIGHT
|
||||
COMMENTS
|
||||
ORIGINAL_FILENAME
|
||||
INTERNAL_NAME
|
||||
FILE_DESCRIPTION)
|
||||
set (multiValueArgs)
|
||||
cmake_parse_arguments(PRODUCT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
if (NOT PRODUCT_BUNDLE OR "${PRODUCT_BUNDLE}" STREQUAL "")
|
||||
set(PRODUCT_BUNDLE "${PRODUCT_NAME}")
|
||||
endif()
|
||||
if (NOT PRODUCT_VERSION_MAJOR OR "${PRODUCT_VERSION_MAJOR}" STREQUAL "")
|
||||
set(PRODUCT_VERSION_MAJOR 1)
|
||||
endif()
|
||||
if (NOT PRODUCT_VERSION_MINOR OR "${PRODUCT_VERSION_MINOR}" STREQUAL "")
|
||||
set(PRODUCT_VERSION_MINOR 0)
|
||||
endif()
|
||||
if (NOT PRODUCT_VERSION_PATCH OR "${PRODUCT_VERSION_PATCH}" STREQUAL "")
|
||||
set(PRODUCT_VERSION_PATCH 0)
|
||||
endif()
|
||||
|
||||
if (NOT PRODUCT_COMPANY_COPYRIGHT OR "${PRODUCT_COMPANY_COPYRIGHT}" STREQUAL "")
|
||||
string(TIMESTAMP PRODUCT_CURRENT_YEAR "%Y")
|
||||
set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}")
|
||||
endif()
|
||||
if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "")
|
||||
set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}")
|
||||
endif()
|
||||
if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "")
|
||||
set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}")
|
||||
endif()
|
||||
if (NOT PRODUCT_INTERNAL_NAME OR "${PRODUCT_INTERNAL_NAME}" STREQUAL "")
|
||||
set(PRODUCT_INTERNAL_NAME "${PRODUCT_NAME}")
|
||||
endif()
|
||||
if (NOT PRODUCT_FILE_DESCRIPTION OR "${PRODUCT_FILE_DESCRIPTION}" STREQUAL "")
|
||||
set(PRODUCT_FILE_DESCRIPTION "${PRODUCT_NAME}")
|
||||
endif()
|
||||
|
||||
set (_VersionInfoFile ${CMAKE_CURRENT_BINARY_DIR}/VersionInfo.h)
|
||||
set (_VersionResourceFile ${CMAKE_CURRENT_BINARY_DIR}/VersionResource.rc)
|
||||
configure_file(
|
||||
${GenerateProductVersionCurrentDir}/VersionInfo.in
|
||||
${_VersionInfoFile}
|
||||
@ONLY)
|
||||
configure_file(
|
||||
${GenerateProductVersionCurrentDir}/VersionResource.rc
|
||||
${_VersionResourceFile}
|
||||
COPYONLY)
|
||||
list(APPEND ${outfiles} ${_VersionInfoFile} ${_VersionResourceFile})
|
||||
set (${outfiles} ${${outfiles}} PARENT_SCOPE)
|
||||
endfunction()
|
||||
68
cmake/VersionInfo.in
Normal file
@@ -0,0 +1,68 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef PRODUCT_VERSION_MAJOR
|
||||
#define PRODUCT_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@
|
||||
#endif
|
||||
|
||||
#ifndef PRODUCT_VERSION_MINOR
|
||||
#define PRODUCT_VERSION_MINOR @PRODUCT_VERSION_MINOR@
|
||||
#endif
|
||||
|
||||
#ifndef PRODUCT_VERSION_PATCH
|
||||
#define PRODUCT_VERSION_PATCH @PRODUCT_VERSION_PATCH@
|
||||
#endif
|
||||
|
||||
#ifndef FILE_VERSION_MAJOR
|
||||
#define FILE_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@
|
||||
#endif
|
||||
|
||||
#ifndef FILE_VERSION_MINOR
|
||||
#define FILE_VERSION_MINOR @PRODUCT_VERSION_MINOR@
|
||||
#endif
|
||||
|
||||
#ifndef FILE_VERSION_PATCH
|
||||
#define FILE_VERSION_PATCH @PRODUCT_VERSION_PATCH@
|
||||
#endif
|
||||
|
||||
#ifndef __TO_STRING
|
||||
#define __TO_STRING_IMPL(x) #x
|
||||
#define __TO_STRING(x) __TO_STRING_IMPL(x)
|
||||
#endif
|
||||
|
||||
#define PRODUCT_VERSION_MAJOR_MINOR_STR __TO_STRING(PRODUCT_VERSION_MAJOR) "." __TO_STRING(PRODUCT_VERSION_MINOR)
|
||||
#define PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR PRODUCT_VERSION_MAJOR_MINOR_STR "." __TO_STRING(PRODUCT_VERSION_PATCH)
|
||||
#define PRODUCT_VERSION_RESOURCE PRODUCT_VERSION_MAJOR,PRODUCT_VERSION_MINOR,PRODUCT_VERSION_PATCH,0
|
||||
#define PRODUCT_VERSION_RESOURCE_STR PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR "\0"
|
||||
|
||||
#define FILE_VERSION_MAJOR_MINOR_STR __TO_STRING(FILE_VERSION_MAJOR) "." __TO_STRING(FILE_VERSION_MINOR)
|
||||
#define FILE_VERSION_MAJOR_MINOR_PATCH_STR FILE_VERSION_MAJOR_MINOR_STR "." __TO_STRING(FILE_VERSION_PATCH)
|
||||
#define FILE_VERSION_RESOURCE FILE_VERSION_MAJOR,FILE_VERSION_MINOR,FILE_VERSION_PATCH,0
|
||||
#define FILE_VERSION_RESOURCE_STR FILE_VERSION_MAJOR_MINOR_PATCH_STR "\0"
|
||||
|
||||
#ifndef PRODUCT_COMMENTS
|
||||
#define PRODUCT_COMMENTS "@PRODUCT_COMMENTS@\0"
|
||||
#endif
|
||||
|
||||
#ifndef PRODUCT_COMPANY_NAME
|
||||
#define PRODUCT_COMPANY_NAME "@PRODUCT_COMPANY_NAME@\0"
|
||||
#endif
|
||||
|
||||
#ifndef PRODUCT_COMPANY_COPYRIGHT
|
||||
#define PRODUCT_COMPANY_COPYRIGHT "@PRODUCT_COMPANY_COPYRIGHT@\0"
|
||||
#endif
|
||||
|
||||
#ifndef PRODUCT_FILE_DESCRIPTION
|
||||
#define PRODUCT_FILE_DESCRIPTION "@PRODUCT_FILE_DESCRIPTION@\0"
|
||||
#endif
|
||||
|
||||
#ifndef PRODUCT_INTERNAL_NAME
|
||||
#define PRODUCT_INTERNAL_NAME "@PRODUCT_NAME@\0"
|
||||
#endif
|
||||
|
||||
#ifndef PRODUCT_ORIGINAL_FILENAME
|
||||
#define PRODUCT_ORIGINAL_FILENAME "@PRODUCT_ORIGINAL_FILENAME@\0"
|
||||
#endif
|
||||
|
||||
#ifndef PRODUCT_BUNDLE
|
||||
#define PRODUCT_BUNDLE "@PRODUCT_BUNDLE@\0"
|
||||
#endif
|
||||
36
cmake/VersionResource.rc
Normal file
@@ -0,0 +1,36 @@
|
||||
#include "VersionInfo.h"
|
||||
#include "winresrc.h"
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION FILE_VERSION_RESOURCE
|
||||
PRODUCTVERSION PRODUCT_VERSION_RESOURCE
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "Comments", PRODUCT_COMMENTS
|
||||
VALUE "CompanyName", PRODUCT_COMPANY_NAME
|
||||
VALUE "FileDescription", PRODUCT_FILE_DESCRIPTION
|
||||
VALUE "FileVersion", FILE_VERSION_RESOURCE_STR
|
||||
VALUE "InternalName", PRODUCT_INTERNAL_NAME
|
||||
VALUE "LegalCopyright", PRODUCT_COMPANY_COPYRIGHT
|
||||
VALUE "OriginalFilename", PRODUCT_ORIGINAL_FILENAME
|
||||
VALUE "ProductName", PRODUCT_BUNDLE
|
||||
VALUE "ProductVersion", PRODUCT_VERSION_RESOURCE_STR
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
765
release-tool
Executable file
@@ -0,0 +1,765 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# KeePassXC Release Preparation Helper
|
||||
# Copyright (C) 2017 KeePassXC team <https://keepassxc.org/>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
printf "\e[1m\e[32mKeePassXC\e[0m Release Preparation Helper\n"
|
||||
printf "Copyright (C) 2017 KeePassXC Team <https://keepassxc.org/>\n\n"
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# global default values
|
||||
# -----------------------------------------------------------------------
|
||||
RELEASE_NAME=""
|
||||
APP_NAME="KeePassXC"
|
||||
SRC_DIR="."
|
||||
GPG_KEY="CFB4C2166397D0D2"
|
||||
GPG_GIT_KEY=""
|
||||
OUTPUT_DIR="release"
|
||||
SOURCE_BRANCH=""
|
||||
TARGET_BRANCH="master"
|
||||
TAG_NAME=""
|
||||
DOCKER_IMAGE=""
|
||||
DOCKER_CONTAINER_NAME="keepassxc-build-container"
|
||||
CMAKE_OPTIONS=""
|
||||
COMPILER="g++"
|
||||
MAKE_OPTIONS="-j8"
|
||||
BUILD_PLUGINS="autotype http yubikey"
|
||||
INSTALL_PREFIX="/usr/local"
|
||||
BUILD_SOURCE_TARBALL=true
|
||||
ORIG_BRANCH=""
|
||||
ORIG_CWD="$(pwd)"
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# helper functions
|
||||
# -----------------------------------------------------------------------
|
||||
printUsage() {
|
||||
local cmd
|
||||
if [ "" == "$1" ] || [ "help" == "$1" ]; then
|
||||
cmd="COMMAND"
|
||||
elif [ "check" == "$1" ] || [ "merge" == "$1" ] || [ "build" == "$1" ] || [ "sign" == "$1" ]; then
|
||||
cmd="$1"
|
||||
else
|
||||
logError "Unknown command: '$1'\n"
|
||||
cmd="COMMAND"
|
||||
fi
|
||||
|
||||
printf "\e[1mUsage:\e[0m $(basename $0) $cmd [--version x.y.z] [options]\n"
|
||||
|
||||
if [ "COMMAND" == "$cmd" ]; then
|
||||
cat << EOF
|
||||
|
||||
Commands:
|
||||
check Perform a dry-run check, nothing is changed
|
||||
merge Merge release branch into main branch and create release tags
|
||||
build Build and package binary release from sources
|
||||
sign Sign previously compiled release packages
|
||||
help Show help for the given command
|
||||
EOF
|
||||
elif [ "merge" == "$cmd" ]; then
|
||||
cat << EOF
|
||||
|
||||
Merge release branch into main branch and create release tags
|
||||
|
||||
Options:
|
||||
-v, --version Release version number or name (required)
|
||||
-a, --app-name Application name (default: '${APP_NAME}')
|
||||
-s, --source-dir Source directory (default: '${SRC_DIR}')
|
||||
-g, --gpg-key GPG key used to sign the merge commit and release tag,
|
||||
leave empty to let Git choose your default key
|
||||
(default: '${GPG_GIT_KEY}')
|
||||
-r, --release-branch Source release branch to merge from (default: 'release/VERSION')
|
||||
--target-branch Target branch to merge to (default: '${TARGET_BRANCH}')
|
||||
-t, --tag-name Override release tag name (defaults to version number)
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
elif [ "build" == "$cmd" ]; then
|
||||
cat << EOF
|
||||
|
||||
Build and package binary release from sources
|
||||
|
||||
Options:
|
||||
-v, --version Release version number or name (required)
|
||||
-a, --app-name Application name (default: '${APP_NAME}')
|
||||
-s, --source-dir Source directory (default: '${SRC_DIR}')
|
||||
-o, --output-dir Output directory where to build the release
|
||||
(default: '${OUTPUT_DIR}')
|
||||
-t, --tag-name Release tag to check out (defaults to version number)
|
||||
-b, --build Build sources after exporting release
|
||||
-d, --docker-image Use the specified Docker image to compile the application.
|
||||
The image must have all required build dependencies installed.
|
||||
This option has no effect if --build is not set.
|
||||
--container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}')
|
||||
The container must not exist already
|
||||
-c, --cmake-options Additional CMake options for compiling the sources
|
||||
--compiler Compiler to use (default: '${COMPILER}')
|
||||
-m, --make-options Make options for compiling sources (default: '${MAKE_OPTIONS}')
|
||||
-i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}')
|
||||
-p, --plugins Space-separated list of plugins to build
|
||||
(default: ${BUILD_PLUGINS})
|
||||
-n, --no-source-tarball Don't build source tarball
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
elif [ "sign" == "$cmd" ]; then
|
||||
cat << EOF
|
||||
|
||||
Sign previously compiled release packages
|
||||
|
||||
Options:
|
||||
-f, --files Files to sign (required)
|
||||
-g, --gpg-key GPG key used to sign the files (default: '${GPG_KEY}')
|
||||
--signtool Specify the signtool executable (default: 'signtool')
|
||||
--signtool-key Provide a key to be used with signtool (for Windows EXE)
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
||||
logInfo() {
|
||||
printf "\e[1m[ \e[34mINFO\e[39m ]\e[0m $1\n"
|
||||
}
|
||||
|
||||
logError() {
|
||||
printf "\e[1m[ \e[31mERROR\e[39m ]\e[0m $1\n" >&2
|
||||
}
|
||||
|
||||
init() {
|
||||
if [ "" == "$RELEASE_NAME" ]; then
|
||||
logError "Missing arguments, --version is required!\n"
|
||||
printUsage "check"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "" == "$TAG_NAME" ]; then
|
||||
TAG_NAME="$RELEASE_NAME"
|
||||
fi
|
||||
|
||||
if [ "" == "$SOURCE_BRANCH" ]; then
|
||||
SOURCE_BRANCH="release/${RELEASE_NAME}"
|
||||
fi
|
||||
|
||||
ORIG_CWD="$(pwd)"
|
||||
SRC_DIR="$(realpath "$SRC_DIR")"
|
||||
cd "$SRC_DIR" > /dev/null 2>&1
|
||||
ORIG_BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)"
|
||||
cd "$ORIG_CWD"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
logInfo "Checking out original branch..."
|
||||
if [ "" != "$ORIG_BRANCH" ]; then
|
||||
git checkout "$ORIG_BRANCH" > /dev/null 2>&1
|
||||
fi
|
||||
logInfo "Leaving source directory..."
|
||||
cd "$ORIG_CWD"
|
||||
}
|
||||
|
||||
exitError() {
|
||||
logError "$1"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
exitTrap() {
|
||||
exitError "Existing upon user request..."
|
||||
}
|
||||
|
||||
checkSourceDirExists() {
|
||||
if [ ! -d "$SRC_DIR" ]; then
|
||||
exitError "Source directory '${SRC_DIR}' does not exist!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkOutputDirDoesNotExist() {
|
||||
if [ -e "$OUTPUT_DIR" ]; then
|
||||
exitError "Output directory '$OUTPUT_DIR' already exists. Please choose a different location!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkGitRepository() {
|
||||
if [ ! -d .git ] || [ ! -f CHANGELOG ]; then
|
||||
exitError "Source directory is not a valid Git repository!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkTagExists() {
|
||||
git tag | grep -q "$TAG_NAME"
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "Tag '${TAG_NAME}' does not exist!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkReleaseDoesNotExist() {
|
||||
git tag | grep -q "$TAG_NAME"
|
||||
if [ $? -eq 0 ]; then
|
||||
exitError "Release '$RELEASE_NAME' (tag: '$TAG_NAME') already exists!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkWorkingTreeClean() {
|
||||
git diff-index --quiet HEAD --
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "Current working tree is not clean! Please commit or unstage any changes."
|
||||
fi
|
||||
}
|
||||
|
||||
checkSourceBranchExists() {
|
||||
git rev-parse "$SOURCE_BRANCH" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "Source branch '$SOURCE_BRANCH' does not exist!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkTargetBranchExists() {
|
||||
git rev-parse "$TARGET_BRANCH" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "Target branch '$TARGET_BRANCH' does not exist!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkVersionInCMake() {
|
||||
local app_name_upper="$(echo "$APP_NAME" | tr '[:lower:]' '[:upper:]')"
|
||||
local major_num="$(echo ${RELEASE_NAME} | cut -f1 -d.)"
|
||||
local minor_num="$(echo ${RELEASE_NAME} | cut -f2 -d.)"
|
||||
local patch_num="$(echo ${RELEASE_NAME} | cut -f3 -d.)"
|
||||
|
||||
grep -q "${app_name_upper}_VERSION_MAJOR \"${major_num}\"" CMakeLists.txt
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "${app_name_upper}_VERSION_MAJOR not updated to '${major_num}' in CMakeLists.txt!"
|
||||
fi
|
||||
|
||||
grep -q "${app_name_upper}_VERSION_MINOR \"${minor_num}\"" CMakeLists.txt
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "${app_name_upper}_VERSION_MINOR not updated to '${minor_num}' in CMakeLists.txt!"
|
||||
fi
|
||||
|
||||
grep -q "${app_name_upper}_VERSION_PATCH \"${patch_num}\"" CMakeLists.txt
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "${app_name_upper}_VERSION_PATCH not updated to '${patch_num}' in CMakeLists.txt!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkChangeLog() {
|
||||
if [ ! -f CHANGELOG ]; then
|
||||
exitError "No CHANGELOG file found!"
|
||||
fi
|
||||
|
||||
grep -qPzo "${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n=+\n" CHANGELOG
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "'CHANGELOG' has not been updated to the '${RELEASE_NAME}' release!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkAppStreamInfo() {
|
||||
if [ ! -f share/linux/org.keepassxc.appdata.xml ]; then
|
||||
exitError "No AppStream info file found!"
|
||||
fi
|
||||
|
||||
grep -qPzo "<release version=\"${RELEASE_NAME}\" date=\"\d{4}-\d{2}-\d{2}\">" share/linux/org.keepassxc.appdata.xml
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "'share/linux/org.keepassxc.appdata.xml' has not been updated to the '${RELEASE_NAME}' release!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkSnapcraft() {
|
||||
if [ ! -f snapcraft.yaml ]; then
|
||||
echo "No snapcraft file found!"
|
||||
return
|
||||
fi
|
||||
|
||||
grep -qPzo "version: ${RELEASE_NAME}" snapcraft.yaml
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "'snapcraft.yaml' has not been updated to the '${RELEASE_NAME}' release!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkTransifexCommandExists() {
|
||||
command -v tx > /dev/null
|
||||
if [ 0 -ne $? ]; then
|
||||
exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'"
|
||||
fi
|
||||
}
|
||||
|
||||
checkQt5LUpdateExists() {
|
||||
command -v lupdate > /dev/null
|
||||
if [ 0 -eq $? ] && ! $(lupdate -version | grep -q "lupdate version 5\."); then
|
||||
command -v lupdate-qt5 > /dev/null
|
||||
if [ 0 -ne $? ]; then
|
||||
exitError "Qt Linguist tool (lupdate-qt5) is not installed! Please install using 'apt install qttools5-dev-tools'"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
performChecks() {
|
||||
logInfo "Performing basic checks..."
|
||||
|
||||
checkSourceDirExists
|
||||
|
||||
logInfo "Changing to source directory..."
|
||||
cd "${SRC_DIR}"
|
||||
|
||||
logInfo "Validating toolset and repository..."
|
||||
|
||||
checkTransifexCommandExists
|
||||
checkQt5LUpdateExists
|
||||
checkGitRepository
|
||||
checkReleaseDoesNotExist
|
||||
checkWorkingTreeClean
|
||||
checkSourceBranchExists
|
||||
checkTargetBranchExists
|
||||
|
||||
logInfo "Checking out '${SOURCE_BRANCH}'..."
|
||||
git checkout "$SOURCE_BRANCH"
|
||||
|
||||
logInfo "Attempting to find '${RELEASE_NAME}' in various files..."
|
||||
|
||||
checkVersionInCMake
|
||||
checkChangeLog
|
||||
checkAppStreamInfo
|
||||
checkSnapcraft
|
||||
|
||||
logInfo "\e[1m\e[32mAll checks passed!\e[0m"
|
||||
}
|
||||
|
||||
# re-implement realpath for OS X (thanks mschrag)
|
||||
# https://superuser.com/questions/205127/
|
||||
if ! $(command -v realpath > /dev/null); then
|
||||
realpath() {
|
||||
pushd . > /dev/null
|
||||
if [ -d "$1" ]; then
|
||||
cd "$1"
|
||||
dirs -l +0
|
||||
else
|
||||
cd "$(dirname "$1")"
|
||||
cur_dir=$(dirs -l +0)
|
||||
|
||||
if [ "$cur_dir" == "/" ]; then
|
||||
echo "$cur_dir$(basename "$1")"
|
||||
else
|
||||
echo "$cur_dir/$(basename "$1")"
|
||||
fi
|
||||
fi
|
||||
popd > /dev/null
|
||||
}
|
||||
fi
|
||||
|
||||
|
||||
trap exitTrap SIGINT SIGTERM
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# check command
|
||||
# -----------------------------------------------------------------------
|
||||
check() {
|
||||
while [ $# -ge 1 ]; do
|
||||
local arg="$1"
|
||||
case "$arg" in
|
||||
-v|--version)
|
||||
RELEASE_NAME="$2"
|
||||
shift ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
init
|
||||
|
||||
performChecks
|
||||
|
||||
cleanup
|
||||
|
||||
logInfo "Congrats! You can successfully merge, build, and sign KeepassXC."
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# merge command
|
||||
# -----------------------------------------------------------------------
|
||||
merge() {
|
||||
while [ $# -ge 1 ]; do
|
||||
local arg="$1"
|
||||
case "$arg" in
|
||||
-v|--version)
|
||||
RELEASE_NAME="$2"
|
||||
shift ;;
|
||||
|
||||
-a|--app-name)
|
||||
APP_NAME="$2"
|
||||
shift ;;
|
||||
|
||||
-s|--source-dir)
|
||||
SRC_DIR="$2"
|
||||
shift ;;
|
||||
|
||||
-g|--gpg-key)
|
||||
GPG_GIT_KEY="$2"
|
||||
shift ;;
|
||||
|
||||
-r|--release-branch)
|
||||
SOURCE_BRANCH="$2"
|
||||
shift ;;
|
||||
|
||||
--target-branch)
|
||||
TARGET_BRANCH="$2"
|
||||
shift ;;
|
||||
|
||||
-t|--tag-name)
|
||||
TAG_NAME="$2"
|
||||
shift ;;
|
||||
|
||||
-h|--help)
|
||||
printUsage "merge"
|
||||
exit ;;
|
||||
|
||||
*)
|
||||
logError "Unknown option '$arg'\n"
|
||||
printUsage "merge"
|
||||
exit 1 ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
init
|
||||
|
||||
performChecks
|
||||
|
||||
logInfo "Updating language files..."
|
||||
./share/translations/update.sh
|
||||
if [ 0 -ne $? ]; then
|
||||
exitError "Updating translations failed!"
|
||||
fi
|
||||
git diff-index --quiet HEAD --
|
||||
if [ $? -ne 0 ]; then
|
||||
git add ./share/translations/*
|
||||
logInfo "Committing changes..."
|
||||
if [ "" == "$GPG_GIT_KEY" ]; then
|
||||
git commit -m "Update translations"
|
||||
else
|
||||
git commit -m "Update translations" -S"$GPG_GIT_KEY"
|
||||
fi
|
||||
fi
|
||||
|
||||
CHANGELOG=$(grep -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n)=+\n\n?(?:.|\n)+?\n(?=\n)" \
|
||||
CHANGELOG | grep -Pzo '(?<=\n\n)(.|\n)+' | tr -d \\0)
|
||||
COMMIT_MSG="Release ${RELEASE_NAME}"
|
||||
|
||||
logInfo "Checking out target branch '${TARGET_BRANCH}'..."
|
||||
git checkout "$TARGET_BRANCH"
|
||||
|
||||
logInfo "Merging '${SOURCE_BRANCH}' into '${TARGET_BRANCH}'..."
|
||||
|
||||
git merge "$SOURCE_BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$SOURCE_BRANCH" -S"$GPG_GIT_KEY"
|
||||
|
||||
logInfo "Creating tag '${TAG_NAME}'..."
|
||||
if [ "" == "$GPG_GIT_KEY" ]; then
|
||||
git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s
|
||||
else
|
||||
git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY"
|
||||
fi
|
||||
|
||||
cleanup
|
||||
|
||||
logInfo "All done!"
|
||||
logInfo "Please merge the release branch back into the develop branch now and then push your changes."
|
||||
logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m."
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# build command
|
||||
# -----------------------------------------------------------------------
|
||||
build() {
|
||||
while [ $# -ge 1 ]; do
|
||||
local arg="$1"
|
||||
case "$arg" in
|
||||
-v|--version)
|
||||
RELEASE_NAME="$2"
|
||||
shift ;;
|
||||
|
||||
-a|--app-name)
|
||||
APP_NAME="$2"
|
||||
shift ;;
|
||||
|
||||
-s|--source-dir)
|
||||
SRC_DIR="$2"
|
||||
shift ;;
|
||||
|
||||
-o|--output-dir)
|
||||
OUTPUT_DIR="$2"
|
||||
shift ;;
|
||||
|
||||
-t|--tag-name)
|
||||
TAG_NAME="$2"
|
||||
shift ;;
|
||||
|
||||
-d|--docker-image)
|
||||
DOCKER_IMAGE="$2"
|
||||
shift ;;
|
||||
|
||||
--container-name)
|
||||
DOCKER_CONTAINER_NAME="$2"
|
||||
shift ;;
|
||||
|
||||
-c|--cmake-options)
|
||||
CMAKE_OPTIONS="$2"
|
||||
shift ;;
|
||||
|
||||
--compiler)
|
||||
COMPILER="$2"
|
||||
shift ;;
|
||||
|
||||
-m|--make-options)
|
||||
MAKE_OPTIONS="$2"
|
||||
shift ;;
|
||||
|
||||
-i|--install-prefix)
|
||||
INSTALL_PREFIX="$2"
|
||||
shift ;;
|
||||
|
||||
-p|--plugins)
|
||||
BUILD_PLUGINS="$2"
|
||||
shift ;;
|
||||
|
||||
-n|--no-source-tarball)
|
||||
BUILD_SOURCE_TARBALL=false ;;
|
||||
|
||||
-h|--help)
|
||||
printUsage "build"
|
||||
exit ;;
|
||||
|
||||
*)
|
||||
logError "Unknown option '$arg'\n"
|
||||
printUsage "build"
|
||||
exit 1 ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
init
|
||||
checkWorkingTreeClean
|
||||
|
||||
OUTPUT_DIR="$(realpath "$OUTPUT_DIR")"
|
||||
|
||||
logInfo "Checking out release tag '${TAG_NAME}'..."
|
||||
git checkout "$TAG_NAME"
|
||||
|
||||
logInfo "Creating output directory..."
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "Failed to create output directory!"
|
||||
fi
|
||||
|
||||
if $BUILD_SOURCE_TARBALL; then
|
||||
logInfo "Creating source tarball..."
|
||||
local app_name_lower="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')"
|
||||
TARBALL_NAME="${app_name_lower}-${RELEASE_NAME}-src.tar.xz"
|
||||
git archive --format=tar "$TAG_NAME" --prefix="${app_name_lower}-${RELEASE_NAME}/" \
|
||||
| xz -6 > "${OUTPUT_DIR}/${TARBALL_NAME}"
|
||||
fi
|
||||
|
||||
logInfo "Creating build directory..."
|
||||
mkdir -p "${OUTPUT_DIR}/build-release"
|
||||
cd "${OUTPUT_DIR}/build-release"
|
||||
|
||||
logInfo "Configuring sources..."
|
||||
for p in $BUILD_PLUGINS; do
|
||||
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On"
|
||||
done
|
||||
|
||||
if [ "$COMPILER" == "g++" ]; then
|
||||
export CC=gcc
|
||||
elif [ "$COMPILER" == "clang++" ]; then
|
||||
export CC=clang
|
||||
fi
|
||||
export CXX="$COMPILER"
|
||||
|
||||
if [ "" == "$DOCKER_IMAGE" ]; then
|
||||
if [ "$(uname -s)" == "Darwin" ]; then
|
||||
# Building on OS X
|
||||
local qt_vers="$(ls /usr/local/Cellar/qt5 2> /dev/null | sort -r | head -n1)"
|
||||
if [ "" == "$qt_vers" ]; then
|
||||
exitError "Couldn't find Qt5! Please make sure it is available in '/usr/local/Cellar/qt5'."
|
||||
fi
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.7
|
||||
|
||||
logInfo "Configuring build..."
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DCMAKE_OSX_ARCHITECTURES=x86_64 -DWITH_CXX11=OFF \
|
||||
-DCMAKE_PREFIX_PATH="/usr/local/Cellar/qt5/${qt_vers}/lib/cmake" \
|
||||
-DQT_BINARY_DIR="/usr/local/Cellar/qt5/${qt_vers}/bin" $CMAKE_OPTIONS "$SRC_DIR"
|
||||
|
||||
logInfo "Compiling and packaging sources..."
|
||||
make $MAKE_OPTIONS package
|
||||
|
||||
mv "./${APP_NAME}-${RELEASE_NAME}.dmg" ../
|
||||
elif [ "$(uname -o)" == "Msys" ]; then
|
||||
# Building on Windows with Msys
|
||||
logInfo "Configuring build..."
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off -G"MSYS Makefiles" \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" $CMAKE_OPTIONS "$SRC_DIR"
|
||||
|
||||
logInfo "Compiling and packaging sources..."
|
||||
make $MAKE_OPTIONS package
|
||||
|
||||
mv "./${APP_NAME}-${RELEASE_NAME}-"*.{exe,zip} ../
|
||||
else
|
||||
mkdir -p "${OUTPUT_DIR}/bin-release"
|
||||
|
||||
# Building on Linux without Docker container
|
||||
logInfo "Configuring build..."
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
|
||||
-DKEEPASSXC_DIST_TYPE=AppImage "$SRC_DIR"
|
||||
|
||||
logInfo "Compiling sources..."
|
||||
make $MAKE_OPTIONS
|
||||
|
||||
logInfo "Installing to bin dir..."
|
||||
make DESTDIR="${OUTPUT_DIR}/bin-release" install/strip
|
||||
|
||||
logInfo "Creating AppImage..."
|
||||
${SRC_DIR}/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME"
|
||||
fi
|
||||
else
|
||||
mkdir -p "${OUTPUT_DIR}/bin-release"
|
||||
|
||||
logInfo "Launching Docker container to compile sources..."
|
||||
|
||||
docker run --name "$DOCKER_CONTAINER_NAME" --rm \
|
||||
--cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \
|
||||
-e "CC=${CC}" -e "CXX=${CXX}" \
|
||||
-v "$(realpath "$SRC_DIR"):/keepassxc/src:ro" \
|
||||
-v "$(realpath "$OUTPUT_DIR"):/keepassxc/out:rw" \
|
||||
"$DOCKER_IMAGE" \
|
||||
bash -c "cd /keepassxc/out/build-release && \
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \
|
||||
-DCMAKE_INSTALL_PREFIX=\"${INSTALL_PREFIX}\" /keepassxc/src && \
|
||||
make $MAKE_OPTIONS && make DESTDIR=/keepassxc/out/bin-release install/strip && \
|
||||
/keepassxc/src/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME""
|
||||
|
||||
if [ 0 -ne $? ]; then
|
||||
exitError "Docker build failed!"
|
||||
fi
|
||||
|
||||
logInfo "Build finished, Docker container terminated."
|
||||
fi
|
||||
|
||||
cleanup
|
||||
|
||||
logInfo "All done!"
|
||||
}
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# sign command
|
||||
# -----------------------------------------------------------------------
|
||||
sign() {
|
||||
SIGN_FILES=()
|
||||
SIGNTOOL="signtool"
|
||||
SIGNTOOL_KEY=""
|
||||
|
||||
while [ $# -ge 1 ]; do
|
||||
local arg="$1"
|
||||
case "$arg" in
|
||||
-f|--files)
|
||||
while [ "${2:0:1}" != "-" ] && [ $# -ge 2 ]; do
|
||||
SIGN_FILES+=("$2")
|
||||
shift
|
||||
done ;;
|
||||
|
||||
-g|--gpg-key)
|
||||
GPG_KEY="$2"
|
||||
shift ;;
|
||||
|
||||
--signtool)
|
||||
SIGNTOOL="$2"
|
||||
shift ;;
|
||||
|
||||
--signtool-key)
|
||||
SIGNTOOL_KEY="$2"
|
||||
shift ;;
|
||||
|
||||
-h|--help)
|
||||
printUsage "sign"
|
||||
exit ;;
|
||||
|
||||
*)
|
||||
logError "Unknown option '$arg'\n"
|
||||
printUsage "sign"
|
||||
exit 1 ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z "$SIGN_FILES" ]; then
|
||||
logError "Missing arguments, --files is required!\n"
|
||||
printUsage "sign"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$SIGNTOOL_KEY" && ! -f "$SIGNTOOL_KEY" ]]; then
|
||||
exitError "Signtool Key was not found!"
|
||||
elif [[ -f "$SIGNTOOL_KEY" && ! -x $(command -v "${SIGNTOOL}") ]]; then
|
||||
exitError "signtool program not found on PATH!"
|
||||
fi
|
||||
|
||||
for f in "${SIGN_FILES[@]}"; do
|
||||
if [ ! -f "$f" ]; then
|
||||
exitError "File '${f}' does not exist!"
|
||||
fi
|
||||
|
||||
if [[ -n "$SIGNTOOL_KEY" && ${f: -4} == '.exe' ]]; then
|
||||
logInfo "Signing file '${f}' using signtool...\n"
|
||||
read -s -p "Signtool Key Password: " password
|
||||
echo
|
||||
"${SIGNTOOL}" sign -f "${SIGNTOOL_KEY}" -p ${password} -v -t http://timestamp.comodoca.com/authenticode ${f}
|
||||
|
||||
if [ 0 -ne $? ]; then
|
||||
exitError "Signing failed!"
|
||||
fi
|
||||
fi
|
||||
|
||||
logInfo "Signing file '${f}' using release key..."
|
||||
gpg --output "${f}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$f"
|
||||
|
||||
if [ 0 -ne $? ]; then
|
||||
exitError "Signing failed!"
|
||||
fi
|
||||
|
||||
logInfo "Creating digest for file '${f}'..."
|
||||
local rp="$(realpath "$f")"
|
||||
local bname="$(basename "$f")"
|
||||
(cd "$(dirname "$rp")"; sha256sum "$bname" > "${bname}.DIGEST")
|
||||
done
|
||||
|
||||
logInfo "All done!"
|
||||
}
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# parse global command line
|
||||
# -----------------------------------------------------------------------
|
||||
MODE="$1"
|
||||
shift
|
||||
if [ "" == "$MODE" ]; then
|
||||
logError "Missing arguments!\n"
|
||||
printUsage
|
||||
exit 1
|
||||
elif [ "help" == "$MODE" ]; then
|
||||
printUsage "$1"
|
||||
exit
|
||||
elif [ "check" == "$MODE" ] || [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] || [ "sign" == "$MODE" ]; then
|
||||
$MODE "$@"
|
||||
else
|
||||
printUsage "$MODE"
|
||||
fi
|
||||
@@ -1,4 +1,5 @@
|
||||
# Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
|
||||
# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -15,40 +16,125 @@
|
||||
|
||||
add_subdirectory(translations)
|
||||
|
||||
file(GLOB wordlists_files "wordlists/*.wordlist")
|
||||
install(FILES ${wordlists_files} DESTINATION ${DATA_INSTALL_DIR}/wordlists)
|
||||
|
||||
file(GLOB DATABASE_ICONS icons/database/*.png)
|
||||
|
||||
install(FILES ${DATABASE_ICONS} DESTINATION ${DATA_INSTALL_DIR}/icons/database)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor
|
||||
FILES_MATCHING PATTERN "keepassx.png" PATTERN "keepassx.svgz")
|
||||
FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svgz"
|
||||
PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE)
|
||||
install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor
|
||||
FILES_MATCHING PATTERN "application-x-keepassx.png" PATTERN "application-x-keepassx.svgz")
|
||||
install(FILES linux/keepassx.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||
install(FILES linux/keepassx.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
|
||||
FILES_MATCHING PATTERN "application-x-keepassxc.png" PATTERN "application-x-keepassxc.svgz"
|
||||
PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE)
|
||||
install(FILES linux/org.keepassxc.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||
install(FILES linux/org.keepassxc.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
|
||||
install(FILES linux/keepassxc.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
|
||||
endif(UNIX AND NOT APPLE)
|
||||
|
||||
if(APPLE)
|
||||
install(FILES macosx/keepassx.icns DESTINATION ${DATA_INSTALL_DIR})
|
||||
install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR})
|
||||
endif()
|
||||
|
||||
install(DIRECTORY icons/application/ DESTINATION ${DATA_INSTALL_DIR}/icons/application
|
||||
FILES_MATCHING PATTERN "*.png" PATTERN "*.svgz")
|
||||
|
||||
add_custom_target(icons
|
||||
COMMAND png2icns macosx/keepassx.icns
|
||||
icons/application/16x16/apps/keepassx.png
|
||||
icons/application/32x32/apps/keepassx.png
|
||||
icons/application/48x48/apps/keepassx.png
|
||||
icons/application/128x128/apps/keepassx.png
|
||||
icons/application/256x256/apps/keepassx.png
|
||||
COMMAND icotool -c -o windows/keepassx.ico
|
||||
icons/application/16x16/apps/keepassx.png
|
||||
icons/application/24x24/apps/keepassx.png
|
||||
icons/application/32x32/apps/keepassx.png
|
||||
icons/application/48x48/apps/keepassx.png
|
||||
icons/application/64x64/apps/keepassx.png
|
||||
icons/application/128x128/apps/keepassx.png
|
||||
icons/application/256x256/apps/keepassx.png
|
||||
# SVGZ to PNGs for KeePassXC
|
||||
COMMAND inkscape -z -w 16 -h 16
|
||||
icons/application/scalable/apps/keepassxc.svgz -e icons/application/16x16/apps/keepassxc.png
|
||||
COMMAND inkscape -z -w 24 -h 24
|
||||
icons/application/scalable/apps/keepassxc.svgz -e icons/application/24x24/apps/keepassxc.png
|
||||
COMMAND inkscape -z -w 32 -h 32
|
||||
icons/application/scalable/apps/keepassxc.svgz -e icons/application/32x32/apps/keepassxc.png
|
||||
COMMAND inkscape -z -w 48 -h 48
|
||||
icons/application/scalable/apps/keepassxc.svgz -e icons/application/48x48/apps/keepassxc.png
|
||||
COMMAND inkscape -z -w 64 -h 64
|
||||
icons/application/scalable/apps/keepassxc.svgz -e icons/application/64x64/apps/keepassxc.png
|
||||
COMMAND inkscape -z -w 128 -h 128
|
||||
icons/application/scalable/apps/keepassxc.svgz -e icons/application/128x128/apps/keepassxc.png
|
||||
COMMAND inkscape -z -w 256 -h 256
|
||||
icons/application/scalable/apps/keepassxc.svgz -e icons/application/256x256/apps/keepassxc.png
|
||||
|
||||
# SVGZ to PNGs for KeePassXC
|
||||
COMMAND inkscape -z -w 16 -h 16
|
||||
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/16x16/apps/keepassxc-dark.png
|
||||
COMMAND inkscape -z -w 24 -h 24
|
||||
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/24x24/apps/keepassxc-dark.png
|
||||
COMMAND inkscape -z -w 32 -h 32
|
||||
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/32x32/apps/keepassxc-dark.png
|
||||
COMMAND inkscape -z -w 48 -h 48
|
||||
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/48x48/apps/keepassxc-dark.png
|
||||
COMMAND inkscape -z -w 64 -h 64
|
||||
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/64x64/apps/keepassxc-dark.png
|
||||
COMMAND inkscape -z -w 128 -h 128
|
||||
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/128x128/apps/keepassxc-dark.png
|
||||
COMMAND inkscape -z -w 256 -h 256
|
||||
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/256x256/apps/keepassxc-dark.png
|
||||
|
||||
# SVGZ to PNGs for KeePassXC
|
||||
COMMAND inkscape -z -w 16 -h 16
|
||||
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/16x16/apps/keepassxc-locked.png
|
||||
COMMAND inkscape -z -w 24 -h 24
|
||||
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/24x24/apps/keepassxc-locked.png
|
||||
COMMAND inkscape -z -w 32 -h 32
|
||||
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/32x32/apps/keepassxc-locked.png
|
||||
COMMAND inkscape -z -w 48 -h 48
|
||||
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/48x48/apps/keepassxc-locked.png
|
||||
COMMAND inkscape -z -w 64 -h 64
|
||||
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/64x64/apps/keepassxc-locked.png
|
||||
COMMAND inkscape -z -w 128 -h 128
|
||||
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/128x128/apps/keepassxc-locked.png
|
||||
COMMAND inkscape -z -w 256 -h 256
|
||||
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/256x256/apps/keepassxc-locked.png
|
||||
|
||||
# SVGZ to PNGs for KeePassXC
|
||||
COMMAND inkscape -z -w 16 -h 16
|
||||
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/16x16/apps/keepassxc-unlocked.png
|
||||
COMMAND inkscape -z -w 24 -h 24
|
||||
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/24x24/apps/keepassxc-unlocked.png
|
||||
COMMAND inkscape -z -w 32 -h 32
|
||||
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/32x32/apps/keepassxc-unlocked.png
|
||||
COMMAND inkscape -z -w 48 -h 48
|
||||
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/48x48/apps/keepassxc-unlocked.png
|
||||
COMMAND inkscape -z -w 64 -h 64
|
||||
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/64x64/apps/keepassxc-unlocked.png
|
||||
COMMAND inkscape -z -w 128 -h 128
|
||||
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/128x128/apps/keepassxc-unlocked.png
|
||||
COMMAND inkscape -z -w 256 -h 256
|
||||
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/256x256/apps/keepassxc-unlocked.png
|
||||
|
||||
# SVGZ to PNGs for KeePassXC MIME-Type
|
||||
COMMAND inkscape -z -w 16 -h 16
|
||||
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/16x16/mimetypes/application-x-keepassxc.png
|
||||
COMMAND inkscape -z -w 22 -h 22
|
||||
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/22x22/mimetypes/application-x-keepassxc.png
|
||||
COMMAND inkscape -z -w 32 -h 32
|
||||
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/32x32/mimetypes/application-x-keepassxc.png
|
||||
COMMAND inkscape -z -w 64 -h 64
|
||||
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/64x64/mimetypes/application-x-keepassxc.png
|
||||
COMMAND inkscape -z -w 128 -h 128
|
||||
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/128x128/mimetypes/application-x-keepassxc.png
|
||||
|
||||
# ICNS for MacOS
|
||||
COMMAND png2icns macosx/keepassxc.icns
|
||||
icons/application/16x16/apps/keepassxc.png
|
||||
icons/application/32x32/apps/keepassxc.png
|
||||
icons/application/48x48/apps/keepassxc.png
|
||||
icons/application/128x128/apps/keepassxc.png
|
||||
icons/application/256x256/apps/keepassxc.png
|
||||
|
||||
# ICO for Windows
|
||||
COMMAND icotool -c -o windows/keepassxc.ico
|
||||
icons/application/16x16/apps/keepassxc.png
|
||||
icons/application/24x24/apps/keepassxc.png
|
||||
icons/application/32x32/apps/keepassxc.png
|
||||
icons/application/48x48/apps/keepassxc.png
|
||||
icons/application/64x64/apps/keepassxc.png
|
||||
icons/application/128x128/apps/keepassxc.png
|
||||
icons/application/256x256/apps/keepassxc.png
|
||||
VERBATIM
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
|
Before Width: | Height: | Size: 9.0 KiB |
BIN
share/icons/application/128x128/apps/keepassxc-dark.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
share/icons/application/128x128/apps/keepassxc-locked.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
share/icons/application/128x128/apps/keepassxc-unlocked.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
share/icons/application/128x128/apps/keepassxc.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
BIN
share/icons/application/16x16/actions/group-empty-trash.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
share/icons/application/16x16/actions/message-close.png
Normal file
|
After Width: | Height: | Size: 457 B |
BIN
share/icons/application/16x16/actions/password-generator.png
Normal file
|
After Width: | Height: | Size: 733 B |
|
Before Width: | Height: | Size: 814 B |
BIN
share/icons/application/16x16/apps/keepassxc-dark.png
Normal file
|
After Width: | Height: | Size: 838 B |
BIN
share/icons/application/16x16/apps/keepassxc-locked.png
Normal file
|
After Width: | Height: | Size: 863 B |
BIN
share/icons/application/16x16/apps/keepassxc-unlocked.png
Normal file
|
After Width: | Height: | Size: 880 B |
BIN
share/icons/application/16x16/apps/keepassxc.png
Normal file
|
After Width: | Height: | Size: 880 B |
|
Before Width: | Height: | Size: 711 B |
|
After Width: | Height: | Size: 715 B |
BIN
share/icons/application/22x22/actions/document-new.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
share/icons/application/22x22/actions/message-close.png
Normal file
|
After Width: | Height: | Size: 457 B |
BIN
share/icons/application/22x22/actions/password-generator.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
share/icons/application/24x24/apps/keepassxc-dark.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
share/icons/application/24x24/apps/keepassxc-locked.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
share/icons/application/24x24/apps/keepassxc-unlocked.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
share/icons/application/24x24/apps/keepassxc.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 20 KiB |
BIN
share/icons/application/256x256/apps/keepassxc-dark.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
share/icons/application/256x256/apps/keepassxc-locked.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
share/icons/application/256x256/apps/keepassxc-unlocked.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
share/icons/application/256x256/apps/keepassxc.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
share/icons/application/32x32/actions/document-edit.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
share/icons/application/32x32/actions/document-properties.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
share/icons/application/32x32/actions/key-enter.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
share/icons/application/32x32/actions/view-history.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
share/icons/application/32x32/apps/internet-web-browser.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
BIN
share/icons/application/32x32/apps/keepassxc-dark.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
share/icons/application/32x32/apps/keepassxc-locked.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
share/icons/application/32x32/apps/keepassxc-unlocked.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
share/icons/application/32x32/apps/keepassxc.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
share/icons/application/32x32/apps/preferences-desktop-icons.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
share/icons/application/32x32/categories/preferences-other.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
BIN
share/icons/application/32x32/status/security-high.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
BIN
share/icons/application/48x48/apps/keepassxc-dark.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
share/icons/application/48x48/apps/keepassxc-locked.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
share/icons/application/48x48/apps/keepassxc-unlocked.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
share/icons/application/48x48/apps/keepassxc.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
BIN
share/icons/application/64x64/apps/keepassxc-dark.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
share/icons/application/64x64/apps/keepassxc-locked.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
share/icons/application/64x64/apps/keepassxc-unlocked.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
share/icons/application/64x64/apps/keepassxc.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
BIN
share/icons/application/scalable/apps/keepassxc-dark.svgz
Normal file
BIN
share/icons/application/scalable/apps/keepassxc-locked.svgz
Normal file
BIN
share/icons/application/scalable/apps/keepassxc-unlocked.svgz
Normal file
BIN
share/icons/application/scalable/apps/keepassxc.svgz
Normal file
BIN
share/icons/svg/application-x-keepassxc-16.svgz
Normal file
BIN
share/icons/svg/application-x-keepassxc.svgz
Normal file
BIN
share/icons/svg/document-properties.svgz
Normal file
BIN
share/icons/svg/internet-web-browser.svgz
Normal file
BIN
share/icons/svg/key-enter.svgz
Normal file
65
share/icons/svg/message-close.svg
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="tab-close.svg"
|
||||
inkscape:version="0.92.1 r">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="791"
|
||||
inkscape:window-height="480"
|
||||
id="namedview8"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-x="1301"
|
||||
inkscape:window-y="443"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg6" />
|
||||
<defs
|
||||
id="defs3051">
|
||||
<style
|
||||
type="text/css"
|
||||
id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#f2f2f2;
|
||||
}
|
||||
.ColorScheme-NegativeText {
|
||||
color:#da4453;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
||||
class="ColorScheme-NegativeText"
|
||||
d="M 8,2 A 6,6 0 0 0 2,8 6,6 0 0 0 8,14 6,6 0 0 0 14,8 6,6 0 0 0 8,2 Z M 5.70703,5 8,7.29297 10.29297,5 11,5.70703 8.70703,8 11,10.29297 10.29297,11 8,8.70703 5.70703,11 5,10.29297 7.29297,8 5,5.70703 5.70703,5 Z"
|
||||
id="path4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
865
share/icons/svg/password-generator.svgz
Normal file
@@ -0,0 +1,865 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="128"
|
||||
height="128"
|
||||
id="svg1307"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.46+devel"
|
||||
version="1.0"
|
||||
sodipodi:docname="roll.svgz"
|
||||
inkscape:output_extension="org.inkscape.output.svgz.inkscape"
|
||||
inkscape:export-filename="/home/pinheiro/pics/oxygen-icons/scalable/actions/roll.png"
|
||||
inkscape:export-xdpi="180"
|
||||
inkscape:export-ydpi="180">
|
||||
<defs
|
||||
id="defs1309">
|
||||
<linearGradient
|
||||
id="linearGradient3718"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop3720"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3722"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3680">
|
||||
<stop
|
||||
id="stop3682"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.49803922;"
|
||||
offset="0.22032471"
|
||||
id="stop3684" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="0.5"
|
||||
id="stop3686" />
|
||||
<stop
|
||||
id="stop3688"
|
||||
offset="0.5"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
<stop
|
||||
id="stop3690"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3291">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3293" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3295" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 64 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="128 : 64 : 1"
|
||||
inkscape:persp3d-origin="64 : 42.666667 : 1"
|
||||
id="perspective87" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2381">
|
||||
<stop
|
||||
style="stop-color:#393939;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2383" />
|
||||
<stop
|
||||
style="stop-color:#393939;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2385" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2518">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2520" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2522" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2496">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2498" />
|
||||
<stop
|
||||
id="stop2508"
|
||||
offset="0.04228718"
|
||||
style="stop-color:#ffffff;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
id="stop2504"
|
||||
offset="0.5"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="0.5"
|
||||
id="stop2506" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2500" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2488">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2490" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2492" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2453">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2455" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2457" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2419">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2421" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2423" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3225">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3227" />
|
||||
<stop
|
||||
id="stop2347"
|
||||
offset="0.5"
|
||||
style="stop-color:#e9e9e9;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#d3d3d3;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3229" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient2425"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612"
|
||||
gradientTransform="matrix(0.32911414,-0.18426278,0.00344988,0.00676072,59.169639,65.342464)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient2429"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.31464719,0.16663594,-0.00390006,0.0070264,6.1939502,29.102501)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient2433"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-6.5370771e-4,0.36915148,-0.01148035,8.9888928e-4,66.206754,56.948367)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient2480"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.30975608,-0.17225438,0.00324696,0.00631933,7.1075276,35.761713)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient2484"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.30528058,0.15922188,-0.00378396,0.00671573,60.709321,2.5331232)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2496"
|
||||
id="linearGradient1432"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.814691,-0.4513534,-0.01142073,0.9309698,-11.541647,47.221462)"
|
||||
x1="116.81535"
|
||||
y1="186.85913"
|
||||
x2="154.86906"
|
||||
y2="30.208342" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3718"
|
||||
id="radialGradient1435"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.4096939,-0.05084026,0.0016784,0.495142,37.98752,30.25767)"
|
||||
cx="68.964005"
|
||||
cy="63.915367"
|
||||
fx="68.964005"
|
||||
fy="63.915367"
|
||||
r="20.153163" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2518"
|
||||
id="radialGradient1438"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.68188455,-0.10453237,0.03601738,0.43439777,16.732111,38.459404)"
|
||||
cx="68.964005"
|
||||
cy="63.915367"
|
||||
fx="68.964005"
|
||||
fy="63.915367"
|
||||
r="20.153163" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2488"
|
||||
id="linearGradient1441"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="94.021759"
|
||||
y1="3.2521791"
|
||||
x2="92.337082"
|
||||
y2="6.8190994"
|
||||
gradientTransform="matrix(0.77496397,-0.47736424,0.41995021,0.75244601,-11.810014,48.172506)" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient1456"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.80824314,-0.45051001,-0.01677524,0.96571805,-10.092238,38.234456)"
|
||||
cx="113.60279"
|
||||
cy="117.94415"
|
||||
fx="113.60279"
|
||||
fy="117.94415"
|
||||
r="6.6403217" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient1459"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.80824314,-0.45051001,-0.01677524,0.96571805,-12.747064,45.293861)"
|
||||
cx="148.67097"
|
||||
cy="79.114578"
|
||||
fx="148.67097"
|
||||
fy="79.114578"
|
||||
r="6.2969127" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient1463"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.76906443,0.41392843,-0.01330547,0.86085475,-11.512513,48.253962)"
|
||||
cx="59.905712"
|
||||
cy="5.9431438"
|
||||
fx="59.905712"
|
||||
fy="5.9431438"
|
||||
r="7.4961972" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient1467"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-16.121677,46.553274)"
|
||||
cx="84.408051"
|
||||
cy="50.798088"
|
||||
fx="84.408051"
|
||||
fy="50.798088"
|
||||
r="6.9240074" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient1471"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-13.240155,47.67091)"
|
||||
cx="67.268486"
|
||||
cy="30.446516"
|
||||
fx="67.268486"
|
||||
fy="30.446516"
|
||||
r="6.8208823" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient1474"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-11.409803,49.062709)"
|
||||
cx="49.933464"
|
||||
cy="9.8521395"
|
||||
fx="49.933464"
|
||||
fy="9.8521395"
|
||||
r="6.9496646" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2453"
|
||||
id="radialGradient1480"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.5645257,-0.34773821,0.28363904,0.50821111,10.679939,54.077116)"
|
||||
cx="67.876709"
|
||||
cy="60.201225"
|
||||
fx="67.876709"
|
||||
fy="60.201225"
|
||||
r="60.815896" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2381"
|
||||
id="linearGradient2387"
|
||||
x1="-90.709442"
|
||||
y1="153.80435"
|
||||
x2="78.643684"
|
||||
y2="12.660598"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.75854865,0.40826863,-0.0137637,0.89050228,-5.4092216,29.668461)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3291"
|
||||
id="linearGradient3297"
|
||||
x1="57.296326"
|
||||
y1="-20.721647"
|
||||
x2="67.490227"
|
||||
y2="55.915768"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3291"
|
||||
id="linearGradient3301"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="57.296326"
|
||||
y1="-16.490377"
|
||||
x2="57.296326"
|
||||
y2="45.567513" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3429"
|
||||
x="-0.090069178"
|
||||
width="1.1801384"
|
||||
y="-0.16560408"
|
||||
height="1.3312082">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.68605903"
|
||||
id="feGaussianBlur3431" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3433"
|
||||
x="-0.091769746"
|
||||
width="1.1835395"
|
||||
y="-0.1687308"
|
||||
height="1.3374616">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.68605903"
|
||||
id="feGaussianBlur3435" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3437"
|
||||
x="-0.090402938"
|
||||
width="1.1808059"
|
||||
y="-0.16621775"
|
||||
height="1.3324355">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.68605903"
|
||||
id="feGaussianBlur3439" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3482"
|
||||
x="-0.039611745"
|
||||
width="1.0792235"
|
||||
y="-0.29708207"
|
||||
height="1.5941641">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.3721181"
|
||||
id="feGaussianBlur3484" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3518">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.45785798"
|
||||
id="feGaussianBlur3520" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3574">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.0125102"
|
||||
id="feGaussianBlur3576" />
|
||||
</filter>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2453"
|
||||
id="radialGradient3638"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.634595,-0.3859285,-0.3188445,0.5737883,277.62315,52.360143)"
|
||||
cx="67.876709"
|
||||
cy="60.201225"
|
||||
fx="67.876709"
|
||||
fy="60.201225"
|
||||
r="60.815896" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient3640"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.8645212,0.4720778,1.4956952e-2,0.9675874,302.57014,45.61879)"
|
||||
cx="59.905712"
|
||||
cy="5.9431438"
|
||||
fx="59.905712"
|
||||
fy="5.9431438"
|
||||
r="7.4961972" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient3642"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.9085628,-0.4993103,1.8857387e-2,1.0854359,303.95792,42.280409)"
|
||||
cx="148.67097"
|
||||
cy="79.114578"
|
||||
fx="148.67097"
|
||||
fy="79.114578"
|
||||
r="6.2969127" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient3644"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.9085628,-0.4993103,1.8857387e-2,1.0854359,300.97358,34.368164)"
|
||||
cx="113.60279"
|
||||
cy="117.94415"
|
||||
fx="113.60279"
|
||||
fy="117.94415"
|
||||
r="6.6403217" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient3646"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.369964,-0.2042355,-3.878083e-3,7.6302398e-3,223.11488,65.450748)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient3648"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.3537014,0.1900896,4.3841428e-3,7.864176e-3,282.66594,24.246158)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient3650"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(7.3484633e-4,0.414965,1.2905298e-2,9.0936266e-4,214.00431,56.076739)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient3652"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.369964,-0.2042355,-3.878083e-3,7.6302398e-3,282.46217,32.207255)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2419"
|
||||
id="radialGradient3654"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.3537014,0.1900896,4.3841428e-3,7.864176e-3,223.01536,-6.4711824)"
|
||||
cx="96.433075"
|
||||
cy="57.087173"
|
||||
fx="96.433075"
|
||||
fy="57.087173"
|
||||
r="59.198612" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2488"
|
||||
id="linearGradient3656"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.871153,-0.5297908,-0.4720747,0.8495381,302.90457,45.524605)"
|
||||
x1="94.021759"
|
||||
y1="3.2521791"
|
||||
x2="92.337082"
|
||||
y2="6.8190994" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2518"
|
||||
id="radialGradient3658"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.7665205,-0.1115024,-4.0487885e-2,0.4886327,270.81978,34.857245)"
|
||||
cx="68.964005"
|
||||
cy="63.915367"
|
||||
fx="68.964005"
|
||||
fy="63.915367"
|
||||
r="20.153163" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2518"
|
||||
id="radialGradient3660"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.2230559,-1.7307682e-2,7.7435003e-3,0.4922829,50.471168,28.127869)"
|
||||
cx="68.964005"
|
||||
cy="63.915367"
|
||||
fx="68.964005"
|
||||
fy="63.915367"
|
||||
r="20.153163" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2496"
|
||||
id="linearGradient3662"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.814691,-0.4513534,-1.1420728e-2,0.9309698,-11.541647,47.22146)"
|
||||
x1="116.81535"
|
||||
y1="186.85913"
|
||||
x2="154.86906"
|
||||
y2="30.208342" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2381"
|
||||
id="linearGradient3664"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.8527002,0.4656229,1.5472064e-2,1.0009108,295.7093,24.780188)"
|
||||
x1="-90.709442"
|
||||
y1="153.80435"
|
||||
x2="78.643684"
|
||||
y2="12.660598" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3291"
|
||||
id="linearGradient3666"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="57.296326"
|
||||
y1="-16.490377"
|
||||
x2="57.296326"
|
||||
y2="45.567513" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient3668"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.9105468,-0.4952714,-0.9474161,0.5152438,302.45468,46.528825)"
|
||||
cx="49.933464"
|
||||
cy="9.8521395"
|
||||
fx="49.933464"
|
||||
fy="9.8521395"
|
||||
r="6.9496646" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient3670"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.9105468,-0.4952714,-0.9474161,0.5152438,304.51222,44.948156)"
|
||||
cx="67.268486"
|
||||
cy="30.446516"
|
||||
fx="67.268486"
|
||||
fy="30.446516"
|
||||
r="6.8208823" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3225"
|
||||
id="radialGradient3672"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.9105468,-0.4952714,-0.9474161,0.5152438,307.7514,43.666425)"
|
||||
cx="84.408051"
|
||||
cy="50.798088"
|
||||
fx="84.408051"
|
||||
fy="50.798088"
|
||||
r="6.9240074" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3680"
|
||||
id="linearGradient3678"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.814691,-0.4513534,-0.01142073,0.9309698,-11.541647,47.221462)"
|
||||
x1="274.36163"
|
||||
y1="186.47618"
|
||||
x2="42.380108"
|
||||
y2="13.043629" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3714">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.42187368"
|
||||
id="feGaussianBlur3716" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3753">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.76746435"
|
||||
id="feGaussianBlur3755" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.0078888"
|
||||
inkscape:cx="119.14631"
|
||||
inkscape:cy="77.382382"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
guidetolerance="0.1px"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1106"
|
||||
inkscape:window-height="958"
|
||||
inkscape:window-x="376"
|
||||
inkscape:window-y="25" />
|
||||
<metadata
|
||||
id="metadata1312">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Oxygen team</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/LGPL/2.1/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/SourceCode" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
style="fill:#181818;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3753)"
|
||||
d="m 63.6875,11.34375 c -0.307888,0.01157 -0.622049,0.03822 -0.9375,0.0625 -0.124077,0.0093 -0.251114,0.0201 -0.375,0.03125 -0.05233,0.0049 -0.103739,0.02601 -0.15625,0.03125 -0.712,0.06846 -1.428165,0.153454 -2.125,0.28125 -0.155698,0.02997 -0.311968,0.06025 -0.46875,0.09375 -1.997959,0.408268 -3.903345,1.039509 -5.53125,1.9375 -0.566172,0.280908 -1.121148,0.597939 -1.6875,0.9375 l -2.0625,1.125 c -3.384614,1.788314 -7.092461,4.343647 -12.375,7.28125 -3.43228,1.90868 -6.456933,3.625939 -9.1875,5.1875 l -4.96875,2.75 c -0.498481,0.274974 -0.961001,0.544756 -1.375,0.84375 l -0.3125,0.1875 c -0.268281,0.175855 -0.545708,0.372427 -0.8125,0.5625 -0.966273,0.596455 -1.527441,1.009092 -1.5,1.0625 0.0068,0.0132 0.146679,-0.07019 0.21875,-0.09375 -3.962556,3.207756 -7.410412,7.880262 -8,12.96875 L 12.0625,46.75 c -0.07009,0.509421 -0.116296,1.030587 -0.125,1.59375 L 10.34375,83.3125 c -0.105144,6.80274 4.445942,14.767952 10.21875,17.875 L 53.8125,119 c 0.416106,0.22396 0.814802,0.4009 1.21875,0.5625 6.179168,2.49704 14.387189,2.03917 19.03125,-0.53125 0.38938,-0.16551 0.784222,-0.33772 1.1875,-0.5625 l 31.125,-17.75 c 5.44542,-3.035234 9.8947,-10.375507 10,-16.4375 l -0.34375,-35.625 c 0.006,-0.33561 -0.0106,-0.655677 -0.0313,-0.96875 l 0.125,-0.21875 C 115.17195,41.889964 112.94649,34.769399 108.25,32.1875 l -1.375,-0.59375 C 106.25301,31.004608 98.645471,26.824191 89.15625,21.875 85.474411,19.954703 82.224469,18.29233 79.34375,16.84375 l -6.53125,-3.5 c -2.121537,-1.139951 -3.811692,-1.796844 -6.625,-1.96875 -0.253862,-0.01693 -0.519547,-0.02233 -0.78125,-0.03125 -0.147499,-0.0043 -0.289561,0.0017 -0.4375,0 -0.414575,-0.0064 -0.85006,-0.0162 -1.28125,0 z"
|
||||
id="path2913"
|
||||
sodipodi:nodetypes="cssssscccscccccscccccccccccccccccsccsssc" />
|
||||
<path
|
||||
style="fill:#181818;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 21.128502,28.09122 c -4.766214,3.124206 -9.405072,8.541154 -10.096359,14.50736 l 8.629169,48.78787 35.366196,27.16282 c 5.06326,2.14656 14.524273,2.44687 19.76131,-0.92915 L 117.12128,43.463792 c -0.95305,-5.578786 -3.1596,-12.685613 -7.85609,-15.267512 L 76.187417,14.016615 27.411339,24.642694 21.128502,28.09122 z"
|
||||
id="path2415"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="opacity:0;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 21.128502,28.09122 c -4.766214,3.124206 -9.405072,8.541154 -10.096359,14.50736 l 8.629169,48.78787 37.487054,27.87435 c 4.487477,0.90002 9.451421,1.77535 17.640452,-2.89762 L 117.12128,43.463792 c -0.95305,-5.578786 -3.1596,-12.685613 -7.85609,-15.267512 L 76.187417,14.016615 27.411339,24.642694 21.128502,28.09122 z"
|
||||
id="path2435"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 21.534884,37.678074 33.235279,17.969949 c 5.772809,3.10706 10.335586,11.084985 10.230441,17.887724 l -0.586755,37.784793 c -0.105145,6.80273 -4.837214,9.77795 -10.610022,6.67089 L 20.568547,100.1994 C 14.795739,97.092352 10.232963,89.114423 10.338107,82.311683 l 0.586756,-37.96271 c 0.105144,-6.802738 4.837213,-9.777959 10.610021,-6.670899 z"
|
||||
id="rect1412"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 22.804196,27.057004 54.101765,9.7925263 C 59.722729,6.6918703 68.514472,6.488197 73.814194,9.3358593 L 108.41349,27.926853 c 5.29972,2.847662 5.0411,7.636379 -0.57986,10.737037 L 76.536061,55.928366 c -5.620963,3.100656 -14.412707,3.304329 -19.712429,0.456667 L 22.224339,37.79404 c -5.299722,-2.847662 -5.041106,-7.636381 0.579857,-10.737036 z"
|
||||
id="rect1414" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 76.279616,56.950767 107.40321,39.201951 c 5.44542,-3.03524 9.7445,-0.598541 9.6392,5.463458 l -0.65538,38.618606 c -0.1053,6.061993 -4.57393,13.385785 -10.01935,16.421019 L 75.244086,117.45385 c -5.445414,3.03523 -9.744496,0.59853 -9.639194,-5.46346 l 0.65538,-38.61861 c 0.105301,-6.062 4.57393,-13.385772 10.019344,-16.421013 z"
|
||||
id="rect1416"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="fill:url(#radialGradient1463);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 34.579473,71.713674 c 3.193841,1.719 5.720571,5.980985 5.665315,9.556022 -0.05526,3.575036 -2.670955,5.069246 -5.864796,3.350246 -3.19384,-1.719 -5.720571,-5.980986 -5.665314,-9.556022 0.05526,-3.575036 2.670954,-5.069247 5.864795,-3.350246 z"
|
||||
id="rect2299" />
|
||||
<path
|
||||
style="fill:url(#radialGradient1459);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 106.19386,48.637332 c 2.81955,-1.571604 5.04233,-0.124684 4.98382,3.244214 -0.0585,3.368899 -2.37553,7.346262 -5.19509,8.917866 -2.81954,1.571599 -5.04232,0.124685 -4.9838,-3.244214 0.0585,-3.368897 2.37552,-7.346266 5.19507,-8.917866 z"
|
||||
id="rect2301" />
|
||||
<path
|
||||
style="fill:url(#radialGradient1456);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 79.85942,94.543208 c 2.973317,-1.657309 5.317323,-0.131486 5.255611,3.421141 -0.06171,3.552621 -2.505079,7.746891 -5.478396,9.404201 -2.973318,1.65731 -5.317324,0.13148 -5.255611,-3.42112 0.06171,-3.55264 2.505079,-7.746904 5.478396,-9.404222 z"
|
||||
id="rect2303" />
|
||||
<path
|
||||
style="fill:url(#radialGradient2425);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 110.58717,37.051279 c 0.11274,0.220925 -8.5242,5.287057 -19.278872,11.30833 -10.754671,6.021272 -19.574594,10.728803 -19.687327,10.507878 -0.112734,-0.220924 8.5242,-5.287055 19.278871,-11.308329 10.754678,-6.021273 19.574588,-10.728803 19.687328,-10.507879 z"
|
||||
id="path2417" />
|
||||
<path
|
||||
style="fill:url(#radialGradient2429);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 54.940385,55.437448 C 54.81294,55.667054 46.364754,51.434053 36.082827,45.988786 25.8009,40.543518 17.559582,35.937824 17.687026,35.708218 c 0.127446,-0.229607 8.575631,4.003395 18.857558,9.448661 10.281927,5.445267 18.523246,10.050963 18.395801,10.280569 z"
|
||||
id="path2427" />
|
||||
<path
|
||||
style="opacity:0.352459;fill:url(#radialGradient2433);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 65.449635,114.45135 c -0.375151,0.0294 -0.662284,-9.73704 -0.640922,-21.800043 0.02136,-12.062997 0.343169,-21.877093 0.71832,-21.906467 0.37515,-0.02937 0.662284,9.737046 0.640922,21.800043 -0.02136,12.062997 -0.343169,21.877087 -0.71832,21.906467 z"
|
||||
id="path2431" />
|
||||
<path
|
||||
style="fill:url(#radialGradient2480);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 55.500752,9.3142325 C 55.606855,9.5207335 47.477933,14.256682 37.355837,19.885546 27.23374,25.514411 18.932593,29.915169 18.826489,29.708669 18.720387,29.502168 26.849309,24.76622 36.971404,19.137356 47.093501,13.508491 55.394649,9.1077316 55.500752,9.3142325 z"
|
||||
id="path2478" />
|
||||
<path
|
||||
style="fill:url(#radialGradient2484);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 108.00464,27.696488 C 107.88099,27.915941 99.6843,23.871327 89.70845,18.668329 79.732601,13.465333 71.736615,9.0645036 71.860266,8.8450494 c 0.123651,-0.2194542 8.320347,3.8251596 18.296196,9.0281566 9.975848,5.202996 17.971838,9.603826 17.848178,9.823282 z"
|
||||
id="path2482" />
|
||||
<path
|
||||
style="fill:url(#linearGradient1441);fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="M 52.391314,10.725421 C 60.218637,6.0324839 68.182969,7.1388117 72.02313,8.5821097 66.243539,7.7850786 57.513187,8.4568441 52.391314,10.725421 z"
|
||||
id="path2486" />
|
||||
<path
|
||||
style="fill:url(#linearGradient1432);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3574)"
|
||||
d="m 77.08844,56.915281 34.08864,-19.331703 c 5.59118,-3.097618 10.02975,-0.486059 9.95196,5.855507 l -0.50832,41.436025 c -0.0778,6.341565 -4.64162,13.940612 -10.23281,17.03823 l -34.088639,20.3317 c -5.591181,3.09763 -10.029752,0.48606 -9.951956,-5.8555 l 0.508319,-42.43603 c 0.0778,-6.341566 4.641626,-13.940614 10.232806,-17.038229 z"
|
||||
id="rect2556"
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)" />
|
||||
<path
|
||||
style="fill:url(#radialGradient1438);fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 50.216546,53.06469 7.857374,4.162351 c 3.644704,1.96934 11.80512,2.303829 17.092856,-0.409972 l 14.63311,-8.036739 -14.617571,7.67824 c -6.819372,2.782435 -12.100091,1.948265 -17.117359,0.49485 l -7.84841,-3.88873 z"
|
||||
id="path2514" />
|
||||
<path
|
||||
style="opacity:0.54455447;fill:url(#radialGradient1435);fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3714)"
|
||||
d="m 48.539396,51.570209 8.832636,4.748176 c 4.097087,4.930516 13.270379,5.877301 19.214433,-0.31034 l 16.449381,-8.905407 -16.309189,8.078374 c -7.351304,3.398287 -14.788017,2.426427 -19.241976,0.405541 l -8.945285,-4.016344 z"
|
||||
id="path2526"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)" />
|
||||
<path
|
||||
id="path1506"
|
||||
d="m 21.534884,37.678074 34.124863,18.407772 c 5.772809,3.10706 9.004709,10.947536 8.899565,17.750275 l -0.291005,39.175029 c -0.105145,6.80274 -6.773179,6.84305 -12.545987,3.73599 L 20.568547,100.1994 C 14.795739,97.092352 10.232963,89.114423 10.338107,82.311683 l 0.586756,-37.96271 c 0.105144,-6.802738 4.837213,-9.777959 10.610021,-6.670899 z"
|
||||
style="fill:url(#linearGradient2387);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
sodipodi:type="inkscape:offset"
|
||||
inkscape:radius="-1.1669018"
|
||||
inkscape:original="M 64.125 0.28125 C 60.119734 0.34266221 56.06557 1.2507431 52.90625 2.96875 L 17.71875 22.09375 C 11.40011 25.529764 11.104972 30.908467 17.0625 34.15625 L 29.03125 40.6875 C 29.041477 40.689095 29.05227 40.685908 29.0625 40.6875 C 34.361479 41.512149 40.004261 41.96875 45.84375 41.96875 C 74.648901 41.96875 98.402523 31.131908 101.8125 17.1875 L 75.0625 2.625 C 72.083736 1.0011076 68.130266 0.21983779 64.125 0.28125 z "
|
||||
style="fill:url(#linearGradient3301);fill-opacity:1;stroke:none;filter:url(#filter3518)"
|
||||
id="path3299"
|
||||
d="M 64.15625,1.4375 C 60.315227,1.4963939 56.411613,2.3997005 53.46875,4 l -35.1875,19.125 c -2.941524,1.599572 -4.254537,3.489516 -4.34375,5.125 -0.08921,1.635484 0.953539,3.384565 3.6875,4.875 l 11.78125,6.4375 c 5.194852,0.80039 10.715154,1.25 16.4375,1.25 14.256241,0 27.253781,-2.694155 37.03125,-7.0625 9.353803,-4.17906 15.530816,-9.912929 17.4375,-16.03125 L 74.5,3.65625 C 71.764111,2.1647623 67.998056,1.3785941 64.15625,1.4375 z"
|
||||
transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)" />
|
||||
<g
|
||||
id="g3441"
|
||||
style="filter:url(#filter3482)"
|
||||
transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)">
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3429)"
|
||||
d="m 27.480576,23.293682 c 3.505712,-1.906853 9.264565,-1.844946 12.912228,0.138803 3.647663,1.983749 3.761942,5.115894 0.256231,7.022747 -3.505711,1.906852 -9.264564,1.844946 -12.912227,-0.138803 -3.647663,-1.98375 -3.761943,-5.115894 -0.256232,-7.022747 z"
|
||||
id="path3327" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3433)"
|
||||
d="m 60.840861,23.804955 c 3.440747,-1.871518 9.092885,-1.810759 12.672954,0.13623 3.580069,1.946988 3.692229,5.021092 0.251482,6.89261 -3.440747,1.871516 -9.092884,1.810758 -12.672954,-0.13623 -3.580068,-1.946989 -3.692229,-5.021094 -0.251482,-6.89261 z"
|
||||
id="path3329" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3437)"
|
||||
d="m 92.391788,24.467376 c 3.492768,-1.899812 9.230362,-1.838135 12.864552,0.13829 3.6342,1.976426 3.74806,5.097007 0.25529,6.99682 -3.49277,1.899812 -9.230362,1.838135 -12.864558,-0.13829 -3.634195,-1.976426 -3.748052,-5.097006 -0.255284,-6.99682 z"
|
||||
id="path3331" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:url(#radialGradient1474);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 31.482952,28.057089 c 3.118626,-1.720736 8.241611,-1.705796 11.486514,0.0335 3.244904,1.739293 3.346565,4.524804 0.227939,6.24554 -3.118625,1.720735 -8.24161,1.705796 -11.486513,-0.0335 -3.244904,-1.739293 -3.346565,-4.524802 -0.22794,-6.245539 z"
|
||||
id="rect2291" />
|
||||
<path
|
||||
style="fill:url(#radialGradient1471);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 61.159735,28.279434 c 3.060835,-1.68885 8.088887,-1.674188 11.27366,0.03288 3.184773,1.707062 3.284549,4.440954 0.223715,6.129804 -3.060834,1.688849 -8.088886,1.674187 -11.27366,-0.03287 -3.184772,-1.707063 -3.284549,-4.440957 -0.223715,-6.129805 z"
|
||||
id="rect2293" />
|
||||
<path
|
||||
style="fill:url(#radialGradient1467);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 89.226942,28.648846 c 3.107112,-1.714382 8.211185,-1.699499 11.444108,0.03337 3.23292,1.732872 3.33421,4.508098 0.2271,6.222482 -3.107116,1.714382 -8.211187,1.699499 -11.444111,-0.03337 -3.232922,-1.732872 -3.334208,-4.508097 -0.227097,-6.222482 z"
|
||||
id="rect2295" />
|
||||
<path
|
||||
style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 32.745512,27.50858 c -0.444882,0.160874 -0.863106,0.357774 -1.252933,0.572866 -1.973505,1.088903 -2.658724,2.61258 -2.072615,4.019316 -0.110112,-1.174485 0.658612,-2.360809 2.281271,-3.256129 3.118627,-1.720737 8.247246,-1.702176 11.49215,0.03712 1.133181,0.607393 1.886843,1.33499 2.250084,2.107659 -0.152505,-1.039536 -0.963043,-2.069142 -2.45874,-2.870847 -2.83929,-1.521881 -7.125046,-1.736102 -10.239217,-0.609982 z"
|
||||
id="path1381" />
|
||||
<path
|
||||
id="path2263"
|
||||
d="m 62.328392,27.787252 c -0.444881,0.160873 -0.863105,0.357773 -1.252933,0.572865 -1.973505,1.088904 -2.658724,2.61258 -2.072615,4.019316 -0.110113,-1.174485 0.658612,-2.360808 2.281271,-3.256128 3.118626,-1.720738 8.247247,-1.702177 11.49215,0.03712 1.133182,0.607393 1.886843,1.33499 2.250083,2.107659 -0.152505,-1.039536 -0.963042,-2.069141 -2.458739,-2.870847 -2.839291,-1.52188 -7.125046,-1.736101 -10.239217,-0.609981 z"
|
||||
style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
|
||||
<path
|
||||
style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 90.312362,28.060759 c -0.444879,0.160875 -0.863106,0.357775 -1.252933,0.572866 -1.973503,1.088903 -2.658722,2.61258 -2.072613,4.019316 -0.110112,-1.174485 0.658612,-2.360808 2.28127,-3.256128 3.118624,-1.720737 8.247248,-1.702176 11.492144,0.03712 1.13319,0.607392 1.88685,1.33499 2.25009,2.107659 -0.1525,-1.039538 -0.96304,-2.069141 -2.45874,-2.870847 -2.839292,-1.52188 -7.125047,-1.736101 -10.239218,-0.609982 z"
|
||||
id="path2265" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path3674"
|
||||
d="m 77.08844,56.915281 37.08864,-22.331703 c 5.59118,-3.097618 10.02975,-0.486059 9.95196,5.855507 l -0.50832,41.436025 c -0.0778,6.341565 -4.64162,13.940612 -10.23281,17.03823 l -37.088639,23.3317 c -5.591181,3.09763 -10.029752,0.48606 -9.951956,-5.8555 l 0.508319,-42.43603 c 0.0778,-6.341566 4.641626,-13.940614 10.232806,-17.038229 z"
|
||||
style="fill:url(#linearGradient3678);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3574)"
|
||||
transform="matrix(-0.88958423,0.00696863,0,0.88958423,123.04786,8.3972843)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 38 KiB |