Compare commits
674 commits
release/5.
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fe6e678e59 | ||
![]() |
48a784dde8 | ||
![]() |
67e3a7be36 | ||
![]() |
45c4eef61d | ||
![]() |
5c451cd976 | ||
![]() |
d87dd153fc | ||
![]() |
6fcecbd08d | ||
![]() |
528709131f | ||
![]() |
9fca328caf | ||
![]() |
af54cd4ee1 | ||
![]() |
e392f01a94 | ||
![]() |
f722b86990 | ||
![]() |
4ddc642398 | ||
![]() |
53b1db84ef | ||
![]() |
571c13236f | ||
![]() |
64299ccfbb | ||
![]() |
692f7a2cfe | ||
![]() |
b104b95423 | ||
![]() |
2bcdbc6a87 | ||
![]() |
46f7f6e9ac | ||
![]() |
38394d54f0 | ||
![]() |
267a0cc912 | ||
![]() |
d0c10a795e | ||
![]() |
0d37c1daa0 | ||
![]() |
24fc50269d | ||
![]() |
08070e9abe | ||
![]() |
f13d7d480c | ||
![]() |
007261ade5 | ||
![]() |
bbe3f614b2 | ||
![]() |
f07d547cf1 | ||
![]() |
34f09204fa | ||
![]() |
0f6b4f4fab | ||
![]() |
bc7b8e2eb2 | ||
![]() |
faea473550 | ||
![]() |
680169fb61 | ||
![]() |
e767cf9a54 | ||
![]() |
e65b7d421c | ||
![]() |
e6b3eb2570 | ||
![]() |
7ccf316ceb | ||
![]() |
ae603e35d7 | ||
![]() |
4908eed57d | ||
![]() |
286e776eda | ||
![]() |
cc87999d6d | ||
![]() |
425ff046ed | ||
![]() |
5f4c7e3ddc | ||
![]() |
02b35b9155 | ||
![]() |
dbde37aafb | ||
![]() |
0c136ecc8a | ||
![]() |
5e2a763e4a | ||
![]() |
62d3192126 | ||
![]() |
3e557af72f | ||
![]() |
fa7a9f748d | ||
![]() |
870eae26dc | ||
![]() |
cb940620bc | ||
![]() |
dd55afad68 | ||
![]() |
775db50538 | ||
![]() |
95a7d416ce | ||
![]() |
9154600490 | ||
![]() |
e0162a6868 | ||
![]() |
71afd4d88f | ||
![]() |
a2d029388c | ||
![]() |
8a60361949 | ||
![]() |
e80569f5da | ||
![]() |
60ec268458 | ||
![]() |
7bc5d55b56 | ||
![]() |
6ba5c20e76 | ||
![]() |
4c18204938 | ||
![]() |
cf473bcfbd | ||
![]() |
f142df92c7 | ||
![]() |
c3aa1bc123 | ||
![]() |
138cbae584 | ||
![]() |
dd20586baf | ||
![]() |
aa1c64b21a | ||
![]() |
3223d6206b | ||
![]() |
7299aadd7b | ||
![]() |
9841f14f81 | ||
![]() |
95e71ce52b | ||
![]() |
cc0292a1ad | ||
![]() |
16a098a44e | ||
![]() |
5213a70b88 | ||
![]() |
9151c44658 | ||
![]() |
8d22f991f9 | ||
![]() |
50bdd3d9bc | ||
![]() |
8d14b22260 | ||
![]() |
3f1943c84d | ||
![]() |
c9acfc2b50 | ||
![]() |
b60b779fc8 | ||
![]() |
479f4d574a | ||
![]() |
9f8f94c056 | ||
![]() |
eacadbcc41 | ||
![]() |
24304c6df0 | ||
![]() |
f0a7f85dbb | ||
![]() |
b013ca4221 | ||
![]() |
44b9a53b2d | ||
![]() |
24455cc5b2 | ||
![]() |
7bbfc17f3c | ||
![]() |
d74d7ec32c | ||
![]() |
76e1cb1bf1 | ||
![]() |
0f2417f919 | ||
![]() |
e1df19ee6f | ||
![]() |
6d85d9ae08 | ||
![]() |
8aba032de4 | ||
![]() |
bcd4aad16c | ||
![]() |
85c421f1cb | ||
![]() |
9f78628f6c | ||
![]() |
60d517107b | ||
![]() |
7fc080c582 | ||
![]() |
15a2338656 | ||
![]() |
9548d6cc76 | ||
![]() |
792df078fa | ||
![]() |
8e30cd4e38 | ||
![]() |
03d884d7ff | ||
![]() |
7dcf9a2b49 | ||
![]() |
4dc21b965b | ||
![]() |
936eff63bf | ||
![]() |
f86c15e780 | ||
![]() |
49ebd856ec | ||
![]() |
027ecbc7b8 | ||
![]() |
f763ff774a | ||
![]() |
0ccb584262 | ||
![]() |
27eba85594 | ||
![]() |
cfa68f7b26 | ||
![]() |
e1a7b83e8e | ||
![]() |
11c8eca9a6 | ||
![]() |
0b6df551b5 | ||
![]() |
5e9bff6216 | ||
![]() |
26b7b35307 | ||
![]() |
04d04381bc | ||
![]() |
49d512267e | ||
![]() |
cf359b0da4 | ||
![]() |
93a796aa27 | ||
![]() |
9667bc6b12 | ||
![]() |
62c6874689 | ||
![]() |
ce83cf6361 | ||
![]() |
56eb87287e | ||
![]() |
01e64e8b6a | ||
![]() |
b2bb2e2482 | ||
![]() |
082094a1d8 | ||
![]() |
b59d68a209 | ||
![]() |
92102f477e | ||
![]() |
eb5bf69138 | ||
![]() |
478af5d1c8 | ||
![]() |
942bbe2d2d | ||
![]() |
bae9594ac1 | ||
![]() |
111eed0251 | ||
![]() |
0571ee82bf | ||
![]() |
5e0496260b | ||
![]() |
95f148c222 | ||
![]() |
d7f3ce1217 | ||
![]() |
6bb95c8856 | ||
![]() |
e3dc296ba3 | ||
![]() |
23151a8811 | ||
![]() |
4b25bb63c1 | ||
![]() |
1c536abef6 | ||
![]() |
90f5ca42cc | ||
![]() |
9f6c081771 | ||
![]() |
cddad6fccd | ||
![]() |
016fd2633e | ||
![]() |
f343db5b8e | ||
![]() |
4a115b4dca | ||
![]() |
74deada511 | ||
![]() |
b30dac6a5b | ||
![]() |
5121108542 | ||
![]() |
c9c56be396 | ||
![]() |
1d1bb6fa1a | ||
![]() |
dba383f092 | ||
![]() |
2a0dd9ec09 | ||
![]() |
d55b47e551 | ||
![]() |
c8afb0aa1a | ||
![]() |
c7c4c2a7d2 | ||
![]() |
7016adcb70 | ||
![]() |
2180e4d127 | ||
![]() |
48729f8ecc | ||
![]() |
fface9001a | ||
![]() |
f74daa39e8 | ||
![]() |
22c043d4c3 | ||
![]() |
abc6dd7411 | ||
![]() |
7a43c6fee0 | ||
![]() |
62095d916b | ||
![]() |
386125fc89 | ||
![]() |
196de7e94a | ||
![]() |
e1dc609939 | ||
![]() |
0649a66ee5 | ||
![]() |
6e6d3f18e3 | ||
![]() |
0a394144b2 | ||
![]() |
fde59b99e8 | ||
![]() |
edd57c8b96 | ||
![]() |
5c75a55c7d | ||
![]() |
56f1eeef4b | ||
![]() |
f8c2e59ec5 | ||
![]() |
16a064701a | ||
![]() |
86ec26b2d3 | ||
![]() |
3aa096a74f | ||
![]() |
bf76b5e89f | ||
![]() |
ce528a2654 | ||
![]() |
f996f30163 | ||
![]() |
2ba08e622b | ||
![]() |
4856fb53ac | ||
![]() |
a6b2524762 | ||
![]() |
2079f6866a | ||
![]() |
845dadf183 | ||
![]() |
dfee773364 | ||
![]() |
c64f898c48 | ||
![]() |
16a2a79728 | ||
![]() |
6711d10f96 | ||
![]() |
36fcff6e13 | ||
![]() |
3c28c30133 | ||
![]() |
4c93e63ddf | ||
![]() |
f69d9b4475 | ||
![]() |
42fa74e91a | ||
![]() |
929bad61c0 | ||
![]() |
00d2b1f902 | ||
![]() |
7a4fff3310 | ||
![]() |
8d38746586 | ||
![]() |
0df44c2e20 | ||
![]() |
dc91476555 | ||
![]() |
bad3e13eaa | ||
![]() |
45e94e2dae | ||
![]() |
3aa1975c1d | ||
![]() |
56626816b6 | ||
![]() |
0f512ae46e | ||
![]() |
d56e9ed083 | ||
![]() |
2d190d5a33 | ||
![]() |
2e23126e2a | ||
![]() |
18e49f2c97 | ||
![]() |
0108e2c64e | ||
![]() |
94d9c2affe | ||
![]() |
6e9ab43451 | ||
![]() |
9af4033cad | ||
![]() |
31ffbc94ca | ||
![]() |
e9b385a636 | ||
![]() |
917b67f5d1 | ||
![]() |
331b277eea | ||
![]() |
30f9a2e263 | ||
![]() |
aff12189d8 | ||
![]() |
332d2a1922 | ||
![]() |
f91fa546f6 | ||
![]() |
b4f11d5496 | ||
![]() |
015cdb21bd | ||
![]() |
05f283b5ad | ||
![]() |
34611a6643 | ||
![]() |
76b140c72a | ||
![]() |
5f43ac85f6 | ||
![]() |
0dfe5c96ae | ||
![]() |
36d70a93e2 | ||
![]() |
717e5e9157 | ||
![]() |
e7d7433b4b | ||
![]() |
e210634982 | ||
![]() |
6968f77026 | ||
![]() |
06db927a1a | ||
![]() |
909f2e86c3 | ||
![]() |
5bd0b98b42 | ||
![]() |
c1d4a6198c | ||
![]() |
f5af66f130 | ||
![]() |
5473c9fd3f | ||
![]() |
e58d799c47 | ||
![]() |
366b527757 | ||
![]() |
e83e53f3f9 | ||
![]() |
2348dcab22 | ||
![]() |
f9d8beef45 | ||
![]() |
85ab0307d7 | ||
![]() |
ffde12cebd | ||
![]() |
37dae721d3 | ||
![]() |
aa3a1bc3b5 | ||
![]() |
298755c905 | ||
![]() |
ee933acf84 | ||
![]() |
ca3c873d48 | ||
![]() |
2fc2ab6cf0 | ||
![]() |
843bf21e79 | ||
![]() |
2c45e854ab | ||
![]() |
a81ec016d7 | ||
![]() |
55da1a01b6 | ||
![]() |
5e94752434 | ||
![]() |
262aa6c24e | ||
![]() |
3323662ee0 | ||
![]() |
6c913af95d | ||
![]() |
71764b6d4c | ||
![]() |
e0bbfb5682 | ||
![]() |
09e82f01ea | ||
![]() |
d35728f924 | ||
![]() |
3f8029af92 | ||
![]() |
6344aab3bd | ||
![]() |
52eb094aa2 | ||
![]() |
a194197369 | ||
![]() |
f4f66fcca7 | ||
![]() |
bb035eba4c | ||
![]() |
fcb1d4f87e | ||
![]() |
471a030466 | ||
![]() |
775d511f42 | ||
![]() |
19a8587459 | ||
![]() |
ea83fd3927 | ||
![]() |
0fe764a253 | ||
![]() |
3436bc6c3e | ||
![]() |
0e938f1886 | ||
![]() |
1327ce7bd8 | ||
![]() |
310bf878fc | ||
![]() |
4f43ce3e4a | ||
![]() |
e7806a43e0 | ||
![]() |
23aa82812e | ||
![]() |
05e52ef796 | ||
![]() |
83e5326ac9 | ||
![]() |
b2c9543ea9 | ||
![]() |
3ed08f97ec | ||
![]() |
da68447ec6 | ||
![]() |
86981383a2 | ||
![]() |
de11824527 | ||
![]() |
478af273df | ||
![]() |
efd0c24c07 | ||
![]() |
a6b06a5b17 | ||
![]() |
546433b4fd | ||
![]() |
e10751a1e0 | ||
![]() |
673ce1ab10 | ||
![]() |
53dd3e844a | ||
![]() |
656abdb256 | ||
![]() |
064e556c4e | ||
![]() |
184f593168 | ||
![]() |
e017a5975c | ||
![]() |
79bd512181 | ||
![]() |
51b2e1c973 | ||
![]() |
5abe1455f2 | ||
![]() |
daa2db6a23 | ||
![]() |
ff7c6c8e57 | ||
![]() |
015eb31c3a | ||
![]() |
cb9776a07b | ||
![]() |
00bc386d5a | ||
![]() |
7bcc2d9b23 | ||
![]() |
819a0c2986 | ||
![]() |
6dcd4b5383 | ||
![]() |
fe028c7f6a | ||
![]() |
3405709b46 | ||
![]() |
2bf67416c1 | ||
![]() |
6daeb37fe8 | ||
![]() |
776b7c1e75 | ||
![]() |
0031cd1e46 | ||
![]() |
d1e95c4e54 | ||
![]() |
84dc662d65 | ||
![]() |
fdf04cdac5 | ||
![]() |
18152a211a | ||
![]() |
f5f9e0f4ea | ||
![]() |
bddfcc3f40 | ||
![]() |
221905b5ae | ||
![]() |
293762ea8b | ||
![]() |
40583ebe89 | ||
![]() |
632eb9739d | ||
![]() |
6b37d99431 | ||
![]() |
e1246baddd | ||
![]() |
7340fb9b2e | ||
![]() |
7ba2c276db | ||
![]() |
c89f42f17b | ||
![]() |
3a39eff15e | ||
![]() |
6cdb2030c6 | ||
![]() |
ad918bcb75 | ||
![]() |
569bcd9d26 | ||
![]() |
5bbda937f1 | ||
![]() |
0a792843f9 | ||
![]() |
e1ce2351f5 | ||
![]() |
49b08fa9d1 | ||
![]() |
241c29f0cc | ||
![]() |
ae2f506ddf | ||
![]() |
42fe4864a0 | ||
![]() |
a8d9fb8d9c | ||
![]() |
446972b404 | ||
![]() |
e654aa8ac6 | ||
![]() |
2fe1ba5d81 | ||
![]() |
0be1d4e5d0 | ||
![]() |
e37f7d8b6b | ||
![]() |
90df85e9cf | ||
![]() |
9f23654722 | ||
![]() |
58c81fa213 | ||
![]() |
3a112668b5 | ||
![]() |
9b766badd2 | ||
![]() |
b234280083 | ||
![]() |
060ab4a289 | ||
![]() |
354a300cd2 | ||
![]() |
26ee6ff6ad | ||
![]() |
3710960090 | ||
![]() |
d21fb58da3 | ||
![]() |
5352367022 | ||
![]() |
5287cc7251 | ||
![]() |
fed522775d | ||
![]() |
b0a2fd75b2 | ||
![]() |
806ccd90ed | ||
![]() |
b242f5f24c | ||
![]() |
529e208f39 | ||
![]() |
39c3cbdf56 | ||
![]() |
165e492485 | ||
![]() |
be76f8bf06 | ||
![]() |
625f3d645b | ||
![]() |
e187aa9b48 | ||
![]() |
c5c6633dd1 | ||
![]() |
2109de613a | ||
![]() |
fbb29b5047 | ||
![]() |
0a6fecd072 | ||
![]() |
d5e2c0a551 | ||
![]() |
70d0b2c4b9 | ||
![]() |
4c3c0e06e5 | ||
![]() |
c7e4f45922 | ||
![]() |
160f5bec8c | ||
![]() |
5da4af2b5d | ||
![]() |
cf923e734b | ||
![]() |
efb714b31c | ||
![]() |
f951282bec | ||
![]() |
2ec6de96a6 | ||
![]() |
c0026caab0 | ||
![]() |
1c5a56884f | ||
![]() |
fc7986485c | ||
![]() |
2d198c1af9 | ||
![]() |
82aaee1a5c | ||
![]() |
a193979cb6 | ||
![]() |
b4383b8d00 | ||
![]() |
0147de169a | ||
![]() |
5163a319c9 | ||
![]() |
542910d684 | ||
![]() |
238109760d | ||
![]() |
2e83a52205 | ||
![]() |
3401f9e142 | ||
![]() |
6f35ce1570 | ||
![]() |
75eb3f4cd3 | ||
![]() |
b8dcb4b33c | ||
![]() |
8d3735d86a | ||
![]() |
739183b8c5 | ||
![]() |
b44e82e479 | ||
![]() |
e176b8ec19 | ||
![]() |
0e655dd492 | ||
![]() |
7464062ad6 | ||
![]() |
58fde86668 | ||
![]() |
17ccc2f9c2 | ||
![]() |
618fa4f675 | ||
![]() |
d6ffa7f561 | ||
![]() |
8bf17b29a2 | ||
![]() |
4fead44e3c | ||
![]() |
15be417c17 | ||
![]() |
31c42c338b | ||
![]() |
ef14c3380d | ||
![]() |
72238aa046 | ||
![]() |
eb1a63a516 | ||
![]() |
0ff94ae85d | ||
![]() |
8faf749fd1 | ||
![]() |
ab622b4881 | ||
![]() |
e7fa35baa2 | ||
![]() |
523c393e9e | ||
![]() |
558d08d821 | ||
![]() |
15270d4a34 | ||
![]() |
8fe5520709 | ||
![]() |
079b9d44e2 | ||
![]() |
41f9c50abf | ||
![]() |
63ad8b8b76 | ||
![]() |
a33cdac10b | ||
![]() |
3179db108a | ||
![]() |
abdb4d7fa6 | ||
![]() |
0699321b3c | ||
![]() |
288cd1c74a | ||
![]() |
3688c947f8 | ||
![]() |
207f0439ee | ||
![]() |
c294b7cb4c | ||
![]() |
f09047f0b0 | ||
![]() |
2535611d6c | ||
![]() |
d6f8659443 | ||
![]() |
8aa2a48fc3 | ||
![]() |
9060058393 | ||
![]() |
4bf7aa119d | ||
![]() |
bdf6aa3fb7 | ||
![]() |
1e60a5f006 | ||
![]() |
9bf3d6a760 | ||
![]() |
ede73f4d89 | ||
![]() |
c118a61f62 | ||
![]() |
4a0891f49d | ||
![]() |
17f9911ffc | ||
![]() |
0f75ab3224 | ||
![]() |
7587153a44 | ||
![]() |
17d3da4777 | ||
![]() |
cc1d23d333 | ||
![]() |
9e425cd1ea | ||
![]() |
2b8d00b799 | ||
![]() |
3a23abb2ec | ||
![]() |
88d054093c | ||
![]() |
ab549c8467 | ||
![]() |
b40c5553b4 | ||
![]() |
b82a975e76 | ||
![]() |
ad84a572aa | ||
![]() |
743e041dbc | ||
![]() |
1fdf8c0076 | ||
![]() |
f9bc6c2b09 | ||
![]() |
84f9cb021e | ||
![]() |
05aefb8f82 | ||
![]() |
1c4e079899 | ||
![]() |
79227dabe0 | ||
![]() |
8ed98023b4 | ||
![]() |
a493170420 | ||
![]() |
5151de3011 | ||
![]() |
5d21b2d44c | ||
![]() |
4311cc3648 | ||
![]() |
8566cd9be9 | ||
![]() |
57a75dedb1 | ||
![]() |
e9cc95f372 | ||
![]() |
8f7415c41b | ||
![]() |
3f5125e47c | ||
![]() |
4cdbbcfc34 | ||
![]() |
c1d23c0ff2 | ||
![]() |
8fda300e06 | ||
![]() |
45a648961b | ||
![]() |
1d2dd9a128 | ||
![]() |
f8614d8c5b | ||
![]() |
027d76b9f5 | ||
![]() |
4472ce55d7 | ||
![]() |
b9ab7790d5 | ||
![]() |
67a42b9549 | ||
![]() |
d53ba019f5 | ||
![]() |
793e2097a6 | ||
![]() |
f5b373788f | ||
![]() |
bc1591a0b8 | ||
![]() |
7cc8e0181f | ||
![]() |
8e291e6f4b | ||
![]() |
19980a61e9 | ||
![]() |
a023565ed3 | ||
![]() |
ccdd1e3fd9 | ||
![]() |
831fc568fc | ||
![]() |
95ffdd68b2 | ||
![]() |
e67c306f91 | ||
![]() |
ea975c328d | ||
![]() |
50c9c338fb | ||
![]() |
6ed82820fe | ||
![]() |
1e8816f13d | ||
![]() |
2a16434bfd | ||
![]() |
4613527738 | ||
![]() |
7b06b5407b | ||
![]() |
50d2171ef0 | ||
![]() |
a321e1f8a5 | ||
![]() |
3d60a829e1 | ||
![]() |
5901ac9cb2 | ||
![]() |
af7a1e834f | ||
![]() |
55efa43f23 | ||
![]() |
e9ac13776e | ||
![]() |
bf26b6bbf7 | ||
![]() |
5e9635317b | ||
![]() |
ab431f6810 | ||
![]() |
49e33aad7c | ||
![]() |
48c8869339 | ||
![]() |
48865e7dac | ||
![]() |
11e09a23be | ||
![]() |
a4240a55e4 | ||
![]() |
20f2ae56eb | ||
![]() |
5c24f7dd11 | ||
![]() |
08f4ae709c | ||
![]() |
73e0d7dedc | ||
![]() |
66f9f315cf | ||
![]() |
75cfce9468 | ||
![]() |
4b8c274f7f | ||
![]() |
9dc29ebf5f | ||
![]() |
db4092e33d | ||
![]() |
2859a6eefc | ||
![]() |
94ac3330dd | ||
![]() |
4d8f58d3b9 | ||
![]() |
c99a3cc867 | ||
![]() |
f76bd2c6c1 | ||
![]() |
406a37206f | ||
![]() |
4533c6a8e0 | ||
![]() |
ff7ff3c58d | ||
![]() |
d85d9c8c60 | ||
![]() |
04b69957c8 | ||
![]() |
f235cea733 | ||
![]() |
f53ac85ff6 | ||
![]() |
62246b9355 | ||
![]() |
2403fc9732 | ||
![]() |
74aacf4495 | ||
![]() |
2a352dc059 | ||
![]() |
14c0e53eed | ||
![]() |
1fd95939db | ||
![]() |
a8bdc2e10a | ||
![]() |
b01bcc7d3d | ||
![]() |
f3dfba73d2 | ||
![]() |
78d6dcec6c | ||
![]() |
34ba8d984d | ||
![]() |
f078c2d3bc | ||
![]() |
6b9c1b4d54 | ||
![]() |
84723cab5d | ||
![]() |
16d98d6577 | ||
![]() |
59e751f72d | ||
![]() |
7ba8e5f376 | ||
![]() |
02ae97b0da | ||
![]() |
899d39b635 | ||
![]() |
bf458cced7 | ||
![]() |
381e113755 | ||
![]() |
817f9fb715 | ||
![]() |
3bd88821bb | ||
![]() |
e348ba3881 | ||
![]() |
40bbaead44 | ||
![]() |
5f6ef895b1 | ||
![]() |
23b50d60e3 | ||
![]() |
3674144a74 | ||
![]() |
454ea02438 | ||
![]() |
8ce142a255 | ||
![]() |
8e769ddb8a | ||
![]() |
7423b16604 | ||
![]() |
559590256c | ||
![]() |
22a58f5420 | ||
![]() |
557845bc97 | ||
![]() |
0346e0eef2 | ||
![]() |
b96e0df4dc | ||
![]() |
c78eb48d91 | ||
![]() |
64c4669f57 | ||
![]() |
6a331af27f | ||
![]() |
1d42a8f954 | ||
![]() |
fa68c33fa8 | ||
![]() |
dc98d0ea09 | ||
![]() |
a8a1a1bb3e | ||
![]() |
fe8e13341b | ||
![]() |
cffda331ad | ||
![]() |
411b12d09d | ||
![]() |
3a6c9220ff | ||
![]() |
df30f10672 | ||
![]() |
cebda6d0ee | ||
![]() |
0b81fb64d3 | ||
![]() |
969e1ab996 | ||
![]() |
2439222375 | ||
![]() |
3ea7fdd96c | ||
![]() |
b323528491 | ||
![]() |
6ba250e400 | ||
![]() |
0eda92c5d4 | ||
![]() |
1b32897453 | ||
![]() |
1d39557aa0 | ||
![]() |
87b74fcd82 | ||
![]() |
ddd5b0a462 | ||
![]() |
80ae80149a | ||
![]() |
0deff63efa | ||
![]() |
e578903b60 | ||
![]() |
aff69f43b1 | ||
![]() |
130db5cc9e | ||
![]() |
4246a4cc4f | ||
![]() |
e76ec94083 | ||
![]() |
033405c963 | ||
![]() |
886a6677a8 | ||
![]() |
d0c487d4dc | ||
![]() |
0a25548cd0 | ||
![]() |
21af798604 | ||
![]() |
c3852ff425 | ||
![]() |
e54617c7d5 | ||
![]() |
d626a17ef9 | ||
![]() |
2856a7dea3 | ||
![]() |
2e32d51a26 | ||
![]() |
75bf8e887c | ||
![]() |
0965023fc5 | ||
![]() |
acaed30e24 | ||
![]() |
ee8b4e9283 | ||
![]() |
435f5fc204 | ||
![]() |
9883015be2 | ||
![]() |
ffb69c700a | ||
![]() |
56e0763c6d | ||
![]() |
b7f61aa557 | ||
![]() |
0428f6213b | ||
![]() |
1e23b45851 | ||
![]() |
3073752bcd | ||
![]() |
49a8e90bc7 | ||
![]() |
349c22d043 | ||
![]() |
55233b69c7 | ||
![]() |
8846574eda | ||
![]() |
eaa2770c80 | ||
![]() |
6fb233d0ee | ||
![]() |
e6a6d30793 | ||
![]() |
b9faf65273 | ||
![]() |
540b19164b | ||
![]() |
27f354a787 | ||
![]() |
94982d0061 | ||
![]() |
1df22d3242 | ||
![]() |
7b73c4a75f | ||
![]() |
8c7043390f | ||
![]() |
2dd7725f2a | ||
![]() |
3a814ee6bc | ||
![]() |
424129e8d1 | ||
![]() |
27955a0fee | ||
![]() |
1bfae7d14a | ||
![]() |
091b244d0f | ||
![]() |
e1f5f21983 | ||
![]() |
7be7552329 |
453 changed files with 66202 additions and 47231 deletions
|
@ -1,5 +1,5 @@
|
|||
# EditorConfig configuration for pacman
|
||||
# http://EditorConfig.org
|
||||
# https://editorconfig.org
|
||||
|
||||
# Top-most EditorConfig file
|
||||
root = true
|
||||
|
@ -16,5 +16,9 @@ indent_style = tab
|
|||
[{NEWS,HACKING}]
|
||||
indent_style = space
|
||||
|
||||
[meson.build]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.py]
|
||||
indent_style = space
|
||||
|
|
21
.gitignore
vendored
21
.gitignore
vendored
|
@ -1,24 +1,3 @@
|
|||
*~
|
||||
*.o
|
||||
ABOUT-NLS
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
config.h
|
||||
config.h.in
|
||||
config.log
|
||||
config.status
|
||||
config.status.lineno
|
||||
configure
|
||||
configure.lineno
|
||||
cov-int
|
||||
cscope.in.out
|
||||
cscope.out
|
||||
cscope.po.out
|
||||
intl
|
||||
libtool
|
||||
Makefile
|
||||
Makefile.in
|
||||
pacman-*.tar.gz
|
||||
root
|
||||
stamp-h1
|
||||
tags
|
||||
|
|
132
.gitlab-ci.yml
Normal file
132
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,132 @@
|
|||
variables:
|
||||
MAKEFLAGS: "-j10"
|
||||
VERBOSE: 1
|
||||
|
||||
default:
|
||||
after_script:
|
||||
- build-aux/print-failed-test-output build/meson-logs/testlog.json
|
||||
|
||||
.arch-test:
|
||||
image: archlinux:base-devel
|
||||
before_script:
|
||||
- >
|
||||
pacman -Syu --needed --noconfirm
|
||||
git
|
||||
gpgme libarchive curl
|
||||
python
|
||||
fakeroot fakechroot
|
||||
meson
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
- build/meson-logs/meson-log.txt
|
||||
|
||||
arch:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-debug:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup --buildtype=debug --werror build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-docs:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- pacman -Syu --needed --noconfirm asciidoc
|
||||
- meson setup -Ddoc=enabled build
|
||||
- ninja -C build
|
||||
|
||||
arch-clang:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- pacman -Syu --needed --noconfirm clang
|
||||
- CC=clang meson setup build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
#arch-valgrind:
|
||||
# extends: .arch-test
|
||||
# script:
|
||||
# - pacman -Syu --needed --noconfirm valgrind
|
||||
# - pacman -U --noconfirm https://geo.mirror.pkgbuild.com/core-debug/os/x86_64/glibc-debug-$(pacman -S --print-format %v glibc)-x86_64.pkg.tar.zst
|
||||
# - meson setup build
|
||||
# - ninja -C build
|
||||
# - PACTEST_VALGRIND=1 fakechroot meson test -C build
|
||||
|
||||
arch-nettle:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup -Dcrypto=nettle --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-no-gpg:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup -Dgpgme=disabled --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-no-curl:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup -Dcurl=disabled --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-no-nls:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup -Di18n=false --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
debian:
|
||||
image: debian:bookworm
|
||||
before_script:
|
||||
- apt update
|
||||
- >
|
||||
apt -y install --no-install-recommends
|
||||
git pkg-config meson gcc libtool
|
||||
libgpgme-dev libarchive-dev libcurl4-openssl-dev libssl-dev curl
|
||||
gettext python3 python3-setuptools dash gawk ca-certificates
|
||||
fakeroot fakechroot
|
||||
script:
|
||||
- meson setup --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
fedora:
|
||||
image: fedora
|
||||
before_script:
|
||||
- >
|
||||
dnf -y install
|
||||
git findutils patch sed
|
||||
meson gcc libtool bsdtar
|
||||
gpgme-devel libarchive-devel libcurl-devel openssl-devel gettext-devel
|
||||
asciidoc python3 dash gawk
|
||||
fakeroot fakechroot
|
||||
perl-Module-Load-Conditional
|
||||
script:
|
||||
- meson setup --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
pages:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- pacman -Syu --needed --noconfirm asciidoc
|
||||
- meson setup -Ddoc=enabled build
|
||||
- ninja -C build html
|
||||
artifacts:
|
||||
paths:
|
||||
- build/doc
|
||||
publish: build/doc
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "release/6.1.x"
|
3
.mailmap
3
.mailmap
|
@ -12,7 +12,7 @@ Daenyth Blank <Daenyth+arch@gmail.com> <Daenyth+git@gmail.com>
|
|||
Dave Reisner <dreisner@archlinux.org> <d@falconindy.com>
|
||||
甘露(Gan Lu) <rhythm.gan@gmail.com>
|
||||
Giovanni Scafora <giovanni@archlinux.org> <linuxmania@gmail.com>
|
||||
Jan Steffens <jan.steffens@gmail.com>
|
||||
Jan Alexander Steffens (heftig) <heftig@archlinux.org> <jan.steffens@gmail.com>
|
||||
Jaroslaw Swierczynski <swiergot@gmail.com> <swiergot@juvepoland.com>
|
||||
Jonathan Conder <j@skurvy.no-ip.org> <jonno.conder@gmail.com>
|
||||
Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>
|
||||
|
@ -20,6 +20,7 @@ Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar> <jotapesan@gmail.com>
|
|||
Manuel Tortosa <manutortosa@chakra-project.org> <manutortosa@gmail.com>
|
||||
Marc - A. Dahlhaus <mad@wol.de>
|
||||
Matthias Gorissen <matthias@archlinux.de> <siquame@web.de>
|
||||
morganamilo <morganamilo@archlinux.org> <morganamilo@gmail.com>
|
||||
Laszlo Papp <djszapi@archlinux.us> <djszapi2@gmail.com>
|
||||
Nagy Gabor <ngaba@bibl.u-szeged.hu> <ngaba@petra.hos.u-szeged.hu>
|
||||
Nagy Gabor <ngaba@bibl.u-szeged.hu> <ngaba at bibl.u-szeged.hu>
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[archlinux-pacman.libalpm-pot]
|
||||
[o:toofishes:p:archlinux-pacman:r:libalpm-pot]
|
||||
file_filter = lib/libalpm/po/<lang>.po
|
||||
source_file = lib/libalpm/po/libalpm.pot
|
||||
source_lang = en
|
||||
|
||||
[archlinux-pacman.pacman-pot]
|
||||
[o:toofishes:p:archlinux-pacman:r:pacman-pot]
|
||||
file_filter = src/pacman/po/<lang>.po
|
||||
source_file = src/pacman/po/pacman.pot
|
||||
source_lang = en
|
||||
|
||||
[archlinux-pacman.pacman-scripts-pot]
|
||||
[o:toofishes:p:archlinux-pacman:r:pacman-scripts-pot]
|
||||
file_filter = scripts/po/<lang>.po
|
||||
source_file = scripts/po/pacman-scripts.pot
|
||||
source_lang = en
|
||||
|
|
|
@ -1,250 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# SPDX-License-Identifier: Unlicense
|
||||
#
|
||||
# Based on the template file provided by the 'YCM-Generator' project authored by
|
||||
# Reuben D'Netto.
|
||||
# Jiahui Xie has re-reformatted and expanded the original script in accordance
|
||||
# to the requirements of the PEP 8 style guide and 'systemd' project,
|
||||
# respectively.
|
||||
#
|
||||
# The original license is preserved as it is.
|
||||
#
|
||||
#
|
||||
# This is free and unencumbered software released into the public domain.
|
||||
#
|
||||
# Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
# distribute this software, either in source code form or as a compiled
|
||||
# binary, for any purpose, commercial or non-commercial, and by any
|
||||
# means.
|
||||
#
|
||||
# In jurisdictions that recognize copyright laws, the author or authors
|
||||
# of this software dedicate any and all copyright interest in the
|
||||
# software to the public domain. We make this dedication for the benefit
|
||||
# of the public at large and to the detriment of our heirs and
|
||||
# successors. We intend this dedication to be an overt act of
|
||||
# relinquishment in perpetuity of all present and future rights to this
|
||||
# software under copyright law.
|
||||
#
|
||||
# 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 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.
|
||||
#
|
||||
# For more information, please refer to <http://unlicense.org/>
|
||||
|
||||
"""
|
||||
YouCompleteMe configuration file tailored to support the 'meson' build system
|
||||
used by the 'systemd' project.
|
||||
"""
|
||||
|
||||
import glob
|
||||
import os
|
||||
import ycm_core
|
||||
|
||||
|
||||
SOURCE_EXTENSIONS = (".C", ".cpp", ".cxx", ".cc", ".c", ".m", ".mm")
|
||||
HEADER_EXTENSIONS = (".H", ".h", ".hxx", ".hpp", ".hh")
|
||||
|
||||
|
||||
def DirectoryOfThisScript():
|
||||
"""
|
||||
Return the absolute path of the parent directory containing this
|
||||
script.
|
||||
"""
|
||||
return os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
def GuessBuildDirectory():
|
||||
"""
|
||||
Guess the build directory using the following heuristics:
|
||||
|
||||
1. Returns the current directory of this script plus 'build'
|
||||
subdirectory in absolute path if this subdirectory exists.
|
||||
|
||||
2. Otherwise, probes whether there exists any directory
|
||||
containing '.ninja_log' file two levels above the current directory;
|
||||
returns this single directory only if there is one candidate.
|
||||
"""
|
||||
result = os.path.join(DirectoryOfThisScript(), "build")
|
||||
|
||||
if os.path.exists(result):
|
||||
return result
|
||||
|
||||
result = glob.glob(os.path.join(DirectoryOfThisScript(),
|
||||
"..", "..", "*", ".ninja_log"))
|
||||
|
||||
if not result:
|
||||
return ""
|
||||
|
||||
if 1 != len(result):
|
||||
return ""
|
||||
|
||||
return os.path.split(result[0])[0]
|
||||
|
||||
|
||||
def TraverseByDepth(root, include_extensions):
|
||||
"""
|
||||
Return a set of child directories of the 'root' containing file
|
||||
extensions specified in 'include_extensions'.
|
||||
|
||||
NOTE:
|
||||
1. The 'root' directory itself is excluded from the result set.
|
||||
2. No subdirectories would be excluded if 'include_extensions' is left
|
||||
to 'None'.
|
||||
3. Each entry in 'include_extensions' must begin with string '.'.
|
||||
"""
|
||||
is_root = True
|
||||
result = set()
|
||||
# Perform a depth first top down traverse of the given directory tree.
|
||||
for root_dir, subdirs, file_list in os.walk(root):
|
||||
if not is_root:
|
||||
# print("Relative Root: ", root_dir)
|
||||
# print(subdirs)
|
||||
if include_extensions:
|
||||
get_ext = os.path.splitext
|
||||
subdir_extensions = {
|
||||
get_ext(f)[-1] for f in file_list if get_ext(f)[-1]
|
||||
}
|
||||
if subdir_extensions & include_extensions:
|
||||
result.add(root_dir)
|
||||
else:
|
||||
result.add(root_dir)
|
||||
else:
|
||||
is_root = False
|
||||
|
||||
return result
|
||||
|
||||
|
||||
_project_src_dir = os.path.join(DirectoryOfThisScript(), "src")
|
||||
_include_dirs_set = TraverseByDepth(_project_src_dir, frozenset({".h"}))
|
||||
flags = [
|
||||
"-x",
|
||||
"c"
|
||||
# The following flags are partially redundant due to the existence of
|
||||
# 'compile_commands.json'.
|
||||
# '-Wall',
|
||||
# '-Wextra',
|
||||
# '-Wfloat-equal',
|
||||
# '-Wpointer-arith',
|
||||
# '-Wshadow',
|
||||
# '-std=gnu99',
|
||||
]
|
||||
|
||||
for include_dir in _include_dirs_set:
|
||||
flags.append("-I" + include_dir)
|
||||
|
||||
# Set this to the absolute path to the folder (NOT the file!) containing the
|
||||
# compile_commands.json file to use that instead of 'flags'. See here for
|
||||
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
|
||||
#
|
||||
# You can get CMake to generate this file for you by adding:
|
||||
# set( CMAKE_EXPORT_COMPILE_COMMANDS 1 )
|
||||
# to your CMakeLists.txt file.
|
||||
#
|
||||
# Most projects will NOT need to set this to anything; you can just change the
|
||||
# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
|
||||
compilation_database_folder = GuessBuildDirectory()
|
||||
|
||||
if os.path.exists(compilation_database_folder):
|
||||
database = ycm_core.CompilationDatabase(compilation_database_folder)
|
||||
else:
|
||||
database = None
|
||||
|
||||
|
||||
def MakeRelativePathsInFlagsAbsolute(flags, working_directory):
|
||||
"""
|
||||
Iterate through 'flags' and replace the relative paths prefixed by
|
||||
'-isystem', '-I', '-iquote', '--sysroot=' with absolute paths
|
||||
start with 'working_directory'.
|
||||
"""
|
||||
if not working_directory:
|
||||
return list(flags)
|
||||
new_flags = []
|
||||
make_next_absolute = False
|
||||
path_flags = ["-isystem", "-I", "-iquote", "--sysroot="]
|
||||
for flag in flags:
|
||||
new_flag = flag
|
||||
|
||||
if make_next_absolute:
|
||||
make_next_absolute = False
|
||||
if not flag.startswith("/"):
|
||||
new_flag = os.path.join(working_directory, flag)
|
||||
|
||||
for path_flag in path_flags:
|
||||
if flag == path_flag:
|
||||
make_next_absolute = True
|
||||
break
|
||||
|
||||
if flag.startswith(path_flag):
|
||||
path = flag[len(path_flag):]
|
||||
new_flag = path_flag + os.path.join(working_directory, path)
|
||||
break
|
||||
|
||||
if new_flag:
|
||||
new_flags.append(new_flag)
|
||||
return new_flags
|
||||
|
||||
|
||||
def IsHeaderFile(filename):
|
||||
"""
|
||||
Check whether 'filename' is considered as a header file.
|
||||
"""
|
||||
extension = os.path.splitext(filename)[1]
|
||||
return extension in HEADER_EXTENSIONS
|
||||
|
||||
|
||||
def GetCompilationInfoForFile(filename):
|
||||
"""
|
||||
Helper function to look up compilation info of 'filename' in the 'database'.
|
||||
"""
|
||||
# The compilation_commands.json file generated by CMake does not have
|
||||
# entries for header files. So we do our best by asking the db for flags for
|
||||
# a corresponding source file, if any. If one exists, the flags for that
|
||||
# file should be good enough.
|
||||
if not database:
|
||||
return None
|
||||
|
||||
if IsHeaderFile(filename):
|
||||
basename = os.path.splitext(filename)[0]
|
||||
for extension in SOURCE_EXTENSIONS:
|
||||
replacement_file = basename + extension
|
||||
if os.path.exists(replacement_file):
|
||||
compilation_info = \
|
||||
database.GetCompilationInfoForFile(replacement_file)
|
||||
if compilation_info.compiler_flags_:
|
||||
return compilation_info
|
||||
return None
|
||||
return database.GetCompilationInfoForFile(filename)
|
||||
|
||||
|
||||
def FlagsForFile(filename, **kwargs):
|
||||
"""
|
||||
Callback function to be invoked by YouCompleteMe in order to get the
|
||||
information necessary to compile 'filename'.
|
||||
|
||||
It returns a dictionary with a single element 'flags'. This element is a
|
||||
list of compiler flags to pass to libclang for the file 'filename'.
|
||||
"""
|
||||
if database:
|
||||
# Bear in mind that compilation_info.compiler_flags_ does NOT return a
|
||||
# python list, but a "list-like" StringVec object
|
||||
compilation_info = GetCompilationInfoForFile(filename)
|
||||
if not compilation_info:
|
||||
return None
|
||||
|
||||
final_flags = MakeRelativePathsInFlagsAbsolute(
|
||||
compilation_info.compiler_flags_,
|
||||
compilation_info.compiler_working_dir_)
|
||||
|
||||
else:
|
||||
relative_to = DirectoryOfThisScript()
|
||||
final_flags = MakeRelativePathsInFlagsAbsolute(flags, relative_to)
|
||||
|
||||
return {
|
||||
"flags": final_flags,
|
||||
"do_cache": True
|
||||
}
|
13
HACKING
13
HACKING
|
@ -176,16 +176,3 @@ For pacman:
|
|||
-------------------------------------------
|
||||
|
||||
Never directly include config.h. This will always be added via Makefiles.
|
||||
|
||||
GDB and Valgrind Usage
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When using GDB or valgrind on pacman, you will want to run it on the actual
|
||||
binary rather than the shell script wrapper produced by libtool. The actual
|
||||
binary lives at `src/pacman/.libs/lt-pacman`, and will exist after running
|
||||
`./src/pacman/pacman` at least once.
|
||||
|
||||
For example, to run valgrind:
|
||||
|
||||
./src/pacman/pacman
|
||||
valgrind --leak-check=full -- src/pacman/.libs/lt-pacman -Syu
|
||||
|
|
370
INSTALL
370
INSTALL
|
@ -1,370 +0,0 @@
|
|||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
|
||||
Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. This file is offered as-is,
|
||||
without warranty of any kind.
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
Briefly, the shell commands `./configure; make; make install' should
|
||||
configure, build, and install this package. The following
|
||||
more-detailed instructions are generic; see the `README' file for
|
||||
instructions specific to this package. Some packages provide this
|
||||
`INSTALL' file but do not implement all of the features documented
|
||||
below. The lack of an optional feature in a given package is not
|
||||
necessarily a bug. More recommendations for GNU packages can be found
|
||||
in *note Makefile Conventions: (standards)Makefile Conventions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file `config.log' containing compiler output (useful mainly for
|
||||
debugging `configure').
|
||||
|
||||
It can also use an optional file (typically called `config.cache'
|
||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||
the results of its tests to speed up reconfiguring. Caching is
|
||||
disabled by default to prevent problems with accidental use of stale
|
||||
cache files.
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point `config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file `configure.ac' (or `configure.in') is used to create
|
||||
`configure' by a program called `autoconf'. You need `configure.ac' if
|
||||
you want to change it or regenerate `configure' using a newer version
|
||||
of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system.
|
||||
|
||||
Running `configure' might take a while. While running, it prints
|
||||
some messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package, generally using the just-built uninstalled binaries.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation. When installing into a prefix owned by root, it is
|
||||
recommended that the package be configured and built as a regular
|
||||
user, and only the `make install' phase executed with root
|
||||
privileges.
|
||||
|
||||
5. Optionally, type `make installcheck' to repeat any self-tests, but
|
||||
this time using the binaries in their final installed location.
|
||||
This target does not install anything. Running this target as a
|
||||
regular user, particularly if the prior `make install' required
|
||||
root privileges, verifies that the installation completed
|
||||
correctly.
|
||||
|
||||
6. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
7. Often, you can also type `make uninstall' to remove the installed
|
||||
files again. In practice, not all packages have tested that
|
||||
uninstallation works correctly, even though it is required by the
|
||||
GNU Coding Standards.
|
||||
|
||||
8. Some packages, particularly those that use Automake, provide `make
|
||||
distcheck', which can by used by developers to test that all other
|
||||
targets like `make install' and `make uninstall' work correctly.
|
||||
This target is generally not run by end users.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. Run `./configure --help'
|
||||
for details on some of the pertinent environment variables.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is an example:
|
||||
|
||||
./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
||||
|
||||
*Note Defining Variables::, for more details.
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you can use GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'. This
|
||||
is known as a "VPATH" build.
|
||||
|
||||
With a non-GNU `make', it is safer to compile the package for one
|
||||
architecture at a time in the source code directory. After you have
|
||||
installed the package for one architecture, use `make distclean' before
|
||||
reconfiguring for another architecture.
|
||||
|
||||
On MacOS X 10.5 and later systems, you can create libraries and
|
||||
executables that work on multiple system types--known as "fat" or
|
||||
"universal" binaries--by specifying multiple `-arch' options to the
|
||||
compiler but only a single `-arch' option to the preprocessor. Like
|
||||
this:
|
||||
|
||||
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||
CPP="gcc -E" CXXCPP="g++ -E"
|
||||
|
||||
This is not guaranteed to produce working output in all cases, you
|
||||
may have to build one architecture at a time and combine the results
|
||||
using the `lipo' tool if you have problems.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' installs the package's commands under
|
||||
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
||||
can specify an installation prefix other than `/usr/local' by giving
|
||||
`configure' the option `--prefix=PREFIX', where PREFIX must be an
|
||||
absolute file name.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them. In general, the
|
||||
default for these options is expressed in terms of `${prefix}', so that
|
||||
specifying just `--prefix' will affect all of the other directory
|
||||
specifications that were not explicitly provided.
|
||||
|
||||
The most portable way to affect installation locations is to pass the
|
||||
correct locations to `configure'; however, many packages provide one or
|
||||
both of the following shortcuts of passing variable assignments to the
|
||||
`make install' command line to change installation locations without
|
||||
having to reconfigure or recompile.
|
||||
|
||||
The first method involves providing an override variable for each
|
||||
affected directory. For example, `make install
|
||||
prefix=/alternate/directory' will choose an alternate location for all
|
||||
directory configuration variables that were expressed in terms of
|
||||
`${prefix}'. Any directories that were specified during `configure',
|
||||
but not in terms of `${prefix}', must each be overridden at install
|
||||
time for the entire installation to be relocated. The approach of
|
||||
makefile variable overrides for each directory variable is required by
|
||||
the GNU Coding Standards, and ideally causes no recompilation.
|
||||
However, some platforms have known limitations with the semantics of
|
||||
shared libraries that end up requiring recompilation when using this
|
||||
method, particularly noticeable in packages that use GNU Libtool.
|
||||
|
||||
The second method involves providing the `DESTDIR' variable. For
|
||||
example, `make install DESTDIR=/alternate/directory' will prepend
|
||||
`/alternate/directory' before all installation names. The approach of
|
||||
`DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||
does not work on platforms that have drive letters. On the other hand,
|
||||
it does better at avoiding recompilation issues, and works well even
|
||||
when some directory options were not specified in terms of `${prefix}'
|
||||
at `configure' time.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Some packages offer the ability to configure how verbose the
|
||||
execution of `make' will be. For these packages, running `./configure
|
||||
--enable-silent-rules' sets the default to minimal output, which can be
|
||||
overridden with `make V=1'; while running `./configure
|
||||
--disable-silent-rules' sets the default to verbose, which can be
|
||||
overridden with `make V=0'.
|
||||
|
||||
Particular systems
|
||||
==================
|
||||
|
||||
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
|
||||
CC is not installed, it is recommended to use the following options in
|
||||
order to use an ANSI C compiler:
|
||||
|
||||
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
|
||||
|
||||
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
||||
|
||||
HP-UX `make' updates targets which have the same time stamps as
|
||||
their prerequisites, which makes it generally unusable when shipped
|
||||
generated files such as `configure' are involved. Use GNU `make'
|
||||
instead.
|
||||
|
||||
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
||||
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
|
||||
a workaround. If GNU CC is not installed, it is therefore recommended
|
||||
to try
|
||||
|
||||
./configure CC="cc"
|
||||
|
||||
and if that doesn't work, try
|
||||
|
||||
./configure CC="cc -nodtk"
|
||||
|
||||
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
|
||||
directory contains several dysfunctional programs; working variants of
|
||||
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
|
||||
in your `PATH', put it _after_ `/usr/bin'.
|
||||
|
||||
On Haiku, software installed for all users goes in `/boot/common',
|
||||
not `/usr/local'. It is recommended to use the following options:
|
||||
|
||||
./configure --prefix=/boot/common
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' cannot figure out
|
||||
automatically, but needs to determine by the type of machine the package
|
||||
will run on. Usually, assuming the package is built to be run on the
|
||||
_same_ architectures, `configure' can figure that out, but if it prints
|
||||
a message saying it cannot guess the machine type, give it the
|
||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
where SYSTEM can have one of these forms:
|
||||
|
||||
OS
|
||||
KERNEL-OS
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the option `--target=TYPE' to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with `--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to `configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the `configure' command line, using `VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
causes the specified `gcc' to be used as the C compiler (unless it is
|
||||
overridden in the site shell script).
|
||||
|
||||
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
|
||||
an Autoconf limitation. Until the limitation is lifted, you can use
|
||||
this workaround:
|
||||
|
||||
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
`configure' Invocation
|
||||
======================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--help'
|
||||
`-h'
|
||||
Print a summary of all of the options to `configure', and exit.
|
||||
|
||||
`--help=short'
|
||||
`--help=recursive'
|
||||
Print a summary of the options unique to this package's
|
||||
`configure', and exit. The `short' variant lists options used
|
||||
only in the top level, while the `recursive' variant lists options
|
||||
also present in any nested packages.
|
||||
|
||||
`--version'
|
||||
`-V'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||
disable caching.
|
||||
|
||||
`--config-cache'
|
||||
`-C'
|
||||
Alias for `--cache-file=config.cache'.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`--prefix=DIR'
|
||||
Use DIR as the installation prefix. *note Installation Names::
|
||||
for more details, including other options available for fine-tuning
|
||||
the installation locations.
|
||||
|
||||
`--no-create'
|
||||
`-n'
|
||||
Run the configure checks, but stop before creating any output
|
||||
files.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options. Run
|
||||
`configure --help' for more details.
|
85
Makefile.am
85
Makefile.am
|
@ -1,85 +0,0 @@
|
|||
SUBDIRS = lib/libalpm src/util src/pacman scripts etc test/pacman test/util test/scripts
|
||||
if WANT_DOC
|
||||
SUBDIRS += doc
|
||||
endif
|
||||
|
||||
DIST_SUBDIRS = $(SUBDIRS) src/common
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4 --install
|
||||
AM_MAKEFLAGS = --no-print-directory
|
||||
|
||||
# Make sure we test and build manpages when doing distcheck
|
||||
DISTCHECK_CONFIGURE_FLAGS = --enable-doc --disable-git-version \
|
||||
bashcompdir='$${prefix}/share/bash-completion/completions'
|
||||
|
||||
# Some files automatically included, so they aren't specified below:
|
||||
# AUTHORS, COPYING, NEWS, README
|
||||
EXTRA_DIST = \
|
||||
HACKING test/tap.sh \
|
||||
meson.build meson_options.txt \
|
||||
build-aux/edit-script.sh.in \
|
||||
build-aux/meson-install-script.sh \
|
||||
build-aux/meson-make-symlink.sh \
|
||||
build-aux/script-wrapper.sh.in
|
||||
|
||||
|
||||
# Sample makepkg prototype files
|
||||
pkgdatadir = ${datadir}/${PACKAGE}
|
||||
dist_pkgdata_DATA = \
|
||||
proto/PKGBUILD.proto \
|
||||
proto/PKGBUILD-split.proto \
|
||||
proto/PKGBUILD-vcs.proto \
|
||||
proto/proto.install
|
||||
|
||||
$(top_srcdir)/test/pacman/tests/TESTS: $(wildcard test/pacman/tests/*.py)
|
||||
@printf "TESTS += %s\n" $^ | LC_ALL=C sort -u > "$@"
|
||||
|
||||
TESTS = test/scripts/parseopts_test.sh \
|
||||
test/scripts/human_to_size_test.sh \
|
||||
test/scripts/makepkg-template_test.sh \
|
||||
test/scripts/pacman-db-upgrade-v9.py \
|
||||
test/util/vercmptest.sh
|
||||
include $(top_srcdir)/test/pacman/tests/TESTS
|
||||
|
||||
TEST_SUITE_LOG = test/test-suite.log
|
||||
TEST_EXTENSIONS = .py
|
||||
AM_TESTS_ENVIRONMENT = \
|
||||
PMTEST_UTIL_DIR=$(top_builddir)/src/util/; export PMTEST_UTIL_DIR; \
|
||||
PMTEST_SCRIPT_DIR=$(top_builddir)/scripts/; export PMTEST_SCRIPT_DIR; \
|
||||
PMTEST_SCRIPTLIB_DIR=$(top_srcdir)/scripts/library/; export PMTEST_SCRIPTLIB_DIR; \
|
||||
PMTEST_LIBMAKEPKG_DIR=$(top_builddir)/scripts/libmakepkg/; export PMTEST_LIBMAKEPKG_DIR;
|
||||
LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
|
||||
$(top_srcdir)/build-aux/tap-driver.sh
|
||||
PY_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
|
||||
$(top_srcdir)/build-aux/tap-driver.sh
|
||||
PY_LOG_COMPILER = $(PYTHON) $(top_srcdir)/test/pacman/pactest.py
|
||||
AM_PY_LOG_FLAGS = \
|
||||
--scriptlet-shell $(SCRIPTLET_SHELL) \
|
||||
--ldconfig $(LDCONFIG) \
|
||||
--bindir $(top_builddir)/src/pacman \
|
||||
--bindir $(top_builddir)/scripts
|
||||
if !HAVE_LIBGPGME
|
||||
AM_PY_LOG_FLAGS += --without-gpg
|
||||
endif
|
||||
if !HAVE_LIBCURL
|
||||
AM_PY_LOG_FLAGS += --without-curl
|
||||
endif
|
||||
|
||||
# create the pacman DB, cache, makepkg-template and system hook directories upon install
|
||||
install-data-local:
|
||||
for dir in "$(DESTDIR)$(localstatedir)/lib/pacman" "$(DESTDIR)$(localstatedir)/cache/pacman/pkg" \
|
||||
"$(DESTDIR)$(datarootdir)/makepkg-template" "$(DESTDIR)$(datarootdir)/libalpm/hooks"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
|
||||
update-po:
|
||||
$(MAKE) -C lib/libalpm/po update-po
|
||||
$(MAKE) -C scripts/po update-po
|
||||
$(MAKE) -C src/pacman/po update-po
|
||||
|
||||
update-copyright:
|
||||
for file in $(shell sh -c 'git grep -l "Copyright .* Pacman Development" | grep -v "\.po"'); do \
|
||||
sed -i -e "/Copyright (/s/-$(OLD)/-$(NEW)/" -e "/Copyright (/s/ $(OLD)/ $(OLD)-$(NEW)/" "$$file"; \
|
||||
done
|
||||
|
||||
.PHONY: update-po update-copyright
|
187
NEWS
187
NEWS
|
@ -1,5 +1,172 @@
|
|||
VERSION DESCRIPTION
|
||||
-----------------------------------------------------------------------------
|
||||
7.0.0 - Add DownloadUser configuration option used to drop-privileges
|
||||
when downloading files.
|
||||
- Download files to a temporary directory owned by DownloadUser
|
||||
- On Linux systems, ensure the download process does not write
|
||||
outside the download directory
|
||||
- Add DisableSandbox option and --disable-sandbox flag to
|
||||
disable the download write restrictions on Linux systems
|
||||
- Ensure database and signature are downloaded from the same
|
||||
location. Fixes the use of XferCommand.
|
||||
- Use snprintf instead of sprintf
|
||||
- Fix issue preventing use of _FORITIFY_SOURCE=3 when compiling
|
||||
- Fix read-after-free issue when parsing config files
|
||||
- Fix searching for files in an non-NULL by empty filelist
|
||||
- Prevent buffer overflow with long scriptlet shell path
|
||||
- repo-add:
|
||||
- Fix issue with missing argument in parsepots for -k/--key
|
||||
- Handle lack of newline at the end of .PKGINFO
|
||||
- create empty databases when requested
|
||||
- makepkg:
|
||||
- Remove GITFLAGS support - this required multiple breaking
|
||||
changes to git source handling in order to fully support.
|
||||
- Prevent MAKEFLAGS and CHOST from being disabled with
|
||||
options=(!buildenv)
|
||||
- Fix unstable git checksumming, and dependence on user
|
||||
config
|
||||
- Make "not a clone of" source errors visible with a new
|
||||
return code
|
||||
- Document makepkg.conf.d dropin configuration
|
||||
- Drop sudo permissions after use
|
||||
- Prevent PKGBUILDs overriding BUILDENV
|
||||
- only copy source files once when creating a debug package
|
||||
- pacman-key:
|
||||
- Fix permissions check for non-root operations
|
||||
6.1.0 - Add cache server support
|
||||
- Improvements to --sysroot option - NOTE: targets to -U are no
|
||||
longer interpreted relative to sysroot
|
||||
- Add more format specifiers for --print operations
|
||||
- Add extended data field for arbitrary package data
|
||||
- Do not run hooks with --dbonly
|
||||
- Provide more details when encountering file conflicts or
|
||||
corrupt packages
|
||||
- Improved WKD support (FS#73703, FS#73534)
|
||||
- Improved handling of malformed download headers (FS#73704)
|
||||
- Use openssl interfaces for calculating sha256 and md5 sums
|
||||
- Fix multi download bar chomps
|
||||
- makepkg:
|
||||
- Replace libdepends and libprovides with autodeps
|
||||
- Support configuration via makepkg.conf.d drop-ins
|
||||
- Add GITFLAGS environment variable to customize checkouts
|
||||
- Add -D option to change directory before building
|
||||
- Implement verify() function for custom source verificaton
|
||||
- Add checksum support for git/mercurial/bzr sources
|
||||
- Improved stripping and debug package support
|
||||
- Configurable LTO support
|
||||
- Add source signing PGP keys to package if available
|
||||
- Store "pkgtype" in xdata
|
||||
- Remove md5sum from mtree files
|
||||
- Document MAKEPKG_LIBRARY
|
||||
- repo-add:
|
||||
- Do not include package signature details in the repo. Add
|
||||
the --include-sigs to revert to old behaviour.
|
||||
- Do not add md5sum to the repo database
|
||||
6.0.1 - Prevent download error pages ending up in package files
|
||||
(FS#71083)
|
||||
- Give -U downloads a random .part file name if needed
|
||||
(FS#71464)
|
||||
- Fix downloading signatures with redirecting URLs (FS#71148)
|
||||
- Fix double free when importing PGP keys (FS#71107)
|
||||
- Ensure signature files are named after original file
|
||||
following redirects (FS#71274)
|
||||
- Order downloads by size - largest to smallest (FS#70172)
|
||||
- Fix reproducibility of man pages (FS#71154)
|
||||
- makepkg:
|
||||
- Fix stripping debug symbols with binutils 2.37 (FS#71722)
|
||||
- Export PYTHONHASHSEED for reproducible python packages
|
||||
- pacman-key:
|
||||
- Quieten trust db checks.
|
||||
6.0.0 - internal downloader can retrieve files in parallel (FS#20056)
|
||||
- an additional progress bar is added to track total download
|
||||
progress. This replaces the previous TotalDownload option.
|
||||
- fix download rates becoming negative
|
||||
- skip mirror servers with too many errors (FS#29293)
|
||||
- package signatures are always retrieved even if signature is
|
||||
embedded in repo database or package is in cache (FS#33992)
|
||||
- detached package signatures found in CacheDir can be used to
|
||||
verify packages if signature is not in the database. Also
|
||||
verify packages checksums from repo db when using detached
|
||||
signatures.
|
||||
- add support for multiple 'Architecture' values
|
||||
- -Qkk now validates file checksums in addition to date/size
|
||||
- colored upgrade summary now dulls version numbers for contrast
|
||||
- libalpm frontends can now supply context to callbacks (FS#12721)
|
||||
- support xattr when extracting packages
|
||||
- allow setting --noprogressbar in pacman.conf
|
||||
- fix output alignment for CJK translated text (FS#59229)
|
||||
- fix reading targets from stdin when using --sysroot (FS#68630)
|
||||
- fix deleting signatures for existing databases with -Sc
|
||||
- check for and forbid duplicate download filenames (FS#67850)
|
||||
- -Fx now reports error for invalid regex
|
||||
- remove support for the autotools build system
|
||||
- meson: properly compile internal symbols as hidden
|
||||
- meson: make -uninstalled.pc correct
|
||||
- fix build errors on systems like FreeBSD
|
||||
- makepkg:
|
||||
- add link time optimization support to makepkg
|
||||
- add support for sources using the fossil VCS
|
||||
- allow specifying alternative authentication commands when
|
||||
running pacman as root (FS#32621)
|
||||
- support zstd decompression for sources
|
||||
- strip: fix removing file attributes such as xattr
|
||||
- switch to CRC as default integrity checksum
|
||||
- record $startdir for reproducible builds
|
||||
- record name of build orchestration tool for reproducible builds
|
||||
- fix signing of source packages
|
||||
- add optional argument support to parseopts
|
||||
- reduce dependency on file for detecting ELF files
|
||||
- remove dependency on GNU sed
|
||||
- avoid trailing whitespace in --printsrcinfo output
|
||||
- libprovides: don't provide both versioned and unversioned
|
||||
sonames
|
||||
- don't double-layer distcc on ccache
|
||||
- fix detection of source file names for debug packages with
|
||||
gcc 11
|
||||
- strip: silence warnings emitted by readelf while detecting
|
||||
source filenames
|
||||
- fix use of spaces in source file renaming (FS#70254)
|
||||
- pacman-key:
|
||||
- --refresh-keys queries WKD before keyserver
|
||||
- be less noisy when populating the keyring (FS#64142)
|
||||
- warn about time taken for master key generation
|
||||
- repo-add:
|
||||
- support the same compression methods as makepkg
|
||||
- zsh completion: add pacman-conf support
|
||||
- various documentation updates
|
||||
- after a decade and a half of promising libalpm.3 documentation
|
||||
"once we get around to doing good Doxygen documentation", it
|
||||
has happened!
|
||||
5.2.2 - fix pacman test suite under python 3.8
|
||||
- only prompt to import new keys once in a transaction
|
||||
- fix handling of fully downloaded .part files
|
||||
- increase maximum database size (FS#65197)
|
||||
- fix segfault in alpm_option_set_assumeinstalled
|
||||
- change config parsing warnings to errors to match actual
|
||||
behavior
|
||||
- fix key extraction for signatures with two-octet sub-packet
|
||||
headers
|
||||
- fix documentation typos (FS#67000)
|
||||
- change master signing key to RSA4096
|
||||
- improve error message when building without autoconf-archive
|
||||
- pacman-conf:
|
||||
- allow querying ILoveCandy individually
|
||||
- fix querying NoExtract individually
|
||||
- makepkg:
|
||||
- fix seccmp-related error while stripping binaries (FS#65100)
|
||||
- fix extraction of file:// sources (FS#64648)
|
||||
- allow $pkgname in install and changelog file names (FS#64932)
|
||||
- sort libprovides for reproducibility
|
||||
- strip: don't re-add the same debug source multiple times
|
||||
- error on empty refspecs in git sources
|
||||
- correctly handle missing download clients
|
||||
- fix splitting multi-line error messages across stdout and
|
||||
stderr
|
||||
- handle GPGKEY with spaces (FS#66949)
|
||||
- do not accept public-only keys for signing
|
||||
- repo-add:
|
||||
- handle GPGKEY with spaces (FS#66949)
|
||||
- do not accept public-only keys for signing
|
||||
5.2.1 - fix segfault on importing PGP keys for -U operations
|
||||
- fix distribution of meson files
|
||||
- fix inode command for darwin/bsd
|
||||
|
@ -10,7 +177,7 @@ VERSION DESCRIPTION
|
|||
- do not warn about PACKAGER format if not set
|
||||
- only run --clean when a package is built
|
||||
- repo-add:
|
||||
- fix compression of databases with zstd
|
||||
- fix compression of databases with zstd (FS#64213)
|
||||
5.2.0 - completely remove delta support (CVE-2019-18183)
|
||||
- add support to pacman and pacman-key for downloading PGP
|
||||
signing keys using the WKD protocol (FS#63171)
|
||||
|
@ -48,7 +215,7 @@ VERSION DESCRIPTION
|
|||
- fix segfault when Usage is specified without a value
|
||||
- include timezones in pacman.log
|
||||
- bash-completion: use POSIX character classes for portability
|
||||
- correctly report a download failiure for 404s
|
||||
- correctly report a download failure for 404s
|
||||
- fix handling of signals during SIGSEGV
|
||||
- fix buffer overread in pacman/callback
|
||||
- fix crash when downloading files with a Content-Disposition
|
||||
|
@ -451,8 +618,8 @@ VERSION DESCRIPTION
|
|||
- remove --asroot and enforce fakeroot usage
|
||||
- all PKGBUILDs require a package() function
|
||||
- PKGBUILDs can no longer be read from stdin
|
||||
- enable make style environmental overrides
|
||||
- Read CARCH environmental variable (FS#35030)
|
||||
- enable make-style environment variable overrides
|
||||
- Read CARCH environment variable (FS#35030)
|
||||
- makedepends and checkdepends are installed together (FS#31557)
|
||||
- added support for sha224 checksums (FS#36776)
|
||||
- remove warning when license is not specified in PKGBUILD
|
||||
|
@ -482,7 +649,7 @@ VERSION DESCRIPTION
|
|||
file overwrites from malicious databases
|
||||
- makepkg:
|
||||
- restrict package name from starting with a dot
|
||||
- fix BZR source revision support (FS#35281)
|
||||
- fix Bazaar source revision support (FS#35281)
|
||||
- Use LOGDEST for log pipe
|
||||
- fix distcc disabling (FS#35741)
|
||||
- correct stat usage on BSD/Darwin (FS#35469)
|
||||
|
@ -498,7 +665,7 @@ VERSION DESCRIPTION
|
|||
FS#34716, FS#35097)
|
||||
- makepkg:
|
||||
- improve SVN VCS PKGBUILD handling (FS#34675, FS#34636)
|
||||
- allow "lp:" URLs for BZR sources (FS#34650)
|
||||
- allow "lp:" URLs for Bazaar sources (FS#34650)
|
||||
- prevent pkgver() capturing stderr (FS#34974)
|
||||
- fix attempt to remove package twice on failure (FS#34672)
|
||||
- contrib:
|
||||
|
@ -549,7 +716,7 @@ VERSION DESCRIPTION
|
|||
- pkgrel must be in decimal format
|
||||
- PKGBUILDs without package() functions are deprecated
|
||||
- support specifying CPPFLAGS in makepkg.conf
|
||||
- support PACKAGER environmental variable
|
||||
- support PACKAGER environment variable
|
||||
- allow source renaming to work on signature files
|
||||
- configurable compression options (FS#27430)
|
||||
- allow multiple packages to be build when using
|
||||
|
@ -563,7 +730,7 @@ VERSION DESCRIPTION
|
|||
- add LOGDEST configuration option
|
||||
- install makedepends with --repackage
|
||||
- repo-add:
|
||||
- honor TMPDIR environmental variable
|
||||
- honor TMPDIR environment variable
|
||||
- add makedepends/checkdepends information to database
|
||||
- pacman-key:
|
||||
- fix importing keys with quotes in file name (FS#28445)
|
||||
|
@ -1171,7 +1338,7 @@ VERSION DESCRIPTION
|
|||
- add source package creation option
|
||||
- rankmirrors- allow reading from stdin (FS#8043)
|
||||
- and many other updates: 198 bugs/FRs closed since 3.0.0 release
|
||||
- switch to GIT for source code management
|
||||
- switch to Git for source code management
|
||||
3.0.6 - config files updated to reflect current -> core change
|
||||
- fix symlink overwriting issue (FS#7484)
|
||||
- fix config parsing with tr_TR locale (FS#7235)
|
||||
|
@ -1323,7 +1490,7 @@ VERSION DESCRIPTION
|
|||
- Cleanup db_loadpkgs(), add list_add_sorted()
|
||||
- Fixed a memory leak in db_find_conflicts()
|
||||
2.8.3 - Fixed a little makepkg bug with bash 3.0
|
||||
- Fixed resolvedeps to always prefer literals over provisios
|
||||
- Fixed resolvedeps to always prefer literals over providers
|
||||
- Added --config option to specify an alternate config file
|
||||
- Added "Include" directive to include repositories from
|
||||
config files (inspired by Michael Baehr's patch)
|
||||
|
|
187
README
187
README
|
@ -52,7 +52,6 @@ library is initialized.
|
|||
* logcb: The callback function for "log" operations.
|
||||
* dlcb: The callback function for download progress of each package.
|
||||
* fetchcb: Callback for custom download function.
|
||||
* totaldlcb: The callback function for overall download progress.
|
||||
* eventcb: Callback for transaction messages.
|
||||
* questioncb: Callback for selecting amongst choices.
|
||||
* progresscb: Callback to handle display of transaction progress.
|
||||
|
@ -195,8 +194,8 @@ remove.c and sync.c).
|
|||
|
||||
The frontend is using a configuration file, usually "/etc/pacman.conf". Some
|
||||
of these options are only useful for the frontend only (mainly the ones used to
|
||||
control the output like totaldownload, or the behavior with cleanmethod and
|
||||
syncfirst). The rest is used to configure the library.
|
||||
control the output like verbosepkglist, or the behavior with cleanmethod).
|
||||
The rest is used to configure the library.
|
||||
|
||||
|
||||
[UPGRADE/REMOVE/SYNC]
|
||||
|
@ -353,7 +352,7 @@ API CHANGES BETWEEN 3.4 AND 3.5
|
|||
- alpm_db_get_pkg() for normal targets
|
||||
- alpm_find_dbs_satisfier() for versioned provisions
|
||||
- alpm_find_grp_pkgs() for groups
|
||||
- alpm_deptest() is replaced by the more flexibile alpm_find_satisfier()
|
||||
- alpm_deptest() is replaced by the more flexible alpm_find_satisfier()
|
||||
- size_t used for alpm_list_t sizes
|
||||
- return type for alpm_list_count()
|
||||
- parameter type in alpm_list_msort() and alpm_list_nth()
|
||||
|
@ -364,7 +363,7 @@ API CHANGES BETWEEN 3.4 AND 3.5
|
|||
- alpm_trans_get_flags()
|
||||
- error codes:
|
||||
PM_ERR_DISK_SPACE, PM_ERR_WRITE
|
||||
- flags
|
||||
- flags:
|
||||
PM_TRANS_FLAG_NODEPVERSION, PM_TRANS_EVT_DISKSPACE_START,
|
||||
PM_TRANS_EVT_DISKSPACE_DONE, PM_TRANS_CONV_SELECT_PROVIDER,
|
||||
PM_TRANS_PROGRESS_DISKSPACE_START, PM_TRANS_PROGRESS_INTEGRITY_START
|
||||
|
@ -420,7 +419,7 @@ API CHANGES BETWEEN 3.5 AND 4.0
|
|||
- alpm_release
|
||||
- alpm_remove_pkg
|
||||
- alpm_sync_sysupgrade
|
||||
- several structs are no longer opaque
|
||||
- several structs are no longer opaque:
|
||||
- alpm_conflict_t
|
||||
- alpm_delta_t
|
||||
- alpm_depend_t
|
||||
|
@ -432,19 +431,33 @@ API CHANGES BETWEEN 3.5 AND 4.0
|
|||
|
||||
[ADDED]
|
||||
- option functions:
|
||||
alpm_{get,set}_eventcb(), alpm_option_{get,set}_convcb(),
|
||||
alpm_option_{get,set}_progresscb()
|
||||
- alpm_{get,set}_eventcb()
|
||||
- alpm_option_{get,set}_convcb()
|
||||
- alpm_option_{get,set}_progresscb()
|
||||
- package signing functions:
|
||||
alpm_option_get_default_siglevel(), alpm_option_set_default_siglevel(),
|
||||
alpm_option_get_gpgdir(), alpm_option_set_gpgdir(), alpm_db_get_siglevel(),
|
||||
alpm_siglist_cleanup(), alpm_db_check_pgp_signature(), alpm_pkg_check_pgp_signature(),
|
||||
alpm_pkg_get_origin(), alpm_pkg_get_sha256sum(), alpm_pkg_get_base64_sig()
|
||||
- alpm_option_get_default_siglevel()
|
||||
- alpm_option_set_default_siglevel()
|
||||
- alpm_option_get_gpgdir()
|
||||
- alpm_option_set_gpgdir()
|
||||
- alpm_db_get_siglevel()
|
||||
- alpm_siglist_cleanup()
|
||||
- alpm_db_check_pgp_signature()
|
||||
- alpm_pkg_check_pgp_signature()
|
||||
- alpm_pkg_get_origin()
|
||||
- alpm_pkg_get_sha256sum()
|
||||
- alpm_pkg_get_base64_sig()
|
||||
- list functions:
|
||||
alpm_list_to_array(), alpm_list_previous()
|
||||
- alpm_list_to_array()
|
||||
- alpm_list_previous()
|
||||
- structs:
|
||||
alpm_backup_t, alpm_file_t, alpm_filelist_t
|
||||
- alpm_backup_t
|
||||
- alpm_file_t
|
||||
- alpm_filelist_t
|
||||
- enums:
|
||||
alpm_siglevel_t, alpm_sigstatus_t, alpm_sigvalidity_t, alpm_pkgfrom_t
|
||||
- alpm_siglevel_t
|
||||
- alpm_sigstatus_t
|
||||
- alpm_sigvalidity_t
|
||||
- alpm_pkgfrom_t
|
||||
- error codes:
|
||||
ALPM_ERR_DB_INVALID, ALPM_ERR_DB_INVALID_SIG, ALPM_ERR_GPGME,
|
||||
ALPM_ERR_PKG_INVALID_CHECKSUM, ALPM_ERR_PKG_INVALID_SIG, ALPM_ERR_SIG_INVALID,
|
||||
|
@ -471,10 +484,10 @@ API CHANGES BETWEEN 4.0 AND 4.1
|
|||
- alpm_db_unregister_all -> alpm_unregister_all_syncdbs
|
||||
- alpm_db_readgroup -> alpm_db_get_group
|
||||
- alpm_db_set_pkgreason -> alpm_pkg_set_reason (handle parameter removed)
|
||||
- alpm_time_t typedef used for all times
|
||||
- alpm_time_t typedef used for all times:
|
||||
- members of alpm_pgpkey_t
|
||||
- return types of alpm_pkg_get_builddate and alpm_pkg_get_installdate
|
||||
- delta options now use required ratio rather than on/off
|
||||
- delta options now use required ratio rather than on/off:
|
||||
- alpm_option_get_usedelta -> alpm_option_get_deltaratio
|
||||
- alpm_option_set_usedelta -> alpm_option_set_deltaratio
|
||||
|
||||
|
@ -491,18 +504,18 @@ API CHANGES BETWEEN 4.0 AND 4.1
|
|||
- alpm_db_usage_t
|
||||
- alpm_db_set_usage()
|
||||
- alpm_db_get_usage()
|
||||
- wrapper functions for reading mtree files
|
||||
- wrapper functions for reading mtree files:
|
||||
- alpm_pkg_mtree_open()
|
||||
- alpm_pkg_mtree_next()
|
||||
- alpm_pkg_mtree_close()
|
||||
- utility functions
|
||||
- utility functions:
|
||||
- alpm_pkg_find()
|
||||
- alpm_pkg_compute_optionalfor()
|
||||
- alpm_filelist_contains()
|
||||
- types
|
||||
- types:
|
||||
- alpm_time_t
|
||||
- alpm_errno_t
|
||||
- flags
|
||||
- flags:
|
||||
ALPM_EVENT_OPTDEP_REQUIRED, ALPM_EVENT_DATABASE_MISSING,
|
||||
ALPM_EVENT_KEYRING_START, ALPM_EVENT_KEYRING_DONE, ALPM_EVENT_KEY_DOWNLOAD_START,
|
||||
ALPM_EVENT_KEY_DOWNLOAD_DONE, ALPM_PROGRESS_KEYRING_START
|
||||
|
@ -514,7 +527,7 @@ API CHANGES BETWEEN 4.1 AND 4.2
|
|||
[CHANGED]
|
||||
- alpm_filelist_t - removed member resolved_path
|
||||
- alpm_filelist_contains - now returns alpm_file_t
|
||||
- event callback
|
||||
- event callback:
|
||||
- alpm_event_t renamed to alpm_event_type_t
|
||||
- alpm_event_t union added
|
||||
- alpm_event_cb now takes only an alpm_event_t parameter
|
||||
|
@ -524,7 +537,7 @@ API CHANGES BETWEEN 4.1 AND 4.2
|
|||
alpm_event_pacsave_created_t, alpm_event_pacorig_created_t added
|
||||
- ALPM_EVENT_*_START -> ALPM_EVENT_PACKAGE_OPERATION_START
|
||||
- ALPM_EVENT_*_DONE -> ALPM_EVENT_PACKAGE_OPERATION_DONE
|
||||
- question callback
|
||||
- question callback:
|
||||
- alpm_question_t renamed to alpm_question_type_t
|
||||
- alpm_question_t union added
|
||||
- alpm_cb_question now takes only an alpm_question_t parameter
|
||||
|
@ -533,30 +546,30 @@ API CHANGES BETWEEN 4.1 AND 4.2
|
|||
alpm_question_select_provider_t, alpm_question_import_key_t added
|
||||
|
||||
[ADDED]
|
||||
- memory management
|
||||
- memory management:
|
||||
- alpm_fileconflict_free()
|
||||
- alpm_depmissing_free()
|
||||
- alpm_conflict_free()
|
||||
- alpm_dep_free()
|
||||
- database usage
|
||||
- database usage:
|
||||
- alpm_db_usage_t
|
||||
- alpm_db_set_usage()
|
||||
- alpm_db_get_usage()
|
||||
- assume installed
|
||||
- assume installed:
|
||||
- alpm_option_get_assumeinstalled()
|
||||
- alpm_option_add_assumeinstalled()
|
||||
- alpm_option_set_assumeinstalled()
|
||||
- alpm_option_remove_assumeinstalled()
|
||||
- using noupgrade/noextract
|
||||
- using noupgrade/noextract:
|
||||
- alpm_option_match_noupgrade()
|
||||
- alpm_option_match_noextract()
|
||||
- utility functions
|
||||
- utility functions:
|
||||
- alpm_dep_from_string()
|
||||
- alpm_pkg_should_ignore()
|
||||
- alpm_decode_signature()
|
||||
- alpm_extract_keyid()
|
||||
- flags
|
||||
- ALPM_EVENT_RETRIEVE_DONE, ALPM_EVENT_RETRIEVE_FAILED, ALPM_EVENT_PKGDOWNLOAD_START,
|
||||
- flags:
|
||||
ALPM_EVENT_RETRIEVE_DONE, ALPM_EVENT_RETRIEVE_FAILED, ALPM_EVENT_PKGDOWNLOAD_START,
|
||||
ALPM_EVENT_PKGDOWNLOAD_DONE, ALPM_EVENT_PKGDOWNLOAD_FAILED, ALPM_EVENT_OPTDEP_REMOVAL,
|
||||
ALPM_EVENT_PACNEW_CREATED, ALPM_EVENT_PACSVAE_CREATED, ALPM_EVENT_PACORIG_CREATED
|
||||
|
||||
|
@ -566,13 +579,13 @@ API CHANGES BETWEEN 4.2 AND 5.0
|
|||
|
||||
[REMOVED]
|
||||
- alpm_siglevel_t - removed members ALPM_SIG_PACKAGE_SET, ALPM_SIG_PACKAGE_TRUST_SET
|
||||
- removed .pacorig generation
|
||||
- removed .pacorig generation:
|
||||
- ALPM_EVENT_PACORIG_CREATED
|
||||
- alpm_event_pacorig_created_t
|
||||
- alpm_event_t.pacorig_created
|
||||
|
||||
[ADDED]
|
||||
- hook support
|
||||
- hook support:
|
||||
- alpm_option_get_hookdirs()
|
||||
- alpm_option_set_hookdirs()
|
||||
- alpm_option_add_hookdir()
|
||||
|
@ -582,14 +595,14 @@ API CHANGES BETWEEN 4.2 AND 5.0
|
|||
- ALPM_EVENT_HOOK_START, ALPM_EVENT_HOOK_DONE
|
||||
- ALPM_EVENT_HOOK_RUN_START, ALPM_EVENT_HOOK_RUN_DONE
|
||||
- ALPM_ERR_TRANS_HOOK_FAILED
|
||||
- different database extension support
|
||||
- different database extension support:
|
||||
- alpm_option_get_dbext()
|
||||
- alpm_option_set_dbext()
|
||||
- pkgbase accessor
|
||||
- pkgbase accessor:
|
||||
- alpm_pkg_get_base()
|
||||
- transaction events
|
||||
- transaction events:
|
||||
- ALPM_EVENT_TRANSACTION_START, ALPM_EVENT_TRANSACTION_DONE
|
||||
- database unlocking
|
||||
- database unlocking:
|
||||
- alpm_unlock()
|
||||
|
||||
|
||||
|
@ -599,7 +612,7 @@ API CHANGES BETWEEN 5.0 AND 5.1
|
|||
[CHANGED]
|
||||
- alpm_errno_t - added member ALPM_ERR_OK
|
||||
- alpm_siglevel_t - value of ALPM_SIG_USE_DEFAULT changed
|
||||
- functions using bitfields return/pass an int instead of an enum
|
||||
- functions using bitfields return/pass an int instead of an enum:
|
||||
- alpm_option_get_default_siglevel()
|
||||
- alpm_option_set_default_siglevel()
|
||||
- alpm_option_get_remote_file_siglevel()
|
||||
|
@ -616,19 +629,19 @@ API CHANGES BETWEEN 5.0 AND 5.1
|
|||
- alpm_option_set_local_file_siglevel()
|
||||
|
||||
[ADDED]
|
||||
- overwrite support
|
||||
- overwrite support:
|
||||
- alpm_option_get_overwrite_files()
|
||||
- alpm_option_set_overwrite_files()
|
||||
- alpm_option_add_overwrite_file()
|
||||
- alpm_option_remove_overwrite_file()
|
||||
- download timeout control
|
||||
- download timeout control:
|
||||
- alpm_option_set_disable_dl_timeout()
|
||||
- access make/checkdepends info
|
||||
- access make/checkdepends info:
|
||||
- alpm_pkg_get_checkdepends()
|
||||
- alpm_pkg_get_makedepends()
|
||||
- check pacman capabilities
|
||||
- check pacman capabilities:
|
||||
- alpm_capabilities()
|
||||
- duplicate and add to list
|
||||
- duplicate and add to list:
|
||||
- alpm_list_append_strdup()
|
||||
|
||||
|
||||
|
@ -636,7 +649,7 @@ API CHANGES BETWEEN 5.1 AND 5.2
|
|||
===============================
|
||||
|
||||
[REMOVED]
|
||||
- package delta support
|
||||
- package delta support:
|
||||
- alpm_delta_t
|
||||
- alpm_event_delta_patch_t
|
||||
- alpm_event_t union - removed alpm_event_delta_patch_t
|
||||
|
@ -655,3 +668,91 @@ API CHANGES BETWEEN 5.1 AND 5.2
|
|||
- alpm_errno_t - added member ALPM_ERR_MISSING_CAPABILITY_SIGNATURES
|
||||
- alpm_sync_newversion() replaced with alpm_sync_get_new_version() which
|
||||
does not filter on any ALPM_DB_USAGE_*.
|
||||
|
||||
|
||||
API CHANGES BETWEEN 5.2 AND 6.0
|
||||
===============================
|
||||
|
||||
[REMOVED]
|
||||
- ALPM_EVENT_PKGDOWNLOAD_START, ALPM_EVENT_PKGDOWNLOAD_DONE, ALPM_EVENT_PKGDOWNLOAD_FAILED
|
||||
- ALPM_ERR_PKG_REPO_NOT_FOUND
|
||||
- old TotalDownload implementation:
|
||||
- alpm_cb_totaldl
|
||||
- alpm_option_get_totaldlcb()
|
||||
- alpm_option_set_totaldlcb()
|
||||
|
||||
[CHANGED]
|
||||
- alpm_db_update() now accepts a list of databases rather than a single database.
|
||||
- alpm_fetch_pkgurl() accepts a list of packages to download.
|
||||
- alpm_db_search() now has an additional parameter and returns success status
|
||||
- ALPM_EVENT_RETRIEVE_* -> ALPM_EVENT_DB_RETRIEVE_* and ALPM_EVENT_PKG_RETRIEVE_*
|
||||
- alpm_cb_download pass event and data
|
||||
- multi architecture support:
|
||||
- alpm_option_get_arch() -> alpm_option_get_architectures()
|
||||
- alpm_option_set_arch() -> alpm_option_set_architectures()
|
||||
- alpm_db_get_servers() copies parameter data
|
||||
|
||||
[ADDED]
|
||||
- parallel download support:
|
||||
- alpm_option_set_parallel_downloads()
|
||||
- alpm_option_get_parallel_downloads()
|
||||
- file download events:
|
||||
- alpm_download_event_type_t
|
||||
- alpm_download_event_init_t
|
||||
- alpm_download_event_progress_t
|
||||
- alpm_download_event_completed_t
|
||||
- download misc:
|
||||
- ALPM_DOWNLOAD_RETRY
|
||||
- alpm_download_event_retry_t
|
||||
- alpm_event_pkg_retrieve_t
|
||||
- multiarchitecture support:
|
||||
- alpm_option_add_architecture()
|
||||
- alpm_option_remove_architecture()
|
||||
- misc:
|
||||
- alpm_pkg_get_sig()
|
||||
- callbacks add front-end provided context
|
||||
|
||||
|
||||
API CHANGES BETWEEN 6.0 AND 6.1
|
||||
===============================
|
||||
|
||||
[REMOVED]
|
||||
- alpm_trans_t
|
||||
|
||||
[CHANGED]
|
||||
- alpm_conflict_t - full package added as member, removing package name and name
|
||||
hash members
|
||||
- alpm_question_import_key_t - holds key uid and fingerprint rather than alpm_pgpkey_t
|
||||
- alpm_pkgreason_t - added ALPM_PKG_REASON_UNKNOWN
|
||||
- alpm_transflag_t - added ALPM_TRANS_FLAG_NOHOOKS
|
||||
|
||||
[ADDED]
|
||||
- extensible package data type:
|
||||
- alpm_pkg_xdata_t
|
||||
- alpm_pkg_get_xdata()
|
||||
- accessor functions:
|
||||
- alpm_db_get_handle()
|
||||
- alpm_pkg_get_handle()
|
||||
- cache server support:
|
||||
- alpm_db_get_cache_servers()
|
||||
- alpm_db_set_cache_servers()
|
||||
- alpm_db_add_cache_server()
|
||||
|
||||
|
||||
API CHANGES BETWEEN 6.1 AND 7.0
|
||||
===============================
|
||||
|
||||
[ADDED]
|
||||
- sandbox functions:
|
||||
- alpm_option_get_sandboxuser()
|
||||
- alpm_option_set_sandboxuser()
|
||||
- alpm_option_set_disable_sandbox()
|
||||
- alpm_sandbox_setup_child()
|
||||
|
||||
|
||||
API CHANGES BETWEEN 7.0 AND 7.1
|
||||
===============================
|
||||
|
||||
[CHANGED]
|
||||
- error codes:
|
||||
PM_ERR_TRANS_COMMITING renamed to PM_ERR_TRANS_COMMITTING
|
||||
|
|
26
RELEASE
26
RELEASE
|
@ -1,24 +1,34 @@
|
|||
The following checklist should be used for making a pacman release.
|
||||
|
||||
- Ensure "make distcheck" succeeds
|
||||
- Ensure "ninja dist" succeeds
|
||||
- Call a freeze to development.
|
||||
- Send translation updates to Transifex at least two weeks before a major
|
||||
release (see below). At this stage, strings can only be changed for a
|
||||
major issue.
|
||||
- Update NEWS and README files
|
||||
- Pull translation updates from Transifex
|
||||
- Update version in configure.ac as described in file
|
||||
- Update version in meson.build as described in file
|
||||
- Update doc/index.asciidoc
|
||||
- Create a signed git tag (git tag -s vX.Y.Z -m "commit message")
|
||||
- Create and sign release tarballs (generate with "make distcheck")
|
||||
- In addition to the standard autotools toolchain, autoconf-archive is needed
|
||||
- Update pacman website
|
||||
- Create and sign release tarballs (generate with "ninja dist")
|
||||
- Create release on gitlab project page
|
||||
- Upload release tarball and signature to gitlab ("glab release upload ...")
|
||||
- Create branch release/?.?.x (with ?.? replaced by major version number)
|
||||
- Update .gitlab-ci.yml to point the website pages run at release branch
|
||||
|
||||
Transifex updates are handled using the transifex client. The basic process is:
|
||||
- Pull updates from transifex ("tx pull -a -f --minimum-perc 75")
|
||||
- Update po files ("make update-po")
|
||||
- Fix all translation errors found
|
||||
- Pull updates from transifex ("tx pull -f --minimum-perc 75")
|
||||
- Update po files ("./build-aux/update-po")
|
||||
- Fix all translation errors found (e.g. using "mint-check-translations")
|
||||
- Add any new locales to the relevant LINGUAS file
|
||||
- Optional: Make any manual changes needed (e.g. fixing spacing in a string)
|
||||
and update po files again
|
||||
- Push updated po files to transifex ("tx push -s -t --skip")
|
||||
|
||||
Point releases:
|
||||
- all bugs fixes slated for the release branch must first land on master
|
||||
(unless no longer relevant)
|
||||
- following the initial post-release period when the release and master
|
||||
branches may be kept in sync, commits are backported to the release branch
|
||||
using "git cherry-pick -x"
|
||||
- translation updates should be pulled onto the release branch only
|
||||
|
|
|
@ -3,7 +3,7 @@ currently. Our translations are currently maintained in Transifex; please read
|
|||
doc/translation-help.txt for more details.
|
||||
|
||||
Below is a list of past translators before we switched to Transifex; more can
|
||||
be found by looking in the GIT history.
|
||||
be found by looking in the Git history.
|
||||
|
||||
If your language is not already in the various po/ subdirectories and you wish
|
||||
it was, set up a team in Transifex for your language and we will be happy to
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh -x
|
||||
|
||||
autoreconf -i
|
||||
patch -d build-aux -Np0 -i ltmain-asneeded.patch
|
||||
|
||||
exit 0
|
11
build-aux/cat-test-file
Executable file
11
build-aux/cat-test-file
Executable file
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import sys
|
||||
|
||||
for path in sys.argv[1:]:
|
||||
print('# -----------------------------------')
|
||||
print('# ' + path + ':')
|
||||
print('# -----------------------------------')
|
||||
with open(path, 'r') as f:
|
||||
for line in f:
|
||||
print('# ' + line, end='')
|
|
@ -4,13 +4,14 @@ input=$1
|
|||
output=$2
|
||||
mode=$3
|
||||
|
||||
"@SED@" \
|
||||
sed \
|
||||
-e "s|@rootdir[@]|@ROOTDIR@|g" \
|
||||
-e "s|@localedir[@]|@LOCALEDIR@|g" \
|
||||
-e "s|@sysconfdir[@]|@sysconfdir@|g" \
|
||||
-e "s|@localstatedir[@]|@localstatedir@|g" \
|
||||
-e "s|@libmakepkgdir[@]|@LIBMAKEPKGDIR@|g" \
|
||||
-e "s|@pkgdatadir[@]|@PKGDATADIR@|g" \
|
||||
-e "s|@keyringdir[@]|@KEYRINGDIR@|g" \
|
||||
-e "s|@prefix[@]|@PREFIX@|g" \
|
||||
-e "1s|#!/bin/bash|#!@BASH@|g" \
|
||||
-e "s|@PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g" \
|
||||
|
@ -20,9 +21,7 @@ mode=$3
|
|||
-e "s|@DEBUGSUFFIX[@]|@DEBUGSUFFIX@|g" \
|
||||
-e "s|@INODECMD[@]|@INODECMD@|g" \
|
||||
-e "s|@FILECMD[@]|@FILECMD@|g" \
|
||||
-e "s|@SEDINPLACEFLAGS[@]|@SEDINPLACEFLAGS@|g" \
|
||||
-e "s|@SEDPATH[@]|@SEDPATH@|g" \
|
||||
-e "s|@configure_input[@]|Generated from ${input##*/}; do not edit by hand.|g" \
|
||||
-e "s|@BSDTAR_NO_READ_SPARSE[@]|@BSDTAR_NO_READ_SPARSE@|g" \
|
||||
"$input" >"$output"
|
||||
|
||||
if [[ $mode ]]; then
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
--- ltmain.sh.orig 2013-06-26 14:31:53.472627840 +1000
|
||||
+++ ltmain.sh 2013-06-26 14:30:56.137038936 +1000
|
||||
@@ -5800,6 +5800,14 @@
|
||||
arg=$func_stripname_result
|
||||
;;
|
||||
|
||||
+ -Wl,*--as-needed*)
|
||||
+ deplibs="$deplibs $wl--as-needed"
|
||||
+ ;;
|
||||
+
|
||||
+ -Wl,*--no-as-needed*)
|
||||
+ deplibs="$deplibs $wl--no-as-needed"
|
||||
+ ;;
|
||||
+
|
||||
-Wl,*)
|
||||
func_stripname '-Wl,' '' "$arg"
|
||||
args=$func_stripname_result
|
||||
@@ -6160,6 +6168,15 @@
|
||||
lib=
|
||||
found=no
|
||||
case $deplib in
|
||||
+ -Wl,--as-needed|-Wl,--no-as-needed)
|
||||
+ if test "$linkmode,$pass" = "prog,link"; then
|
||||
+ compile_deplibs="$deplib $compile_deplibs"
|
||||
+ finalize_deplibs="$deplib $finalize_deplibs"
|
||||
+ else
|
||||
+ deplibs="$deplib $deplibs"
|
||||
+ fi
|
||||
+ continue
|
||||
+ ;;
|
||||
-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
|
||||
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
|
||||
if test "$linkmode,$pass" = "prog,link"; then
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
built_script=$1
|
||||
dest_path=$2
|
||||
|
||||
install -Dm755 "$built_script" "$DESTDIR/$dest_path"
|
|
@ -5,8 +5,6 @@ set -eu
|
|||
# and we need to create the target directory...
|
||||
|
||||
mkdir -vp "$(dirname "${DESTDIR:-}$2")"
|
||||
if [ "$(dirname $1)" = . ]; then
|
||||
ln -vfs -T "$1" "${DESTDIR:-}$2"
|
||||
else
|
||||
ln -vfs -T --relative "${DESTDIR:-}$1" "${DESTDIR:-}$2"
|
||||
fi
|
||||
|
||||
rm -f "${DESTDIR:-}$2"
|
||||
ln -vs "$1" "${DESTDIR:-}$2"
|
||||
|
|
17
build-aux/print-failed-test-output
Executable file
17
build-aux/print-failed-test-output
Executable file
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import json
|
||||
import sys
|
||||
|
||||
def print_result(result):
|
||||
print('==================================================================')
|
||||
print(result['name'])
|
||||
print(' '.join(result['command']))
|
||||
print('==================================================================')
|
||||
print(result['stdout'])
|
||||
|
||||
with open(sys.argv[1], 'r') as f:
|
||||
for line in f:
|
||||
result = json.loads(line)
|
||||
if result['result'] == 'FAIL':
|
||||
print_result(result)
|
|
@ -3,4 +3,4 @@
|
|||
# This script serves as a trampoline for running scripts which depend on
|
||||
# libmakepkg with the libmakepkg within the build tree.
|
||||
|
||||
LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
|
||||
MAKEPKG_LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
|
||||
|
|
8
build-aux/update-copyright
Executable file
8
build-aux/update-copyright
Executable file
|
@ -0,0 +1,8 @@
|
|||
#! /bin/sh
|
||||
|
||||
OLD=$1
|
||||
NEW=$2
|
||||
|
||||
for file in $(git grep -l "Copyright .* Pacman Development" | grep -v "\.po"); do \
|
||||
sed -i -e "/Copyright (/s/-${OLD}/-${NEW}/" -e "/Copyright (/s/ ${OLD}/ ${OLD}-${NEW}/" "$file"
|
||||
done
|
604
configure.ac
604
configure.ac
|
@ -1,604 +0,0 @@
|
|||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
# Minimum version of autoconf required
|
||||
AC_PREREQ(2.64)
|
||||
|
||||
# UPDATING VERSION NUMBERS FOR RELEASES
|
||||
#
|
||||
# libalpm:
|
||||
# current
|
||||
# The most recent interface number that this library implements.
|
||||
# revision
|
||||
# The implementation number of the current interface.
|
||||
# age
|
||||
# The difference between the newest and oldest interfaces that this library
|
||||
# implements. In other words, the library implements all the interface
|
||||
# numbers in the range from number current - age to current.
|
||||
#
|
||||
# 1. Start with version information of `0:0:0' for each libtool library.
|
||||
# 2. Update the version information only immediately before a public release of
|
||||
# your software. More frequent updates are unnecessary, and only guarantee
|
||||
# that the current interface number gets larger faster.
|
||||
# 3. If the library source code has changed at all since the last update, then
|
||||
# increment revision (`c:r:a' becomes `c:r+1:a').
|
||||
# 4. If any interfaces have been added, removed, or changed since the last
|
||||
# update, increment current, and set revision to 0.
|
||||
# 5. If any interfaces have been added since the last public release, then
|
||||
# increment age.
|
||||
# 6. If any interfaces have been removed since the last public release, then
|
||||
# set age to 0.
|
||||
#
|
||||
# pacman:
|
||||
# Extreme huge major changes:
|
||||
# pacman_version_major += 1
|
||||
# pacman_version_minor = 0
|
||||
# pacman_version_micro = 0
|
||||
#
|
||||
# Real releases:
|
||||
# pacman_version_minor += 1
|
||||
# pacman_version_micro = 0
|
||||
#
|
||||
# Bugfix releases:
|
||||
# pacman_version_micro += 1
|
||||
|
||||
m4_define([lib_current], [12])
|
||||
m4_define([lib_revision], [1])
|
||||
m4_define([lib_age], [0])
|
||||
|
||||
m4_define([pacman_version_major], [5])
|
||||
m4_define([pacman_version_minor], [2])
|
||||
m4_define([pacman_version_micro], [1])
|
||||
m4_define([pacman_version],
|
||||
[pacman_version_major.pacman_version_minor.pacman_version_micro])
|
||||
|
||||
# Autoconf initialization
|
||||
AC_INIT([pacman], [pacman_version], [pacman-dev@archlinux.org])
|
||||
AC_CONFIG_SRCDIR([config.h.in])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_REQUIRE_AUX_FILE([tap-driver.sh])
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
AM_INIT_AUTOMAKE([1.11 foreign])
|
||||
AM_SILENT_RULES([yes])
|
||||
|
||||
LT_INIT
|
||||
LIB_VERSION=`expr lib_current - lib_age`.lib_age.lib_revision
|
||||
LIB_VERSION_INFO="lib_current:lib_revision:lib_age"
|
||||
|
||||
# Respect empty CFLAGS during compiler tests
|
||||
if test "x$CFLAGS" = "x"; then
|
||||
CFLAGS=""
|
||||
fi
|
||||
|
||||
# Set substitution values for version stuff in Makefiles and anywhere else,
|
||||
# and put LIB_VERSION in config.h
|
||||
AC_SUBST(LIB_VERSION)
|
||||
AC_SUBST(LIB_VERSION_INFO)
|
||||
AC_DEFINE_UNQUOTED([LIB_VERSION], ["$LIB_VERSION"], [libalpm version number])
|
||||
|
||||
# Help line for root directory
|
||||
AC_ARG_WITH(root-dir,
|
||||
AS_HELP_STRING([--with-root-dir=path], [set the location of the root operating directory]),
|
||||
[ROOTDIR=$withval], [ROOTDIR=/])
|
||||
|
||||
# Help line for package extension
|
||||
AC_ARG_WITH(pkg-ext,
|
||||
AS_HELP_STRING([--with-pkg-ext=ext], [set the file extension used by packages]),
|
||||
[PKGEXT=$withval], [PKGEXT=.pkg.tar.gz])
|
||||
|
||||
# Help line for source package directory
|
||||
AC_ARG_WITH(src-ext,
|
||||
AS_HELP_STRING([--with-src-ext=ext], [set the file extension used by source packages]),
|
||||
[SRCEXT=$withval], [SRCEXT=.src.tar.gz])
|
||||
|
||||
# Help line for buildscript filename
|
||||
AC_ARG_WITH(buildscript,
|
||||
AS_HELP_STRING([--with-buildscript=name], [set the build script name used by makepkg]),
|
||||
[BUILDSCRIPT=$withval], [BUILDSCRIPT=PKGBUILD])
|
||||
|
||||
# Help line for buildscript filename
|
||||
AC_ARG_WITH(makepkg-template-dir,
|
||||
AS_HELP_STRING([--with-makepkg-template-dir=name], [set the template dir used by makepkg-template]),
|
||||
[TEMPLATE_DIR=$withval], [TEMPLATE_DIR=${datarootdir}/makepkg-template])
|
||||
|
||||
# Help line for debug package suffix
|
||||
AC_ARG_WITH(debug-suffix,
|
||||
AS_HELP_STRING([--with-debug-suffix=name], [set the suffix for split debugging symbol packages used by makepkg]),
|
||||
[DEBUGSUFFIX=$withval], [DEBUGSUFFIX=debug])
|
||||
|
||||
# Help line for changing shell used to run install scriptlets
|
||||
AC_ARG_WITH(scriptlet-shell,
|
||||
AS_HELP_STRING([--with-scriptlet-shell=shell],
|
||||
[set the full path to the shell used to run install scriptlets]),
|
||||
[SCRIPTLET_SHELL=$withval], [SCRIPTLET_SHELL=/bin/sh])
|
||||
|
||||
# Help line for ldconfig path
|
||||
AC_ARG_WITH(ldconfig,
|
||||
AS_HELP_STRING([--with-ldconfig=path],
|
||||
[set the full path to ldconfig]),
|
||||
[LDCONFIG=$withval], [LDCONFIG=/sbin/ldconfig])
|
||||
|
||||
# Help line for determining whether file is seccomp-enabled
|
||||
AC_ARG_WITH(file-seccomp,
|
||||
AS_HELP_STRING([--with-file-seccomp={yes|no|auto}],
|
||||
[determine whether file is seccomp-enabled @<:@default=auto@:>@]),
|
||||
[with_file_seccomp=$withval], [with_file_seccomp=auto])
|
||||
|
||||
# Help line for selecting a crypto library
|
||||
AC_ARG_WITH(crypto,
|
||||
AS_HELP_STRING([--with-crypto={openssl|nettle}],
|
||||
[select crypto implementation @<:@default=openssl@:>@]),
|
||||
[with_crypto=$withval], [with_crypto=openssl])
|
||||
|
||||
# Help line for using gpgme
|
||||
AC_ARG_WITH(gpgme,
|
||||
AS_HELP_STRING([--with-gpgme], [use GPGME for PGP signature verification]),
|
||||
[], [with_gpgme=check])
|
||||
|
||||
# Help line for using libcurl
|
||||
AC_ARG_WITH(libcurl,
|
||||
AS_HELP_STRING([--with-libcurl], [use libcurl for the internal downloader]),
|
||||
[], [with_libcurl=check])
|
||||
|
||||
# Help line for documentation
|
||||
AC_ARG_ENABLE(doc,
|
||||
AS_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]),
|
||||
[wantdoc=$enableval], [wantdoc=yes])
|
||||
|
||||
# Help line for doxygen
|
||||
AC_ARG_ENABLE(doxygen,
|
||||
AS_HELP_STRING([--enable-doxygen], [build your own API docs via Doxygen]),
|
||||
[wantdoxygen=$enableval], [wantdoxygen=no])
|
||||
|
||||
# Help line for debug
|
||||
AC_ARG_ENABLE(debug,
|
||||
AS_HELP_STRING([--enable-debug], [enable debugging support]),
|
||||
[debug=$enableval], [debug=no])
|
||||
|
||||
# Help line for compiler warning flags
|
||||
AC_ARG_ENABLE(warningflags,
|
||||
AS_HELP_STRING([--enable-warningflags], [enable extra compiler warning flags]),
|
||||
[warningflags=$enableval], [warningflags=no])
|
||||
|
||||
# Help line for using git version in pacman version string
|
||||
AC_ARG_ENABLE(git-version,
|
||||
AS_HELP_STRING([--enable-git-version],
|
||||
[enable use of git version in version string if available]),
|
||||
[wantgitver=$enableval], [wantgitver=no])
|
||||
|
||||
# Enable large file support if available (must be enabled before
|
||||
# testing compilation against gpgme).
|
||||
AC_SYS_LARGEFILE
|
||||
|
||||
# Record large file flags in pkgconfig file
|
||||
if test "$enable_largefile" != no; then
|
||||
if test "$ac_cv_sys_file_offset_bits" != 'no'; then
|
||||
LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(LFS_CFLAGS)
|
||||
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_AWK
|
||||
AC_PROG_CC_C99
|
||||
AC_PROG_INSTALL
|
||||
AC_CHECK_PROGS([PYTHON], [python3 python], [false])
|
||||
AC_PATH_PROGS([BASH_SHELL], [bash bash4], [false])
|
||||
|
||||
# check for perl 5.10.1 (needed by makepkg-template)
|
||||
AC_PATH_PROG([PERL],[perl])
|
||||
AC_DEFUN([AX_PROG_PERL_VERSION],
|
||||
[AC_CACHE_CHECK([for Perl version $1 or later], [ax_cv_prog_perl_version],
|
||||
[AS_IF(["$PERL" -e 'require v$1;' >/dev/null 2>&1],
|
||||
[ax_cv_prog_perl_version=yes],
|
||||
[ax_cv_prog_perl_version=no])])
|
||||
AS_IF([test x"$ax_cv_prog_perl_version" = xyes], [$2], [$3])])
|
||||
AX_PROG_PERL_VERSION([5.10.1], [], [AC_MSG_ERROR([perl is too old])])
|
||||
|
||||
AS_IF([test "x$BASH_SHELL" = "xfalse"],
|
||||
AC_MSG_WARN([*** bash >= 4.4.0 is required for pacman scripts]),
|
||||
[bash_version_major=`$BASH_SHELL -c 'echo "${BASH_VERSINFO[[0]]}"'`
|
||||
bash_version_minor=`$BASH_SHELL -c 'echo "${BASH_VERSINFO[[1]]}"'`
|
||||
ok=yes
|
||||
if test "$bash_version_major" -lt 4; then
|
||||
ok=no
|
||||
fi
|
||||
if test "$bash_version_major" -eq 4 && test "$bash_version_minor" -lt 4; then
|
||||
ok=no
|
||||
fi
|
||||
if test "$ok" = "no"; then
|
||||
AC_MSG_ERROR([*** bash >= 4.4.0 is required for pacman scripts])
|
||||
fi
|
||||
unset bash_version_major bash_version_minor ok])
|
||||
|
||||
# find installed gettext
|
||||
AM_GNU_GETTEXT([external], [need-ngettext])
|
||||
AM_GNU_GETTEXT_VERSION(0.13.1)
|
||||
|
||||
AC_CHECK_LIB([m], [fabs], ,
|
||||
AC_MSG_ERROR([libm is needed to compile pacman!]))
|
||||
|
||||
PKG_CHECK_VAR(bashcompdir, [bash-completion], [completionsdir], ,
|
||||
bashcompdir="${datarootdir}/bash-completion/completions")
|
||||
|
||||
# Check for libarchive
|
||||
PKG_CHECK_MODULES(LIBARCHIVE, [libarchive >= 3.0.0], ,
|
||||
AC_MSG_ERROR([*** libarchive >= 3.0.0 is needed to compile pacman!]))
|
||||
|
||||
# Check file for seccomp
|
||||
if test "x$with_file_seccomp" = "xauto"; then
|
||||
file_version="$(file --version| sed -n 's/^file-\(.*\)/\1/p')"
|
||||
AX_COMPARE_VERSION([$file_version], [ge], [5.38], [with_file_seccomp=yes])
|
||||
fi
|
||||
if test "x$with_file_seccomp" = "xyes"; then
|
||||
FILECMD="file -S"
|
||||
else
|
||||
FILECMD="file"
|
||||
fi
|
||||
AC_SUBST(FILECMD)
|
||||
|
||||
# Check for OpenSSL
|
||||
have_openssl=no
|
||||
have_nettle=no
|
||||
if test "x$with_crypto" = "xnettle"; then
|
||||
AC_SUBST(pc_crypto, [nettle])
|
||||
PKG_CHECK_MODULES(NETTLE, [nettle],
|
||||
[AC_DEFINE(HAVE_LIBNETTLE, 1, [Define whether to use nettle]) have_nettle=yes], have_nettle=no)
|
||||
if test "x$have_nettle" = xno -a "x$with_crypto" = xnettle; then
|
||||
AC_MSG_ERROR([*** nettle support requested but libraries not found])
|
||||
fi
|
||||
else if test "x$with_crypto" = "xopenssl"; then
|
||||
AC_SUBST(pc_crypto, [libcrypto])
|
||||
PKG_CHECK_MODULES(LIBSSL, [libcrypto],
|
||||
[AC_DEFINE(HAVE_LIBSSL, 1, [Define if libcrypto is available]) have_openssl=yes], have_openssl=no)
|
||||
if test "x$have_openssl" = xno; then
|
||||
AC_MSG_ERROR([*** openssl support requested but libraries not found])
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR([*** unknown crypto support library requested - $with_crypto])
|
||||
fi
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_LIBSSL, [test "$have_openssl" = "yes"])
|
||||
AM_CONDITIONAL(HAVE_LIBNETTLE, [test "$have_nettle" = "yes"])
|
||||
|
||||
# Check for libcurl
|
||||
have_libcurl=no
|
||||
if test "x$with_libcurl" != "xno"; then
|
||||
PKG_CHECK_MODULES(LIBCURL, [libcurl >= 7.32.0],
|
||||
[AC_DEFINE(HAVE_LIBCURL, 1, [Define if libcurl is available]) have_libcurl=yes], have_libcurl=no)
|
||||
if test "x$have_libcurl" = xno -a "x$with_libcurl" = xyes; then
|
||||
AC_MSG_ERROR([*** libcurl >= 7.32.0 is required for internal downloader support])
|
||||
fi
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_LIBCURL, [test "$have_libcurl" = "yes"])
|
||||
# used to generate libalpm.pc
|
||||
if test "x$have_libcurl" = xyes; then
|
||||
AC_SUBST(pc_libcurl, [libcurl])
|
||||
fi
|
||||
|
||||
# Check for gpgme
|
||||
AC_MSG_CHECKING(whether to link with libgpgme)
|
||||
AS_IF([test "x$with_gpgme" != "xno"],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])])
|
||||
|
||||
have_gpgme=no
|
||||
if test "x$with_gpgme" != "xno"; then
|
||||
PKG_CHECK_MODULES(GPGME, [gpgme],
|
||||
[AC_DEFINE([HAVE_LIBGPGME], [1], [Define if gpgme should be used to provide GPG signature support.])
|
||||
AC_SUBST(pc_gpgme, [gpgme])
|
||||
have_gpgme=yes],
|
||||
[AM_PATH_GPGME([1.3.0],
|
||||
[LIBS_save="$LIBS"
|
||||
CPPFLAGS_save="$CPPFLAGS"
|
||||
CFLAGS_save="$CFLAGS"
|
||||
|
||||
LIBS="$LIBS $GPGME_LIBS"
|
||||
CPPFLAGS="$CPPFLAGS $GPGME_CPPFLAGS"
|
||||
CFLAGS="$CFLAGS $GPGME_CFLAGS"
|
||||
|
||||
AC_MSG_CHECKING([for sane gpgme])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <gpgme.h>]],
|
||||
[[return gpgme_check_version("1.3.0");]])],
|
||||
[AC_MSG_RESULT([yes])
|
||||
have_gpgme=yes
|
||||
AC_DEFINE([HAVE_LIBGPGME], [1], [Define if gpgme should be used to provide GPG signature support.])
|
||||
AC_SUBST(pc_gpgme_libs, ["$GPGME_LIBS"])],
|
||||
[AC_MSG_RESULT([no])
|
||||
have_gpgme=no
|
||||
unset GPGME_LIBS
|
||||
unset GPGME_CFLAGS]
|
||||
AS_IF([test "x$with_gpgme" = "xyes"],
|
||||
[AC_MSG_FAILURE([*** gpgme >= 1.3.0 is needed for GPG signature support])])
|
||||
)
|
||||
|
||||
LIBS="$LIBS_save"
|
||||
CPPFLAGS="$CPPFLAGS_save"
|
||||
CFLAGS="$CFLAGS_save"
|
||||
unset CPPFLAGS_save
|
||||
unset CFLAGS_save],)])
|
||||
fi
|
||||
|
||||
AS_IF([test "x$have_gpgme" = xno -a "x$with_gpgme" = xyes],
|
||||
[AC_MSG_FAILURE([--with-gpgme was given, but gpgme was not found])])
|
||||
AM_CONDITIONAL([HAVE_LIBGPGME], [test "x$have_gpgme" = "xyes"])
|
||||
|
||||
# Checks for header files.
|
||||
AC_CHECK_HEADERS([fcntl.h float.h glob.h langinfo.h libintl.h limits.h \
|
||||
locale.h mntent.h netinet/in.h netinet/tcp.h \
|
||||
stddef.h string.h sys/ioctl.h \
|
||||
sys/mnttab.h sys/mount.h \
|
||||
sys/param.h sys/statvfs.h sys/time.h sys/types.h \
|
||||
sys/ucred.h syslog.h termios.h wchar.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_INLINE
|
||||
AC_TYPE_INT64_T
|
||||
AC_TYPE_MODE_T
|
||||
AC_TYPE_OFF_T
|
||||
AC_TYPE_PID_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_SSIZE_T
|
||||
AC_STRUCT_TM
|
||||
AC_TYPE_UID_T
|
||||
AC_STRUCT_DIRENT_D_TYPE
|
||||
PATH_MAX_DEFINED
|
||||
|
||||
# Checks for library functions.
|
||||
AC_FUNC_FORK
|
||||
AC_FUNC_GETMNTENT
|
||||
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
|
||||
AC_CHECK_FUNCS([dup2 getcwd getmntinfo gettimeofday memmove memset \
|
||||
mkdir realpath regcomp rmdir setenv setlocale strcasecmp \
|
||||
strchr strcspn strdup strerror strndup strnlen strrchr \
|
||||
strsep strstr strtol swprintf tcflush wcwidth uname])
|
||||
AC_CHECK_MEMBERS([struct stat.st_blksize],,,[[#include <sys/stat.h>]])
|
||||
|
||||
# For the diskspace code
|
||||
FS_STATS_TYPE
|
||||
AC_CHECK_MEMBERS([struct statvfs.f_flag],,,[[#include <sys/statvfs.h>]])
|
||||
AC_CHECK_MEMBERS([struct statfs.f_flags],,,[[#include <sys/param.h>
|
||||
#include <sys/mount.h>]])
|
||||
|
||||
# Check if we can use symbol visibility support in GCC
|
||||
GCC_VISIBILITY_CC
|
||||
|
||||
# Host-dependant definitions
|
||||
DEFAULT_SEDINPLACEFLAGS=" --follow-symlinks -i"
|
||||
INODECMD="stat -c '%i %n'"
|
||||
STRIP_BINARIES="--strip-all"
|
||||
STRIP_SHARED="--strip-unneeded"
|
||||
STRIP_STATIC="--strip-debug"
|
||||
case "${host_os}" in
|
||||
*bsd*)
|
||||
INODECMD="stat -f '%i %N'"
|
||||
DEFAULT_SEDINPLACEFLAGS=" -i \"\""
|
||||
;;
|
||||
darwin*)
|
||||
host_os_darwin=yes
|
||||
INODECMD="/usr/bin/stat -f '%i %N'"
|
||||
DEFAULT_SEDINPLACEFLAGS=" -i ''"
|
||||
STRIP_BINARIES=""
|
||||
STRIP_SHARED="-S"
|
||||
STRIP_STATIC="-S"
|
||||
;;
|
||||
esac
|
||||
AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes")
|
||||
AC_PATH_PROGS([SEDPATH], [sed], [sed], [/usr/bin$PATH_SEPARATOR/bin] )
|
||||
AC_SUBST(INODECMD)
|
||||
AC_SUBST(STRIP_BINARIES)
|
||||
AC_SUBST(STRIP_SHARED)
|
||||
AC_SUBST(STRIP_STATIC)
|
||||
|
||||
# Flags for sed in place
|
||||
if test "${SEDINPLACEFLAGS+set}" != "set"; then
|
||||
SEDINPLACEFLAGS="${DEFAULT_SEDINPLACEFLAGS}"
|
||||
fi
|
||||
AC_ARG_VAR(SEDINPLACEFLAGS, [flags for sed, overriding the default])
|
||||
|
||||
# Variables plugged into makepkg.conf
|
||||
CARCH="${host%%-*}"
|
||||
CHOST="${host}"
|
||||
AC_SUBST(CARCH)
|
||||
AC_SUBST(CHOST)
|
||||
|
||||
# Check for documentation support and status
|
||||
AC_CHECK_PROGS([ASCIIDOC], [asciidoc])
|
||||
AC_MSG_CHECKING([for building documentation])
|
||||
if test "x$wantdoc" = "xyes" ; then
|
||||
if test $ASCIIDOC ; then
|
||||
AC_MSG_RESULT([yes, enabled by configure])
|
||||
else
|
||||
asciidoc="(warning : asciidoc not installed)"
|
||||
AC_MSG_RESULT([yes $asciidoc])
|
||||
fi
|
||||
wantdoc=yes
|
||||
else
|
||||
AC_MSG_RESULT([no, disabled by configure])
|
||||
wantdoc=no
|
||||
fi
|
||||
AM_CONDITIONAL(WANT_DOC, test "x$wantdoc" = "xyes")
|
||||
|
||||
# Check for doxygen support and status
|
||||
AC_CHECK_PROGS([DOXYGEN], [doxygen])
|
||||
AC_MSG_CHECKING([for doxygen])
|
||||
if test "x$wantdoxygen" = "xyes" ; then
|
||||
if test $DOXYGEN ; then
|
||||
AC_MSG_RESULT([yes])
|
||||
usedoxygen=yes
|
||||
else
|
||||
AC_MSG_RESULT([no, doxygen missing])
|
||||
usedoxygen=no
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT([no, disabled by configure])
|
||||
usedoxygen=no
|
||||
fi
|
||||
AM_CONDITIONAL(USE_DOXYGEN, test "x$usedoxygen" = "xyes")
|
||||
|
||||
# Enable or disable debug code
|
||||
AC_MSG_CHECKING(for debug mode request)
|
||||
if test "x$debug" = "xyes" ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([PACMAN_DEBUG], , [Enable debug code])
|
||||
# Check for -fstack-protector availability
|
||||
GCC_STACK_PROTECT_LIB
|
||||
GCC_STACK_PROTECT_CC
|
||||
GCC_STACK_CLASH_PROTECTION
|
||||
GCC_FORTIFY_SOURCE_CC
|
||||
WARNING_CFLAGS="-g -Wall -Werror"
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
WARNING_CFLAGS="-Wall"
|
||||
fi
|
||||
|
||||
# Enable or disable compiler warning flags
|
||||
AC_MSG_CHECKING(for excessive compiler warning flags)
|
||||
if test "x$warningflags" = "xyes" ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
CFLAGS_ADD([-Wcast-align], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wclobbered], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wempty-body], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wfloat-equal], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wformat-nonliteral], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wformat-security], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wignored-qualifiers], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wimplicit-fallthrough], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Winit-self], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wlogical-op], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wmissing-declarations], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wmissing-field-initializers], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wmissing-parameter-type], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wmissing-prototypes], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wold-style-declaration], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Woverride-init], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wpointer-arith], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wredundant-decls], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wshadow], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wsign-compare], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wstrict-aliasing], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wstrict-overflow=5], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wstrict-prototypes], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wtype-limits], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wuninitialized], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wunused-but-set-parameter], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wunused-parameter], [WARNING_CFLAGS])
|
||||
CFLAGS_ADD([-Wwrite-strings], [WARNING_CFLAGS])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
# Enable or disable use of git version in pacman version string
|
||||
AC_MSG_CHECKING(whether to use git version if available)
|
||||
if test "x$wantgitver" = "xyes" ; then
|
||||
AC_CHECK_PROGS([GIT], [git])
|
||||
AC_CHECK_FILE([.git/], hasgitdir=yes)
|
||||
usegitver=$ac_cv_file__git_
|
||||
if test $GIT -a "x$hasgitdir" = "xyes"; then
|
||||
AC_DEFINE([USE_GIT_VERSION], , [Use GIT version in version string])
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT([no, disabled by configure])
|
||||
usegitver=no
|
||||
fi
|
||||
AM_CONDITIONAL(USE_GIT_VERSION, test "x$usegitver" = "xyes")
|
||||
|
||||
# Set root directory
|
||||
AC_SUBST(ROOTDIR)
|
||||
AC_DEFINE_UNQUOTED([ROOTDIR], "$ROOTDIR", [The location of the root operating directory])
|
||||
# Set package file extension
|
||||
AC_SUBST(PKGEXT)
|
||||
AC_DEFINE_UNQUOTED([PKGEXT], "$PKGEXT", [The file extension used by pacman packages])
|
||||
# Set source package file extension
|
||||
AC_SUBST(SRCEXT)
|
||||
AC_DEFINE_UNQUOTED([SRCEXT], "$SRCEXT", [The file extension used by pacman source packages])
|
||||
# Set makepkg build script name
|
||||
AC_SUBST(BUILDSCRIPT)
|
||||
AC_DEFINE_UNQUOTED([BUILDSCRIPT], "$BUILDSCRIPT", [The build script name used by makepkg])
|
||||
# Set makepkg-template template directory
|
||||
AC_SUBST(TEMPLATE_DIR)
|
||||
AC_DEFINE_UNQUOTED([TEMPLATE_DIR], "$TEMPLATE_DIR", [The template directory used by makepkg-teplate])
|
||||
# Set makepkg split debugging symbol package suffix
|
||||
AC_SUBST(DEBUGSUFFIX)
|
||||
AC_DEFINE_UNQUOTED([DEBUGSUFFIX], "$DEBUGSUFFIX", [The suffix for debugging symbol packages used by makepkg])
|
||||
# Set shell used by install scriptlets
|
||||
AC_SUBST(SCRIPTLET_SHELL)
|
||||
AC_DEFINE_UNQUOTED([SCRIPTLET_SHELL], "$SCRIPTLET_SHELL", [The full path of the shell used to run install scriptlets])
|
||||
# Set ldconfig path
|
||||
AC_SUBST(LDCONFIG)
|
||||
AC_DEFINE_UNQUOTED([LDCONFIG], "$LDCONFIG", [The full path to ldconfig])
|
||||
|
||||
|
||||
# Configuration files
|
||||
AC_CONFIG_FILES([
|
||||
lib/libalpm/Makefile
|
||||
lib/libalpm/po/Makefile.in
|
||||
lib/libalpm/libalpm.pc
|
||||
src/common/Makefile
|
||||
src/pacman/Makefile
|
||||
src/pacman/po/Makefile.in
|
||||
src/util/Makefile
|
||||
scripts/Makefile
|
||||
scripts/po/Makefile.in
|
||||
doc/Makefile
|
||||
etc/Makefile
|
||||
test/pacman/Makefile
|
||||
test/pacman/tests/Makefile
|
||||
test/scripts/Makefile
|
||||
test/util/Makefile
|
||||
Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
echo "
|
||||
${PACKAGE_NAME}:
|
||||
|
||||
Build information:
|
||||
source code location : ${srcdir}
|
||||
prefix : ${prefix}
|
||||
sysconfdir : $(eval echo ${sysconfdir})
|
||||
conf file : $(eval echo ${sysconfdir})/pacman.conf
|
||||
localstatedir : $(eval echo ${localstatedir})
|
||||
database dir : $(eval echo ${localstatedir})/lib/pacman/
|
||||
cache dir : $(eval echo ${localstatedir})/cache/pacman/pkg/
|
||||
|
||||
compiler : ${CC}
|
||||
preprocessor flags : ${CPPFLAGS}
|
||||
compiler flags : ${WARNING_CFLAGS} ${CFLAGS}
|
||||
library flags : ${LIBS} ${LIBSSL_LIBS} ${NETTLE_LIBS} ${LIBARCHIVE_LIBS} ${LIBCURL_LIBS} ${GPGME_LIBS}
|
||||
linker flags : ${LDFLAGS}
|
||||
|
||||
Architecture : ${CARCH}
|
||||
Host Type : ${CHOST}
|
||||
File inode command : ${INODECMD}
|
||||
In-place sed command : ${SEDPATH} ${SEDINPLACEFLAGS}
|
||||
File seccomp command : ${FILECMD}
|
||||
|
||||
libalpm version : ${LIB_VERSION}
|
||||
libalpm version info : ${LIB_VERSION_INFO}
|
||||
pacman version : ${PACKAGE_VERSION}
|
||||
using git version : ${usegitver}
|
||||
|
||||
Directory and file information:
|
||||
root working directory : ${ROOTDIR}
|
||||
package extension : ${PKGEXT}
|
||||
source pkg extension : ${SRCEXT}
|
||||
build script name : ${BUILDSCRIPT}
|
||||
template directory : ${TEMPLATE_DIR}
|
||||
|
||||
Compilation options:
|
||||
Use libcurl : ${have_libcurl}
|
||||
Use GPGME : ${have_gpgme}
|
||||
Use OpenSSL : ${have_openssl}
|
||||
Use nettle : ${have_nettle}
|
||||
Run make in doc/ dir : ${wantdoc} ${asciidoc}
|
||||
Doxygen support : ${usedoxygen}
|
||||
debug support : ${debug}
|
||||
extra warning flags : ${warningflags}
|
||||
use git version : ${wantgitver}
|
||||
"
|
|
@ -1,6 +1,3 @@
|
|||
/////
|
||||
vim:set ts=4 sw=4 syntax=asciidoc noet spell spelllang=en_us:
|
||||
/////
|
||||
BUILDINFO(5)
|
||||
============
|
||||
|
||||
|
@ -14,14 +11,14 @@ Synopsis
|
|||
This manual page describes the format of a BUILDINFO file found in the root of
|
||||
a package created by makepkg. The file contains a description of the package's
|
||||
build environment. The information is formatted in key-value pairs separated by
|
||||
a '=', one value per line. Arrays are represented multiple keys with the same
|
||||
value.
|
||||
a '=', one value per line. Arrays are represented as multiple key-value pairs
|
||||
having the same key.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This is a description of the contents of version '1' of the
|
||||
This is a description of the contents of version '2' of the
|
||||
BUILDINFO file format.
|
||||
|
||||
*format*::
|
||||
|
@ -53,6 +50,18 @@ BUILDINFO file format.
|
|||
*builddir*::
|
||||
The directory where the package was built.
|
||||
|
||||
*startdir*::
|
||||
The directory from which makepkg was executed.
|
||||
|
||||
*buildtool*::
|
||||
The name of the tool ecosystem used to set up the build environment. Used
|
||||
for defining a spec for reproducible builds, e.g. the source of the
|
||||
linkman:makepkg.conf[5] used.
|
||||
|
||||
*buildtoolver*::
|
||||
The full version of the 'buildtool', for example:
|
||||
"$pkgver-$pkgrel-$pkgarch".
|
||||
|
||||
*buildenv (array)*::
|
||||
The build environment specified in makepkg.conf.
|
||||
|
||||
|
|
101
doc/Doxyfile.in
101
doc/Doxyfile.in
|
@ -1,4 +1,4 @@
|
|||
# Doxyfile 1.8.2
|
||||
# Doxyfile 1.9.3
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
|
@ -10,6 +10,7 @@ PROJECT_BRIEF = "Arch Linux Package Manager Library"
|
|||
PROJECT_LOGO =
|
||||
OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@
|
||||
CREATE_SUBDIRS = NO
|
||||
ALLOW_UNICODE_NAMES = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
|
@ -31,41 +32,47 @@ STRIP_FROM_PATH =
|
|||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
JAVADOC_BANNER = NO
|
||||
QT_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
PYTHON_DOCSTRING = YES
|
||||
INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
TAB_SIZE = 4
|
||||
ALIASES =
|
||||
TCL_SUBST =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
OPTIMIZE_FOR_FORTRAN = NO
|
||||
OPTIMIZE_OUTPUT_VHDL = NO
|
||||
OPTIMIZE_OUTPUT_SLICE = NO
|
||||
EXTENSION_MAPPING =
|
||||
MARKDOWN_SUPPORT = YES
|
||||
TOC_INCLUDE_HEADINGS = 5
|
||||
AUTOLINK_SUPPORT = YES
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
CPP_CLI_SUPPORT = NO
|
||||
SIP_SUPPORT = NO
|
||||
IDL_PROPERTY_SUPPORT = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
GROUP_NESTED_COMPOUNDS = NO
|
||||
SUBGROUPING = YES
|
||||
INLINE_GROUPED_CLASSES = NO
|
||||
INLINE_SIMPLE_STRUCTS = NO
|
||||
TYPEDEF_HIDES_STRUCT = NO
|
||||
SYMBOL_CACHE_SIZE = 0
|
||||
INLINE_SIMPLE_STRUCTS = YES
|
||||
TYPEDEF_HIDES_STRUCT = YES
|
||||
LOOKUP_CACHE_SIZE = 0
|
||||
NUM_PROC_THREADS = 1
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = NO
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_PRIV_VIRTUAL = NO
|
||||
EXTRACT_PACKAGE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
RESOLVE_UNNAMED_PARAMS = YES
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
|
@ -73,7 +80,10 @@ HIDE_IN_BODY_DOCS = YES
|
|||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
HIDE_COMPOUND_REFERENCE= NO
|
||||
SHOW_HEADERFILE = YES
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
SHOW_GROUPED_MEMB_INC = NO
|
||||
FORCE_LOCAL_INCLUDES = NO
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
|
@ -95,26 +105,30 @@ FILE_VERSION_FILTER =
|
|||
LAYOUT_FILE =
|
||||
CITE_BIB_FILES =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
# Configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_IF_INCOMPLETE_DOC = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_AS_ERROR = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
# Configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = ../lib/libalpm/
|
||||
INPUT = @INPUT_DIRECTORY@/../lib/libalpm/alpm.h \
|
||||
@INPUT_DIRECTORY@/../lib/libalpm/alpm_list.h
|
||||
INPUT_ENCODING = UTF-8
|
||||
FILE_PATTERNS =
|
||||
RECURSIVE = NO
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXCLUDE_SYMBOLS =
|
||||
EXCLUDE_SYMBOLS = _alpm_* \
|
||||
__alpm_*
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS = *
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
|
@ -123,8 +137,9 @@ INPUT_FILTER =
|
|||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
FILTER_SOURCE_PATTERNS =
|
||||
USE_MDFILE_AS_MAINPAGE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
# Configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = NO
|
||||
|
@ -132,16 +147,16 @@ STRIP_CODE_COMMENTS = NO
|
|||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
REFERENCES_LINK_SOURCE = YES
|
||||
SOURCE_TOOLTIPS = YES
|
||||
USE_HTAGS = NO
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
# Configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
# Configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = NO
|
||||
HTML_OUTPUT = html
|
||||
|
@ -154,11 +169,12 @@ HTML_EXTRA_FILES =
|
|||
HTML_COLORSTYLE_HUE = 220
|
||||
HTML_COLORSTYLE_SAT = 100
|
||||
HTML_COLORSTYLE_GAMMA = 80
|
||||
HTML_TIMESTAMP = YES
|
||||
HTML_DYNAMIC_MENUS = YES
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
HTML_INDEX_NUM_ENTRIES = 100
|
||||
GENERATE_DOCSET = NO
|
||||
DOCSET_FEEDNAME = "Doxygen generated docs"
|
||||
DOCSET_FEEDURL =
|
||||
DOCSET_BUNDLE_ID = org.doxygen.Project
|
||||
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
|
||||
DOCSET_PUBLISHER_NAME = Publisher
|
||||
|
@ -181,36 +197,50 @@ GENERATE_ECLIPSEHELP = NO
|
|||
ECLIPSE_DOC_ID = org.doxygen.Project
|
||||
DISABLE_INDEX = NO
|
||||
GENERATE_TREEVIEW = NO
|
||||
FULL_SIDEBAR = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
TREEVIEW_WIDTH = 250
|
||||
EXT_LINKS_IN_WINDOW = NO
|
||||
OBFUSCATE_EMAILS = YES
|
||||
HTML_FORMULA_FORMAT = png
|
||||
FORMULA_FONTSIZE = 10
|
||||
FORMULA_TRANSPARENT = YES
|
||||
FORMULA_MACROFILE =
|
||||
USE_MATHJAX = NO
|
||||
MATHJAX_VERSION = MathJax_2
|
||||
MATHJAX_FORMAT = HTML-CSS
|
||||
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
|
||||
MATHJAX_EXTENSIONS =
|
||||
MATHJAX_CODEFILE =
|
||||
SEARCHENGINE = NO
|
||||
SERVER_BASED_SEARCH = NO
|
||||
EXTERNAL_SEARCH = NO
|
||||
SEARCHENGINE_URL =
|
||||
SEARCHDATA_FILE = searchdata.xml
|
||||
EXTERNAL_SEARCH_ID =
|
||||
EXTRA_SEARCH_MAPPINGS =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
# Configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
LATEX_MAKEINDEX_CMD = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = letter
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
LATEX_FOOTER =
|
||||
LATEX_EXTRA_STYLESHEET =
|
||||
LATEX_EXTRA_FILES =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
LATEX_SOURCE_CODE = NO
|
||||
LATEX_BIB_STYLE = plain
|
||||
LATEX_EMOJI_DIRECTORY =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
# Configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
|
@ -219,26 +249,31 @@ RTF_HYPERLINKS = NO
|
|||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
# Configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = YES
|
||||
MAN_OUTPUT = .
|
||||
MAN_EXTENSION = .3
|
||||
MAN_SUBDIR =
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
# Configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
XML_PROGRAMLISTING = YES
|
||||
XML_NS_MEMB_FILE_SCOPE = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
# Configuration options related to the DOCBOOK output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_DOCBOOK = NO
|
||||
DOCBOOK_OUTPUT = docbook
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
# Configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
|
@ -254,7 +289,6 @@ SEARCH_INCLUDES = YES
|
|||
INCLUDE_PATH = ../..
|
||||
INCLUDE_FILE_PATTERNS = *.h
|
||||
PREDEFINED = HAVE_CONFIG_H= \
|
||||
SYMHIDDEN= \
|
||||
SYMEXPORT= \
|
||||
HAVE_LIBARCHIVE \
|
||||
HAVE_LIBCURL \
|
||||
|
@ -262,29 +296,28 @@ PREDEFINED = HAVE_CONFIG_H= \
|
|||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to external references
|
||||
# Configuration options related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
EXTERNAL_PAGES = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = NO
|
||||
MSCGEN_PATH =
|
||||
DIA_PATH =
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = YES
|
||||
DOT_NUM_THREADS = 0
|
||||
DOT_FONTNAME = Helvetica
|
||||
DOT_FONTSIZE = 10
|
||||
DOT_FONTPATH =
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
UML_LIMIT_NUM_FIELDS = 10
|
||||
DOT_UML_DETAILS = NO
|
||||
DOT_WRAP_THRESHOLD = 17
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
|
@ -292,14 +325,18 @@ CALL_GRAPH = NO
|
|||
CALLER_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DIR_GRAPH_MAX_DEPTH = 1
|
||||
DOT_IMAGE_FORMAT = png
|
||||
INTERACTIVE_SVG = NO
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MSCFILE_DIRS =
|
||||
DIAFILE_DIRS =
|
||||
PLANTUML_JAR_PATH =
|
||||
PLANTUML_CFG_FILE =
|
||||
PLANTUML_INCLUDE_PATH =
|
||||
DOT_GRAPH_MAX_NODES = 50
|
||||
MAX_DOT_GRAPH_DEPTH = 3
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
|
|
151
doc/Makefile.am
151
doc/Makefile.am
|
@ -1,151 +0,0 @@
|
|||
# We have to do some funny stuff here with the manpages. In order to ensure
|
||||
# a dist tarball doesn't get put out there without manpages, we keep those
|
||||
# files listed in EXTRA_DIST no matter what. However, we only add them to
|
||||
# man_MANS if --enable-asciidoc and/or --enable-doxygen are used.
|
||||
|
||||
MANPAGES = \
|
||||
alpm-hooks.5 \
|
||||
pacman.8 \
|
||||
makepkg.8 \
|
||||
makepkg-template.1 \
|
||||
repo-add.8 \
|
||||
vercmp.8 \
|
||||
pacman-key.8 \
|
||||
PKGBUILD.5 \
|
||||
makepkg.conf.5 \
|
||||
pacman.conf.5 \
|
||||
libalpm.3 \
|
||||
BUILDINFO.5 \
|
||||
pacman-conf.8
|
||||
|
||||
DOXYGEN_MANS = $(wildcard man3/*.3)
|
||||
|
||||
HTML_MANPAGES = $(addsuffix .html,$(MANPAGES))
|
||||
ASCIIDOC_MANPAGES = $(addsuffix .asciidoc,$(MANPAGES))
|
||||
|
||||
HTML_OTHER = \
|
||||
index.html \
|
||||
submitting-patches.html \
|
||||
translation-help.html \
|
||||
HACKING.html
|
||||
|
||||
HTML_DOCS = \
|
||||
$(HTML_MANPAGES) \
|
||||
$(HTML_OTHER)
|
||||
|
||||
EXTRA_DIST = \
|
||||
meson.build \
|
||||
asciidoc.conf \
|
||||
asciidoc-override.css \
|
||||
PKGBUILD-example.txt \
|
||||
footer.asciidoc \
|
||||
index.asciidoc \
|
||||
submitting-patches.asciidoc \
|
||||
translation-help.asciidoc \
|
||||
$(ASCIIDOC_MANPAGES) \
|
||||
$(MANPAGES) \
|
||||
$(DOXYGEN_MANS)
|
||||
|
||||
# Files that should be removed, but which Automake does not know.
|
||||
MOSTLYCLEANFILES = *.xml $(MANPAGES) $(HTML_DOCS) repo-remove.8 website.tar.gz
|
||||
|
||||
# Ensure manpages are fresh when building a dist tarball
|
||||
dist-hook:
|
||||
$(MAKE) $(AM_MAKEFLAGS) clean
|
||||
$(MAKE) $(AM_MAKEFLAGS) all
|
||||
|
||||
if USE_GIT_VERSION
|
||||
GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 --dirty | sed s/^v//')
|
||||
REAL_PACKAGE_VERSION = $(GIT_VERSION)
|
||||
else
|
||||
REAL_PACKAGE_VERSION = $(PACKAGE_VERSION)
|
||||
endif
|
||||
|
||||
man_MANS =
|
||||
dist_man_MANS = $(MANPAGES)
|
||||
|
||||
if USE_DOXYGEN
|
||||
man_MANS += $(DOXYGEN_MANS)
|
||||
|
||||
all-local: doxygen.in
|
||||
|
||||
Doxyfile: Doxyfile.in
|
||||
sed 's,@OUTPUT_DIRECTORY@,./,' Doxyfile.in >Doxyfile
|
||||
|
||||
doxygen.in: Doxyfile
|
||||
$(DOXYGEN) $(srcdir)/Doxyfile
|
||||
endif
|
||||
|
||||
man: $(MANPAGES)
|
||||
html: $(HTML_DOCS)
|
||||
|
||||
website: website.tar.gz
|
||||
|
||||
.PHONY: html website
|
||||
|
||||
website.tar.gz: html
|
||||
$(AM_V_GEN)bsdtar czf $@ $(HTML_DOCS) \
|
||||
asciidoc-override.css \
|
||||
-C /etc/asciidoc/stylesheets/ \
|
||||
asciidoc.css \
|
||||
-C /etc/asciidoc/javascripts/ \
|
||||
asciidoc.js \
|
||||
-C /etc/asciidoc/ \
|
||||
images
|
||||
|
||||
pkgdatadir = ${datadir}/${PACKAGE}
|
||||
|
||||
ASCIIDOC_OPTS = \
|
||||
-f $(srcdir)/asciidoc.conf \
|
||||
-a pacman_version="$(REAL_PACKAGE_VERSION)" \
|
||||
-a pacman_date="`date +%Y-%m-%d`" \
|
||||
-a srcext="$(SRCEXT)" \
|
||||
-a pkgext="$(PKGEXT)" \
|
||||
-a pkgdatadir=$(pkgdatadir) \
|
||||
-a localstatedir=$(localstatedir) \
|
||||
-a sysconfdir=$(sysconfdir) \
|
||||
-a datarootdir=$(datarootdir) \
|
||||
-a rootdir=$(ROOTDIR)
|
||||
|
||||
A2X_OPTS = \
|
||||
--no-xmllint \
|
||||
-d manpage \
|
||||
-f manpage \
|
||||
--xsltproc-opts='-param man.endnotes.list.enabled 0 -param man.endnotes.are.numbered 0'
|
||||
|
||||
# Generate manpages
|
||||
%: %.asciidoc asciidoc.conf footer.asciidoc Makefile.am
|
||||
$(AM_V_GEN)a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS) --out-file=./$@.xml" $(srcdir)/$@.asciidoc
|
||||
|
||||
# Generate HTML pages
|
||||
%.html: %.asciidoc asciidoc.conf footer.asciidoc Makefile.am
|
||||
$(AM_V_GEN)asciidoc $(ASCIIDOC_OPTS) -o - $*.asciidoc | \
|
||||
sed -e 's/\r$$//' > $@
|
||||
|
||||
HACKING.html: ../HACKING
|
||||
$(AM_V_GEN)asciidoc $(ASCIIDOC_OPTS) -o - ../HACKING | \
|
||||
sed -e 's/\r$$//' > $@
|
||||
|
||||
# Customizations for certain HTML docs
|
||||
%.html: ASCIIDOC_OPTS += -a linkcss -a toc -a icons -a max-width=960px -a stylesheet=asciidoc-override.css
|
||||
%.8.html: ASCIIDOC_OPTS += -d manpage
|
||||
%.5.html: ASCIIDOC_OPTS += -d manpage
|
||||
%.3.html: ASCIIDOC_OPTS += -d manpage
|
||||
|
||||
# Custom dependency rules
|
||||
PKGBUILD.5 PKGBUILD.5.html: PKGBUILD.5.asciidoc PKGBUILD-example.txt
|
||||
|
||||
# Manpages as symlinks
|
||||
repo-remove.8: repo-add.8
|
||||
$(RM) repo-remove.8
|
||||
$(LN_S) repo-add.8 repo-remove.8
|
||||
|
||||
install-data-hook:
|
||||
cd $(DESTDIR)$(mandir)/man8 && \
|
||||
$(RM) repo-remove.8 && \
|
||||
( $(LN_S) repo-add.8 repo-remove.8 || \
|
||||
ln repo-add.8 repo-remove.8 || \
|
||||
cp repo-add.8 repo-remove.8 )
|
||||
|
||||
uninstall-hook:
|
||||
$(RM) $(DESTDIR)$(mandir)/man8/repo-remove.8
|
|
@ -12,7 +12,7 @@ depends=('glibc')
|
|||
makedepends=('ed')
|
||||
optdepends=('ed: for "patch -e" functionality')
|
||||
source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig})
|
||||
md5sums=('e9ae5393426d3ad783a300a338c09b72'
|
||||
sha256sums=('9124ba46db0abd873d0995c2ca880e81252676bb6c03e0a37dfc5f608a9b0ceb'
|
||||
'SKIP')
|
||||
|
||||
build() {
|
||||
|
|
|
@ -3,7 +3,7 @@ PKGBUILD(5)
|
|||
|
||||
Name
|
||||
----
|
||||
PKGBUILD - Arch Linux package build description file
|
||||
PKGBUILD - Package build description file
|
||||
|
||||
|
||||
Synopsis
|
||||
|
@ -84,14 +84,7 @@ systems (see below).
|
|||
|
||||
*license (array)*::
|
||||
This field specifies the license(s) that apply to the package.
|
||||
Commonly used licenses can be found in '/usr/share/licenses/common'. If you
|
||||
see the package's license there, simply reference it in the license
|
||||
field (e.g., `license=('GPL')`). If the package provides a license not
|
||||
available in '/usr/share/licenses/common', then you should include it
|
||||
in the package itself and set `license=('custom')` or
|
||||
`license=('custom:LicenseName')`. The license should be placed in
|
||||
'$pkgdir/usr/share/licenses/$pkgname/' when building the package. If
|
||||
multiple licenses are applicable, list all of them:
|
||||
If multiple licenses are applicable, list all of them:
|
||||
`license=('GPL' 'FDL')`.
|
||||
|
||||
*install*::
|
||||
|
@ -118,7 +111,7 @@ systems (see below).
|
|||
+
|
||||
Additional architecture-specific sources can be added by appending an
|
||||
underscore and the architecture name e.g., 'source_x86_64=()'. There must be a
|
||||
corresponding integrity array with checksums, e.g. 'md5sums_x86_64=()'.
|
||||
corresponding integrity array with checksums, e.g. 'cksums_x86_64=()'.
|
||||
+
|
||||
It is also possible to change the name of the downloaded file, which is helpful
|
||||
with weird URLs and for handling multiple source files with the same
|
||||
|
@ -146,17 +139,19 @@ contain whitespace characters.
|
|||
listed here will not be extracted with the rest of the source files. This
|
||||
is useful for packages that use compressed data directly.
|
||||
|
||||
*md5sums (array)*::
|
||||
This array contains an MD5 hash for every source file specified in the
|
||||
*cksums (array)*::
|
||||
This array contains CRC checksums for every source file specified in the
|
||||
source array (in the same order). makepkg will use this to verify source
|
||||
file integrity during subsequent builds. If 'SKIP' is put in the array
|
||||
in place of a normal hash, the integrity check for that source file will
|
||||
be skipped. To easily generate md5sums, run ``makepkg -g >> PKGBUILD''.
|
||||
If desired, move the md5sums line to an appropriate location.
|
||||
be skipped. To easily generate cksums, run ``makepkg -g >> PKGBUILD''.
|
||||
If desired, move the cksums line to an appropriate location. Note that
|
||||
checksums generated by "makepkg -g" should be verified using checksum
|
||||
values provided by the software developer.
|
||||
|
||||
*sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays)*::
|
||||
*md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays)*::
|
||||
Alternative integrity checks that makepkg supports; these all behave
|
||||
similar to the md5sums option described above. To enable use and generation
|
||||
similar to the cksums option described above. To enable use and generation
|
||||
of these checksums, be sure to set up the `INTEGRITY_CHECK` option in
|
||||
linkman:makepkg.conf[5].
|
||||
|
||||
|
@ -185,11 +180,6 @@ contain whitespace characters.
|
|||
than or equal to), `<=` (less than or equal to), `=` (equal to), `>`
|
||||
(greater than), or `<` (less than).
|
||||
+
|
||||
If the dependency name appears to be a library (ends with .so), makepkg will
|
||||
try to find a binary that depends on the library in the built package and
|
||||
append the version needed by the binary. Appending the version yourself
|
||||
disables automatic detection.
|
||||
+
|
||||
Additional architecture-specific depends can be added by appending an
|
||||
underscore and the architecture name e.g., 'depends_x86_64=()'.
|
||||
|
||||
|
@ -243,10 +233,6 @@ example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0' dependency of
|
|||
other packages. Provisions involving the `>` and `<` operators are invalid as
|
||||
only specific versions of a package may be provided.
|
||||
+
|
||||
If the provision name appears to be a library (ends with .so), makepkg will
|
||||
try to find the library in the built package and append the correct
|
||||
version. Appending the version yourself disables automatic detection.
|
||||
+
|
||||
Additional architecture-specific provides can be added by appending an
|
||||
underscore and the architecture name e.g., 'provides_x86_64=()'.
|
||||
|
||||
|
@ -323,6 +309,19 @@ underscore and the architecture name e.g., 'replaces_x86_64=()'.
|
|||
When used in combination with the `strip' option, a separate package
|
||||
containing the debug symbols is created.
|
||||
|
||||
*lto*;;
|
||||
Enable building packages using link time optimization. Adds '-flto'
|
||||
to both CFLAGS and CXXFLAGS.
|
||||
|
||||
*xdata (array)*::
|
||||
This array allows you to add additional metadata to the package.
|
||||
This data is neither used by pacman nor by makepkg;
|
||||
It has purely informational purpose, or may be interpreted by third-party tools.
|
||||
+
|
||||
All entries in that array must have the form 'key=value', where
|
||||
'key' is an arbitrary non-empty string and 'value' must not contain an equal sign.
|
||||
Furthermore, the key ``pkgtype'' is reserved for the makepkg program.
|
||||
|
||||
|
||||
Packaging Functions
|
||||
-------------------
|
||||
|
@ -346,6 +345,13 @@ function.
|
|||
the optional functions listed below. The packaging stage is run using
|
||||
fakeroot to ensure correct file permissions in the resulting package.
|
||||
All other functions will be run as the user calling makepkg.
|
||||
This function is run inside `$srcdir`.
|
||||
|
||||
*verify() Function*::
|
||||
An optional `verify()` function can be specified to implement arbitrary
|
||||
source authentication. The function should return a non-zero exit code when
|
||||
verification fails. This function is run before sources are extracted.
|
||||
This function is run inside `$startdir`.
|
||||
|
||||
*prepare() Function*::
|
||||
An optional `prepare()` function can be specified in which operations to
|
||||
|
@ -353,16 +359,19 @@ function.
|
|||
function is run after the source extraction and before the `build()`
|
||||
function. The `prepare()` function is skipped when source extraction
|
||||
is skipped.
|
||||
This function is run inside `$srcdir`.
|
||||
|
||||
*build() Function*::
|
||||
The optional `build()` function is use to compile and/or adjust the source
|
||||
The optional `build()` function is used to compile and/or adjust the source
|
||||
files in preparation to be installed by the `package()` function.
|
||||
This function is run inside `$srcdir`.
|
||||
|
||||
*check() Function*::
|
||||
An optional `check()` function can be specified in which a package's
|
||||
test-suite may be run. This function is run between the `build()` and
|
||||
`package()` functions. Be sure any exotic commands used are covered by the
|
||||
`checkdepends` array.
|
||||
This function is run inside `$srcdir`.
|
||||
|
||||
All of the above variables such as `$pkgname` and `$pkgver` are available for
|
||||
use in the packaging functions. In addition, makepkg defines the following
|
||||
|
@ -372,7 +381,6 @@ variables:
|
|||
This contains the directory where makepkg extracts, or copies, all source
|
||||
files.
|
||||
+
|
||||
All of the packaging functions defined above are run starting inside `$srcdir`
|
||||
|
||||
*pkgdir*::
|
||||
This contains the directory where makepkg bundles the installed package.
|
||||
|
@ -466,11 +474,16 @@ reference with all of the available functions defined.
|
|||
Using VCS Sources[[VCS]]
|
||||
------------------------
|
||||
Building a developmental version of a package using sources from a version
|
||||
control system (VCS) is enabled by specifying the source in the form
|
||||
`source=('directory::url#fragment?query')`. Currently makepkg supports the
|
||||
Bazaar, Git, Subversion, and Mercurial version control systems. For other
|
||||
version control systems, manual cloning of upstream repositories must be done
|
||||
in the `prepare()` function.
|
||||
control system (VCS) is enabled by specifying the source in the form:
|
||||
|
||||
source=('directory::url#fragment?query')
|
||||
|
||||
Currently makepkg supports the Bazaar, Git, Subversion, Fossil and Mercurial
|
||||
version control systems. For other version control systems, manual cloning of
|
||||
upstream repositories must be done in the `prepare()` function.
|
||||
|
||||
Some <<VCS,VCS Sources>> like Git support pinning the checkout by a checksum of
|
||||
its content using deterministic export functionality like ``git archive''.
|
||||
|
||||
The source URL is divided into four components:
|
||||
|
||||
|
@ -488,13 +501,16 @@ The source URL is divided into four components:
|
|||
|
||||
*fragment*::
|
||||
(optional) Allows specifying a revision number or branch for makepkg to checkout
|
||||
from the VCS. For example, to checkout a given revision, the source line would
|
||||
have the format `source=(url#revision=123)`. The available fragments depends on
|
||||
the VCS being used:
|
||||
from the VCS. A fragment has the form `type=value`, for example to checkout a
|
||||
given revision the source line would be `source=(url#revision=123)`. The
|
||||
available types depends on the VCS being used:
|
||||
|
||||
*bzr*;;
|
||||
revision (see `'bzr help revisionspec'` for details)
|
||||
|
||||
*fossil*;;
|
||||
branch, commit, tag
|
||||
|
||||
*git*;;
|
||||
branch, commit, tag
|
||||
|
||||
|
@ -513,8 +529,7 @@ The source URL is divided into four components:
|
|||
Example
|
||||
-------
|
||||
The following is an example PKGBUILD for the 'patch' package. For more
|
||||
examples, look through the build files of your distribution's packages. For
|
||||
those using Arch Linux, consult the Arch Build System (ABS) tree.
|
||||
examples, look through the build files of your distribution's packages.
|
||||
|
||||
[source,sh]
|
||||
-------------------------------
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
## linkman: macro
|
||||
# Inspired by/borrowed from the GIT source tree at Documentation/asciidoc.conf
|
||||
# Inspired by/borrowed from the Git source tree at Documentation/asciidoc.conf
|
||||
#
|
||||
# Usage: linkman:command[manpage-section]
|
||||
#
|
||||
|
@ -50,7 +50,7 @@ ifdef::backend-docbook[]
|
|||
template::[header-declarations]
|
||||
<refentry>
|
||||
<refentryinfo>
|
||||
<date>{pacman_date}</date>
|
||||
<date>{localdate}</date>
|
||||
</refentryinfo>
|
||||
<refmeta>
|
||||
<refentrytitle>{mantitle}</refentrytitle>
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
|
||||
See the pacman website at https://www.archlinux.org/pacman/[] for current
|
||||
See the pacman website at https://archlinux.org/pacman/[] for current
|
||||
information on pacman and its related tools.
|
||||
|
||||
|
||||
Bugs
|
||||
----
|
||||
Bugs? You must be kidding; there are no bugs in this software. But if we
|
||||
happen to be wrong, submit a bug report with as much detail as possible
|
||||
at the https://bugs.archlinux.org/index.php?project=3[Arch Linux Bug Tracker]
|
||||
in the Pacman section.
|
||||
happen to be wrong, please report them to the issue tracker at
|
||||
link:https://gitlab.archlinux.org/pacman/pacman/-/issues[] with specific
|
||||
information such as your command-line, the nature of the bug, and even
|
||||
the package database if it helps.
|
||||
|
||||
|
||||
Authors
|
||||
|
@ -18,16 +19,18 @@ Current maintainers:
|
|||
|
||||
* Allan McRae <allan@archlinux.org>
|
||||
* Andrew Gregory <andrew.gregory.8@gmail.com>
|
||||
* Dan McGee <dan@archlinux.org>
|
||||
* Dave Reisner <dreisner@archlinux.org>
|
||||
* Morgan Adamiec <morganamilo@archlinux.org>
|
||||
|
||||
Past major contributors:
|
||||
|
||||
* Judd Vinet <jvinet@zeroflux.org>
|
||||
* Aurelien Foret <aurelien@archlinux.org>
|
||||
* Aaron Griffin <aaron@archlinux.org>
|
||||
* Dan McGee <dan@archlinux.org>
|
||||
* Xavier Chantry <shiningxc@gmail.com>
|
||||
* Nagy Gabor <ngaba@bibl.u-szeged.hu>
|
||||
* Dave Reisner <dreisner@archlinux.org>
|
||||
* Eli Schwartz <eschwartz@archlinux.org>
|
||||
|
||||
For additional contributors, use `git shortlog -s` on the pacman.git
|
||||
repository.
|
||||
|
|
|
@ -34,6 +34,8 @@ makepkg/repo-add/pacman toolchain via GnuPG and GPGME.
|
|||
Version 5.0 added support for pre/post-transaction hooks and sync database file
|
||||
list operations.
|
||||
|
||||
Version 6.0 added support for parallel downloads.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
|
@ -59,11 +61,11 @@ configuration files dealing with pacman.
|
|||
Changelog
|
||||
~~~~~~~~~
|
||||
For a good idea of what is going on in pacman development, take a look at the
|
||||
link:https://git.archlinux.org/pacman.git/[Git summary page] for the
|
||||
link:https://gitlab.archlinux.org/pacman/pacman[Git summary page] for the
|
||||
project.
|
||||
|
||||
See the most recent
|
||||
link:https://git.archlinux.org/pacman.git/tree/NEWS[NEWS]
|
||||
link:https://gitlab.archlinux.org/pacman/pacman/-/blob/master/NEWS[NEWS]
|
||||
file for a not-as-frequently-updated list of changes. However, this should
|
||||
contain the biggest changes in a format more concise than the commit log.
|
||||
|
||||
|
@ -77,6 +79,11 @@ Releases
|
|||
[frame="topbot",grid="none",options="header,autowidth"]
|
||||
!======
|
||||
!Version !Date
|
||||
!7.0.0 !2024-07-14
|
||||
!6.1.0 !2024-03-04
|
||||
!6.0.1 !2021-09-04
|
||||
!6.0.0 !2021-05-20
|
||||
!6.0.0alpha1 !2020-12-04
|
||||
!5.2.1 !2019-11-01
|
||||
!5.2.0 !2019-10-21
|
||||
!5.1.3 !2019-03-01
|
||||
|
@ -106,6 +113,11 @@ Releases
|
|||
!3.4.3 !2011-01-22
|
||||
!3.4.2 !2010-12-29
|
||||
!3.4.1 !2010-09-03
|
||||
!======
|
||||
|
|
||||
[frame="topbot",grid="none",options="header,autowidth"]
|
||||
!======
|
||||
!Version !Date
|
||||
!3.4.0 !2010-06-16
|
||||
!3.3.3 !2009-11-10
|
||||
!3.3.2 !2009-10-05
|
||||
|
@ -115,11 +127,6 @@ Releases
|
|||
!3.2.1 !2008-08-26
|
||||
!3.2.0 !2008-07-30
|
||||
!3.1.4 !2008-04-01
|
||||
!======
|
||||
|
|
||||
[frame="topbot",grid="none",options="header,autowidth"]
|
||||
!======
|
||||
!Version !Date
|
||||
!3.1.3 !2008-03-06
|
||||
!3.1.2 !2008-02-20
|
||||
!3.1.1 !2008-01-20
|
||||
|
@ -145,16 +152,16 @@ Releases
|
|||
!2.9 !2004-09-18
|
||||
!2.8.4 !2004-08-23
|
||||
!2.8.3 !2004-08-04
|
||||
!2.8.2 !2004-07-22
|
||||
!2.8.1 !2004-07-17
|
||||
!2.8 !2004-07-03
|
||||
!2.7.9 !2004-04-30
|
||||
!2.7.8 !2004-04-29
|
||||
!======
|
||||
|
|
||||
[frame="topbot",grid="none",options="header,autowidth"]
|
||||
!======
|
||||
!Version !Date
|
||||
!2.8.2 !2004-07-22
|
||||
!2.8.1 !2004-07-17
|
||||
!2.8 !2004-07-03
|
||||
!2.7.9 !2004-04-30
|
||||
!2.7.8 !2004-04-29
|
||||
!2.7.7 !2004-04-15
|
||||
!2.7.6 !2004-04-04
|
||||
!2.7.5 !2004-03-02
|
||||
|
@ -188,16 +195,18 @@ Releases
|
|||
|
||||
|======
|
||||
|
||||
Source code for all releases is available at
|
||||
Source code for releases since moving to gitlab is available at
|
||||
link:https://gitlab.archlinux.org/pacman/pacman/-/releases[].
|
||||
Source code for historical releases is available at
|
||||
link:https://sources.archlinux.org/other/pacman/[]. To install, download the newest
|
||||
available source tarball, unpack it in a directory, and run the three magic
|
||||
commands:
|
||||
|
||||
$ ./configure
|
||||
$ make
|
||||
# make install
|
||||
$ meson build
|
||||
$ ninja -C build
|
||||
# ninja -C build install
|
||||
|
||||
You may wish to read the options presented by `./configure --help` in order to
|
||||
You may wish to read the options presented by `meson` in order to
|
||||
set appropriate paths and build options that are correct for your system.
|
||||
|
||||
Development
|
||||
|
@ -218,12 +227,11 @@ these trees).
|
|||
|
||||
The current development tree can be fetched with the following command:
|
||||
|
||||
git clone git://git.archlinux.org/pacman.git pacman
|
||||
git clone https://gitlab.archlinux.org/pacman/pacman.git
|
||||
|
||||
which will fetch the full development history into a directory named pacman.
|
||||
You can browse the source as well using
|
||||
link:https://git.archlinux.org/pacman.git/[cgit]. HTTP/HTTPS URLs are also
|
||||
available for cloning purposes; these URLs are listed at the above page.
|
||||
link:https://gitlab.archlinux.org/pacman/pacman/[gitlab].
|
||||
|
||||
If you are interested in hacking on pacman, it is highly recommended you join
|
||||
the mailing list mentioned above, as well as take a quick glance at our
|
||||
|
@ -235,34 +243,16 @@ you speak a foreign language, you can help by either creating or updating a
|
|||
translation file for your native language. Instructions can be found in
|
||||
link:translation-help.html[translation-help].
|
||||
|
||||
Other Utilities
|
||||
~~~~~~~~~~~~~~~
|
||||
Although the package manager itself is quite simple, many scripts have been
|
||||
developed that help automate building and installing packages. These are used
|
||||
extensively in link:https://www.archlinux.org/[Arch Linux]. Most of these utilities
|
||||
are available in the Arch Linux projects
|
||||
link:https://git.archlinux.org/[code browser].
|
||||
|
||||
Utilities available:
|
||||
|
||||
* link:https://git.archlinux.org/dbscripts.git/[dbscripts] - scripts used by Arch Linux to manage the main package repositories
|
||||
* link:https://git.archlinux.org/devtools.git/[devtools] - tools to assist in packaging and dependency checking
|
||||
* link:https://git.archlinux.org/namcap.git/[namcap] - a package analysis utility written in python
|
||||
|
||||
Bugs
|
||||
----
|
||||
If you find bugs (which is quite likely), please email them to the pacman-dev
|
||||
mailing last at mailto:pacman-dev@archlinux.org[] with specific information
|
||||
such as your command-line, the nature of the bug, and even the package database
|
||||
if it helps.
|
||||
|
||||
You can also post a bug to the Arch Linux bug tracker
|
||||
link:https://bugs.archlinux.org/index.php?project=3[Flyspray]. Be sure to file
|
||||
bugs under the Pacman project.
|
||||
If you find bugs (which is quite likely), please report them to the issue
|
||||
tracker at link:https://gitlab.archlinux.org/pacman/pacman/-/issues[] with
|
||||
specific information such as your command-line, the nature of the bug, and even
|
||||
the package database if it helps.
|
||||
|
||||
Copyright
|
||||
---------
|
||||
pacman is Copyright (C) 2006-2019 Pacman Development Team
|
||||
<pacman-dev@archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
|
||||
pacman is Copyright (C) 2006-2025 Pacman Development Team
|
||||
<pacman-dev@lists.archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
|
||||
<jvinet@zeroflux.org> and is licensed through the GNU General Public License,
|
||||
version 2 or later.
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
libalpm(3)
|
||||
==========
|
||||
|
||||
Name
|
||||
----
|
||||
libalpm - Arch Linux Package Management (ALPM) library
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
For ease of access, the libalpm manual has been split up into several sections.
|
||||
|
||||
*TODO:* Yes, this man page needs a lot of work. Once we get around to doing
|
||||
good Doxygen documentation, it will improve. We promise.
|
||||
|
||||
*alpm_databases*:: Database Functions
|
||||
*alpm_interface*:: Interface Functions
|
||||
*alpm_list*:: List Functions
|
||||
*alpm_log*:: Logging Functions
|
||||
*alpm_misc*:: Miscellaneous Functions
|
||||
*alpm_packages*:: Package Functions
|
||||
*alpm_sync*:: Sync Functions
|
||||
*alpm_trans*:: Transaction Functions
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
See linkman:pacman.conf[5] for more details on configuring libalpm using the
|
||||
'pacman.conf' file.
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
linkman:alpm-hooks[5], linkman:makepkg[8], linkman:pacman[8],
|
||||
linkman:pacman.conf[5]
|
||||
|
||||
include::footer.asciidoc[]
|
|
@ -85,7 +85,7 @@ Example PKGBUILD
|
|||
license=('PerlArtistic' 'GPL')
|
||||
depends=('perl')
|
||||
source=("http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/Config-Simple-${pkgver}.tar.gz")
|
||||
md5sums=('f014aec54f0a1e2e880d317180fce502')
|
||||
sha256sums=('dd9995706f0f9384a15ccffe116c3b6e22f42ba2e58d8f24ed03c4a0e386edb4')
|
||||
_distname="Config-Simple"
|
||||
|
||||
# template start; name=perl-module; version=1.0;
|
||||
|
|
|
@ -75,7 +75,7 @@ Options
|
|||
For each source file in the source array of PKGBUILD, download the file
|
||||
if required and generate integrity checks. The integrity checks generated
|
||||
are determined by the checks present in the PKGBUILD, falling back to the
|
||||
value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent
|
||||
value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent.
|
||||
This output can be redirected into your PKGBUILD for source validation
|
||||
using "`makepkg -g >> PKGBUILD`".
|
||||
|
||||
|
@ -144,7 +144,11 @@ Options
|
|||
Display version information.
|
||||
|
||||
*-C, \--cleanbuild*::
|
||||
Remove the $srcdir before building the package.
|
||||
Clean build artifacts from previous runs of makepkg in the current
|
||||
directory by removing $srcdir before building the package.
|
||||
|
||||
*-D* <dir>, *\--dir* <dir> ::
|
||||
Change to directory <dir> before reading the PKGBUILD or doing anything else.
|
||||
|
||||
*\--allsource*::
|
||||
Do not actually build the package, but build a source-only tarball that
|
||||
|
@ -168,6 +172,9 @@ Options
|
|||
*\--noprepare*::
|
||||
Do not run the prepare() function in the PKGBUILD.
|
||||
|
||||
*\--noverify*::
|
||||
Do not run the verify() function in the PKGBUILD.
|
||||
|
||||
*\--sign*::
|
||||
Sign the resulting package with gpg, overriding the setting in
|
||||
linkman:makepkg.conf[5].
|
||||
|
@ -227,6 +234,9 @@ before building.
|
|||
|
||||
Environment Variables
|
||||
---------------------
|
||||
**MAKEPKG_LIBRARY**="/path/to/directory"::
|
||||
Use an alternative libmakepkg path instead of the {libmakepkgdir} default.
|
||||
|
||||
**PACMAN**::
|
||||
The command that will be used to check for missing dependencies and to
|
||||
install and remove packages. Pacman's '-Qq', '-Rns', '-S', '-T', and '-U'
|
||||
|
@ -237,6 +247,11 @@ Environment Variables
|
|||
Use an alternate config file instead of the +{sysconfdir}/makepkg.conf+
|
||||
default.
|
||||
|
||||
**MAKEPKG_GIT_CONFIG=**"/path/to/file"::
|
||||
Use an alternate config file for Git instead of the
|
||||
+{sysconfdir}/makepkg.d/gitconfig+ default. makepkg always prevents Git
|
||||
from loading any other config files.
|
||||
|
||||
**PKGDEST=**"/path/to/directory"::
|
||||
Directory where the resulting packages will be stored. Overrides the
|
||||
corresponding value defined in linkman:makepkg.conf[5].
|
||||
|
@ -274,11 +289,25 @@ Environment Variables
|
|||
|
||||
**GPGKEY=**"keyid"::
|
||||
Specify a key to use when signing packages, overriding the GPGKEY setting
|
||||
in linkman:makepkg.conf[5]
|
||||
in linkman:makepkg.conf[5].
|
||||
|
||||
**SOURCE_DATE_EPOCH=**"<date>"::
|
||||
Used for link:https://reproducible-builds.org/docs/[Reproducible Builds].
|
||||
|
||||
**BUILDTOOL=**"<name>"::
|
||||
The name of a tool ecosystem used to set up the build environment. Used for
|
||||
defining a spec for reproducible builds, e.g. the linkman:makepkg.conf[5]
|
||||
used.
|
||||
|
||||
**BUILDTOOLVER=**"<version>"::
|
||||
The version of the '$BUILDTOOL' used.
|
||||
|
||||
**MAKEPKG_LINT_PKGBUILD=**0::
|
||||
Setting to 0 disables PKGBUILD linting within makepkg. Useful on systems
|
||||
with slow bash subshell operations, or on PKGBUILDs with extreme amounts of
|
||||
package splitting.
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
See linkman:makepkg.conf[5] for more details on configuring makepkg using the
|
||||
|
@ -299,7 +328,7 @@ On exit, makepkg will return one of the following error codes.
|
|||
Error in configuration file.
|
||||
|
||||
3::
|
||||
User specified an invalid option
|
||||
User specified an invalid option.
|
||||
|
||||
4::
|
||||
Error in user-supplied function in PKGBUILD.
|
||||
|
@ -342,6 +371,10 @@ On exit, makepkg will return one of the following error codes.
|
|||
16::
|
||||
Specified GPG key does not exist or failed to sign package.
|
||||
|
||||
17::
|
||||
The local repository is not a clone of the source repository
|
||||
specified in PKGBUILD.
|
||||
|
||||
See Also
|
||||
--------
|
||||
linkman:makepkg.conf[5], linkman:PKGBUILD[5], linkman:pacman[8]
|
||||
|
|
|
@ -23,6 +23,9 @@ NOTE: This does not guarantee that all package Makefiles will use your exported
|
|||
variables. Some of them are non-standard.
|
||||
|
||||
The system-wide configuration file is found in {sysconfdir}/makepkg.conf.
|
||||
Specific additions (e.g. build flags for additional languages) can be placed
|
||||
in {sysconfdir}/makepkg.conf.d/*.conf.
|
||||
|
||||
Individual options can be overridden (or added to) on a per-user basis in
|
||||
$XDG_CONFIG_HOME/pacman/makepkg.conf or ~/.makepkg.conf, with the former
|
||||
taking priority.
|
||||
|
@ -59,6 +62,11 @@ Options
|
|||
A string such as ``i686-pc-linux-gnu''; do not touch this unless you know what
|
||||
you are doing. This can be commented out by most users if desired.
|
||||
|
||||
**NPROC=**""::
|
||||
Sets the number of processors to use for parallel jobs in makepkg.
|
||||
Note: this does not affect parallelization of tasks during ``build()`` and
|
||||
related functions.
|
||||
|
||||
**CPPFLAGS=**"cppflags"::
|
||||
Flags used for the C preprocessor; see CFLAGS for more information.
|
||||
|
||||
|
@ -72,15 +80,16 @@ Options
|
|||
**CXXFLAGS=**"cxxflags"::
|
||||
Flags used for the C++ compiler; see CFLAGS for more info.
|
||||
|
||||
**RUSTFLAGS=**"rustflags"::
|
||||
Flags used for the Rust compiler, similar in spirit to CFLAGS. Read
|
||||
linkman:rustc[1] for more details on the available flags.
|
||||
|
||||
**LDFLAGS=**"ldflags"::
|
||||
Flags used for the linker. Several options may be specified with common
|
||||
usage resembling ``-Wl,--hash-style=gnu''. Read ld(1) for more details on
|
||||
available linker flags.
|
||||
|
||||
**LTOFLAGS=**"ltoflags"::
|
||||
Additional compiler and linker flags appended to `CFLAGS`, `CXXFLAGS`
|
||||
and `LDFLAGS` when building with link time optimization. If empty,
|
||||
``-flto'' is used.
|
||||
|
||||
**MAKEFLAGS=**"makeflags"::
|
||||
This is often used to set the number of jobs used; for example, `-j2`.
|
||||
Other flags that make accepts can also be passed.
|
||||
|
@ -93,11 +102,6 @@ Options
|
|||
**DEBUG_CXXFLAGS=**"debug_cxxflags"::
|
||||
Debug flags used for the C++ compiler; see DEBUG_CFLAGS for more info.
|
||||
|
||||
**DEBUG_RUSTFLAGS=**"debug_rustflags"::
|
||||
Additional compiler flags appended to `RUSTFLAGS` for use in debugging.
|
||||
Usually this would include: ``-C debuginfo=2''. Read linkman:rustc[1] for
|
||||
more details on the available flags.
|
||||
|
||||
**BUILDENV=(**!distcc !color !ccache check !sign**)**::
|
||||
This array contains options that affect the build environment; the defaults
|
||||
are shown here. All options should always be left in the array; to enable
|
||||
|
@ -126,7 +130,7 @@ Options
|
|||
|
||||
*sign*;;
|
||||
Generate a PGP signature file using GnuPG. This will execute 'gpg
|
||||
\--detach-sign \--use-agent' on the built package to generate a detached
|
||||
\--detach-sign' on the built package to generate a detached
|
||||
signature file, using the GPG agent, if it is available. The signature
|
||||
file will be the entire file name of the package with a ``.sig''
|
||||
extension.
|
||||
|
@ -147,7 +151,7 @@ Options
|
|||
Specify a key to use for GPG signing instead of the default key in the
|
||||
keyring. Can be overridden with makepkg's '\--key' option.
|
||||
|
||||
**OPTIONS=(**!strip docs libtool staticlibs emptydirs !zipman !purge !debug**)**::
|
||||
**OPTIONS=(**!strip docs libtool staticlibs emptydirs ...**)**::
|
||||
This array contains options that affect default packaging. They are
|
||||
equivalent to options that can be placed in the PKGBUILD; the defaults are
|
||||
shown here. All options should always be left in the array; to enable or
|
||||
|
@ -189,10 +193,20 @@ Options
|
|||
DEBUG_CXXFLAGS to their counterpart buildflags. Creates a separate
|
||||
package containing the debug symbols when used with `strip'.
|
||||
|
||||
*lto*;;
|
||||
Enable building packages using link time optimization. Adds the
|
||||
flags specified in LTOFLAGS to CFLAGS, CXXFLAGS and LDFLAGS (or
|
||||
``-flto'' if LTOFLAGS is empty).
|
||||
|
||||
*autodeps*;;
|
||||
Enable the automatic addition of libraries to the depends and
|
||||
provides arrays. Search library directories are controlled by
|
||||
the LIB_DIRS variable defined below.
|
||||
|
||||
**INTEGRITY_CHECK=(**check1 ...**)**::
|
||||
File integrity checks to use. Multiple checks may be specified; this
|
||||
affects both generation and checking. The current valid options are:
|
||||
`md5`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`, and `b2`.
|
||||
`ck`, `md5`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`, and `b2`.
|
||||
|
||||
**STRIP_BINARIES=**"--strip-all"::
|
||||
Options to be used when stripping binaries. See linkman:strip[1]
|
||||
|
@ -219,6 +233,12 @@ Options
|
|||
that are located in opt/, you may need to add the directory to this
|
||||
array. *NOTE:* Do not add the leading slash to the directory name.
|
||||
|
||||
**LIB_DIRS=(**lib:usr/lib ...**)**::
|
||||
If `autodeps` is specified in the `OPTIONS` array, this variable will
|
||||
instruct makepkg where to look to find libraries to add to the `provides`
|
||||
array. The format is "prefix:path", where provides will be added for
|
||||
libraries found in "path" with the specified prefix added.
|
||||
|
||||
**PURGE_TARGETS=(**usr/{,share}/info/dir .podlist *.pod...**)**::
|
||||
If `purge` is specified in the `OPTIONS` array, this variable will
|
||||
instruct makepkg which files to remove from the package. This is
|
||||
|
@ -270,9 +290,18 @@ Options
|
|||
|
||||
**PKGEXT=**"{pkgext}", **SRCEXT=**"{srcext}"::
|
||||
Sets the compression used when making compiled or source packages.
|
||||
Valid suffixes are `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`,
|
||||
`.tar.lzo`, `.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or
|
||||
simply `.tar` to disable compression entirely.
|
||||
Valid suffixes are `.pkg` or `.src` (for PKGEXT and SRCEXT respectively)
|
||||
followed by one of `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`, `.tar.lzo`,
|
||||
`.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or simply `.tar` to
|
||||
disable compression entirely.
|
||||
|
||||
**PACMAN_AUTH=()**::
|
||||
Specify a command prefix for running pacman as root. If unset, makepkg will
|
||||
check for the presence of sudo(8) and su(1) in turn, and try the first one
|
||||
it finds.
|
||||
+
|
||||
If present, `%c` will be replaced with the shell-quoted form of the command
|
||||
to run. Otherwise, the command to run is appended to the auth command.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -5,11 +5,12 @@ manpages = [
|
|||
{ 'name': 'makepkg-template.1' },
|
||||
{ 'name': 'repo-add.8' },
|
||||
{ 'name': 'vercmp.8' },
|
||||
{ 'name': 'testpkg.8' },
|
||||
{ 'name': 'pacman-key.8' },
|
||||
{ 'name': 'pacman-db-upgrade.8' },
|
||||
{ 'name': 'PKGBUILD.5', 'extra_depends' : [ 'PKGBUILD-example.txt' ] },
|
||||
{ 'name': 'makepkg.conf.5' },
|
||||
{ 'name': 'pacman.conf.5' },
|
||||
{ 'name': 'libalpm.3' },
|
||||
{ 'name': 'BUILDINFO.5' },
|
||||
{ 'name': 'pacman-conf.8' },
|
||||
]
|
||||
|
@ -26,14 +27,15 @@ asciidoc_conf = join_paths(meson.current_source_dir(), 'asciidoc.conf')
|
|||
asciidoc_opts = [
|
||||
'-f', asciidoc_conf,
|
||||
'-a', 'pacman_version="@0@"'.format(PACKAGE_VERSION),
|
||||
'-a', 'pacman_date=@0@'.format(run_command('date', '+%Y-%m-%d').stdout().strip()),
|
||||
'-a', 'srcext=@0@'.format(get_option('src-ext')),
|
||||
'-a', 'pkgext=@0@'.format(get_option('pkg-ext')),
|
||||
'-a', 'pkgdatadir=@0@'.format(PKGDATADIR),
|
||||
'-a', 'keyringdir=@0@'.format(KEYRINGDIR),
|
||||
'-a', 'localstatedir=@0@'.format(LOCALSTATEDIR),
|
||||
'-a', 'sysconfdir=@0@'.format(SYSCONFDIR),
|
||||
'-a', 'datarootdir=@0@'.format(DATAROOTDIR),
|
||||
'-a', 'rootdir=@0@'.format(ROOTDIR),
|
||||
'-a', 'libmakepkgdir=@0@'.format(LIBMAKEPKGDIR),
|
||||
]
|
||||
|
||||
html_targets = []
|
||||
|
@ -129,9 +131,14 @@ meson.add_install_script(MESON_MAKE_SYMLINK,
|
|||
'repo-add.8',
|
||||
join_paths(MANDIR, 'man8/repo-remove.8'))
|
||||
|
||||
meson.add_install_script(MESON_MAKE_SYMLINK,
|
||||
'alpm-hooks.5',
|
||||
join_paths(MANDIR, 'man5/pacman-hooks.5'))
|
||||
|
||||
doxygen = find_program('doxygen', required : get_option('doxygen'))
|
||||
if doxygen.found() and not get_option('doxygen').disabled()
|
||||
doxyconf = configuration_data()
|
||||
doxyconf.set('INPUT_DIRECTORY', meson.current_source_dir())
|
||||
doxyconf.set('OUTPUT_DIRECTORY', meson.current_build_dir())
|
||||
doxyfile = configure_file(
|
||||
input : 'Doxyfile.in',
|
||||
|
|
|
@ -34,7 +34,7 @@ Options
|
|||
*-R, \--rootdir* <path>::
|
||||
Specify an alternate installation root (default is `/`).
|
||||
|
||||
*-r, \--repo* <remote>::
|
||||
*-r, \--repo* <repository>::
|
||||
Query options for a specific repository.
|
||||
|
||||
*-v, \--verbose*::
|
||||
|
|
36
doc/pacman-db-upgrade.8.asciidoc
Normal file
36
doc/pacman-db-upgrade.8.asciidoc
Normal file
|
@ -0,0 +1,36 @@
|
|||
pacman-db-upgrade(8)
|
||||
====================
|
||||
|
||||
Name
|
||||
----
|
||||
pacman-db-upgrade - upgrade the local pacman database to a newer format
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
'pacman-db-upgrade' [options]
|
||||
|
||||
Description
|
||||
-----------
|
||||
'pacman-db-upgrade' is a script that upgrades the local database used
|
||||
by linkman:pacman[8] to a newer format.
|
||||
|
||||
Options
|
||||
--------------
|
||||
*-h, \--help*::
|
||||
Show the built-in help message and exit.
|
||||
*-V, \--version*::
|
||||
Show version information and exit.
|
||||
*-d, \--dbpath* <path>::
|
||||
Set an alternate database location.
|
||||
*-r, \--root* <path>::
|
||||
Set an alternate installation root.
|
||||
*\--config* <path>::
|
||||
Set an alternate configuration file.
|
||||
*\--nocolor*::
|
||||
Remove color from output.
|
||||
|
||||
See Also
|
||||
--------
|
||||
linkman:pacman[8]
|
||||
|
||||
include::footer.asciidoc[]
|
|
@ -86,7 +86,7 @@ Operations
|
|||
|
||||
*\--populate*::
|
||||
Reload the default keys from the (optionally provided) keyrings in
|
||||
+{pkgdatadir}/keyrings+. For more information, see
|
||||
+{keyringdir}+. For more information, see
|
||||
<<PK,Providing a Keyring for Import>> below.
|
||||
|
||||
*-u, \--updatedb*::
|
||||
|
@ -129,7 +129,7 @@ A distribution or other repository provided may want to provide a set of
|
|||
PGP keys used in the signing of its packages and repository databases that can
|
||||
be readily imported into the pacman keyring. This is achieved by providing a
|
||||
PGP keyring file `foo.gpg` that contains the keys for the foo keyring in the
|
||||
directory +{pkgdatadir}/keyrings+.
|
||||
directory +{keyringdir}+.
|
||||
|
||||
Optionally, the file `foo-trusted` can be provided containing a list of trusted
|
||||
key IDs for that keyring. This is a file in a format compatible with 'gpg
|
||||
|
|
|
@ -141,7 +141,7 @@ Options
|
|||
guest system. See '\--sysroot' instead.
|
||||
|
||||
*-v, \--verbose*::
|
||||
Output paths such as as the Root, Conf File, DB Path, Cache Dirs, etc.
|
||||
Output paths such as the Root, Conf File, DB Path, Cache Dirs, etc.
|
||||
|
||||
*\--arch* <arch>::
|
||||
Specify an alternate architecture.
|
||||
|
@ -151,7 +151,8 @@ Options
|
|||
+{localstatedir}/cache/pacman/pkg+). Multiple cache directories can be
|
||||
specified, and they are tried in the order they are passed to pacman.
|
||||
*NOTE*: This is an absolute path, and the root path is not automatically
|
||||
prepended.
|
||||
prepended. If DownloadUser is set in linkman:pacman.conf[5], then the
|
||||
specified user must have permission to access the cache directory.
|
||||
|
||||
*\--color* <when>::
|
||||
Specify when to enable coloring. Valid options are 'always', 'never', or
|
||||
|
@ -195,12 +196,15 @@ Options
|
|||
Disable defaults for low speed limit and timeout on downloads. Use this
|
||||
if you have issues downloading files with proxy and/or security gateway.
|
||||
|
||||
*\--sysroot* <dir>::
|
||||
Specify an alternative system root. Pacman will chroot and chdir into the
|
||||
system root prior to running. This allows mounted guest systems to be
|
||||
properly operated on. Any other paths given will be interpreted as relative
|
||||
to the system root. Requires root privileges.
|
||||
*\--sysroot* <dir>:: Specify an alternative system root. This path will be
|
||||
prepended to all other configuration directories and any repository servers
|
||||
beginning with `file://`. Any paths or URLs passed as targets will not be
|
||||
modified. This allows mounted guest systems to be properly operated on.
|
||||
|
||||
*\--disable-sandbox*::
|
||||
Disable the default sandbox applied to the process downloading files on Linux
|
||||
systems. Useful if experiencing landlock related failures while downloading
|
||||
files when running a Linux kernel that does not support this feature.
|
||||
|
||||
Transaction Options (apply to '-S', '-R' and '-U')
|
||||
--------------------------------------------------
|
||||
|
@ -212,7 +216,7 @@ Transaction Options (apply to '-S', '-R' and '-U')
|
|||
|
||||
*\--assume-installed* <package=version>::
|
||||
Add a virtual package "package" with version "version" to the transaction
|
||||
to satisfy dependencies. This allows to disable specific dependency checks
|
||||
to satisfy dependencies. This allows disabling the specific dependency checks
|
||||
without affecting all dependency checks. To disable all dependency
|
||||
checking, see the '\--nodeps' option.
|
||||
|
||||
|
@ -235,12 +239,22 @@ Transaction Options (apply to '-S', '-R' and '-U')
|
|||
|
||||
*\--print-format* <format>::
|
||||
Specify a printf-like format to control the output of the '\--print'
|
||||
operation. The possible attributes are: "%n" for pkgname, "%v" for pkgver,
|
||||
"%l" for location, "%r" for repository, and "%s" for size. Implies '\--print'.
|
||||
operation. The possible attributes are: "%a" for arch, "%b" for
|
||||
builddate, "%d" for description, "%e" for pkgbase, "%f" for filename,
|
||||
"%g" for base64 encoded PGP signature, "%h" for sha256sum, "%m" for
|
||||
md5sum, "%n" for pkgname, "%p" for packager, "%v" for pkgver, "%l" for
|
||||
location, "%r" for repository, "%s" for size, "%C" for checkdepends,
|
||||
"%D" for depends, "%G" for groups, "%H" for conflicts, "%L" for
|
||||
licenses, "%M" for makedepends, "%O" for optional depends, "%P" for
|
||||
provides and "%R" for replaces.
|
||||
Implies '\--print'.
|
||||
|
||||
|
||||
Upgrade Options (apply to '-S' and '-U')[[UO]]
|
||||
----------------------------------------------
|
||||
*-w, \--downloadonly*::
|
||||
Retrieve all packages from the server, but do not install/upgrade anything.
|
||||
|
||||
*\--asdeps*::
|
||||
Install packages non-explicitly; in other words, fake their install reason
|
||||
to be installed as a dependency. This is useful for makepkg and other
|
||||
|
@ -445,15 +459,12 @@ can be useful when the user switches from a testing repository to a stable one.
|
|||
Additional targets can also be specified manually, so that '-Su foo' will do a
|
||||
system upgrade and install/upgrade the "foo" package in the same operation.
|
||||
|
||||
*-w, \--downloadonly*::
|
||||
Retrieve all packages from the server, but do not install/upgrade anything.
|
||||
|
||||
*-y, \--refresh*::
|
||||
Download a fresh copy of the master package database from the server(s)
|
||||
defined in linkman:pacman.conf[5]. This should typically be used each time
|
||||
you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y' flags
|
||||
will force a refresh of all package databases, even if they appear to be
|
||||
up-to-date.
|
||||
Download a fresh copy of the master package databases '(repo.db)' from the
|
||||
server(s) defined in linkman:pacman.conf[5]. This should typically be used
|
||||
each time you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y'
|
||||
flags will force a refresh of all package databases, even if they appear to
|
||||
be up-to-date.
|
||||
|
||||
|
||||
Database Options (apply to '-D')[[QO]]
|
||||
|
@ -464,7 +475,7 @@ Database Options (apply to '-D')[[QO]]
|
|||
|
||||
*\--asexplicit* <package>::
|
||||
Mark a package as explicitly installed; in other words, set their install
|
||||
reason to be explicitly installed. This is useful it you want to keep a
|
||||
reason to be explicitly installed. This is useful if you want to keep a
|
||||
package installed even when it was initially installed as a dependency
|
||||
of another package.
|
||||
|
||||
|
@ -482,8 +493,8 @@ Database Options (apply to '-D')[[QO]]
|
|||
File Options (apply to '-F')[[FO]]
|
||||
----------------------------------
|
||||
*-y, --refresh*::
|
||||
Download fresh package databases from the server. Use twice to force a
|
||||
refresh even if databases are up to date.
|
||||
Download fresh package file databases '(repo.files)' from the server.
|
||||
Use twice to force a refresh even if databases are up to date.
|
||||
|
||||
*-l, \--list*::
|
||||
List the files owned by the queried package.
|
||||
|
|
|
@ -113,15 +113,15 @@ Options
|
|||
general configuration options. Wildcards in the specified paths will get
|
||||
expanded based on linkman:glob[7] rules.
|
||||
|
||||
*Architecture =* auto | i686 | x86_64 | ...::
|
||||
If set, pacman will only allow installation of packages of the given
|
||||
architecture (e.g. 'i686', 'x86_64', etc). The special value 'auto' will
|
||||
*Architecture =* auto &| i686 &| x86_64 | ...::
|
||||
If set, pacman will only allow installation of packages with the given
|
||||
architectures (e.g. 'i686', 'x86_64', etc). The special value 'auto' will
|
||||
use the system architecture, provided via ``uname -m''. If unset, no
|
||||
architecture checks are made. *NOTE*: Packages with the special
|
||||
architecture 'any' can always be installed, as they are meant to be
|
||||
architecture independent.
|
||||
|
||||
*XferCommand =* /path/to/command %u::
|
||||
*XferCommand =* /path/to/command %u [%o]::
|
||||
If set, an external program will be used to download all remote files.
|
||||
All instances of `%u` will be replaced with the download URL. If present,
|
||||
instances of `%o` will be replaced with the local filename, plus a
|
||||
|
@ -186,12 +186,9 @@ Options
|
|||
*Color*::
|
||||
Automatically enable colors only when pacman's output is on a tty.
|
||||
|
||||
*TotalDownload*::
|
||||
When downloading, display the amount downloaded, download rate, ETA,
|
||||
and completed percentage of the entire download list rather
|
||||
than the percent of each individual download target. The progress
|
||||
bar is still based solely on the current file download.
|
||||
This option won't work if XferCommand is used.
|
||||
*NoProgressBar*::
|
||||
Disables progress bars. This is useful for terminals which do
|
||||
not support escape characters.
|
||||
|
||||
*CheckSpace*::
|
||||
Performs an approximate check for adequate available disk space before
|
||||
|
@ -205,6 +202,19 @@ Options
|
|||
Disable defaults for low speed limit and timeout on downloads. Use this
|
||||
if you have issues downloading files with proxy and/or security gateway.
|
||||
|
||||
*ParallelDownloads =* ...::
|
||||
Specifies number of concurrent download streams. The value needs to be a
|
||||
positive integer. If this config option is not set then only one download
|
||||
stream is used (i.e. downloads happen sequentially).
|
||||
|
||||
*DownloadUser =* username::
|
||||
Specifies the user to switch to for downloading files. If this config
|
||||
option is not set then the downloads are done as the user running pacman.
|
||||
|
||||
*DisableSandbox*::
|
||||
Disable the default sandbox applied to the process downloading files on Linux
|
||||
systems. Useful if experiencing landlock related failures while downloading
|
||||
files when running a Linux kernel that does not support this feature.
|
||||
|
||||
Repository Sections
|
||||
-------------------
|
||||
|
@ -225,7 +235,7 @@ contain a file that lists the servers for that repository.
|
|||
# use this server first
|
||||
Server = ftp://ftp.archlinux.org/$repo/os/$arch
|
||||
# next use servers as defined in the mirrorlist below
|
||||
Include = {sysconfdir}/pacman.d/mirrorlist
|
||||
Include = /etc/pacman.d/mirrorlist
|
||||
--------
|
||||
|
||||
The order of repositories in the configuration files matters; repositories
|
||||
|
@ -238,6 +248,12 @@ number.
|
|||
general configuration options. Wildcards in the specified paths will get
|
||||
expanded based on linkman:glob[7] rules.
|
||||
|
||||
*CacheServer =* url::
|
||||
A full URL to a location where the packages, and signatures (if
|
||||
available) for this repository can be found. Cache servers will be tried
|
||||
before any non-cache servers, will not be removed from the server pool for
|
||||
404 download errors, and will not be used for database files.
|
||||
|
||||
*Server =* url::
|
||||
A full URL to a location where the database, packages, and signatures (if
|
||||
available) for this repository can be found.
|
||||
|
@ -245,8 +261,8 @@ number.
|
|||
During parsing, pacman will define the `$repo` variable to the name of the
|
||||
current section. This is often utilized in files specified using the 'Include'
|
||||
directive so all repositories can use the same mirrorfile. pacman also defines
|
||||
the `$arch` variable to the value of `Architecture`, so the same mirrorfile can
|
||||
even be used for different architectures.
|
||||
the `$arch` variable to the first (or only) value of the `Architecture` option,
|
||||
so the same mirrorfile can even be used for different architectures.
|
||||
|
||||
*SigLevel =* ...::
|
||||
Set the signature verification level for this repository. For more
|
||||
|
|
|
@ -29,9 +29,10 @@ specified on the command line. Multiple packages to remove can be specified
|
|||
on the command line.
|
||||
|
||||
A package database is a tar file, optionally compressed. Valid extensions are
|
||||
``.db'' followed by an archive extension of ``.tar'', ``.tar.gz'', ``.tar.bz2'',
|
||||
``.tar.xz'', or ``.tar.Z''. The file does not need to exist, but all parent
|
||||
directories must exist.
|
||||
``.db'' followed by an archive extension of ``.tar'', ``.tar.bz2'',
|
||||
``.tar.gz'', ``.tar.lrz'', ``.tar.lz'', ``.tar.lz4'', ``.tar.lzo'',
|
||||
``.tar.xz'', ``.tar.zst'' or ``.tar.Z''. The file does not need to exist, but
|
||||
all parent directories must exist.
|
||||
|
||||
|
||||
Common Options
|
||||
|
@ -42,13 +43,13 @@ Common Options
|
|||
|
||||
*-s, \--sign*::
|
||||
Generate a PGP signature file using GnuPG. This will execute `gpg
|
||||
--detach-sign --use-agent` on the generated database to generate a detached
|
||||
--detach-sign` on the generated database to generate a detached
|
||||
signature file, using the GPG agent if it is available. The signature file
|
||||
will be the entire filename of the database with a ``.sig'' extension.
|
||||
|
||||
*-k, \--key* <key>::
|
||||
Specify a key to use when signing packages. Can also be specified using
|
||||
the GPGKEY environmental variable. If not specified in either location, the
|
||||
the GPGKEY environment variable. If not specified in either location, the
|
||||
default key from the keyring will be used.
|
||||
|
||||
*-v, \--verify*::
|
||||
|
@ -59,6 +60,14 @@ Common Options
|
|||
*\--nocolor*::
|
||||
Remove color from 'repo-add' and 'repo-remove' output.
|
||||
|
||||
*-R, \--remove*::
|
||||
Remove old package files from the disk when updating or removing their
|
||||
entry in the database.
|
||||
|
||||
*-w, \--wait-for-lock*::
|
||||
Wait for the lock file to be acquired. If unset, command will fail with
|
||||
exit code 2 if acquiring the lock fails. If set, it will retry to acquire
|
||||
lock until success.
|
||||
|
||||
repo-add Options
|
||||
----------------
|
||||
|
@ -66,10 +75,8 @@ repo-add Options
|
|||
Only add packages that are not already in the database. Warnings will be
|
||||
printed upon detection of existing packages, but they will not be re-added.
|
||||
|
||||
*-R, \--remove*::
|
||||
Remove old package files from the disk when updating their entry in the
|
||||
database.
|
||||
|
||||
*\--include-sigs*::
|
||||
Include package PGP signatures in the repository database (if available)
|
||||
|
||||
Example
|
||||
-------
|
||||
|
|
|
@ -11,16 +11,31 @@ NOTE: Some of this is paraphrased from the kernel documentation's
|
|||
|
||||
Getting the most recent source
|
||||
------------------------------
|
||||
Patches need to be submitted in GIT format and are best if they are against the
|
||||
Patches need to be submitted in Git format and are best if they are against the
|
||||
latest version of the code. There are several helpful tutorials for getting
|
||||
started with GIT if you have not worked with it before.
|
||||
started with Git if you have not worked with it before.
|
||||
|
||||
* https://www.kernel.org/pub/software/scm/git/docs/gittutorial.html
|
||||
* https://wiki.archlinux.org/index.php/Super_Quick_Git_Guide
|
||||
|
||||
The pacman code can be fetched using the following command:
|
||||
|
||||
git clone git://git.archlinux.org/pacman.git
|
||||
git clone https://gitlab.archlinux.org/pacman/pacman.git
|
||||
|
||||
|
||||
Before making large changes
|
||||
---------------------------
|
||||
|
||||
--
|
||||
* Discuss your idea
|
||||
|
||||
There is nothing worse that spending time making a change only for it to be
|
||||
rejected immediately. Ensure ideas are discussed beforehand to avoid
|
||||
disappointment. Appropriate locations for discussion are the issue tracker
|
||||
on gitlab, or the pacman-dev mailing list. Transient discussion channels
|
||||
such as IRC are not appropriate.
|
||||
|
||||
--
|
||||
|
||||
|
||||
Creating your patch
|
||||
|
@ -43,36 +58,18 @@ It helps if you describe the overview and goals of the patch in the git commit
|
|||
log. This allows others to see what you intended so as to compare it to what
|
||||
was actually done, and allows better feedback.
|
||||
|
||||
* Use `git format-patch` to create patches.
|
||||
|
||||
Your commit message will be shown above the patch by default when you will use
|
||||
`git format-patch`, including the signoff line. Sets of multiple patches that
|
||||
need extra explanation beyond the commit messages may include additional notes
|
||||
in a cover letter. Individual patches may include additional notes between the
|
||||
"---" following the commit message and the beginning of the diff.
|
||||
|
||||
--
|
||||
|
||||
Submitting your patch
|
||||
---------------------
|
||||
|
||||
--
|
||||
* Send the patch to the pacman-dev mailing list
|
||||
* Submit patches with a gitlab merge request
|
||||
|
||||
The mailing list is the primary queue for review and acceptance. Here you
|
||||
will get feedback, and let the reviewers know the details of your patch.
|
||||
The pacman gitlab instance is the primary queue for review and acceptance.
|
||||
Here you will get feedback, and let the reviewers know the details of your
|
||||
patch.
|
||||
|
||||
* No MIME, no links, no compression, no attachments. Just plain text.
|
||||
|
||||
Patches should be contained in the actual body of the email. There are many
|
||||
reasons for this. First, it makes them easier to read with any mail reader,
|
||||
it allows easier review "at a glance", and most importantly, it allows people
|
||||
to comment on exact lines of the patch in reply emails.
|
||||
|
||||
`git send-email` allows you to send Git-formatted patches in plain text easily
|
||||
and is the preferred method for submission to the mailing list. Mail clients,
|
||||
including Gmail's web interface, have a tendency to break patches by wrapping
|
||||
lines and/or adjusting whitespace and should be avoided.
|
||||
|
||||
--
|
||||
|
||||
|
@ -95,7 +92,6 @@ When you do get feedback, it usually merits a response, whether this be a
|
|||
resubmission of the patch with corrections or a follow-up email asking for
|
||||
clarifications. When neither of these occurs, don't expect your patch to get
|
||||
further review. The all-volunteer staff don't have time to fix up patches that
|
||||
aren't their own. When resubmitting patches, update the subject line to reflect
|
||||
the version number ('[PATCHv2]'), and send it as a reply to the original thread.
|
||||
aren't their own.
|
||||
|
||||
--
|
||||
|
|
20
doc/testpkg.8.asciidoc
Normal file
20
doc/testpkg.8.asciidoc
Normal file
|
@ -0,0 +1,20 @@
|
|||
testpkg(8)
|
||||
==========
|
||||
|
||||
Name
|
||||
----
|
||||
testpkg - test a pacman package for validity
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
'testpkg' <package file>
|
||||
|
||||
Description
|
||||
-----------
|
||||
'testpkg' is a script used to make sure that a pacman package is valid.
|
||||
|
||||
See Also
|
||||
--------
|
||||
linkman:pacman[8]
|
||||
|
||||
include::footer.asciidoc[]
|
|
@ -4,10 +4,10 @@ Pacman - Translating
|
|||
This document is here to guide you in helping translate pacman messages,
|
||||
libalpm messages, and the manual pages for the entire pacman package.
|
||||
|
||||
We are currently using https://www.transifex.com/[Transifex] as the translation
|
||||
We are currently using https://app.transifex.com/[Transifex] as the translation
|
||||
platform for pacman and libalpm. You will need to sign up for an account there
|
||||
and then register with a translation team on the
|
||||
https://www.transifex.com/projects/p/archlinux-pacman/[pacman project page].
|
||||
https://explore.transifex.com/toofishes/archlinux-pacman/[pacman project page].
|
||||
|
||||
NOTE: This may be old information due to our switch to Transifex, but the
|
||||
gettext website is a very useful guide to read before embarking on translation
|
||||
|
@ -31,7 +31,7 @@ either be hand-edited, or modified with a tool such as poedit, gtranslator or
|
|||
kbabel. Using a translation tool tends to make the job easier.
|
||||
|
||||
Please read up on Transifex usage using the
|
||||
https://docs.transifex.com/[Transifex Help] if you are not familiar.
|
||||
https://help.transifex.com/[Transifex Help] if you are not familiar.
|
||||
|
||||
Transifex provides a command-line client to help with translations. Here is
|
||||
an example set of commands if you have a source code checkout and are not
|
||||
|
@ -55,17 +55,17 @@ Pre-release Updates
|
|||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
A week or two before each release, the codebase will go into a string freeze
|
||||
and an email will be sent to the mailto:pacman-dev@archlinux.org[pacman-dev]
|
||||
mailing list asking for translations. This email will have a prefix of
|
||||
*[translation]* for anyone looking to set up an email filter.
|
||||
and an email will be sent to the mailto:pacman-dev@lists.archlinux.org[pacman-dev]
|
||||
mailing list asking for translations. An announcement in Transifex is also made,
|
||||
which reaches everyone that is member of the translation team.
|
||||
|
||||
At this time, the latest `.po` language files will be made available at the
|
||||
Transifex project page. Each language will have two files available (back-end
|
||||
and front-end). Translators interested in helping are encouraged to use the
|
||||
Transifex project page. Each language will have three files available (libalpm,
|
||||
pacman and pacman-scripts). Translators interested in helping are encouraged to use the
|
||||
features of Transifex to let others know they are currently translating their
|
||||
language.
|
||||
|
||||
Once a translator has completed the translation (*OR* realizes they do not have
|
||||
Once a translator has completed the translation offline (*OR* realizes they do not have
|
||||
time to finish), please upload your progress back to the Transifex site.
|
||||
|
||||
NOTE: Please upload your translations as soon as possible - this will give other
|
||||
|
@ -78,23 +78,27 @@ Incremental Updates
|
|||
If you have more advanced needs you will have to get a copy of the pacman
|
||||
repository.
|
||||
|
||||
git clone git://git.archlinux.org/pacman.git pacman
|
||||
git clone https://gitlab.archlinux.org/pacman/pacman.git
|
||||
|
||||
Next, you will need to run `./autogen.sh` and `./configure` in the base
|
||||
directory to generate the correct Makefiles. At this point, all necessary
|
||||
make targets will be generated and we can begin updating the translation
|
||||
files.
|
||||
Next, you will need to configure the build environment. From the base directory,
|
||||
run:
|
||||
|
||||
We need to first update the main message catalog file. Navigate into either the
|
||||
`lib/libalpm/po` or `po` directory depending on which translation you wish to
|
||||
work on first, and execute the following command. If you are working in the
|
||||
`po/` tree, replace 'libalpm.pot' with 'pacman.pot':
|
||||
meson setup . build
|
||||
|
||||
make libalpm.pot-update
|
||||
If any required dependencies are missing, please install. After that,
|
||||
update the template translation (.pot) files to the latest state of
|
||||
the source code by running:
|
||||
|
||||
Next, update your specific language's translation file:
|
||||
meson compile -C build pacman-scripts-pot pacman-pot libalpm-pot
|
||||
|
||||
make <po file>-update
|
||||
We need to first update the main message catalog file. Navigate into either
|
||||
the `lib/libalpm/po`, `scripts/po` or `src/pacman/po` directory depending
|
||||
on which translation you wish to work on first, and execute the following
|
||||
command to update your specific language's translation file
|
||||
(replace `lang_code` with your language code e.g. 'pt_BR', and `pot_file`
|
||||
with `libalpm.pot`, `pacman.pot` or `pacman-scripts.pot`):
|
||||
|
||||
msgmerge --update --previous <lang_code>.po <pot_filename>.pot
|
||||
|
||||
At this point, you can do the translation. To submit your changes, either email
|
||||
the new `.po` file to the mailing-list with *[translation]* in the subject, or
|
||||
|
@ -103,7 +107,7 @@ submit a Git-formatted patch (please do not include any `.pot` file changes).
|
|||
As a shortcut, all translation files (including `.pot` files) can be updated
|
||||
with the following command:
|
||||
|
||||
make update-po
|
||||
./build-aux/update-po
|
||||
|
||||
Adding a New Language
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -112,10 +116,10 @@ Making a new language is not too hard, but be sure to follow all the steps.
|
|||
You will have to do the following steps in both the `lib/libalpm/po/` and `po/`
|
||||
directories, substituting where appropriate. First, edit the `LINGUAS` file and
|
||||
add your new language code at the bottom. Next, run the following command,
|
||||
substituting 'libalpm.pot' or 'pacman.pot' for potfile depending on which
|
||||
substituting `libalpm.pot` or `pacman.pot` for potfile depending on which
|
||||
directory you are currently working in:
|
||||
|
||||
msginit -l <lang code> -o <lang code>.po -i <potfile>
|
||||
msginit -l <lang_code> -o <lang_code>.po -i <potfile>
|
||||
|
||||
You can then also add your language code to the end of the `LINGUAS` file
|
||||
located in each po directory.
|
||||
|
@ -137,11 +141,13 @@ following two translations are equivalent:
|
|||
msgstr ""
|
||||
"This is a test translation"
|
||||
|
||||
If you want to test the translation (for example, the front-end one):
|
||||
If you want to test the translation (copy the .po file you want to test,
|
||||
you may ignore the rest), replacing `<lang_code>` accordingly:
|
||||
|
||||
rm *.gmo stamp-po
|
||||
make
|
||||
cp <lang code>.gmo /usr/share/locale/<lang code>/LC_MESSAGES/pacman.mo
|
||||
meson compile -C build pacman-scripts-gmo pacman-gmo libalpm-gmo
|
||||
cp ./build/lib/libalpm/po/<lang_code>/LC_MESSAGES/libalpm.mo /usr/share/locale/<lang_code>/LC_MESSAGES/libalpm.mo
|
||||
cp ./build/scripts/po/<lang_code>/LC_MESSAGES/pacman-scripts.mo /usr/share/locale/<lang_code>/LC_MESSAGES/pacman-scripts.mo
|
||||
cp ./build/src/pacman/po/<lang_code>/LC_MESSAGES/pacman.mo /usr/share/locale/<lang_code>/LC_MESSAGES/pacman.mo
|
||||
|
||||
|
||||
Translating Manpages
|
||||
|
@ -150,4 +156,4 @@ There are currently no efforts underway to include translated manual pages in
|
|||
the pacman codebase. However, this is not to say translations are unwelcome. If
|
||||
someone has experience with i18n man pages and how to best include them with our
|
||||
source, please contact the pacman-dev mailing list at
|
||||
mailto:pacman-dev@archlinux.org[].
|
||||
mailto:pacman-dev@lists.archlinux.org[].
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
dist_sysconf_DATA = makepkg.conf pacman.conf
|
||||
EXTRA_DIST = makepkg.conf.in pacman.conf.in
|
||||
|
||||
# Files that should be removed, but which Automake does not know.
|
||||
MOSTLYCLEANFILES = $(dist_sysconf_DATA)
|
||||
|
||||
SED_PROCESS = \
|
||||
$(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
|
||||
$(SED) \
|
||||
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
|
||||
-e 's|@localstatedir[@]|$(localstatedir)|g' \
|
||||
-e 's|@prefix[@]|$(prefix)|g' \
|
||||
-e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \
|
||||
-e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \
|
||||
-e 's|@PKGEXT[@]|$(PKGEXT)|g' \
|
||||
-e 's|@SRCEXT[@]|$(SRCEXT)|g' \
|
||||
-e 's|@STRIP_BINARIES[@]|$(STRIP_BINARIES)|g' \
|
||||
-e 's|@STRIP_SHARED[@]|$(STRIP_SHARED)|g' \
|
||||
-e 's|@STRIP_STATIC[@]|$(STRIP_STATIC)|g' \
|
||||
-e 's|@CARCH[@]|$(CARCH)|g' \
|
||||
-e 's|@CHOST[@]|$(CHOST)|g' \
|
||||
-e 's|@ARCHSWITCH[@]|$(ARCHSWITCH)|g' \
|
||||
-e 's|@ROOTDIR[@]|$(ROOTDIR)|g' \
|
||||
< $< > $@
|
||||
|
||||
%.conf: %.conf.in Makefile
|
||||
$(SED_PROCESS)
|
18
etc/makepkg.conf.d/fortran.conf.in
Normal file
18
etc/makepkg.conf.d/fortran.conf.in
Normal file
|
@ -0,0 +1,18 @@
|
|||
#!/hint/bash
|
||||
#
|
||||
# @sysconfdir@/makepkg.conf.d/fortran.conf
|
||||
#
|
||||
|
||||
#########################################################################
|
||||
# FORTRAN LANGUAGE SUPPORT
|
||||
#########################################################################
|
||||
|
||||
# Flags used for the Fortran compiler, similar in spirit to CFLAGS. Read
|
||||
# linkman:gfortran[1] for more details on the available flags.
|
||||
#FFLAGS="-O2 -pipe"
|
||||
#FCFLAGS="$FFLAGS"
|
||||
|
||||
# Additional compiler flags appended to `FFLAGS` and `FCFLAGS` for use in debugging. Usually
|
||||
# this would include: ``-g''. Read linkman:gfortran[1] for more details on the wide
|
||||
# variety of compiler flags available.
|
||||
#DEBUG_FFLAGS="-g"
|
17
etc/makepkg.conf.d/rust.conf.in
Normal file
17
etc/makepkg.conf.d/rust.conf.in
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/hint/bash
|
||||
#
|
||||
# @sysconfdir@/makepkg.conf.d/rust.conf
|
||||
#
|
||||
|
||||
#########################################################################
|
||||
# RUST LANGUAGE SUPPORT
|
||||
#########################################################################
|
||||
|
||||
# Flags used for the Rust compiler, similar in spirit to CFLAGS. Read
|
||||
# linkman:rustc[1] for more details on the available flags.
|
||||
#RUSTFLAGS="-C opt-level=3"
|
||||
|
||||
# Additional compiler flags appended to `RUSTFLAGS` for use in debugging.
|
||||
# Usually this would include: ``-C debuginfo=2''. Read linkman:rustc[1] for
|
||||
# more details on the available flags.
|
||||
#DEBUG_RUSTFLAGS="-C debuginfo=2"
|
|
@ -9,10 +9,10 @@
|
|||
#
|
||||
#-- The download utilities that makepkg should use to acquire sources
|
||||
# Format: 'protocol::agent'
|
||||
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
|
||||
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
|
||||
'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||
'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||
DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
|
||||
'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
|
||||
'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||
'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||
'rsync::/usr/bin/rsync --no-motd -z %u %o'
|
||||
'scp::/usr/bin/scp -C %u %o')
|
||||
|
||||
|
@ -23,7 +23,8 @@ DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
|
|||
|
||||
#-- The package required by makepkg to download VCS sources
|
||||
# Format: 'protocol::package'
|
||||
VCSCLIENTS=('bzr::bzr'
|
||||
VCSCLIENTS=('bzr::breezy'
|
||||
'fossil::fossil'
|
||||
'git::git'
|
||||
'hg::mercurial'
|
||||
'svn::subversion')
|
||||
|
@ -35,24 +36,25 @@ VCSCLIENTS=('bzr::bzr'
|
|||
CARCH="@CARCH@"
|
||||
CHOST="@CHOST@"
|
||||
|
||||
#NPROC=2
|
||||
|
||||
#-- Compiler and Linker Flags
|
||||
#CPPFLAGS=""
|
||||
#CFLAGS="-O2 -pipe"
|
||||
#CXXFLAGS="-O2 -pipe"
|
||||
#LDFLAGS=""
|
||||
#RUSTFLAGS="-C opt-level=2"
|
||||
#LTOFLAGS="-flto"
|
||||
#-- Make Flags: change this for DistCC/SMP systems
|
||||
#MAKEFLAGS="-j2"
|
||||
#-- Debugging flags
|
||||
#DEBUG_CFLAGS="-g"
|
||||
#DEBUG_CXXFLAGS="-g"
|
||||
#DEBUG_RUSTFLAGS="-C debuginfo=2"
|
||||
|
||||
#########################################################################
|
||||
# BUILD ENVIRONMENT
|
||||
#########################################################################
|
||||
#
|
||||
# Defaults: BUILDENV=(!distcc !color !ccache check !sign)
|
||||
# Makepkg defaults: BUILDENV=(!distcc !color !ccache check !sign)
|
||||
# A negated environment option will do the opposite of the comments below.
|
||||
#
|
||||
#-- distcc: Use the Distributed C/C++/ObjC compiler
|
||||
|
@ -75,7 +77,8 @@ BUILDENV=(!distcc color !ccache check !sign)
|
|||
# These are default values for the options=() settings
|
||||
#########################################################################
|
||||
#
|
||||
# Default: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug)
|
||||
# Makepkg defaults:
|
||||
# OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps)
|
||||
# A negated option will do the opposite of the comments below.
|
||||
#
|
||||
#-- strip: Strip symbols from binaries/libraries
|
||||
|
@ -86,11 +89,13 @@ BUILDENV=(!distcc color !ccache check !sign)
|
|||
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
|
||||
#-- purge: Remove files specified by PURGE_TARGETS
|
||||
#-- debug: Add debugging flags as specified in DEBUG_* variables
|
||||
#-- lto: Add compile flags for building with link time optimization
|
||||
#-- autodeps: Automatically add depends/provides
|
||||
#
|
||||
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug)
|
||||
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug !lto !autodeps)
|
||||
|
||||
#-- File integrity checks to use. Valid: md5, sha1, sha224, sha256, sha384, sha512, b2
|
||||
INTEGRITY_CHECK=(md5)
|
||||
#-- File integrity checks to use. Valid: ck, md5, sha1, sha224, sha256, sha384, sha512, b2
|
||||
INTEGRITY_CHECK=(ck)
|
||||
#-- Options to be used when stripping binaries. See `man strip' for details.
|
||||
STRIP_BINARIES="@STRIP_BINARIES@"
|
||||
#-- Options to be used when stripping shared libraries. See `man strip' for details.
|
||||
|
@ -105,6 +110,8 @@ DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
|
|||
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
|
||||
#-- Directory to store source code in for debug packages
|
||||
DBGSRCDIR="/usr/src/debug"
|
||||
#-- Prefix and directories for library autodeps
|
||||
LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32')
|
||||
|
||||
#########################################################################
|
||||
# PACKAGE OUTPUT
|
||||
|
@ -145,3 +152,10 @@ COMPRESSLZ=(lzip -c -f)
|
|||
#
|
||||
PKGEXT='@PKGEXT@'
|
||||
SRCEXT='@SRCEXT@'
|
||||
|
||||
#########################################################################
|
||||
# OTHER
|
||||
#########################################################################
|
||||
#
|
||||
#-- Command used to run pacman as root, instead of trying sudo and su
|
||||
PACMAN_AUTH=()
|
||||
|
|
|
@ -31,9 +31,12 @@ Architecture = auto
|
|||
# Misc options
|
||||
#UseSyslog
|
||||
#Color
|
||||
#TotalDownload
|
||||
#NoProgressBar
|
||||
CheckSpace
|
||||
#VerbosePkgLists
|
||||
ParallelDownloads = 5
|
||||
#DownloadUser = alpm
|
||||
#DisableSandbox
|
||||
|
||||
# PGP signature checking
|
||||
#SigLevel = Optional
|
||||
|
@ -73,4 +76,4 @@ CheckSpace
|
|||
# tips on creating your own repositories.
|
||||
#[custom]
|
||||
#SigLevel = Optional TrustAll
|
||||
#Server = file:///home/custompkgs
|
||||
#Server = file:///home/packages
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
SUBDIRS = po
|
||||
|
||||
EXTRA_DIST = meson.build po/meson.build
|
||||
|
||||
lib_LTLIBRARIES = libalpm.la
|
||||
include_HEADERS = alpm_list.h alpm.h
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-imacros $(top_builddir)/config.h \
|
||||
-DSYSHOOKDIR=\"@datarootdir@/libalpm/hooks/\" \
|
||||
-DLOCALEDIR=\"@localedir@\"
|
||||
|
||||
AM_CFLAGS = -pedantic -D_GNU_SOURCE $(WARNING_CFLAGS)
|
||||
|
||||
if ENABLE_VISIBILITY_CC
|
||||
if DARWIN
|
||||
AM_CFLAGS += -fvisibility=hidden
|
||||
else
|
||||
AM_CFLAGS += -fvisibility=internal
|
||||
endif
|
||||
endif
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libalpm.pc
|
||||
|
||||
libalpm_la_SOURCES = \
|
||||
add.h add.c \
|
||||
alpm.h alpm.c \
|
||||
alpm_list.h alpm_list.c \
|
||||
backup.h backup.c \
|
||||
base64.h base64.c \
|
||||
be_local.c \
|
||||
be_package.c \
|
||||
be_sync.c \
|
||||
conflict.h conflict.c \
|
||||
db.h db.c \
|
||||
deps.h deps.c \
|
||||
diskspace.h diskspace.c \
|
||||
dload.h dload.c \
|
||||
error.c \
|
||||
filelist.h filelist.c \
|
||||
graph.h graph.c \
|
||||
group.h group.c \
|
||||
handle.h handle.c \
|
||||
hook.h hook.c \
|
||||
ini.h ini.c \
|
||||
libarchive-compat.h \
|
||||
log.h log.c \
|
||||
package.h package.c \
|
||||
pkghash.h pkghash.c \
|
||||
rawstr.c \
|
||||
remove.h remove.c \
|
||||
signing.c signing.h \
|
||||
sync.h sync.c \
|
||||
trans.h trans.c \
|
||||
util.h util.c \
|
||||
util-common.h util-common.c \
|
||||
version.c
|
||||
|
||||
libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO)
|
||||
|
||||
libalpm_la_CFLAGS = \
|
||||
$(AM_CFLAGS) \
|
||||
$(GPGME_CFLAGS) \
|
||||
$(LIBARCHIVE_CFLAGS) \
|
||||
$(LIBCURL_CFLAGS) \
|
||||
$(LIBSSL_CFLAGS) \
|
||||
$(NETTLE_CFLAGS)
|
||||
|
||||
libalpm_la_LIBADD = \
|
||||
$(LTLIBINTL) \
|
||||
$(GPGME_LIBS) \
|
||||
$(LIBARCHIVE_LIBS) \
|
||||
$(LIBCURL_LIBS) \
|
||||
$(LIBSSL_LIBS) \
|
||||
$(NETTLE_LIBS)
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* add.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -47,7 +47,6 @@
|
|||
#include "remove.h"
|
||||
#include "handle.h"
|
||||
|
||||
/** Add a package to the transaction. */
|
||||
int SYMEXPORT alpm_add_pkg(alpm_handle_t *handle, alpm_pkg_t *pkg)
|
||||
{
|
||||
const char *pkgname, *pkgver;
|
||||
|
@ -120,6 +119,7 @@ static int perform_extraction(alpm_handle_t *handle, struct archive *archive,
|
|||
ARCHIVE_EXTRACT_PERM |
|
||||
ARCHIVE_EXTRACT_TIME |
|
||||
ARCHIVE_EXTRACT_UNLINK |
|
||||
ARCHIVE_EXTRACT_XATTR |
|
||||
ARCHIVE_EXTRACT_SECURE_SYMLINKS;
|
||||
|
||||
archive_entry_set_pathname(entry, filename);
|
||||
|
@ -262,7 +262,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
|
|||
"filesystem: %o package: %o\n"), filename, lsbuf.st_mode & mask,
|
||||
entrymode & mask);
|
||||
alpm_logaction(handle, ALPM_CALLER_PREFIX,
|
||||
"warning: directory permissions differ on %s\n"
|
||||
"warning: directory permissions differ on %s, "
|
||||
"filesystem: %o package: %o\n", filename, lsbuf.st_mode & mask,
|
||||
entrymode & mask);
|
||||
}
|
||||
|
@ -277,7 +277,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
|
|||
"filesystem: %u:%u package: %u:%u\n"), filename,
|
||||
lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
|
||||
alpm_logaction(handle, ALPM_CALLER_PREFIX,
|
||||
"warning: directory ownership differs on %s\n"
|
||||
"warning: directory ownership differs on %s, "
|
||||
"filesystem: %u:%u package: %u:%u\n", filename,
|
||||
lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
|
||||
}
|
||||
|
@ -415,7 +415,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
|
|||
static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
||||
size_t pkg_current, size_t pkg_count)
|
||||
{
|
||||
int i, ret = 0, errors = 0;
|
||||
int ret = 0, errors = 0;
|
||||
int is_upgrade = 0;
|
||||
alpm_pkg_t *oldpkg = NULL;
|
||||
alpm_db_t *db = handle->db_local;
|
||||
|
@ -484,8 +484,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
|||
/* set up fake remove transaction */
|
||||
if(_alpm_remove_single_package(handle, oldpkg, newpkg, 0, 0) == -1) {
|
||||
handle->pm_errno = ALPM_ERR_TRANS_ABORT;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -496,15 +495,13 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
|||
"error: could not create database entry %s-%s\n",
|
||||
newpkg->name, newpkg->version);
|
||||
handle->pm_errno = ALPM_ERR_DB_WRITE;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd = _alpm_open_archive(db->handle, pkgfile, &buf,
|
||||
&archive, ALPM_ERR_PKG_OPEN);
|
||||
if(fd < 0) {
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* save the cwd so we can restore it later */
|
||||
|
@ -522,8 +519,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
|||
close(cwdfd);
|
||||
}
|
||||
close(fd);
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(trans->flags & ALPM_TRANS_FLAG_DBONLY) {
|
||||
|
@ -542,7 +538,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
|||
/* call PROGRESS once with 0 percent, as we sort-of skip that here */
|
||||
PROGRESS(handle, progress, newpkg->name, 0, pkg_count, pkg_current);
|
||||
|
||||
for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) {
|
||||
while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) {
|
||||
int percent;
|
||||
|
||||
if(newpkg->size != 0) {
|
||||
|
@ -607,8 +603,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
|||
"error: could not update database entry %s-%s\n",
|
||||
newpkg->name, newpkg->version);
|
||||
handle->pm_errno = ALPM_ERR_DB_WRITE;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(_alpm_db_add_pkgincache(db, newpkg) == -1) {
|
||||
|
@ -654,7 +649,6 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
|||
event.type = ALPM_EVENT_PACKAGE_OPERATION_DONE;
|
||||
EVENT(handle, &event);
|
||||
|
||||
cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* add.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* alpm.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
|
||||
|
@ -25,6 +25,9 @@
|
|||
#include <curl/curl.h>
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#include <pwd.h>
|
||||
|
||||
/* libalpm */
|
||||
#include "alpm.h"
|
||||
#include "alpm_list.h"
|
||||
|
@ -32,26 +35,14 @@
|
|||
#include "log.h"
|
||||
#include "util.h"
|
||||
|
||||
/** \addtogroup alpm_interface Interface Functions
|
||||
* @brief Functions to initialize and release libalpm
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Initializes the library.
|
||||
* Creates handle, connects to database and creates lockfile.
|
||||
* This must be called before any other functions are called.
|
||||
* @param root the root path for all filesystem operations
|
||||
* @param dbpath the absolute path to the libalpm database
|
||||
* @param err an optional variable to hold any error return codes
|
||||
* @return a context handle on success, NULL on error, err will be set if provided
|
||||
*/
|
||||
alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
|
||||
alpm_errno_t *err)
|
||||
{
|
||||
alpm_errno_t myerr;
|
||||
const char *lf = "db.lck";
|
||||
char *hookdir;
|
||||
size_t lockfilelen;
|
||||
size_t hookdirlen, lockfilelen;
|
||||
struct passwd const *pw = NULL;
|
||||
alpm_handle_t *myhandle = _alpm_handle_new();
|
||||
|
||||
if(myhandle == NULL) {
|
||||
|
@ -67,8 +58,9 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
|
|||
/* to concatenate myhandle->root (ends with a slash) with SYSHOOKDIR (starts
|
||||
* with a slash) correctly, we skip SYSHOOKDIR[0]; the regular +1 therefore
|
||||
* disappears from the allocation */
|
||||
MALLOC(hookdir, strlen(myhandle->root) + strlen(SYSHOOKDIR), goto nomem);
|
||||
sprintf(hookdir, "%s%s", myhandle->root, &SYSHOOKDIR[1]);
|
||||
hookdirlen = strlen(myhandle->root) + strlen(SYSHOOKDIR);
|
||||
MALLOC(hookdir, hookdirlen, goto nomem);
|
||||
snprintf(hookdir, hookdirlen, "%s%s", myhandle->root, &SYSHOOKDIR[1]);
|
||||
myhandle->hookdirs = alpm_list_add(NULL, hookdir);
|
||||
|
||||
/* set default database extension */
|
||||
|
@ -83,6 +75,17 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
myhandle->curlm = curl_multi_init();
|
||||
#endif
|
||||
|
||||
myhandle->parallel_downloads = 1;
|
||||
|
||||
/* set default sandboxuser */
|
||||
ASSERT((pw = getpwuid(0)) != NULL, myerr = errno; goto cleanup);
|
||||
STRDUP(myhandle->sandboxuser, pw->pw_name, goto nomem);
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
bindtextdomain("libalpm", LOCALEDIR);
|
||||
#endif
|
||||
|
@ -99,59 +102,23 @@ cleanup:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/** Release the library.
|
||||
* Disconnects from the database, removes handle and lockfile
|
||||
* This should be the last alpm call you make.
|
||||
* After this returns, handle should be considered invalid and cannot be reused
|
||||
* in any way.
|
||||
* @param myhandle the context handle
|
||||
* @return 0 on success, -1 on error
|
||||
*/
|
||||
/* check current state and free all resources including storage locks */
|
||||
int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
|
||||
{
|
||||
int ret = 0;
|
||||
alpm_db_t *db;
|
||||
|
||||
CHECK_HANDLE(myhandle, return -1);
|
||||
|
||||
/* close local database */
|
||||
db = myhandle->db_local;
|
||||
if(db) {
|
||||
db->ops->unregister(db);
|
||||
myhandle->db_local = NULL;
|
||||
}
|
||||
|
||||
if(alpm_unregister_all_syncdbs(myhandle) == -1) {
|
||||
ret = -1;
|
||||
}
|
||||
ASSERT(myhandle->trans == NULL, RET_ERR(myhandle, ALPM_ERR_TRANS_NOT_NULL, -1));
|
||||
|
||||
_alpm_handle_unlock(myhandle);
|
||||
_alpm_handle_free(myhandle);
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
curl_global_cleanup();
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/** @defgroup alpm_misc Miscellaneous Functions
|
||||
* @brief Various libalpm functions
|
||||
*/
|
||||
|
||||
/** Get the version of library.
|
||||
* @return the library version, e.g. "6.0.4"
|
||||
* */
|
||||
const char SYMEXPORT *alpm_version(void)
|
||||
{
|
||||
return LIB_VERSION;
|
||||
}
|
||||
|
||||
/** Get the capabilities of the library.
|
||||
* @return a bitmask of the capabilities
|
||||
* */
|
||||
int SYMEXPORT alpm_capabilities(void)
|
||||
{
|
||||
return 0
|
||||
|
|
2493
lib/libalpm/alpm.h
2493
lib/libalpm/alpm.h
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* alpm_list.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -30,25 +30,9 @@
|
|||
|
||||
/* check exported library symbols with: nm -C -D <lib> */
|
||||
#define SYMEXPORT __attribute__((visibility("default")))
|
||||
#define SYMHIDDEN __attribute__((visibility("internal")))
|
||||
|
||||
/**
|
||||
* @addtogroup alpm_list List Functions
|
||||
* @brief Functions to manipulate alpm_list_t lists.
|
||||
*
|
||||
* These functions are designed to create, destroy, and modify lists of
|
||||
* type alpm_list_t. This is an internal list type used by libalpm that is
|
||||
* publicly exposed for use by frontends if desired.
|
||||
*
|
||||
* @{ */
|
||||
|
||||
/* Allocation */
|
||||
|
||||
/**
|
||||
* @brief Free a list, but not the contained data.
|
||||
*
|
||||
* @param list the list to free
|
||||
*/
|
||||
void SYMEXPORT alpm_list_free(alpm_list_t *list)
|
||||
{
|
||||
alpm_list_t *it = list;
|
||||
|
@ -60,12 +44,6 @@ void SYMEXPORT alpm_list_free(alpm_list_t *list)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Free the internal data of a list structure.
|
||||
*
|
||||
* @param list the list to free
|
||||
* @param fn a free function for the internal data
|
||||
*/
|
||||
void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
|
||||
{
|
||||
alpm_list_t *it = list;
|
||||
|
@ -83,28 +61,12 @@ void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
|
|||
|
||||
/* Mutators */
|
||||
|
||||
/**
|
||||
* @brief Add a new item to the end of the list.
|
||||
*
|
||||
* @param list the list to add to
|
||||
* @param data the new item to be added to the list
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
|
||||
{
|
||||
alpm_list_append(&list, data);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Add a new item to the end of the list.
|
||||
*
|
||||
* @param list the list to add to
|
||||
* @param data the new item to be added to the list
|
||||
*
|
||||
* @return the newly added item
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_append(alpm_list_t **list, void *data)
|
||||
{
|
||||
alpm_list_t *ptr;
|
||||
|
@ -131,14 +93,6 @@ alpm_list_t SYMEXPORT *alpm_list_append(alpm_list_t **list, void *data)
|
|||
return ptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Duplicate and append a string to a list.
|
||||
*
|
||||
* @param list the list to append to
|
||||
* @param data the string to duplicate and append
|
||||
*
|
||||
* @return the newly added item
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_append_strdup(alpm_list_t **list, const char *data)
|
||||
{
|
||||
alpm_list_t *ret;
|
||||
|
@ -151,15 +105,6 @@ alpm_list_t SYMEXPORT *alpm_list_append_strdup(alpm_list_t **list, const char *d
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Add items to a list in sorted order.
|
||||
*
|
||||
* @param list the list to add to
|
||||
* @param data the new item to be added to the list
|
||||
* @param fn the comparison function to use to determine order
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn)
|
||||
{
|
||||
if(!fn || !list) {
|
||||
|
@ -202,17 +147,6 @@ alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Join two lists.
|
||||
* The two lists must be independent. Do not free the original lists after
|
||||
* calling this function, as this is not a copy operation. The list pointers
|
||||
* passed in should be considered invalid after calling this function.
|
||||
*
|
||||
* @param first the first list
|
||||
* @param second the second list
|
||||
*
|
||||
* @return the resultant joined list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
|
||||
{
|
||||
alpm_list_t *tmp;
|
||||
|
@ -235,15 +169,6 @@ alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
|
|||
return first;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Merge the two sorted sublists into one sorted list.
|
||||
*
|
||||
* @param left the first list
|
||||
* @param right the second list
|
||||
* @param fn comparison function for determining merge order
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right,
|
||||
alpm_list_fn_cmp fn)
|
||||
{
|
||||
|
@ -305,15 +230,6 @@ alpm_list_t SYMEXPORT *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right,
|
|||
return newlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sort a list of size `n` using mergesort algorithm.
|
||||
*
|
||||
* @param list the list to sort
|
||||
* @param n the size of the list
|
||||
* @param fn the comparison function for determining order
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_msort(alpm_list_t *list, size_t n,
|
||||
alpm_list_fn_cmp fn)
|
||||
{
|
||||
|
@ -339,15 +255,6 @@ alpm_list_t SYMEXPORT *alpm_list_msort(alpm_list_t *list, size_t n,
|
|||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Remove an item from the list.
|
||||
* item is not freed; this is the responsibility of the caller.
|
||||
*
|
||||
* @param haystack the list to remove the item from
|
||||
* @param item the item to remove from the list
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_remove_item(alpm_list_t *haystack,
|
||||
alpm_list_t *item)
|
||||
{
|
||||
|
@ -385,17 +292,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove_item(alpm_list_t *haystack,
|
|||
return haystack;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Remove an item from the list.
|
||||
*
|
||||
* @param haystack the list to remove the item from
|
||||
* @param needle the data member of the item we're removing
|
||||
* @param fn the comparison function for searching
|
||||
* @param data output parameter containing data of the removed item
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack,
|
||||
const void *needle, alpm_list_fn_cmp fn, void **data)
|
||||
{
|
||||
|
@ -430,15 +326,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack,
|
|||
return haystack;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Remove a string from a list.
|
||||
*
|
||||
* @param haystack the list to remove the item from
|
||||
* @param needle the data member of the item we're removing
|
||||
* @param data output parameter containing data of the removed item
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_remove_str(alpm_list_t *haystack,
|
||||
const char *needle, char **data)
|
||||
{
|
||||
|
@ -446,15 +333,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove_str(alpm_list_t *haystack,
|
|||
(alpm_list_fn_cmp)strcmp, (void **)data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create a new list without any duplicates.
|
||||
*
|
||||
* This does NOT copy data members.
|
||||
*
|
||||
* @param list the list to copy
|
||||
*
|
||||
* @return a new list containing non-duplicate items
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list)
|
||||
{
|
||||
const alpm_list_t *lp = list;
|
||||
|
@ -471,13 +349,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list)
|
|||
return newlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Copy a string list, including data.
|
||||
*
|
||||
* @param list the list to copy
|
||||
*
|
||||
* @return a copy of the original list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_strdup(const alpm_list_t *list)
|
||||
{
|
||||
const alpm_list_t *lp = list;
|
||||
|
@ -492,13 +363,6 @@ alpm_list_t SYMEXPORT *alpm_list_strdup(const alpm_list_t *list)
|
|||
return newlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Copy a list, without copying data.
|
||||
*
|
||||
* @param list the list to copy
|
||||
*
|
||||
* @return a copy of the original list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list)
|
||||
{
|
||||
const alpm_list_t *lp = list;
|
||||
|
@ -513,16 +377,6 @@ alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list)
|
|||
return newlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Copy a list and copy the data.
|
||||
* Note that the data elements to be copied should not contain pointers
|
||||
* and should also be of constant size.
|
||||
*
|
||||
* @param list the list to copy
|
||||
* @param size the size of each data element
|
||||
*
|
||||
* @return a copy of the original list, data copied as well
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
|
||||
size_t size)
|
||||
{
|
||||
|
@ -546,13 +400,6 @@ alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
|
|||
return newlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create a new list in reverse order.
|
||||
*
|
||||
* @param list the list to copy
|
||||
*
|
||||
* @return a new list in reverse order
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
|
||||
{
|
||||
const alpm_list_t *lp;
|
||||
|
@ -570,6 +417,7 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
|
|||
while(lp) {
|
||||
if(alpm_list_append(&newlist, lp->data) == NULL) {
|
||||
alpm_list_free(newlist);
|
||||
list->prev = backup;
|
||||
return NULL;
|
||||
}
|
||||
lp = lp->prev;
|
||||
|
@ -580,14 +428,6 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
|
|||
|
||||
/* Accessors */
|
||||
|
||||
/**
|
||||
* @brief Return nth element from list (starting from 0).
|
||||
*
|
||||
* @param list the list
|
||||
* @param n the index of the item to find (n < alpm_list_count(list) IS needed)
|
||||
*
|
||||
* @return an alpm_list_t node for index `n`
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, size_t n)
|
||||
{
|
||||
const alpm_list_t *i = list;
|
||||
|
@ -597,13 +437,6 @@ alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, size_t n)
|
|||
return (alpm_list_t *)i;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the next element of a list.
|
||||
*
|
||||
* @param node the list node
|
||||
*
|
||||
* @return the next element, or NULL when no more elements exist
|
||||
*/
|
||||
inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
|
||||
{
|
||||
if(node) {
|
||||
|
@ -613,13 +446,6 @@ inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the previous element of a list.
|
||||
*
|
||||
* @param list the list head
|
||||
*
|
||||
* @return the previous element, or NULL when no previous element exist
|
||||
*/
|
||||
inline alpm_list_t SYMEXPORT *alpm_list_previous(const alpm_list_t *list)
|
||||
{
|
||||
if(list && list->prev->next) {
|
||||
|
@ -629,13 +455,6 @@ inline alpm_list_t SYMEXPORT *alpm_list_previous(const alpm_list_t *list)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the last item in the list.
|
||||
*
|
||||
* @param list the list
|
||||
*
|
||||
* @return the last element in the list
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_last(const alpm_list_t *list)
|
||||
{
|
||||
if(list) {
|
||||
|
@ -647,13 +466,6 @@ alpm_list_t SYMEXPORT *alpm_list_last(const alpm_list_t *list)
|
|||
|
||||
/* Misc */
|
||||
|
||||
/**
|
||||
* @brief Get the number of items in a list.
|
||||
*
|
||||
* @param list the list
|
||||
*
|
||||
* @return the number of list items
|
||||
*/
|
||||
size_t SYMEXPORT alpm_list_count(const alpm_list_t *list)
|
||||
{
|
||||
size_t i = 0;
|
||||
|
@ -665,15 +477,6 @@ size_t SYMEXPORT alpm_list_count(const alpm_list_t *list)
|
|||
return i;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Find an item in a list.
|
||||
*
|
||||
* @param needle the item to search
|
||||
* @param haystack the list
|
||||
* @param fn the comparison function for searching (!= NULL)
|
||||
*
|
||||
* @return `needle` if found, NULL otherwise
|
||||
*/
|
||||
void SYMEXPORT *alpm_list_find(const alpm_list_t *haystack, const void *needle,
|
||||
alpm_list_fn_cmp fn)
|
||||
{
|
||||
|
@ -693,30 +496,12 @@ static int ptr_cmp(const void *p, const void *q)
|
|||
return (p != q);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Find an item in a list.
|
||||
*
|
||||
* Search for the item whose data matches that of the `needle`.
|
||||
*
|
||||
* @param needle the data to search for (== comparison)
|
||||
* @param haystack the list
|
||||
*
|
||||
* @return `needle` if found, NULL otherwise
|
||||
*/
|
||||
void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack,
|
||||
const void *needle)
|
||||
{
|
||||
return alpm_list_find(haystack, needle, ptr_cmp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Find a string in a list.
|
||||
*
|
||||
* @param needle the string to search for
|
||||
* @param haystack the list
|
||||
*
|
||||
* @return `needle` if found, NULL otherwise
|
||||
*/
|
||||
char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack,
|
||||
const char *needle)
|
||||
{
|
||||
|
@ -724,20 +509,63 @@ char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack,
|
|||
(alpm_list_fn_cmp)strcmp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Find the differences between list `left` and list `right`
|
||||
*
|
||||
* The two lists must be sorted. Items only in list `left` are added to the
|
||||
* `onlyleft` list. Items only in list `right` are added to the `onlyright`
|
||||
* list.
|
||||
*
|
||||
* @param left the first list
|
||||
* @param right the second list
|
||||
* @param fn the comparison function
|
||||
* @param onlyleft pointer to the first result list
|
||||
* @param onlyright pointer to the second result list
|
||||
*
|
||||
*/
|
||||
int SYMEXPORT alpm_list_cmp_unsorted(const alpm_list_t *left,
|
||||
const alpm_list_t *right, alpm_list_fn_cmp fn)
|
||||
{
|
||||
const alpm_list_t *l = left;
|
||||
const alpm_list_t *r = right;
|
||||
int *matched;
|
||||
|
||||
/* short circuiting length comparison */
|
||||
while(l && r) {
|
||||
l = l->next;
|
||||
r = r->next;
|
||||
}
|
||||
if(l || r) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* faster comparison for if the lists happen to be in the same order */
|
||||
while(left && fn(left->data, right->data) == 0) {
|
||||
left = left->next;
|
||||
right = right->next;
|
||||
}
|
||||
if(!left) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
matched = calloc(alpm_list_count(right), sizeof(int));
|
||||
if(matched == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
for(l = left; l; l = l->next) {
|
||||
int found = 0;
|
||||
int n = 0;
|
||||
|
||||
for(r = right; r; r = r->next, n++) {
|
||||
/* make sure we don't match the same value twice */
|
||||
if(matched[n]) {
|
||||
continue;
|
||||
}
|
||||
if(fn(l->data, r->data) == 0) {
|
||||
found = 1;
|
||||
matched[n] = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!found) {
|
||||
free(matched);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
free(matched);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void SYMEXPORT alpm_list_diff_sorted(const alpm_list_t *left,
|
||||
const alpm_list_t *right, alpm_list_fn_cmp fn,
|
||||
alpm_list_t **onlyleft, alpm_list_t **onlyright)
|
||||
|
@ -782,15 +610,6 @@ void SYMEXPORT alpm_list_diff_sorted(const alpm_list_t *left,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Find the items in list `lhs` that are not present in list `rhs`.
|
||||
*
|
||||
* @param lhs the first list
|
||||
* @param rhs the second list
|
||||
* @param fn the comparison function
|
||||
*
|
||||
* @return a list containing all items in `lhs` not present in `rhs`
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_list_diff(const alpm_list_t *lhs,
|
||||
const alpm_list_t *rhs, alpm_list_fn_cmp fn)
|
||||
{
|
||||
|
@ -809,17 +628,6 @@ alpm_list_t SYMEXPORT *alpm_list_diff(const alpm_list_t *lhs,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Copy a list and data into a standard C array of fixed length.
|
||||
* Note that the data elements are shallow copied so any contained pointers
|
||||
* will point to the original data.
|
||||
*
|
||||
* @param list the list to copy
|
||||
* @param n the size of the list
|
||||
* @param size the size of each data element
|
||||
*
|
||||
* @return an array version of the original list, data copied as well
|
||||
*/
|
||||
void SYMEXPORT *alpm_list_to_array(const alpm_list_t *list, size_t n,
|
||||
size_t size)
|
||||
{
|
||||
|
@ -840,5 +648,3 @@ void SYMEXPORT *alpm_list_to_array(const alpm_list_t *list, size_t n,
|
|||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* alpm_list.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -17,6 +17,8 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef ALPM_LIST_H
|
||||
#define ALPM_LIST_H
|
||||
|
||||
|
@ -31,63 +33,362 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief Linked list type used by libalpm.
|
||||
* @ingroup libalpm
|
||||
* @addtogroup libalpm_list libalpm_list(3)
|
||||
* @brief Functions to manipulate alpm_list_t lists.
|
||||
*
|
||||
* These functions are designed to create, destroy, and modify lists of
|
||||
* type alpm_list_t. This is an internal list type used by libalpm that is
|
||||
* publicly exposed for use by frontends if desired.
|
||||
*
|
||||
* It is exposed so front ends can use it to prevent the need to reimplement
|
||||
* lists of their own; however, it is not required that the front end uses
|
||||
* it.
|
||||
* @{
|
||||
*/
|
||||
typedef struct __alpm_list_t {
|
||||
|
||||
/** A doubly linked list */
|
||||
typedef struct _alpm_list_t {
|
||||
/** data held by the list node */
|
||||
void *data;
|
||||
/** pointer to the previous node */
|
||||
struct __alpm_list_t *prev;
|
||||
struct _alpm_list_t *prev;
|
||||
/** pointer to the next node */
|
||||
struct __alpm_list_t *next;
|
||||
struct _alpm_list_t *next;
|
||||
} alpm_list_t;
|
||||
|
||||
/** Frees a list and its contents */
|
||||
#define FREELIST(p) do { alpm_list_free_inner(p, free); alpm_list_free(p); p = NULL; } while(0)
|
||||
|
||||
typedef void (*alpm_list_fn_free)(void *); /* item deallocation callback */
|
||||
typedef int (*alpm_list_fn_cmp)(const void *, const void *); /* item comparison callback */
|
||||
/** item deallocation callback.
|
||||
* @param item the item to free
|
||||
*/
|
||||
typedef void (*alpm_list_fn_free)(void * item);
|
||||
|
||||
/** item comparison callback */
|
||||
typedef int (*alpm_list_fn_cmp)(const void *, const void *);
|
||||
|
||||
/* allocation */
|
||||
|
||||
/** Free a list, but not the contained data.
|
||||
*
|
||||
* @param list the list to free
|
||||
*/
|
||||
void alpm_list_free(alpm_list_t *list);
|
||||
|
||||
/** Free the internal data of a list structure but not the list itself.
|
||||
*
|
||||
* @param list the list to free
|
||||
* @param fn a free function for the internal data
|
||||
*/
|
||||
void alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn);
|
||||
|
||||
/* item mutators */
|
||||
|
||||
/** Add a new item to the end of the list.
|
||||
*
|
||||
* @param list the list to add to
|
||||
* @param data the new item to be added to the list
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t *alpm_list_add(alpm_list_t *list, void *data);
|
||||
|
||||
/**
|
||||
* @brief Add a new item to the end of the list.
|
||||
*
|
||||
* @param list the list to add to
|
||||
* @param data the new item to be added to the list
|
||||
*
|
||||
* @return the newly added item
|
||||
*/
|
||||
alpm_list_t *alpm_list_append(alpm_list_t **list, void *data);
|
||||
|
||||
/**
|
||||
* @brief Duplicate and append a string to a list.
|
||||
*
|
||||
* @param list the list to append to
|
||||
* @param data the string to duplicate and append
|
||||
*
|
||||
* @return the newly added item
|
||||
*/
|
||||
alpm_list_t *alpm_list_append_strdup(alpm_list_t **list, const char *data);
|
||||
|
||||
/**
|
||||
* @brief Add items to a list in sorted order.
|
||||
*
|
||||
* @param list the list to add to
|
||||
* @param data the new item to be added to the list
|
||||
* @param fn the comparison function to use to determine order
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn);
|
||||
|
||||
/**
|
||||
* @brief Join two lists.
|
||||
* The two lists must be independent. Do not free the original lists after
|
||||
* calling this function, as this is not a copy operation. The list pointers
|
||||
* passed in should be considered invalid after calling this function.
|
||||
*
|
||||
* @param first the first list
|
||||
* @param second the second list
|
||||
*
|
||||
* @return the resultant joined list
|
||||
*/
|
||||
alpm_list_t *alpm_list_join(alpm_list_t *first, alpm_list_t *second);
|
||||
|
||||
/**
|
||||
* @brief Merge the two sorted sublists into one sorted list.
|
||||
*
|
||||
* @param left the first list
|
||||
* @param right the second list
|
||||
* @param fn comparison function for determining merge order
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn);
|
||||
|
||||
/**
|
||||
* @brief Sort a list of size `n` using mergesort algorithm.
|
||||
*
|
||||
* @param list the list to sort
|
||||
* @param n the size of the list
|
||||
* @param fn the comparison function for determining order
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t *alpm_list_msort(alpm_list_t *list, size_t n, alpm_list_fn_cmp fn);
|
||||
|
||||
/**
|
||||
* @brief Remove an item from the list.
|
||||
* item is not freed; this is the responsibility of the caller.
|
||||
*
|
||||
* @param haystack the list to remove the item from
|
||||
* @param item the item to remove from the list
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t *alpm_list_remove_item(alpm_list_t *haystack, alpm_list_t *item);
|
||||
|
||||
/**
|
||||
* @brief Remove an item from the list.
|
||||
*
|
||||
* @param haystack the list to remove the item from
|
||||
* @param needle the data member of the item we're removing
|
||||
* @param fn the comparison function for searching
|
||||
* @param data output parameter containing data of the removed item
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data);
|
||||
|
||||
/**
|
||||
* @brief Remove a string from a list.
|
||||
*
|
||||
* @param haystack the list to remove the item from
|
||||
* @param needle the data member of the item we're removing
|
||||
* @param data output parameter containing data of the removed item
|
||||
*
|
||||
* @return the resultant list
|
||||
*/
|
||||
alpm_list_t *alpm_list_remove_str(alpm_list_t *haystack, const char *needle, char **data);
|
||||
|
||||
/**
|
||||
* @brief Create a new list without any duplicates.
|
||||
*
|
||||
* This does NOT copy data members.
|
||||
*
|
||||
* @param list the list to copy
|
||||
*
|
||||
* @return a new list containing non-duplicate items
|
||||
*/
|
||||
alpm_list_t *alpm_list_remove_dupes(const alpm_list_t *list);
|
||||
|
||||
/**
|
||||
* @brief Copy a string list, including data.
|
||||
*
|
||||
* @param list the list to copy
|
||||
*
|
||||
* @return a copy of the original list
|
||||
*/
|
||||
alpm_list_t *alpm_list_strdup(const alpm_list_t *list);
|
||||
|
||||
/**
|
||||
* @brief Copy a list, without copying data.
|
||||
*
|
||||
* @param list the list to copy
|
||||
*
|
||||
* @return a copy of the original list
|
||||
*/
|
||||
alpm_list_t *alpm_list_copy(const alpm_list_t *list);
|
||||
|
||||
/**
|
||||
* @brief Copy a list and copy the data.
|
||||
* Note that the data elements to be copied should not contain pointers
|
||||
* and should also be of constant size.
|
||||
*
|
||||
* @param list the list to copy
|
||||
* @param size the size of each data element
|
||||
*
|
||||
* @return a copy of the original list, data copied as well
|
||||
*/
|
||||
alpm_list_t *alpm_list_copy_data(const alpm_list_t *list, size_t size);
|
||||
|
||||
/**
|
||||
* @brief Create a new list in reverse order.
|
||||
*
|
||||
* @param list the list to copy
|
||||
*
|
||||
* @return a new list in reverse order
|
||||
*/
|
||||
alpm_list_t *alpm_list_reverse(alpm_list_t *list);
|
||||
|
||||
/* item accessors */
|
||||
|
||||
|
||||
/**
|
||||
* @brief Return nth element from list (starting from 0).
|
||||
*
|
||||
* @param list the list
|
||||
* @param n the index of the item to find (n < alpm_list_count(list) IS needed)
|
||||
*
|
||||
* @return an alpm_list_t node for index `n`
|
||||
*/
|
||||
alpm_list_t *alpm_list_nth(const alpm_list_t *list, size_t n);
|
||||
|
||||
/**
|
||||
* @brief Get the next element of a list.
|
||||
*
|
||||
* @param list the list node
|
||||
*
|
||||
* @return the next element, or NULL when no more elements exist
|
||||
*/
|
||||
alpm_list_t *alpm_list_next(const alpm_list_t *list);
|
||||
|
||||
/**
|
||||
* @brief Get the previous element of a list.
|
||||
*
|
||||
* @param list the list head
|
||||
*
|
||||
* @return the previous element, or NULL when no previous element exist
|
||||
*/
|
||||
alpm_list_t *alpm_list_previous(const alpm_list_t *list);
|
||||
|
||||
/**
|
||||
* @brief Get the last item in the list.
|
||||
*
|
||||
* @param list the list
|
||||
*
|
||||
* @return the last element in the list
|
||||
*/
|
||||
alpm_list_t *alpm_list_last(const alpm_list_t *list);
|
||||
|
||||
/* misc */
|
||||
|
||||
/**
|
||||
* @brief Get the number of items in a list.
|
||||
*
|
||||
* @param list the list
|
||||
*
|
||||
* @return the number of list items
|
||||
*/
|
||||
size_t alpm_list_count(const alpm_list_t *list);
|
||||
|
||||
/**
|
||||
* @brief Find an item in a list.
|
||||
*
|
||||
* @param needle the item to search
|
||||
* @param haystack the list
|
||||
* @param fn the comparison function for searching (!= NULL)
|
||||
*
|
||||
* @return `needle` if found, NULL otherwise
|
||||
*/
|
||||
void *alpm_list_find(const alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn);
|
||||
|
||||
/**
|
||||
* @brief Find an item in a list.
|
||||
*
|
||||
* Search for the item whose data matches that of the `needle`.
|
||||
*
|
||||
* @param needle the data to search for (== comparison)
|
||||
* @param haystack the list
|
||||
*
|
||||
* @return `needle` if found, NULL otherwise
|
||||
*/
|
||||
void *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle);
|
||||
|
||||
/**
|
||||
* @brief Find a string in a list.
|
||||
*
|
||||
* @param needle the string to search for
|
||||
* @param haystack the list
|
||||
*
|
||||
* @return `needle` if found, NULL otherwise
|
||||
*/
|
||||
char *alpm_list_find_str(const alpm_list_t *haystack, const char *needle);
|
||||
alpm_list_t *alpm_list_diff(const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Check if two lists contain the same data, ignoring order.
|
||||
*
|
||||
* Lists are considered equal if they both contain the same data regardless
|
||||
* of order.
|
||||
*
|
||||
* @param left the first list
|
||||
* @param right the second list
|
||||
* @param fn the comparison function
|
||||
*
|
||||
* @return 1 if the lists are equal, 0 if not equal, -1 on error.
|
||||
*/
|
||||
int alpm_list_cmp_unsorted(const alpm_list_t *left,
|
||||
const alpm_list_t *right, alpm_list_fn_cmp fn);
|
||||
|
||||
/**
|
||||
* @brief Find the differences between list `left` and list `right`
|
||||
*
|
||||
* The two lists must be sorted. Items only in list `left` are added to the
|
||||
* `onlyleft` list. Items only in list `right` are added to the `onlyright`
|
||||
* list.
|
||||
*
|
||||
* @param left the first list
|
||||
* @param right the second list
|
||||
* @param fn the comparison function
|
||||
* @param onlyleft pointer to the first result list
|
||||
* @param onlyright pointer to the second result list
|
||||
*
|
||||
*/
|
||||
void alpm_list_diff_sorted(const alpm_list_t *left, const alpm_list_t *right,
|
||||
alpm_list_fn_cmp fn, alpm_list_t **onlyleft, alpm_list_t **onlyright);
|
||||
|
||||
/**
|
||||
* @brief Find the items in list `lhs` that are not present in list `rhs`.
|
||||
*
|
||||
* @param lhs the first list
|
||||
* @param rhs the second list
|
||||
* @param fn the comparison function
|
||||
*
|
||||
* @return a list containing all items in `lhs` not present in `rhs`
|
||||
*/
|
||||
|
||||
alpm_list_t *alpm_list_diff(const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn);
|
||||
|
||||
/**
|
||||
* @brief Copy a list and data into a standard C array of fixed length.
|
||||
* Note that the data elements are shallow copied so any contained pointers
|
||||
* will point to the original data.
|
||||
*
|
||||
* @param list the list to copy
|
||||
* @param n the size of the list
|
||||
* @param size the size of each data element
|
||||
*
|
||||
* @return an array version of the original list, data copied as well
|
||||
*/
|
||||
void *alpm_list_to_array(const alpm_list_t *list, size_t n, size_t size);
|
||||
|
||||
/* End of alpm_list */
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* backup.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2005 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* backup.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* be_local.c : backend for the local database
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -195,6 +195,12 @@ static alpm_list_t *_cache_get_backup(alpm_pkg_t *pkg)
|
|||
return pkg->backup;
|
||||
}
|
||||
|
||||
static alpm_list_t *_cache_get_xdata(alpm_pkg_t *pkg)
|
||||
{
|
||||
LAZY_LOAD(INFRQ_DESC);
|
||||
return pkg->xdata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a package changelog for reading. Similar to fopen in functionality,
|
||||
* except that the returned 'file stream' is from the database.
|
||||
|
@ -244,7 +250,6 @@ static int _cache_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
|
|||
*/
|
||||
static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
|
||||
{
|
||||
int r;
|
||||
struct archive *mtree;
|
||||
|
||||
alpm_db_t *db = alpm_pkg_get_db(pkg);
|
||||
|
@ -256,19 +261,17 @@ static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
|
|||
}
|
||||
|
||||
if((mtree = archive_read_new()) == NULL) {
|
||||
pkg->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
GOTO_ERR(pkg->handle, ALPM_ERR_LIBARCHIVE, error);
|
||||
}
|
||||
|
||||
_alpm_archive_read_support_filter_all(mtree);
|
||||
archive_read_support_format_mtree(mtree);
|
||||
|
||||
if((r = _alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE))) {
|
||||
if(_alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE)) {
|
||||
_alpm_log(pkg->handle, ALPM_LOG_ERROR, _("error while reading file %s: %s\n"),
|
||||
mtfile, archive_error_string(mtree));
|
||||
pkg->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
_alpm_archive_read_free(mtree);
|
||||
goto error;
|
||||
GOTO_ERR(pkg->handle, ALPM_ERR_LIBARCHIVE, error);
|
||||
}
|
||||
|
||||
free(mtfile);
|
||||
|
@ -284,12 +287,26 @@ error:
|
|||
* @param pkg the package that the mtree file is being read from
|
||||
* @param archive the archive structure reading from the mtree file
|
||||
* @param entry an archive_entry to store the entry header information
|
||||
* @return 0 if end of archive is reached, non-zero otherwise.
|
||||
* @return 0 on success, 1 if end of archive is reached, -1 otherwise.
|
||||
*/
|
||||
static int _cache_mtree_next(const alpm_pkg_t UNUSED *pkg,
|
||||
struct archive *mtree, struct archive_entry **entry)
|
||||
{
|
||||
return archive_read_next_header(mtree, entry);
|
||||
int ret;
|
||||
ret = archive_read_next_header(mtree, entry);
|
||||
|
||||
switch(ret) {
|
||||
case ARCHIVE_OK:
|
||||
return 0;
|
||||
break;
|
||||
case ARCHIVE_EOF:
|
||||
return 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -314,7 +331,7 @@ static int _cache_force_load(alpm_pkg_t *pkg)
|
|||
* lazy accessor methods that handle any backend loading and caching
|
||||
* logic.
|
||||
*/
|
||||
static struct pkg_operations local_pkg_ops = {
|
||||
static const struct pkg_operations local_pkg_ops = {
|
||||
.get_base = _cache_get_base,
|
||||
.get_desc = _cache_get_desc,
|
||||
.get_url = _cache_get_url,
|
||||
|
@ -337,6 +354,7 @@ static struct pkg_operations local_pkg_ops = {
|
|||
.get_replaces = _cache_get_replaces,
|
||||
.get_files = _cache_get_files,
|
||||
.get_backup = _cache_get_backup,
|
||||
.get_xdata = _cache_get_xdata,
|
||||
|
||||
.changelog_open = _cache_changelog_open,
|
||||
.changelog_read = _cache_changelog_read,
|
||||
|
@ -612,6 +630,10 @@ static int local_db_populate(alpm_db_t *db)
|
|||
continue;
|
||||
}
|
||||
|
||||
/* treat local metadata errors as warning-only,
|
||||
* they are already installed and otherwise they can't be operated on */
|
||||
_alpm_pkg_check_meta(pkg);
|
||||
|
||||
/* add to the collection */
|
||||
_alpm_log(db->handle, ALPM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n",
|
||||
pkg->name, db->treename);
|
||||
|
@ -632,6 +654,17 @@ static int local_db_populate(alpm_db_t *db)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static alpm_pkgreason_t _read_pkgreason(alpm_handle_t *handle, const char *pkgname, const char *line) {
|
||||
if(strcmp(line, "0") == 0) {
|
||||
return ALPM_PKG_REASON_EXPLICIT;
|
||||
} else if(strcmp(line, "1") == 0) {
|
||||
return ALPM_PKG_REASON_DEPEND;
|
||||
} else {
|
||||
_alpm_log(handle, ALPM_LOG_ERROR, _("unknown install reason for package %s: %s\n"), pkgname, line);
|
||||
return ALPM_PKG_REASON_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
/* Note: the return value must be freed by the caller */
|
||||
char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info,
|
||||
const char *filename)
|
||||
|
@ -644,7 +677,7 @@ char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info,
|
|||
len = strlen(dbpath) + strlen(info->name) + strlen(info->version) + 3;
|
||||
len += filename ? strlen(filename) : 0;
|
||||
MALLOC(pkgpath, len, RET_ERR(db->handle, ALPM_ERR_MEMORY, NULL));
|
||||
sprintf(pkgpath, "%s%s-%s/%s", dbpath, info->name, info->version,
|
||||
snprintf(pkgpath, len, "%s%s-%s/%s", dbpath, info->name, info->version,
|
||||
filename ? filename : "");
|
||||
return pkgpath;
|
||||
}
|
||||
|
@ -680,7 +713,7 @@ char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info,
|
|||
static int local_db_read(alpm_pkg_t *info, int inforeq)
|
||||
{
|
||||
FILE *fp = NULL;
|
||||
char line[1024];
|
||||
char line[1024] = {0};
|
||||
alpm_db_t *db = info->origin_data.db;
|
||||
|
||||
/* bitmask logic here:
|
||||
|
@ -703,9 +736,6 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
|
|||
"loading package data for %s : level=0x%x\n",
|
||||
info->name, inforeq);
|
||||
|
||||
/* clear out 'line', to be certain - and to make valgrind happy */
|
||||
memset(line, 0, sizeof(line));
|
||||
|
||||
/* DESC */
|
||||
if(inforeq & INFRQ_DESC && !(info->infolevel & INFRQ_DESC)) {
|
||||
char *path = _alpm_local_db_pkgpath(db, info, "desc");
|
||||
|
@ -757,7 +787,7 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
|
|||
READ_AND_STORE(info->packager);
|
||||
} else if(strcmp(line, "%REASON%") == 0) {
|
||||
READ_NEXT();
|
||||
info->reason = (alpm_pkgreason_t)atoi(line);
|
||||
info->reason = _read_pkgreason(db->handle, info->name, line);
|
||||
} else if(strcmp(line, "%VALIDATION%") == 0) {
|
||||
alpm_list_t *i, *v = NULL;
|
||||
READ_AND_STORE_ALL(v);
|
||||
|
@ -795,6 +825,23 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
|
|||
READ_AND_SPLITDEP(info->conflicts);
|
||||
} else if(strcmp(line, "%PROVIDES%") == 0) {
|
||||
READ_AND_SPLITDEP(info->provides);
|
||||
} else if(strcmp(line, "%XDATA%") == 0) {
|
||||
alpm_list_t *i, *lines = NULL;
|
||||
READ_AND_STORE_ALL(lines);
|
||||
for(i = lines; i; i = i->next) {
|
||||
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
|
||||
if(pd == NULL || !alpm_list_append(&info->xdata, pd)) {
|
||||
_alpm_pkg_xdata_free(pd);
|
||||
FREELIST(lines);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
FREELIST(lines);
|
||||
} else {
|
||||
_alpm_log(db->handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in local database\n"), info->name, line);
|
||||
alpm_list_t *lines = NULL;
|
||||
READ_AND_STORE_ALL(lines);
|
||||
FREELIST(lines);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
|
@ -832,12 +879,7 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
|
|||
}
|
||||
/* attempt to hand back any memory we don't need */
|
||||
if(files_count > 0) {
|
||||
alpm_file_t *newfiles;
|
||||
|
||||
newfiles = realloc(files, sizeof(alpm_file_t) * files_count);
|
||||
if(newfiles != NULL) {
|
||||
files = newfiles;
|
||||
}
|
||||
REALLOC(files, sizeof(alpm_file_t) * files_count, (void)0);
|
||||
} else {
|
||||
FREE(files);
|
||||
}
|
||||
|
@ -1036,6 +1078,15 @@ int _alpm_local_db_write(alpm_db_t *db, alpm_pkg_t *info, int inforeq)
|
|||
write_deps(fp, "%CONFLICTS%", info->conflicts);
|
||||
write_deps(fp, "%PROVIDES%", info->provides);
|
||||
|
||||
if(info->xdata) {
|
||||
fputs("%XDATA%\n", fp);
|
||||
for(lp = info->xdata; lp; lp = lp->next) {
|
||||
alpm_pkg_xdata_t *pd = lp->data;
|
||||
fprintf(fp, "%s=%s\n", pd->name, pd->value);
|
||||
}
|
||||
fputc('\n', fp);
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
fp = NULL;
|
||||
}
|
||||
|
@ -1113,7 +1164,7 @@ int _alpm_local_db_remove(alpm_db_t *db, alpm_pkg_t *info)
|
|||
/* file path is too long to remove, hmm. */
|
||||
ret = -1;
|
||||
} else {
|
||||
sprintf(name, "%s/%s", pkgpath, dp->d_name);
|
||||
snprintf(name, PATH_MAX, "%s/%s", pkgpath, dp->d_name);
|
||||
if(unlink(name)) {
|
||||
ret = -1;
|
||||
}
|
||||
|
@ -1154,7 +1205,7 @@ int SYMEXPORT alpm_pkg_set_reason(alpm_pkg_t *pkg, alpm_pkgreason_t reason)
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct db_operations local_db_ops = {
|
||||
static const struct db_operations local_db_ops = {
|
||||
.validate = local_db_validate,
|
||||
.populate = local_db_populate,
|
||||
.unregister = _alpm_db_unregister,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* be_package.c : backend for packages
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -134,11 +134,10 @@ static int _package_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
|
|||
}
|
||||
|
||||
/** Package file operations struct accessor. We implement this as a method
|
||||
* rather than a static struct as in be_files because we want to reuse the
|
||||
* majority of the default_pkg_ops struct and add only a few operations of
|
||||
* our own on top.
|
||||
* because we want to reuse the majority of the default_pkg_ops struct and
|
||||
* add only a few operations of our own on top.
|
||||
*/
|
||||
static struct pkg_operations *get_file_pkg_ops(void)
|
||||
static const struct pkg_operations *get_file_pkg_ops(void)
|
||||
{
|
||||
static struct pkg_operations file_pkg_ops;
|
||||
static int file_pkg_ops_initialized = 0;
|
||||
|
@ -164,9 +163,8 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
|
|||
char *ptr = NULL;
|
||||
char *key = NULL;
|
||||
int ret, linenum = 0;
|
||||
struct archive_read_buffer buf;
|
||||
struct archive_read_buffer buf = {0};
|
||||
|
||||
memset(&buf, 0, sizeof(buf));
|
||||
/* 512K for a line length seems reasonable */
|
||||
buf.max_line_size = 512 * 1024;
|
||||
|
||||
|
@ -202,11 +200,15 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
|
|||
} else if(strcmp(key, "pkgdesc") == 0) {
|
||||
STRDUP(newpkg->desc, ptr, return -1);
|
||||
} else if(strcmp(key, "group") == 0) {
|
||||
newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr));
|
||||
char *tmp = NULL;
|
||||
STRDUP(tmp, ptr, return -1);
|
||||
newpkg->groups = alpm_list_add(newpkg->groups, tmp);
|
||||
} else if(strcmp(key, "url") == 0) {
|
||||
STRDUP(newpkg->url, ptr, return -1);
|
||||
} else if(strcmp(key, "license") == 0) {
|
||||
newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr));
|
||||
char *tmp = NULL;
|
||||
STRDUP(tmp, ptr, return -1);
|
||||
newpkg->licenses = alpm_list_add(newpkg->licenses, tmp);
|
||||
} else if(strcmp(key, "builddate") == 0) {
|
||||
newpkg->builddate = _alpm_parsedate(ptr);
|
||||
} else if(strcmp(key, "packager") == 0) {
|
||||
|
@ -242,13 +244,17 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
|
|||
CALLOC(backup, 1, sizeof(alpm_backup_t), return -1);
|
||||
STRDUP(backup->name, ptr, FREE(backup); return -1);
|
||||
newpkg->backup = alpm_list_add(newpkg->backup, backup);
|
||||
} else if(strcmp(key, "force") == 0) {
|
||||
/* deprecated, skip it */
|
||||
} else if(strcmp(key, "makepkgopt") == 0) {
|
||||
/* not used atm */
|
||||
} else if(strcmp(key, "xdata") == 0) {
|
||||
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(ptr);
|
||||
if(pd == NULL || !alpm_list_append(&newpkg->xdata, pd)) {
|
||||
_alpm_pkg_xdata_free(pd);
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
const char *pkgname = newpkg->name ? newpkg->name : "error";
|
||||
_alpm_log(handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in package description\n"), pkgname, key);
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: unknown key '%s' in description file line %d\n",
|
||||
newpkg->name ? newpkg->name : "error", key, linenum);
|
||||
pkgname, key, linenum);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -308,7 +314,7 @@ int _alpm_pkg_validate_internal(alpm_handle_t *handle,
|
|||
}
|
||||
}
|
||||
|
||||
if(syncpkg && !has_sig) {
|
||||
if(syncpkg && (!has_sig || !syncpkg->base64_sig)) {
|
||||
if(syncpkg->md5sum && !syncpkg->sha256sum) {
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "md5sum: %s\n", syncpkg->md5sum);
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "checking md5sum for %s\n", pkgfile);
|
||||
|
@ -448,18 +454,15 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
|
|||
char *mtree_data = NULL;
|
||||
struct archive *mtree;
|
||||
struct archive_entry *mtree_entry = NULL;
|
||||
alpm_filelist_t filelist;
|
||||
alpm_filelist_t filelist = {0};
|
||||
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||
"found mtree for package %s, getting file list\n", pkg->filename);
|
||||
|
||||
memset(&filelist, 0, sizeof(alpm_filelist_t));
|
||||
|
||||
/* create a new archive to parse the mtree and load it from archive into memory */
|
||||
/* TODO: split this into a function */
|
||||
if((mtree = archive_read_new()) == NULL) {
|
||||
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
|
||||
}
|
||||
|
||||
_alpm_archive_read_support_filter_all(mtree);
|
||||
|
@ -478,8 +481,7 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
|
|||
if(size < 0) {
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, _("error while reading package %s: %s\n"),
|
||||
pkg->filename, archive_error_string(archive));
|
||||
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
|
||||
}
|
||||
if(size == 0) {
|
||||
break;
|
||||
|
@ -492,8 +494,7 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
|
|||
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||
_("error while reading mtree of package %s: %s\n"),
|
||||
pkg->filename, archive_error_string(mtree));
|
||||
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
|
||||
}
|
||||
|
||||
while((ret = archive_read_next_header(mtree, &mtree_entry)) == ARCHIVE_OK) {
|
||||
|
@ -516,8 +517,7 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
|
|||
if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occurred */
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, _("error while reading mtree of package %s: %s\n"),
|
||||
pkg->filename, archive_error_string(mtree));
|
||||
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
|
||||
}
|
||||
|
||||
/* throw away any files we loaded directly from the archive */
|
||||
|
@ -582,11 +582,9 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
|||
|
||||
newpkg = _alpm_pkg_new();
|
||||
if(newpkg == NULL) {
|
||||
handle->pm_errno = ALPM_ERR_MEMORY;
|
||||
goto error;
|
||||
GOTO_ERR(handle, ALPM_ERR_MEMORY, error);
|
||||
}
|
||||
STRDUP(newpkg->filename, pkgfile,
|
||||
handle->pm_errno = ALPM_ERR_MEMORY; goto error);
|
||||
STRDUP(newpkg->filename, pkgfile, GOTO_ERR(handle, ALPM_ERR_MEMORY, error));
|
||||
newpkg->size = st.st_size;
|
||||
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "starting package load for %s\n", pkgfile);
|
||||
|
@ -636,8 +634,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
|||
if(archive_read_data_skip(archive)) {
|
||||
_alpm_log(handle, ALPM_LOG_ERROR, _("error while reading package %s: %s\n"),
|
||||
pkgfile, archive_error_string(archive));
|
||||
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
|
||||
}
|
||||
|
||||
/* if we are not doing a full read, see if we have all we need */
|
||||
|
@ -649,8 +646,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
|||
if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occurred */
|
||||
_alpm_log(handle, ALPM_LOG_ERROR, _("error while reading package %s: %s\n"),
|
||||
pkgfile, archive_error_string(archive));
|
||||
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
goto error;
|
||||
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
|
||||
}
|
||||
|
||||
if(!config) {
|
||||
|
@ -658,12 +654,9 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
|||
goto pkg_invalid;
|
||||
}
|
||||
|
||||
_alpm_archive_read_free(archive);
|
||||
close(fd);
|
||||
|
||||
/* internal fields for package struct */
|
||||
newpkg->origin = ALPM_PKG_FROM_FILE;
|
||||
newpkg->origin_data.file = strdup(pkgfile);
|
||||
STRDUP(newpkg->origin_data.file, pkgfile, goto error);
|
||||
newpkg->ops = get_file_pkg_ops();
|
||||
newpkg->handle = handle;
|
||||
newpkg->infolevel = INFRQ_BASE | INFRQ_DESC | INFRQ_SCRIPTLET;
|
||||
|
@ -672,8 +665,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
|||
if(full) {
|
||||
if(newpkg->files.files) {
|
||||
/* attempt to hand back any memory we don't need */
|
||||
newpkg->files.files = realloc(newpkg->files.files,
|
||||
sizeof(alpm_file_t) * newpkg->files.count);
|
||||
REALLOC(newpkg->files.files, sizeof(alpm_file_t) * newpkg->files.count, (void)0);
|
||||
/* "checking for conflicts" requires a sorted list, ensure that here */
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||
"sorting package filelist for %s\n", pkgfile);
|
||||
|
@ -683,6 +675,12 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
|||
newpkg->infolevel |= INFRQ_FILES;
|
||||
}
|
||||
|
||||
if(_alpm_pkg_check_meta(newpkg) != 0) {
|
||||
goto pkg_invalid;
|
||||
}
|
||||
|
||||
_alpm_archive_read_free(archive);
|
||||
close(fd);
|
||||
return newpkg;
|
||||
|
||||
pkg_invalid:
|
||||
|
@ -690,9 +688,7 @@ pkg_invalid:
|
|||
error:
|
||||
_alpm_pkg_free(newpkg);
|
||||
_alpm_archive_read_free(archive);
|
||||
if(fd >= 0) {
|
||||
close(fd);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -732,7 +728,6 @@ int SYMEXPORT alpm_pkg_load(alpm_handle_t *handle, const char *filename, int ful
|
|||
int validation = 0;
|
||||
char *sigpath;
|
||||
alpm_pkg_t *pkg_temp;
|
||||
char *packager;
|
||||
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
ASSERT(pkg != NULL, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
@ -758,13 +753,7 @@ int SYMEXPORT alpm_pkg_load(alpm_handle_t *handle, const char *filename, int ful
|
|||
char *key = k->data;
|
||||
if(_alpm_key_in_keychain(handle, key) == 0) {
|
||||
pkg_temp = _alpm_pkg_load_internal(handle, filename, full);
|
||||
if(pkg_temp) {
|
||||
packager = pkg_temp->packager;
|
||||
|
||||
} else {
|
||||
packager = NULL;
|
||||
}
|
||||
if(_alpm_key_import(handle, packager, key) == -1) {
|
||||
if(_alpm_key_import(handle, NULL, key) == -1) {
|
||||
fail = 1;
|
||||
}
|
||||
_alpm_pkg_free(pkg_temp);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* be_sync.c : backend for sync databases
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -48,7 +48,7 @@ static char *get_sync_dir(alpm_handle_t *handle)
|
|||
struct stat buf;
|
||||
|
||||
MALLOC(syncpath, len, RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
sprintf(syncpath, "%s%s", handle->dbpath, "sync/");
|
||||
snprintf(syncpath, len, "%s%s", handle->dbpath, "sync/");
|
||||
|
||||
if(stat(syncpath, &buf) != 0) {
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n",
|
||||
|
@ -136,178 +136,105 @@ valid:
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** Update a package database
|
||||
*
|
||||
* An update of the package database \a db will be attempted. Unless
|
||||
* \a force is true, the update will only be performed if the remote
|
||||
* database was modified since the last update.
|
||||
*
|
||||
* This operation requires a database lock, and will return an applicable error
|
||||
* if the lock could not be obtained.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* alpm_list_t *syncs = alpm_get_syncdbs();
|
||||
* for(i = syncs; i; i = alpm_list_next(i)) {
|
||||
* alpm_db_t *db = alpm_list_getdata(i);
|
||||
* result = alpm_db_update(0, db);
|
||||
*
|
||||
* if(result < 0) {
|
||||
* printf("Unable to update database: %s\n", alpm_strerrorlast());
|
||||
* } else if(result == 1) {
|
||||
* printf("Database already up to date\n");
|
||||
* } else {
|
||||
* printf("Database updated\n");
|
||||
* }
|
||||
* }
|
||||
* @endcode
|
||||
*
|
||||
* @ingroup alpm_databases
|
||||
* @note After a successful update, the \link alpm_db_get_pkgcache()
|
||||
* package cache \endlink will be invalidated
|
||||
* @param force if true, then forces the update, otherwise update only in case
|
||||
* the database isn't up to date
|
||||
* @param db pointer to the package database to update
|
||||
* @return 0 on success, -1 on error (pm_errno is set accordingly), 1 if up to
|
||||
* to date
|
||||
*/
|
||||
int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
|
||||
{
|
||||
int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force) {
|
||||
char *syncpath;
|
||||
const char *dbext;
|
||||
char *temporary_syncpath;
|
||||
const char *dbext = handle->dbext;
|
||||
alpm_list_t *i;
|
||||
int updated = 0;
|
||||
int ret = -1;
|
||||
mode_t oldmask;
|
||||
alpm_handle_t *handle;
|
||||
int siglevel;
|
||||
alpm_list_t *payloads = NULL;
|
||||
alpm_event_t event;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(db != NULL, return -1);
|
||||
handle = db->handle;
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
ASSERT(dbs != NULL, return -1);
|
||||
handle->pm_errno = ALPM_ERR_OK;
|
||||
ASSERT(db != handle->db_local, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
ASSERT(db->servers != NULL, RET_ERR(handle, ALPM_ERR_SERVER_NONE, -1));
|
||||
|
||||
if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
syncpath = get_sync_dir(handle);
|
||||
if(!syncpath) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* force update of invalid databases to fix potential mismatched database/signature */
|
||||
if(db->status & DB_STATUS_INVALID) {
|
||||
force = 1;
|
||||
}
|
||||
ASSERT(syncpath != NULL, return -1);
|
||||
temporary_syncpath = _alpm_temporary_download_dir_setup(syncpath, handle->sandboxuser);
|
||||
ASSERT(temporary_syncpath != NULL, FREE(syncpath); return -1);
|
||||
|
||||
/* make sure we have a sane umask */
|
||||
oldmask = umask(0022);
|
||||
|
||||
siglevel = alpm_db_get_siglevel(db);
|
||||
|
||||
/* attempt to grab a lock */
|
||||
if(_alpm_handle_lock(handle)) {
|
||||
free(syncpath);
|
||||
umask(oldmask);
|
||||
RET_ERR(handle, ALPM_ERR_HANDLE_LOCK, -1);
|
||||
GOTO_ERR(handle, ALPM_ERR_HANDLE_LOCK, cleanup);
|
||||
}
|
||||
|
||||
dbext = db->handle->dbext;
|
||||
|
||||
for(i = db->servers; i; i = i->next) {
|
||||
const char *server = i->data, *final_db_url = NULL;
|
||||
struct dload_payload payload;
|
||||
for(i = dbs; i; i = i->next) {
|
||||
alpm_db_t *db = i->data;
|
||||
int dbforce = force;
|
||||
struct dload_payload *payload = NULL;
|
||||
size_t len;
|
||||
int sig_ret = 0;
|
||||
int siglevel;
|
||||
|
||||
memset(&payload, 0, sizeof(struct dload_payload));
|
||||
if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* set hard upper limit of 25MiB */
|
||||
payload.max_size = 25 * 1024 * 1024;
|
||||
ASSERT(db != handle->db_local, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
|
||||
ASSERT(db->servers != NULL, GOTO_ERR(handle, ALPM_ERR_SERVER_NONE, cleanup));
|
||||
|
||||
/* force update of invalid databases to fix potential mismatched database/signature */
|
||||
if(db->status & DB_STATUS_INVALID) {
|
||||
dbforce = 1;
|
||||
}
|
||||
|
||||
siglevel = alpm_db_get_siglevel(db);
|
||||
|
||||
CALLOC(payload, 1, sizeof(*payload), GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
payload->servers = db->servers;
|
||||
/* print server + filename into a buffer */
|
||||
len = strlen(server) + strlen(db->treename) + strlen(dbext) + 2;
|
||||
MALLOC(payload.fileurl, len,
|
||||
{
|
||||
free(syncpath);
|
||||
umask(oldmask);
|
||||
RET_ERR(handle, ALPM_ERR_MEMORY, -1);
|
||||
}
|
||||
);
|
||||
snprintf(payload.fileurl, len, "%s/%s%s", server, db->treename, dbext);
|
||||
payload.handle = handle;
|
||||
payload.force = force;
|
||||
payload.unlink_on_fail = 1;
|
||||
len = strlen(db->treename) + strlen(dbext) + 1;
|
||||
MALLOC(payload->filepath, len,
|
||||
FREE(payload); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
snprintf(payload->filepath, len, "%s%s", db->treename, dbext);
|
||||
|
||||
ret = _alpm_download(&payload, syncpath, NULL, &final_db_url);
|
||||
_alpm_dload_payload_reset(&payload);
|
||||
updated = (updated || ret == 0);
|
||||
|
||||
if(ret != -1 && updated && (siglevel & ALPM_SIG_DATABASE)) {
|
||||
/* an existing sig file is no good at this point */
|
||||
char *sigpath = _alpm_sigpath(handle, _alpm_db_path(db));
|
||||
if(!sigpath) {
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
unlink(sigpath);
|
||||
free(sigpath);
|
||||
|
||||
|
||||
/* check if the final URL from internal downloader looks reasonable */
|
||||
if(final_db_url != NULL) {
|
||||
if(strlen(final_db_url) < 3
|
||||
|| strcmp(final_db_url + strlen(final_db_url) - strlen(dbext),
|
||||
dbext) != 0) {
|
||||
final_db_url = NULL;
|
||||
}
|
||||
STRDUP(payload->remote_name, payload->filepath,
|
||||
_alpm_dload_payload_reset(payload); FREE(payload);
|
||||
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
payload->destfile_name = _alpm_get_fullpath(temporary_syncpath, payload->remote_name, "");
|
||||
payload->tempfile_name = _alpm_get_fullpath(temporary_syncpath, payload->remote_name, ".part");
|
||||
if(!payload->destfile_name || !payload->tempfile_name) {
|
||||
_alpm_dload_payload_reset(payload);
|
||||
FREE(payload);
|
||||
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup);
|
||||
}
|
||||
|
||||
/* if we downloaded a DB, we want the .sig from the same server */
|
||||
if(final_db_url != NULL) {
|
||||
/* print final_db_url into a buffer (leave space for .sig) */
|
||||
len = strlen(final_db_url) + 5;
|
||||
} else {
|
||||
/* print server + filename into a buffer (leave space for separator and .sig) */
|
||||
len = strlen(server) + strlen(db->treename) + strlen(dbext) + 6;
|
||||
payload->handle = handle;
|
||||
payload->force = dbforce;
|
||||
payload->unlink_on_fail = 1;
|
||||
payload->download_signature = (siglevel & ALPM_SIG_DATABASE);
|
||||
payload->signature_optional = (siglevel & ALPM_SIG_DATABASE_OPTIONAL);
|
||||
/* set hard upper limit of 128 MiB */
|
||||
payload->max_size = 128 * 1024 * 1024;
|
||||
payloads = alpm_list_add(payloads, payload);
|
||||
}
|
||||
if(payloads == NULL) {
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
MALLOC(payload.fileurl, len,
|
||||
{
|
||||
free(syncpath);
|
||||
umask(oldmask);
|
||||
RET_ERR(handle, ALPM_ERR_MEMORY, -1);
|
||||
event.type = ALPM_EVENT_DB_RETRIEVE_START;
|
||||
EVENT(handle, &event);
|
||||
ret = _alpm_download(handle, payloads, syncpath, temporary_syncpath);
|
||||
if(ret < 0) {
|
||||
event.type = ALPM_EVENT_DB_RETRIEVE_FAILED;
|
||||
EVENT(handle, &event);
|
||||
goto cleanup;
|
||||
}
|
||||
);
|
||||
event.type = ALPM_EVENT_DB_RETRIEVE_DONE;
|
||||
EVENT(handle, &event);
|
||||
|
||||
if(final_db_url != NULL) {
|
||||
snprintf(payload.fileurl, len, "%s.sig", final_db_url);
|
||||
} else {
|
||||
snprintf(payload.fileurl, len, "%s/%s%s.sig", server, db->treename, dbext);
|
||||
for(i = dbs; i; i = i->next) {
|
||||
alpm_db_t *db = i->data;
|
||||
if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
payload.handle = handle;
|
||||
payload.force = 1;
|
||||
payload.errors_ok = (siglevel & ALPM_SIG_DATABASE_OPTIONAL);
|
||||
|
||||
/* set hard upper limit of 16KiB */
|
||||
payload.max_size = 16 * 1024;
|
||||
|
||||
sig_ret = _alpm_download(&payload, syncpath, NULL, NULL);
|
||||
/* errors_ok suppresses error messages, but not the return code */
|
||||
sig_ret = payload.errors_ok ? 0 : sig_ret;
|
||||
_alpm_dload_payload_reset(&payload);
|
||||
}
|
||||
|
||||
if(ret != -1 && sig_ret != -1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(updated) {
|
||||
/* Cache needs to be rebuilt */
|
||||
_alpm_db_free_pkgcache(db);
|
||||
|
||||
|
@ -318,22 +245,31 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
|
|||
db->status &= ~DB_STATUS_MISSING;
|
||||
|
||||
/* if the download failed skip validation to preserve the download error */
|
||||
if(ret != -1 && sync_db_validate(db) != 0) {
|
||||
if(sync_db_validate(db) != 0) {
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "failed to validate db: %s\n",
|
||||
db->treename);
|
||||
/* pm_errno should be set */
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
_alpm_handle_unlock(handle);
|
||||
|
||||
if(ret == -1) {
|
||||
/* pm_errno was set by the download code */
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync db: %s\n",
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync dbs: %s\n",
|
||||
alpm_strerror(handle->pm_errno));
|
||||
} else {
|
||||
handle->pm_errno = ALPM_ERR_OK;
|
||||
}
|
||||
|
||||
_alpm_handle_unlock(handle);
|
||||
free(syncpath);
|
||||
if(payloads) {
|
||||
alpm_list_free_inner(payloads, (alpm_list_fn_free)_alpm_dload_payload_reset);
|
||||
FREELIST(payloads);
|
||||
}
|
||||
FREE(temporary_syncpath);
|
||||
FREE(syncpath);
|
||||
umask(oldmask);
|
||||
return ret;
|
||||
}
|
||||
|
@ -365,6 +301,22 @@ static int _sync_get_validation(alpm_pkg_t *pkg)
|
|||
return pkg->validation;
|
||||
}
|
||||
|
||||
/** Package sync operations struct accessor. We implement this as a method
|
||||
* because we want to reuse the majority of the default_pkg_ops struct and
|
||||
* add only a few operations of our own on top.
|
||||
*/
|
||||
static const struct pkg_operations *get_sync_pkg_ops(void)
|
||||
{
|
||||
static struct pkg_operations sync_pkg_ops;
|
||||
static int sync_pkg_ops_initialized = 0;
|
||||
if(!sync_pkg_ops_initialized) {
|
||||
sync_pkg_ops = default_pkg_ops;
|
||||
sync_pkg_ops.get_validation = _sync_get_validation;
|
||||
sync_pkg_ops_initialized = 1;
|
||||
}
|
||||
return &sync_pkg_ops;
|
||||
}
|
||||
|
||||
static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname,
|
||||
const char **entry_filename, alpm_pkg_t *likely_pkg)
|
||||
{
|
||||
|
@ -405,10 +357,14 @@ static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname,
|
|||
|
||||
pkg->origin = ALPM_PKG_FROM_SYNCDB;
|
||||
pkg->origin_data.db = db;
|
||||
pkg->ops = &default_pkg_ops;
|
||||
pkg->ops->get_validation = _sync_get_validation;
|
||||
pkg->ops = get_sync_pkg_ops();
|
||||
pkg->handle = db->handle;
|
||||
|
||||
if(_alpm_pkg_check_meta(pkg) != 0) {
|
||||
_alpm_pkg_free(pkg);
|
||||
RET_ERR(db->handle, ALPM_ERR_PKG_INVALID, NULL);
|
||||
}
|
||||
|
||||
/* add to the collection */
|
||||
_alpm_log(db->handle, ALPM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n",
|
||||
pkg->name, db->treename);
|
||||
|
@ -501,9 +457,8 @@ static int sync_db_populate(alpm_db_t *db)
|
|||
|
||||
db->pkgcache = _alpm_pkghash_create(est_count);
|
||||
if(db->pkgcache == NULL) {
|
||||
db->handle->pm_errno = ALPM_ERR_MEMORY;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
GOTO_ERR(db->handle, ALPM_ERR_MEMORY, cleanup);
|
||||
}
|
||||
|
||||
while((archive_ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) {
|
||||
|
@ -518,13 +473,20 @@ static int sync_db_populate(alpm_db_t *db)
|
|||
}
|
||||
}
|
||||
}
|
||||
/* the db file was successfully read, but contained errors */
|
||||
if(ret == -1) {
|
||||
db->status &= ~DB_STATUS_VALID;
|
||||
db->status |= DB_STATUS_INVALID;
|
||||
_alpm_db_free_pkgcache(db);
|
||||
GOTO_ERR(db->handle, ALPM_ERR_DB_INVALID, cleanup);
|
||||
}
|
||||
/* reading the db file failed */
|
||||
if(archive_ret != ARCHIVE_EOF) {
|
||||
_alpm_log(db->handle, ALPM_LOG_ERROR, _("could not read db '%s' (%s)\n"),
|
||||
db->treename, archive_error_string(archive));
|
||||
_alpm_db_free_pkgcache(db);
|
||||
db->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
GOTO_ERR(db->handle, ALPM_ERR_LIBARCHIVE, cleanup);
|
||||
}
|
||||
|
||||
count = alpm_list_count(db->pkgcache->list);
|
||||
|
@ -601,7 +563,7 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
|
|||
{
|
||||
const char *entryname, *filename;
|
||||
alpm_pkg_t *pkg;
|
||||
struct archive_read_buffer buf;
|
||||
struct archive_read_buffer buf = {0};
|
||||
|
||||
entryname = archive_entry_pathname(entry);
|
||||
if(entryname == NULL) {
|
||||
|
@ -613,7 +575,6 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
|
|||
_alpm_log(db->handle, ALPM_LOG_FUNCTION, "loading package data from archive entry %s\n",
|
||||
entryname);
|
||||
|
||||
memset(&buf, 0, sizeof(buf));
|
||||
/* 512K for a line length seems reasonable */
|
||||
buf.max_line_size = 512 * 1024;
|
||||
|
||||
|
@ -727,13 +688,30 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
|
|||
}
|
||||
/* attempt to hand back any memory we don't need */
|
||||
if(files_count > 0) {
|
||||
files = realloc(files, sizeof(alpm_file_t) * files_count);
|
||||
REALLOC(files, sizeof(alpm_file_t) * files_count, (void)0);
|
||||
} else {
|
||||
FREE(files);
|
||||
}
|
||||
pkg->files.count = files_count;
|
||||
pkg->files.files = files;
|
||||
_alpm_filelist_sort(&pkg->files);
|
||||
} else if(strcmp(line, "%DATA%") == 0) {
|
||||
alpm_list_t *i, *lines = NULL;
|
||||
READ_AND_STORE_ALL(lines);
|
||||
for(i = lines; i; i = i->next) {
|
||||
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
|
||||
if(pd == NULL || !alpm_list_append(&pkg->xdata, pd)) {
|
||||
_alpm_pkg_xdata_free(pd);
|
||||
FREELIST(lines);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
FREELIST(lines);
|
||||
} else {
|
||||
_alpm_log(db->handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in sync database\n"), pkg->name, line);
|
||||
alpm_list_t *lines = NULL;
|
||||
READ_AND_STORE_ALL(lines);
|
||||
FREELIST(lines);
|
||||
}
|
||||
}
|
||||
if(ret != ARCHIVE_EOF) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* conflict.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
|
||||
|
@ -50,10 +50,8 @@ static alpm_conflict_t *conflict_new(alpm_pkg_t *pkg1, alpm_pkg_t *pkg2,
|
|||
|
||||
CALLOC(conflict, 1, sizeof(alpm_conflict_t), return NULL);
|
||||
|
||||
conflict->package1_hash = pkg1->name_hash;
|
||||
conflict->package2_hash = pkg2->name_hash;
|
||||
STRDUP(conflict->package1, pkg1->name, goto error);
|
||||
STRDUP(conflict->package2, pkg2->name, goto error);
|
||||
ASSERT(_alpm_pkg_dup(pkg1, &conflict->package1) == 0, goto error);
|
||||
ASSERT(_alpm_pkg_dup(pkg2, &conflict->package2) == 0, goto error);
|
||||
conflict->reason = reason;
|
||||
|
||||
return conflict;
|
||||
|
@ -63,14 +61,12 @@ error:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Free a conflict and its members.
|
||||
*/
|
||||
void SYMEXPORT alpm_conflict_free(alpm_conflict_t *conflict)
|
||||
{
|
||||
ASSERT(conflict != NULL, return);
|
||||
FREE(conflict->package2);
|
||||
FREE(conflict->package1);
|
||||
_alpm_pkg_free(conflict->package1);
|
||||
_alpm_pkg_free(conflict->package2);
|
||||
|
||||
FREE(conflict);
|
||||
}
|
||||
|
||||
|
@ -82,10 +78,8 @@ alpm_conflict_t *_alpm_conflict_dup(const alpm_conflict_t *conflict)
|
|||
alpm_conflict_t *newconflict;
|
||||
CALLOC(newconflict, 1, sizeof(alpm_conflict_t), return NULL);
|
||||
|
||||
newconflict->package1_hash = conflict->package1_hash;
|
||||
newconflict->package2_hash = conflict->package2_hash;
|
||||
STRDUP(newconflict->package1, conflict->package1, goto error);
|
||||
STRDUP(newconflict->package2, conflict->package2, goto error);
|
||||
ASSERT(_alpm_pkg_dup(conflict->package1, &newconflict->package1) == 0, goto error);
|
||||
ASSERT(_alpm_pkg_dup(conflict->package2, &newconflict->package2) == 0, goto error);
|
||||
newconflict->reason = conflict->reason;
|
||||
|
||||
return newconflict;
|
||||
|
@ -108,10 +102,10 @@ static int conflict_isin(alpm_conflict_t *needle, alpm_list_t *haystack)
|
|||
alpm_list_t *i;
|
||||
for(i = haystack; i; i = i->next) {
|
||||
alpm_conflict_t *conflict = i->data;
|
||||
if(needle->package1_hash == conflict->package1_hash
|
||||
&& needle->package2_hash == conflict->package2_hash
|
||||
&& strcmp(needle->package1, conflict->package1) == 0
|
||||
&& strcmp(needle->package2, conflict->package2) == 0) {
|
||||
if(needle->package1->name_hash == conflict->package1->name_hash
|
||||
&& needle->package2->name_hash == conflict->package2->name_hash
|
||||
&& strcmp(needle->package1->name, conflict->package1->name) == 0
|
||||
&& strcmp(needle->package2->name, conflict->package2->name) == 0) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -243,14 +237,6 @@ alpm_list_t *_alpm_outerconflicts(alpm_db_t *db, alpm_list_t *packages)
|
|||
return baddeps;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check the package conflicts in a database
|
||||
*
|
||||
* @param handle the context handle
|
||||
* @param pkglist the list of packages to check
|
||||
*
|
||||
* @return an alpm_list_t of alpm_conflict_t
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_checkconflicts(alpm_handle_t *handle,
|
||||
alpm_list_t *pkglist)
|
||||
{
|
||||
|
@ -300,9 +286,6 @@ error:
|
|||
RET_ERR(handle, ALPM_ERR_MEMORY, conflicts);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Frees a conflict and its members.
|
||||
*/
|
||||
void SYMEXPORT alpm_fileconflict_free(alpm_fileconflict_t *conflict)
|
||||
{
|
||||
ASSERT(conflict != NULL, return);
|
||||
|
@ -629,8 +612,9 @@ alpm_list_t *_alpm_db_find_fileconflicts(alpm_handle_t *handle,
|
|||
/* check if all files of the dir belong to the installed pkg */
|
||||
if(!resolved_conflict && S_ISDIR(lsbuf.st_mode)) {
|
||||
alpm_list_t *owners;
|
||||
char *dir = malloc(strlen(relative_path) + 2);
|
||||
sprintf(dir, "%s/", relative_path);
|
||||
size_t dir_len = strlen(relative_path) + 2;
|
||||
char *dir = malloc(dir_len);
|
||||
snprintf(dir, dir_len, "%s/", relative_path);
|
||||
|
||||
owners = alpm_db_find_file_owners(handle->db_local, dir);
|
||||
if(owners) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* conflict.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
161
lib/libalpm/db.c
161
lib/libalpm/db.c
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* db.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
|
||||
|
@ -37,12 +37,6 @@
|
|||
#include "package.h"
|
||||
#include "group.h"
|
||||
|
||||
/** \addtogroup alpm_databases Database Functions
|
||||
* @brief Functions to query and manipulate the database of libalpm
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Register a sync database of packages. */
|
||||
alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle,
|
||||
const char *treename, int siglevel)
|
||||
{
|
||||
|
@ -81,7 +75,6 @@ void _alpm_db_unregister(alpm_db_t *db)
|
|||
_alpm_db_free(db);
|
||||
}
|
||||
|
||||
/** Unregister all package databases. */
|
||||
int SYMEXPORT alpm_unregister_all_syncdbs(alpm_handle_t *handle)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
|
@ -102,7 +95,6 @@ int SYMEXPORT alpm_unregister_all_syncdbs(alpm_handle_t *handle)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** Unregister a package database. */
|
||||
int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
|
||||
{
|
||||
int found = 0;
|
||||
|
@ -139,19 +131,43 @@ int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** Get the serverlist of a database. */
|
||||
alpm_list_t SYMEXPORT *alpm_db_get_cache_servers(const alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
return db->cache_servers;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_db_set_cache_servers(alpm_db_t *db, alpm_list_t *cache_servers)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
ASSERT(db != NULL, return -1);
|
||||
FREELIST(db->cache_servers);
|
||||
for(i = cache_servers; i; i = i->next) {
|
||||
char *url = i->data;
|
||||
if(alpm_db_add_cache_server(db, url) != 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
alpm_list_t SYMEXPORT *alpm_db_get_servers(const alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
return db->servers;
|
||||
}
|
||||
|
||||
/** Set the serverlist of a database. */
|
||||
int SYMEXPORT alpm_db_set_servers(alpm_db_t *db, alpm_list_t *servers)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
ASSERT(db != NULL, return -1);
|
||||
FREELIST(db->servers);
|
||||
db->servers = servers;
|
||||
for(i = servers; i; i = i->next) {
|
||||
char *url = i->data;
|
||||
if(alpm_db_add_server(db, url) != 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -168,11 +184,25 @@ static char *sanitize_url(const char *url)
|
|||
return newurl;
|
||||
}
|
||||
|
||||
/** Add a download server to a database.
|
||||
* @param db database pointer
|
||||
* @param url url of the server
|
||||
* @return 0 on success, -1 on error (pm_errno is set accordingly)
|
||||
*/
|
||||
int SYMEXPORT alpm_db_add_cache_server(alpm_db_t *db, const char *url)
|
||||
{
|
||||
char *newurl;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(db != NULL, return -1);
|
||||
db->handle->pm_errno = ALPM_ERR_OK;
|
||||
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
newurl = sanitize_url(url);
|
||||
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
db->cache_servers = alpm_list_add(db->cache_servers, newurl);
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new cache server URL to database '%s': %s\n",
|
||||
db->treename, newurl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
|
||||
{
|
||||
char *newurl;
|
||||
|
@ -183,9 +213,8 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
|
|||
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
newurl = sanitize_url(url);
|
||||
if(!newurl) {
|
||||
return -1;
|
||||
}
|
||||
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
db->servers = alpm_list_add(db->servers, newurl);
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new server URL to database '%s': %s\n",
|
||||
db->treename, newurl);
|
||||
|
@ -193,12 +222,32 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** Remove a download server from a database.
|
||||
* @param db database pointer
|
||||
* @param url url of the server
|
||||
* @return 0 on success, 1 on server not present,
|
||||
* -1 on error (pm_errno is set accordingly)
|
||||
*/
|
||||
int SYMEXPORT alpm_db_remove_cache_server(alpm_db_t *db, const char *url)
|
||||
{
|
||||
char *newurl, *vdata = NULL;
|
||||
int ret = 1;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(db != NULL, return -1);
|
||||
db->handle->pm_errno = ALPM_ERR_OK;
|
||||
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
newurl = sanitize_url(url);
|
||||
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
db->cache_servers = alpm_list_remove_str(db->cache_servers, newurl, &vdata);
|
||||
|
||||
if(vdata) {
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG, "removed cache server URL from database '%s': %s\n",
|
||||
db->treename, newurl);
|
||||
free(vdata);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
free(newurl);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
|
||||
{
|
||||
char *newurl, *vdata = NULL;
|
||||
|
@ -210,9 +259,7 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
|
|||
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
newurl = sanitize_url(url);
|
||||
if(!newurl) {
|
||||
return -1;
|
||||
}
|
||||
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
db->servers = alpm_list_remove_str(db->servers, newurl, &vdata);
|
||||
|
||||
|
@ -227,14 +274,18 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/** Get the name of a package database. */
|
||||
alpm_handle_t SYMEXPORT *alpm_db_get_handle(alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
return db->handle;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_db_get_name(const alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
return db->treename;
|
||||
}
|
||||
|
||||
/** Get the signature verification level for a database. */
|
||||
int SYMEXPORT alpm_db_get_siglevel(alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return -1);
|
||||
|
@ -245,7 +296,6 @@ int SYMEXPORT alpm_db_get_siglevel(alpm_db_t *db)
|
|||
}
|
||||
}
|
||||
|
||||
/** Check the validity of a database. */
|
||||
int SYMEXPORT alpm_db_get_valid(alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return -1);
|
||||
|
@ -253,7 +303,6 @@ int SYMEXPORT alpm_db_get_valid(alpm_db_t *db)
|
|||
return db->ops->validate(db);
|
||||
}
|
||||
|
||||
/** Get a package entry from a package database. */
|
||||
alpm_pkg_t SYMEXPORT *alpm_db_get_pkg(alpm_db_t *db, const char *name)
|
||||
{
|
||||
alpm_pkg_t *pkg;
|
||||
|
@ -269,7 +318,6 @@ alpm_pkg_t SYMEXPORT *alpm_db_get_pkg(alpm_db_t *db, const char *name)
|
|||
return pkg;
|
||||
}
|
||||
|
||||
/** Get the package cache of a package database. */
|
||||
alpm_list_t SYMEXPORT *alpm_db_get_pkgcache(alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
|
@ -277,7 +325,6 @@ alpm_list_t SYMEXPORT *alpm_db_get_pkgcache(alpm_db_t *db)
|
|||
return _alpm_db_get_pkgcache(db);
|
||||
}
|
||||
|
||||
/** Get a group entry from a package database. */
|
||||
alpm_group_t SYMEXPORT *alpm_db_get_group(alpm_db_t *db, const char *name)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
|
@ -288,7 +335,6 @@ alpm_group_t SYMEXPORT *alpm_db_get_group(alpm_db_t *db, const char *name)
|
|||
return _alpm_db_get_groupfromcache(db, name);
|
||||
}
|
||||
|
||||
/** Get the group cache of a package database. */
|
||||
alpm_list_t SYMEXPORT *alpm_db_get_groupcache(alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
|
@ -297,16 +343,16 @@ alpm_list_t SYMEXPORT *alpm_db_get_groupcache(alpm_db_t *db)
|
|||
return _alpm_db_get_groupcache(db);
|
||||
}
|
||||
|
||||
/** Searches a database. */
|
||||
alpm_list_t SYMEXPORT *alpm_db_search(alpm_db_t *db, const alpm_list_t *needles)
|
||||
int SYMEXPORT alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
|
||||
alpm_list_t **ret)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
ASSERT(db != NULL && ret != NULL && *ret == NULL,
|
||||
RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
db->handle->pm_errno = ALPM_ERR_OK;
|
||||
|
||||
return _alpm_db_search(db, needles);
|
||||
return _alpm_db_search(db, needles, ret);
|
||||
}
|
||||
|
||||
/** Sets the usage bitmask for a repo */
|
||||
int SYMEXPORT alpm_db_set_usage(alpm_db_t *db, int usage)
|
||||
{
|
||||
ASSERT(db != NULL, return -1);
|
||||
|
@ -314,7 +360,6 @@ int SYMEXPORT alpm_db_set_usage(alpm_db_t *db, int usage)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** Gets the usage bitmask for a repo */
|
||||
int SYMEXPORT alpm_db_get_usage(alpm_db_t *db, int *usage)
|
||||
{
|
||||
ASSERT(db != NULL, return -1);
|
||||
|
@ -323,9 +368,6 @@ int SYMEXPORT alpm_db_get_usage(alpm_db_t *db, int *usage)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** @} */
|
||||
|
||||
alpm_db_t *_alpm_db_new(const char *treename, int is_local)
|
||||
{
|
||||
alpm_db_t *db;
|
||||
|
@ -348,6 +390,7 @@ void _alpm_db_free(alpm_db_t *db)
|
|||
/* cleanup pkgcache */
|
||||
_alpm_db_free_pkgcache(db);
|
||||
/* cleanup server list */
|
||||
FREELIST(db->cache_servers);
|
||||
FREELIST(db->servers);
|
||||
FREE(db->_path);
|
||||
FREE(db->treename);
|
||||
|
@ -374,14 +417,14 @@ const char *_alpm_db_path(alpm_db_t *db)
|
|||
if(db->status & DB_STATUS_LOCAL) {
|
||||
pathsize = strlen(dbpath) + strlen(db->treename) + 2;
|
||||
CALLOC(db->_path, 1, pathsize, RET_ERR(db->handle, ALPM_ERR_MEMORY, NULL));
|
||||
sprintf(db->_path, "%s%s/", dbpath, db->treename);
|
||||
snprintf(db->_path, pathsize, "%s%s/", dbpath, db->treename);
|
||||
} else {
|
||||
const char *dbext = db->handle->dbext;
|
||||
|
||||
pathsize = strlen(dbpath) + 5 + strlen(db->treename) + strlen(dbext) + 1;
|
||||
CALLOC(db->_path, 1, pathsize, RET_ERR(db->handle, ALPM_ERR_MEMORY, NULL));
|
||||
/* all sync DBs now reside in the sync/ subdir of the dbpath */
|
||||
sprintf(db->_path, "%ssync/%s%s", dbpath, db->treename, dbext);
|
||||
snprintf(db->_path, pathsize, "%ssync/%s%s", dbpath, db->treename, dbext);
|
||||
}
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG, "database path for tree %s set to %s\n",
|
||||
db->treename, db->_path);
|
||||
|
@ -396,13 +439,13 @@ int _alpm_db_cmp(const void *d1, const void *d2)
|
|||
return strcmp(db1->treename, db2->treename);
|
||||
}
|
||||
|
||||
alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles)
|
||||
int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
|
||||
alpm_list_t **ret)
|
||||
{
|
||||
const alpm_list_t *i, *j, *k;
|
||||
alpm_list_t *ret = NULL;
|
||||
|
||||
if(!(db->usage & ALPM_DB_USAGE_SEARCH)) {
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* copy the pkgcache- we will free the list var after each needle */
|
||||
|
@ -415,12 +458,15 @@ alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles)
|
|||
if(i->data == NULL) {
|
||||
continue;
|
||||
}
|
||||
ret = NULL;
|
||||
*ret = NULL;
|
||||
targ = i->data;
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG, "searching for target '%s'\n", targ);
|
||||
|
||||
if(regcomp(®, targ, REG_EXTENDED | REG_NOSUB | REG_ICASE | REG_NEWLINE) != 0) {
|
||||
RET_ERR(db->handle, ALPM_ERR_INVALID_REGEX, NULL);
|
||||
db->handle->pm_errno = ALPM_ERR_INVALID_REGEX;
|
||||
alpm_list_free(list);
|
||||
alpm_list_free(*ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
for(j = list; j; j = j->next) {
|
||||
|
@ -463,18 +509,18 @@ alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles)
|
|||
_alpm_log(db->handle, ALPM_LOG_DEBUG,
|
||||
"search target '%s' matched '%s' on package '%s'\n",
|
||||
targ, matched, name);
|
||||
ret = alpm_list_add(ret, pkg);
|
||||
*ret = alpm_list_add(*ret, pkg);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the existing search list, and use the returned list for the
|
||||
* next needle. This allows for AND-based package searching. */
|
||||
alpm_list_free(list);
|
||||
list = ret;
|
||||
list = *ret;
|
||||
regfree(®);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Returns a new package cache from db.
|
||||
|
@ -517,18 +563,17 @@ static void free_groupcache(alpm_db_t *db)
|
|||
|
||||
void _alpm_db_free_pkgcache(alpm_db_t *db)
|
||||
{
|
||||
if(db == NULL || !(db->status & DB_STATUS_PKGCACHE)) {
|
||||
if(db == NULL || db->pkgcache == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG,
|
||||
"freeing package cache for repository '%s'\n", db->treename);
|
||||
|
||||
if(db->pkgcache) {
|
||||
alpm_list_free_inner(db->pkgcache->list,
|
||||
(alpm_list_fn_free)_alpm_pkg_free);
|
||||
_alpm_pkghash_free(db->pkgcache);
|
||||
}
|
||||
db->pkgcache = NULL;
|
||||
db->status &= ~DB_STATUS_PKGCACHE;
|
||||
|
||||
free_groupcache(db);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* db.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
|
||||
|
@ -62,15 +62,16 @@ struct db_operations {
|
|||
};
|
||||
|
||||
/* Database */
|
||||
struct __alpm_db_t {
|
||||
struct _alpm_db_t {
|
||||
alpm_handle_t *handle;
|
||||
char *treename;
|
||||
/* do not access directly, use _alpm_db_path(db) for lazy access */
|
||||
char *_path;
|
||||
alpm_pkghash_t *pkgcache;
|
||||
alpm_list_t *grpcache;
|
||||
alpm_list_t *cache_servers;
|
||||
alpm_list_t *servers;
|
||||
struct db_operations *ops;
|
||||
const struct db_operations *ops;
|
||||
|
||||
/* bitfields for validity, local, loaded caches, etc. */
|
||||
/* From _alpm_dbstatus_t */
|
||||
|
@ -87,7 +88,8 @@ alpm_db_t *_alpm_db_new(const char *treename, int is_local);
|
|||
void _alpm_db_free(alpm_db_t *db);
|
||||
const char *_alpm_db_path(alpm_db_t *db);
|
||||
int _alpm_db_cmp(const void *d1, const void *d2);
|
||||
alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles);
|
||||
int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
|
||||
alpm_list_t **ret);
|
||||
alpm_db_t *_alpm_db_register_local(alpm_handle_t *handle);
|
||||
alpm_db_t *_alpm_db_register_sync(alpm_handle_t *handle, const char *treename,
|
||||
int level);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* deps.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
|
||||
|
@ -181,13 +181,13 @@ static void _alpm_warn_dep_cycle(alpm_handle_t *handle, alpm_list_t *targets,
|
|||
} else {
|
||||
alpm_pkg_t *ancestorpkg = ancestor->data;
|
||||
alpm_pkg_t *childpkg = vertex->data;
|
||||
_alpm_log(handle, ALPM_LOG_WARNING, _("dependency cycle detected:\n"));
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, _("dependency cycle detected:\n"));
|
||||
if(reverse) {
|
||||
_alpm_log(handle, ALPM_LOG_WARNING,
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||
_("%s will be removed after its %s dependency\n"),
|
||||
ancestorpkg->name, childpkg->name);
|
||||
} else {
|
||||
_alpm_log(handle, ALPM_LOG_WARNING,
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||
_("%s will be installed before its %s dependency\n"),
|
||||
ancestorpkg->name, childpkg->name);
|
||||
}
|
||||
|
@ -286,12 +286,6 @@ static int no_dep_version(alpm_handle_t *handle)
|
|||
return (handle->trans->flags & ALPM_TRANS_FLAG_NODEPVERSION);
|
||||
}
|
||||
|
||||
/** Find a package satisfying a specified dependency.
|
||||
* The dependency can include versions with depmod operators.
|
||||
* @param pkgs an alpm_list_t* of alpm_pkg_t where the satisfier will be searched
|
||||
* @param depstring package or provision name, versioned or not
|
||||
* @return a alpm_pkg_t* satisfying depstring
|
||||
*/
|
||||
alpm_pkg_t SYMEXPORT *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstring)
|
||||
{
|
||||
alpm_depend_t *dep = alpm_dep_from_string(depstring);
|
||||
|
@ -303,15 +297,6 @@ alpm_pkg_t SYMEXPORT *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstri
|
|||
return pkg;
|
||||
}
|
||||
|
||||
/** Checks dependencies and returns missing ones in a list.
|
||||
* Dependencies can include versions with depmod operators.
|
||||
* @param handle the context handle
|
||||
* @param pkglist the list of local packages
|
||||
* @param remove an alpm_list_t* of packages to be removed
|
||||
* @param upgrade an alpm_list_t* of packages to be upgraded (remove-then-upgrade)
|
||||
* @param reversedeps handles the backward dependencies
|
||||
* @return an alpm_list_t* of alpm_depmissing_t pointers.
|
||||
*/
|
||||
alpm_list_t SYMEXPORT *alpm_checkdeps(alpm_handle_t *handle,
|
||||
alpm_list_t *pkglist, alpm_list_t *rem, alpm_list_t *upgrade,
|
||||
int reversedeps)
|
||||
|
@ -571,7 +556,7 @@ static void _alpm_select_depends(alpm_list_t **from, alpm_list_t **to,
|
|||
for(i = *from; i; i = next) {
|
||||
alpm_pkg_t *deppkg = i->data;
|
||||
next = i->next;
|
||||
if((explicit || alpm_pkg_get_reason(deppkg) != ALPM_PKG_REASON_EXPLICIT)
|
||||
if((explicit || alpm_pkg_get_reason(deppkg) == ALPM_PKG_REASON_DEPEND)
|
||||
&& _alpm_pkg_depends_on(pkg, deppkg)) {
|
||||
*to = alpm_list_add(*to, deppkg);
|
||||
*from = alpm_list_remove_item(*from, i);
|
||||
|
@ -763,18 +748,6 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/** Find a package satisfying a specified dependency.
|
||||
* First look for a literal, going through each db one by one. Then look for
|
||||
* providers. The first satisfier that belongs to an installed package is
|
||||
* returned. If no providers belong to an installed package then an
|
||||
* alpm_question_select_provider_t is created to select the provider.
|
||||
* The dependency can include versions with depmod operators.
|
||||
*
|
||||
* @param handle the context handle
|
||||
* @param dbs an alpm_list_t* of alpm_db_t where the satisfier will be searched
|
||||
* @param depstring package or provision name, versioned or not
|
||||
* @return a alpm_pkg_t* satisfying depstring
|
||||
*/
|
||||
alpm_pkg_t SYMEXPORT *alpm_find_dbs_satisfier(alpm_handle_t *handle,
|
||||
alpm_list_t *dbs, const char *depstring)
|
||||
{
|
||||
|
@ -889,11 +862,6 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/** Reverse of splitdep; make a dep string from a alpm_depend_t struct.
|
||||
* The string must be freed!
|
||||
* @param dep the depend to turn into a string
|
||||
* @return a string-formatted dependency with operator if necessary
|
||||
*/
|
||||
char SYMEXPORT *alpm_dep_compute_string(const alpm_depend_t *dep)
|
||||
{
|
||||
const char *name, *opr, *ver, *desc_delim, *desc;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* deps.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* diskspace.c
|
||||
*
|
||||
* Copyright (c) 2010-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2010-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
@ -111,6 +111,10 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
|
|||
}
|
||||
|
||||
while((mnt = getmntent(fp))) {
|
||||
if(mnt->mnt_dir == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
STRDUP(mp->mount_dir, mnt->mnt_dir, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
mp->mount_dir_len = strlen(mp->mount_dir);
|
||||
|
@ -134,6 +138,10 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
|
|||
}
|
||||
|
||||
while((ret = getmntent(fp, &mnt)) == 0) {
|
||||
if(mnt->mnt_mountp == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
STRDUP(mp->mount_dir, mnt->mnt_mountp, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
mp->mount_dir_len = strlen(mp->mount_dir);
|
||||
|
@ -161,6 +169,10 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
|
|||
}
|
||||
|
||||
for(; entries-- > 0; fsp++) {
|
||||
if(fsp->f_mntonname == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
STRDUP(mp->mount_dir, fsp->f_mntonname, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
mp->mount_dir_len = strlen(mp->mount_dir);
|
||||
|
@ -359,7 +371,7 @@ static int check_mountpoint(alpm_handle_t *handle, alpm_mountpoint_t *mp)
|
|||
}
|
||||
|
||||
int _alpm_check_downloadspace(alpm_handle_t *handle, const char *cachedir,
|
||||
size_t num_files, off_t *file_sizes)
|
||||
size_t num_files, const off_t *file_sizes)
|
||||
{
|
||||
alpm_list_t *mount_points;
|
||||
alpm_mountpoint_t *cachedir_mp;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* diskspace.h
|
||||
*
|
||||
* Copyright (c) 2010-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2010-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
@ -43,7 +43,7 @@ enum mount_fsinfo {
|
|||
MOUNT_FSINFO_FAIL,
|
||||
};
|
||||
|
||||
typedef struct __alpm_mountpoint_t {
|
||||
typedef struct _alpm_mountpoint_t {
|
||||
/* mount point information */
|
||||
char *mount_dir;
|
||||
size_t mount_dir_len;
|
||||
|
@ -58,6 +58,6 @@ typedef struct __alpm_mountpoint_t {
|
|||
|
||||
int _alpm_check_diskspace(alpm_handle_t *handle);
|
||||
int _alpm_check_downloadspace(alpm_handle_t *handle, const char *cachedir,
|
||||
size_t num_files, off_t *file_sizes);
|
||||
size_t num_files, const off_t *file_sizes);
|
||||
|
||||
#endif /* ALPM_DISKSPACE_H */
|
||||
|
|
1462
lib/libalpm/dload.c
1462
lib/libalpm/dload.c
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* dload.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -26,13 +26,24 @@
|
|||
struct dload_payload {
|
||||
alpm_handle_t *handle;
|
||||
const char *tempfile_openmode;
|
||||
/* name of the remote file */
|
||||
char *remote_name;
|
||||
/* temporary file name, to which the payload is downloaded */
|
||||
char *tempfile_name;
|
||||
/* name to which the downloaded file will be renamed */
|
||||
char *destfile_name;
|
||||
char *content_disp_name;
|
||||
/* client has to provide either
|
||||
* 1) fileurl - full URL to the file
|
||||
* 2) pair of (servers, filepath), in this case ALPM iterates over the
|
||||
* server list and tries to download "$server/$filepath"
|
||||
*/
|
||||
char *fileurl;
|
||||
char *filepath; /* download URL path */
|
||||
alpm_list_t *cache_servers;
|
||||
alpm_list_t *servers;
|
||||
long respcode;
|
||||
/* the mtime of the existing version of this file, if there is one */
|
||||
long mtime_existing_file;
|
||||
off_t initial_size;
|
||||
off_t max_size;
|
||||
off_t prevprogress;
|
||||
|
@ -40,17 +51,22 @@ struct dload_payload {
|
|||
int allow_resume;
|
||||
int errors_ok;
|
||||
int unlink_on_fail;
|
||||
int trust_remote_name;
|
||||
int cb_initialized;
|
||||
int download_signature; /* specifies if an accompanion *.sig file need to be downloaded*/
|
||||
int signature_optional; /* *.sig file is optional */
|
||||
#ifdef HAVE_LIBCURL
|
||||
CURLcode curlerr; /* last error produced by curl */
|
||||
CURL *curl;
|
||||
char error_buffer[CURL_ERROR_SIZE];
|
||||
int signature; /* specifies if this payload is for a signature file */
|
||||
int request_errors_ok; /* per-request errors-ok */
|
||||
#endif
|
||||
FILE *localf; /* temp download file */
|
||||
};
|
||||
|
||||
void _alpm_dload_payload_reset(struct dload_payload *payload);
|
||||
void _alpm_dload_payload_reset_for_retry(struct dload_payload *payload);
|
||||
|
||||
int _alpm_download(struct dload_payload *payload, const char *localpath,
|
||||
char **final_file, const char **final_url);
|
||||
int _alpm_download(alpm_handle_t *handle,
|
||||
alpm_list_t *payloads /* struct dload_payload */,
|
||||
const char *localpath,
|
||||
const char *temporary_localpath);
|
||||
|
||||
#endif /* ALPM_DLOAD_H */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* error.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -90,6 +90,8 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
|
|||
return _("transaction not initialized");
|
||||
case ALPM_ERR_TRANS_DUP_TARGET:
|
||||
return _("duplicate target");
|
||||
case ALPM_ERR_TRANS_DUP_FILENAME:
|
||||
return _("duplicate filename");
|
||||
case ALPM_ERR_TRANS_NOT_INITIALIZED:
|
||||
return _("transaction not initialized");
|
||||
case ALPM_ERR_TRANS_NOT_PREPARED:
|
||||
|
@ -123,8 +125,6 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
|
|||
return _("package filename is not valid");
|
||||
case ALPM_ERR_PKG_INVALID_ARCH:
|
||||
return _("package architecture is not valid");
|
||||
case ALPM_ERR_PKG_REPO_NOT_FOUND:
|
||||
return _("could not find repository for target");
|
||||
/* Signatures */
|
||||
case ALPM_ERR_SIG_MISSING:
|
||||
return _("missing PGP signature");
|
||||
|
@ -137,7 +137,7 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
|
|||
return _("conflicting dependencies");
|
||||
case ALPM_ERR_FILE_CONFLICTS:
|
||||
return _("conflicting files");
|
||||
/* Miscellaenous */
|
||||
/* Miscellaneous */
|
||||
case ALPM_ERR_RETRIEVE:
|
||||
return _("failed to retrieve some files");
|
||||
case ALPM_ERR_INVALID_REGEX:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* filelist.c
|
||||
*
|
||||
* Copyright (c) 2012-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2012-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
@ -118,12 +118,12 @@ static int _alpm_files_cmp(const void *f1, const void *f2)
|
|||
return strcmp(file1->name, file2->name);
|
||||
}
|
||||
|
||||
alpm_file_t SYMEXPORT *alpm_filelist_contains(alpm_filelist_t *filelist,
|
||||
alpm_file_t SYMEXPORT *alpm_filelist_contains(const alpm_filelist_t *filelist,
|
||||
const char *path)
|
||||
{
|
||||
alpm_file_t key;
|
||||
|
||||
if(!filelist) {
|
||||
if(!filelist || filelist->count == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* filelist.h
|
||||
*
|
||||
* Copyright (c) 2012-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2012-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* graph.c - helpful graph structure and setup/teardown methods
|
||||
*
|
||||
* Copyright (c) 2007-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2007-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* graph.h - helpful graph structure and setup/teardown methods
|
||||
*
|
||||
* Copyright (c) 2007-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2007-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
@ -23,19 +23,19 @@
|
|||
|
||||
#include "alpm_list.h"
|
||||
|
||||
enum __alpm_graph_vertex_state {
|
||||
enum _alpm_graph_vertex_state {
|
||||
ALPM_GRAPH_STATE_UNPROCESSED,
|
||||
ALPM_GRAPH_STATE_PROCESSING,
|
||||
ALPM_GRAPH_STATE_PROCESSED
|
||||
};
|
||||
|
||||
typedef struct __alpm_graph_t {
|
||||
typedef struct _alpm_graph_t {
|
||||
void *data;
|
||||
struct __alpm_graph_t *parent; /* where did we come from? */
|
||||
struct _alpm_graph_t *parent; /* where did we come from? */
|
||||
alpm_list_t *children;
|
||||
alpm_list_t *iterator; /* used for DFS without recursion */
|
||||
off_t weight; /* weight of the node */
|
||||
enum __alpm_graph_vertex_state state;
|
||||
enum _alpm_graph_vertex_state state;
|
||||
} alpm_graph_t;
|
||||
|
||||
alpm_graph_t *_alpm_graph_new(void);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* group.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* group.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* handle.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
|
||||
|
@ -48,12 +48,28 @@ alpm_handle_t *_alpm_handle_new(void)
|
|||
return handle;
|
||||
}
|
||||
|
||||
/* free all in-memory resources */
|
||||
void _alpm_handle_free(alpm_handle_t *handle)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
alpm_db_t *db;
|
||||
|
||||
if(handle == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* close local database */
|
||||
if((db = handle->db_local)) {
|
||||
db->ops->unregister(db);
|
||||
}
|
||||
|
||||
/* unregister all sync dbs */
|
||||
for(i = handle->dbs_sync; i; i = i->next) {
|
||||
db = i->data;
|
||||
db->ops->unregister(db);
|
||||
}
|
||||
alpm_list_free(handle->dbs_sync);
|
||||
|
||||
/* close logfile */
|
||||
if(handle->logstream) {
|
||||
fclose(handle->logstream);
|
||||
|
@ -64,15 +80,16 @@ void _alpm_handle_free(alpm_handle_t *handle)
|
|||
closelog();
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
/* release curl handle */
|
||||
curl_easy_cleanup(handle->curl);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LIBGPGME
|
||||
FREELIST(handle->known_keys);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
curl_multi_cleanup(handle->curlm);
|
||||
curl_global_cleanup();
|
||||
FREELIST(handle->server_errors);
|
||||
#endif
|
||||
|
||||
/* free memory */
|
||||
_alpm_trans_free(handle->trans);
|
||||
FREE(handle->root);
|
||||
|
@ -82,8 +99,9 @@ void _alpm_handle_free(alpm_handle_t *handle)
|
|||
FREELIST(handle->hookdirs);
|
||||
FREE(handle->logfile);
|
||||
FREE(handle->lockfile);
|
||||
FREE(handle->arch);
|
||||
FREELIST(handle->architectures);
|
||||
FREE(handle->gpgdir);
|
||||
FREE(handle->sandboxuser);
|
||||
FREELIST(handle->noupgrade);
|
||||
FREELIST(handle->noextract);
|
||||
FREELIST(handle->ignorepkg);
|
||||
|
@ -105,7 +123,7 @@ int _alpm_handle_lock(alpm_handle_t *handle)
|
|||
ASSERT(handle->lockfd < 0, return 0);
|
||||
|
||||
/* create the dir of the lockfile first */
|
||||
dir = strdup(handle->lockfile);
|
||||
STRDUP(dir, handle->lockfile, return -1);
|
||||
ptr = strrchr(dir, '/');
|
||||
if(ptr) {
|
||||
*ptr = '\0';
|
||||
|
@ -123,12 +141,6 @@ int _alpm_handle_lock(alpm_handle_t *handle)
|
|||
return (handle->lockfd >= 0 ? 0 : -1);
|
||||
}
|
||||
|
||||
/** Remove the database lock file
|
||||
* @param handle the context handle
|
||||
* @return 0 on success, -1 on error
|
||||
*
|
||||
* @note Safe to call from inside signal handlers.
|
||||
*/
|
||||
int SYMEXPORT alpm_unlock(alpm_handle_t *handle)
|
||||
{
|
||||
ASSERT(handle != NULL, return -1);
|
||||
|
@ -173,22 +185,34 @@ alpm_cb_log SYMEXPORT alpm_option_get_logcb(alpm_handle_t *handle)
|
|||
return handle->logcb;
|
||||
}
|
||||
|
||||
void SYMEXPORT *alpm_option_get_logcb_ctx(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->logcb_ctx;
|
||||
}
|
||||
|
||||
alpm_cb_download SYMEXPORT alpm_option_get_dlcb(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->dlcb;
|
||||
}
|
||||
|
||||
void SYMEXPORT *alpm_option_get_dlcb_ctx(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->dlcb_ctx;
|
||||
}
|
||||
|
||||
alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->fetchcb;
|
||||
}
|
||||
|
||||
alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb(alpm_handle_t *handle)
|
||||
void SYMEXPORT *alpm_option_get_fetchcb_ctx(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->totaldlcb;
|
||||
return handle->fetchcb_ctx;
|
||||
}
|
||||
|
||||
alpm_cb_event SYMEXPORT alpm_option_get_eventcb(alpm_handle_t *handle)
|
||||
|
@ -197,18 +221,36 @@ alpm_cb_event SYMEXPORT alpm_option_get_eventcb(alpm_handle_t *handle)
|
|||
return handle->eventcb;
|
||||
}
|
||||
|
||||
void SYMEXPORT *alpm_option_get_eventcb_ctx(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->eventcb_ctx;
|
||||
}
|
||||
|
||||
alpm_cb_question SYMEXPORT alpm_option_get_questioncb(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->questioncb;
|
||||
}
|
||||
|
||||
void SYMEXPORT *alpm_option_get_questioncb_ctx(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->questioncb_ctx;
|
||||
}
|
||||
|
||||
alpm_cb_progress SYMEXPORT alpm_option_get_progresscb(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->progresscb;
|
||||
}
|
||||
|
||||
void SYMEXPORT *alpm_option_get_progresscb_ctx(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->progresscb_ctx;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_option_get_root(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
|
@ -251,6 +293,12 @@ const char SYMEXPORT *alpm_option_get_gpgdir(alpm_handle_t *handle)
|
|||
return handle->gpgdir;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_option_get_sandboxuser(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->sandboxuser;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_get_usesyslog(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
|
@ -293,10 +341,10 @@ alpm_list_t SYMEXPORT *alpm_option_get_assumeinstalled(alpm_handle_t *handle)
|
|||
return handle->assumeinstalled;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_option_get_arch(alpm_handle_t *handle)
|
||||
alpm_list_t SYMEXPORT *alpm_option_get_architectures(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->arch;
|
||||
return handle->architectures;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_get_checkspace(alpm_handle_t *handle)
|
||||
|
@ -311,52 +359,57 @@ const char SYMEXPORT *alpm_option_get_dbext(alpm_handle_t *handle)
|
|||
return handle->dbext;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_logcb(alpm_handle_t *handle, alpm_cb_log cb)
|
||||
int SYMEXPORT alpm_option_get_parallel_downloads(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
return handle->parallel_downloads;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_logcb(alpm_handle_t *handle, alpm_cb_log cb, void *ctx)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->logcb = cb;
|
||||
handle->logcb_ctx = ctx;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_dlcb(alpm_handle_t *handle, alpm_cb_download cb)
|
||||
int SYMEXPORT alpm_option_set_dlcb(alpm_handle_t *handle, alpm_cb_download cb, void *ctx)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->dlcb = cb;
|
||||
handle->dlcb_ctx = ctx;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb)
|
||||
int SYMEXPORT alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb, void *ctx)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->fetchcb = cb;
|
||||
handle->fetchcb_ctx = ctx;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_totaldlcb(alpm_handle_t *handle, alpm_cb_totaldl cb)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->totaldlcb = cb;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_eventcb(alpm_handle_t *handle, alpm_cb_event cb)
|
||||
int SYMEXPORT alpm_option_set_eventcb(alpm_handle_t *handle, alpm_cb_event cb, void *ctx)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->eventcb = cb;
|
||||
handle->eventcb_ctx = ctx;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_questioncb(alpm_handle_t *handle, alpm_cb_question cb)
|
||||
int SYMEXPORT alpm_option_set_questioncb(alpm_handle_t *handle, alpm_cb_question cb, void *ctx)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->questioncb = cb;
|
||||
handle->questioncb_ctx = ctx;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_progresscb(alpm_handle_t *handle, alpm_cb_progress cb)
|
||||
int SYMEXPORT alpm_option_set_progresscb(alpm_handle_t *handle, alpm_cb_progress cb, void *ctx)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->progresscb = cb;
|
||||
handle->progresscb_ctx = ctx;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -549,6 +602,19 @@ int SYMEXPORT alpm_option_set_gpgdir(alpm_handle_t *handle, const char *gpgdir)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_sandboxuser(alpm_handle_t *handle, const char *sandboxuser)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
if(handle->sandboxuser) {
|
||||
FREE(handle->sandboxuser);
|
||||
}
|
||||
|
||||
STRDUP(handle->sandboxuser, sandboxuser, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "option 'sandboxuser' = %s\n", handle->sandboxuser);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_usesyslog(alpm_handle_t *handle, int usesyslog)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
|
@ -690,6 +756,7 @@ int SYMEXPORT alpm_option_set_assumeinstalled(alpm_handle_t *handle, alpm_list_t
|
|||
if(handle->assumeinstalled) {
|
||||
alpm_list_free_inner(handle->assumeinstalled, (alpm_list_fn_free)alpm_dep_free);
|
||||
alpm_list_free(handle->assumeinstalled);
|
||||
handle->assumeinstalled = NULL;
|
||||
}
|
||||
while(deps) {
|
||||
if(alpm_option_add_assumeinstalled(handle, deps->data) != 0) {
|
||||
|
@ -737,11 +804,29 @@ int SYMEXPORT alpm_option_remove_assumeinstalled(alpm_handle_t *handle, const al
|
|||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_arch(alpm_handle_t *handle, const char *arch)
|
||||
int SYMEXPORT alpm_option_add_architecture(alpm_handle_t *handle, const char *arch)
|
||||
{
|
||||
handle->architectures = alpm_list_add(handle->architectures, strdup(arch));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_architectures(alpm_handle_t *handle, alpm_list_t *arches)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
if(handle->arch) FREE(handle->arch);
|
||||
STRDUP(handle->arch, arch, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
|
||||
if(handle->architectures) FREELIST(handle->architectures);
|
||||
handle->architectures = alpm_list_strdup(arches);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_remove_architecture(alpm_handle_t *handle, const char *arch)
|
||||
{
|
||||
char *vdata = NULL;
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->architectures = alpm_list_remove_str(handle->architectures, arch, &vdata);
|
||||
if(vdata != NULL) {
|
||||
FREE(vdata);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -850,14 +935,39 @@ int SYMEXPORT alpm_option_get_remote_file_siglevel(alpm_handle_t *handle)
|
|||
}
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_get_disable_dl_timeout(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
return handle->disable_dl_timeout;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_disable_dl_timeout(alpm_handle_t *handle,
|
||||
unsigned short disable_dl_timeout)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
#ifdef HAVE_LIBCURL
|
||||
handle->disable_dl_timeout = disable_dl_timeout;
|
||||
#else
|
||||
(void)disable_dl_timeout; /* silence unused variable warnings */
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_parallel_downloads(alpm_handle_t *handle,
|
||||
unsigned int num_streams)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
ASSERT(num_streams >= 1, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
handle->parallel_downloads = num_streams;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_get_disable_sandbox(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
return handle->disable_sandbox;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_disable_sandbox(alpm_handle_t *handle,
|
||||
unsigned short disable_sandbox)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
handle->disable_sandbox = disable_sandbox;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* handle.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "alpm_list.h"
|
||||
#include "alpm.h"
|
||||
#include "trans.h"
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
#include <curl/curl.h>
|
||||
|
@ -34,23 +35,23 @@
|
|||
#define EVENT(h, e) \
|
||||
do { \
|
||||
if((h)->eventcb) { \
|
||||
(h)->eventcb((alpm_event_t *) (e)); \
|
||||
(h)->eventcb((h)->eventcb_ctx, (alpm_event_t *) (e)); \
|
||||
} \
|
||||
} while(0)
|
||||
#define QUESTION(h, q) \
|
||||
do { \
|
||||
if((h)->questioncb) { \
|
||||
(h)->questioncb((alpm_question_t *) (q)); \
|
||||
(h)->questioncb((h)->questioncb_ctx, (alpm_question_t *) (q)); \
|
||||
} \
|
||||
} while(0)
|
||||
#define PROGRESS(h, e, p, per, n, r) \
|
||||
do { \
|
||||
if((h)->progresscb) { \
|
||||
(h)->progresscb(e, p, per, n, r); \
|
||||
(h)->progresscb((h)->progresscb_ctx, e, p, per, n, r); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
struct __alpm_handle_t {
|
||||
struct _alpm_handle_t {
|
||||
/* internal usage */
|
||||
alpm_db_t *db_local; /* local db pointer */
|
||||
alpm_list_t *dbs_sync; /* List of (alpm_db_t *) */
|
||||
|
@ -59,22 +60,31 @@ struct __alpm_handle_t {
|
|||
|
||||
#ifdef HAVE_LIBCURL
|
||||
/* libcurl handle */
|
||||
CURL *curl; /* reusable curl_easy handle */
|
||||
unsigned short disable_dl_timeout;
|
||||
CURLM *curlm;
|
||||
alpm_list_t *server_errors;
|
||||
#endif
|
||||
|
||||
unsigned short disable_dl_timeout;
|
||||
unsigned short disable_sandbox;
|
||||
unsigned int parallel_downloads; /* number of download streams */
|
||||
|
||||
#ifdef HAVE_LIBGPGME
|
||||
alpm_list_t *known_keys; /* keys verified to be in our keychain */
|
||||
#endif
|
||||
|
||||
/* callback functions */
|
||||
alpm_cb_log logcb; /* Log callback function */
|
||||
void *logcb_ctx;
|
||||
alpm_cb_download dlcb; /* Download callback function */
|
||||
alpm_cb_totaldl totaldlcb; /* Total download callback function */
|
||||
void *dlcb_ctx;
|
||||
alpm_cb_fetch fetchcb; /* Download file callback function */
|
||||
void *fetchcb_ctx;
|
||||
alpm_cb_event eventcb;
|
||||
void *eventcb_ctx;
|
||||
alpm_cb_question questioncb;
|
||||
void *questioncb_ctx;
|
||||
alpm_cb_progress progresscb;
|
||||
void *progresscb_ctx;
|
||||
|
||||
/* filesystem paths */
|
||||
char *root; /* Root path, default '/' */
|
||||
|
@ -82,6 +92,7 @@ struct __alpm_handle_t {
|
|||
char *logfile; /* Name of the log file */
|
||||
char *lockfile; /* Name of the lock file */
|
||||
char *gpgdir; /* Directory where GnuPG files are stored */
|
||||
char *sandboxuser; /* User to switch to for sensitive operations */
|
||||
alpm_list_t *cachedirs; /* Paths to pacman cache directories */
|
||||
alpm_list_t *hookdirs; /* Paths to hook directories */
|
||||
alpm_list_t *overwrite_files; /* Paths that may be overwritten */
|
||||
|
@ -94,7 +105,7 @@ struct __alpm_handle_t {
|
|||
alpm_list_t *assumeinstalled; /* List of virtual packages used to satisfy dependencies */
|
||||
|
||||
/* options */
|
||||
char *arch; /* Architecture of packages we should allow */
|
||||
alpm_list_t *architectures; /* Architectures of packages we should allow */
|
||||
int usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
|
||||
int checkspace; /* Check disk space before installing */
|
||||
char *dbext; /* Sync DB extension */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* hook.c
|
||||
*
|
||||
* Copyright (c) 2015-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2015-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* hook.h
|
||||
*
|
||||
* Copyright (c) 2015-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2015-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
../../src/common/ini.c
|
|
@ -1 +0,0 @@
|
|||
../../src/common/ini.h
|
|
@ -1,13 +0,0 @@
|
|||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: libalpm
|
||||
Description: Arch Linux package management library
|
||||
URL: http://www.archlinux.org/pacman/
|
||||
Version: @LIB_VERSION@
|
||||
Requires.private: libarchive @pc_crypto@ @pc_libcurl@ @pc_gpgme@
|
||||
Cflags: -I${includedir} @LFS_CFLAGS@
|
||||
Libs: -L${libdir} -lalpm
|
||||
Libs.private: @LIBS@ @pc_gpgme_libs@
|
|
@ -4,7 +4,7 @@
|
|||
/*
|
||||
* libarchive-compat.h
|
||||
*
|
||||
* Copyright (c) 2013-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2013-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
@ -24,48 +24,28 @@
|
|||
|
||||
static inline int _alpm_archive_read_free(struct archive *archive)
|
||||
{
|
||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
|
||||
return archive_read_free(archive);
|
||||
#else
|
||||
return archive_read_finish(archive);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int64_t _alpm_archive_compressed_ftell(struct archive *archive)
|
||||
{
|
||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
|
||||
return archive_filter_bytes(archive, -1);
|
||||
#else
|
||||
return archive_position_compressed(archive);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int _alpm_archive_read_open_file(struct archive *archive,
|
||||
const char *filename, size_t block_size)
|
||||
{
|
||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
|
||||
return archive_read_open_filename(archive, filename, block_size);
|
||||
#else
|
||||
return archive_read_open_file(archive, filename, block_size);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int _alpm_archive_filter_code(struct archive *archive)
|
||||
{
|
||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
|
||||
return archive_filter_code(archive, 0);
|
||||
#else
|
||||
return archive_compression(archive);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int _alpm_archive_read_support_filter_all(struct archive *archive)
|
||||
{
|
||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
|
||||
return archive_read_support_filter_all(archive);
|
||||
#else
|
||||
return archive_read_support_compression_all(archive);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* LIBARCHIVE_COMPAT_H */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* log.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -30,11 +30,6 @@
|
|||
#include "util.h"
|
||||
#include "alpm.h"
|
||||
|
||||
/** \addtogroup alpm_log Logging Functions
|
||||
* @brief Functions to log using libalpm
|
||||
* @{
|
||||
*/
|
||||
|
||||
static int _alpm_log_leader(FILE *f, const char *prefix)
|
||||
{
|
||||
time_t t = time(NULL);
|
||||
|
@ -47,12 +42,6 @@ static int _alpm_log_leader(FILE *f, const char *prefix)
|
|||
return fprintf(f, "[%s] [%s] ", timestamp, prefix);
|
||||
}
|
||||
|
||||
/** A printf-like function for logging.
|
||||
* @param handle the context handle
|
||||
* @param prefix caller-specific prefix for the log
|
||||
* @param fmt output format
|
||||
* @return 0 on success, -1 on error (pm_errno is set accordingly)
|
||||
*/
|
||||
int SYMEXPORT alpm_logaction(alpm_handle_t *handle, const char *prefix,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
|
@ -109,8 +98,6 @@ int SYMEXPORT alpm_logaction(alpm_handle_t *handle, const char *prefix,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
void _alpm_log(alpm_handle_t *handle, alpm_loglevel_t flag, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
@ -120,6 +107,6 @@ void _alpm_log(alpm_handle_t *handle, alpm_loglevel_t flag, const char *fmt, ...
|
|||
}
|
||||
|
||||
va_start(args, fmt);
|
||||
handle->logcb(flag, fmt, args);
|
||||
handle->logcb(handle->logcb_ctx, flag, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* log.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
|
@ -24,6 +24,9 @@ libalpm_sources = files('''
|
|||
pkghash.h pkghash.c
|
||||
rawstr.c
|
||||
remove.h remove.c
|
||||
sandbox.h sandbox.c
|
||||
sandbox_fs.h sandbox_fs.c
|
||||
sandbox_syscalls.h sandbox_syscalls.c
|
||||
signing.c signing.h
|
||||
sync.h sync.c
|
||||
trans.h trans.c
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* package.c
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>
|
||||
|
@ -21,6 +21,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
|
@ -34,12 +35,6 @@
|
|||
#include "handle.h"
|
||||
#include "deps.h"
|
||||
|
||||
/** \addtogroup alpm_packages Package Functions
|
||||
* @brief Functions to manipulate libalpm packages
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Free a package. */
|
||||
int SYMEXPORT alpm_pkg_free(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return -1);
|
||||
|
@ -52,7 +47,6 @@ int SYMEXPORT alpm_pkg_free(alpm_pkg_t *pkg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** Check the integrity (with md5) of a package from the sync cache. */
|
||||
int SYMEXPORT alpm_pkg_checkmd5sum(alpm_pkg_t *pkg)
|
||||
{
|
||||
char *fpath;
|
||||
|
@ -105,6 +99,7 @@ static alpm_list_t *_pkg_get_provides(alpm_pkg_t *pkg) { return pkg->provides;
|
|||
static alpm_list_t *_pkg_get_replaces(alpm_pkg_t *pkg) { return pkg->replaces; }
|
||||
static alpm_filelist_t *_pkg_get_files(alpm_pkg_t *pkg) { return &(pkg->files); }
|
||||
static alpm_list_t *_pkg_get_backup(alpm_pkg_t *pkg) { return pkg->backup; }
|
||||
static alpm_list_t *_pkg_get_xdata(alpm_pkg_t *pkg) { return pkg->xdata; }
|
||||
|
||||
static void *_pkg_changelog_open(alpm_pkg_t UNUSED *pkg)
|
||||
{
|
||||
|
@ -145,7 +140,7 @@ static int _pkg_force_load(alpm_pkg_t UNUSED *pkg) { return 0; }
|
|||
/** The standard package operations struct. Get fields directly from the
|
||||
* struct itself with no abstraction layer or any type of lazy loading.
|
||||
*/
|
||||
struct pkg_operations default_pkg_ops = {
|
||||
const struct pkg_operations default_pkg_ops = {
|
||||
.get_base = _pkg_get_base,
|
||||
.get_desc = _pkg_get_desc,
|
||||
.get_url = _pkg_get_url,
|
||||
|
@ -169,6 +164,7 @@ struct pkg_operations default_pkg_ops = {
|
|||
.get_replaces = _pkg_get_replaces,
|
||||
.get_files = _pkg_get_files,
|
||||
.get_backup = _pkg_get_backup,
|
||||
.get_xdata = _pkg_get_xdata,
|
||||
|
||||
.changelog_open = _pkg_changelog_open,
|
||||
.changelog_read = _pkg_changelog_read,
|
||||
|
@ -198,6 +194,12 @@ const char SYMEXPORT *alpm_pkg_get_base(alpm_pkg_t *pkg)
|
|||
return pkg->ops->get_base(pkg);
|
||||
}
|
||||
|
||||
alpm_handle_t SYMEXPORT *alpm_pkg_get_handle(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
return pkg->handle;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_pkg_get_name(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
|
@ -275,6 +277,44 @@ const char SYMEXPORT *alpm_pkg_get_base64_sig(alpm_pkg_t *pkg)
|
|||
return pkg->base64_sig;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_pkg_get_sig(alpm_pkg_t *pkg, unsigned char **sig, size_t *sig_len)
|
||||
{
|
||||
ASSERT(pkg != NULL, return -1);
|
||||
|
||||
if(pkg->base64_sig) {
|
||||
int ret = alpm_decode_signature(pkg->base64_sig, sig, sig_len);
|
||||
if(ret != 0) {
|
||||
RET_ERR(pkg->handle, ALPM_ERR_SIG_INVALID, -1);
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
char *pkgpath = NULL, *sigpath = NULL;
|
||||
alpm_errno_t err;
|
||||
int ret = -1;
|
||||
|
||||
pkgpath = _alpm_filecache_find(pkg->handle, pkg->filename);
|
||||
if(!pkgpath) {
|
||||
GOTO_ERR(pkg->handle, ALPM_ERR_PKG_NOT_FOUND, cleanup);
|
||||
}
|
||||
sigpath = _alpm_sigpath(pkg->handle, pkgpath);
|
||||
if(!sigpath || _alpm_access(pkg->handle, NULL, sigpath, R_OK)) {
|
||||
GOTO_ERR(pkg->handle, ALPM_ERR_SIG_MISSING, cleanup);
|
||||
}
|
||||
err = _alpm_read_file(sigpath, sig, sig_len);
|
||||
if(err == ALPM_ERR_OK) {
|
||||
_alpm_log(pkg->handle, ALPM_LOG_DEBUG, "found detached signature %s with size %ld\n",
|
||||
sigpath, *sig_len);
|
||||
} else {
|
||||
GOTO_ERR(pkg->handle, err, cleanup);
|
||||
}
|
||||
ret = 0;
|
||||
cleanup:
|
||||
FREE(pkgpath);
|
||||
FREE(sigpath);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_pkg_get_arch(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
|
@ -397,7 +437,6 @@ alpm_db_t SYMEXPORT *alpm_pkg_get_db(alpm_pkg_t *pkg)
|
|||
return pkg->origin_data.db;
|
||||
}
|
||||
|
||||
/** Open a package changelog for reading. */
|
||||
void SYMEXPORT *alpm_pkg_changelog_open(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
|
@ -405,7 +444,6 @@ void SYMEXPORT *alpm_pkg_changelog_open(alpm_pkg_t *pkg)
|
|||
return pkg->ops->changelog_open(pkg);
|
||||
}
|
||||
|
||||
/** Read data from an open changelog 'file stream'. */
|
||||
size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
|
||||
const alpm_pkg_t *pkg, void *fp)
|
||||
{
|
||||
|
@ -414,7 +452,6 @@ size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
|
|||
return pkg->ops->changelog_read(ptr, size, pkg, fp);
|
||||
}
|
||||
|
||||
/** Close a package changelog for reading. */
|
||||
int SYMEXPORT alpm_pkg_changelog_close(const alpm_pkg_t *pkg, void *fp)
|
||||
{
|
||||
ASSERT(pkg != NULL, return -1);
|
||||
|
@ -422,7 +459,6 @@ int SYMEXPORT alpm_pkg_changelog_close(const alpm_pkg_t *pkg, void *fp)
|
|||
return pkg->ops->changelog_close(pkg, fp);
|
||||
}
|
||||
|
||||
/** Open a package mtree file for reading. */
|
||||
struct archive SYMEXPORT *alpm_pkg_mtree_open(alpm_pkg_t * pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
|
@ -430,7 +466,6 @@ struct archive SYMEXPORT *alpm_pkg_mtree_open(alpm_pkg_t * pkg)
|
|||
return pkg->ops->mtree_open(pkg);
|
||||
}
|
||||
|
||||
/** Read entry from an open mtree file. */
|
||||
int SYMEXPORT alpm_pkg_mtree_next(const alpm_pkg_t * pkg, struct archive *archive,
|
||||
struct archive_entry **entry)
|
||||
{
|
||||
|
@ -439,7 +474,6 @@ int SYMEXPORT alpm_pkg_mtree_next(const alpm_pkg_t * pkg, struct archive *archiv
|
|||
return pkg->ops->mtree_next(pkg, archive, entry);
|
||||
}
|
||||
|
||||
/** Close a package mtree file for reading. */
|
||||
int SYMEXPORT alpm_pkg_mtree_close(const alpm_pkg_t * pkg, struct archive *archive)
|
||||
{
|
||||
ASSERT(pkg != NULL, return -1);
|
||||
|
@ -454,6 +488,13 @@ int SYMEXPORT alpm_pkg_has_scriptlet(alpm_pkg_t *pkg)
|
|||
return pkg->ops->has_scriptlet(pkg);
|
||||
}
|
||||
|
||||
alpm_list_t SYMEXPORT *alpm_pkg_get_xdata(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
pkg->handle->pm_errno = ALPM_ERR_OK;
|
||||
return pkg->ops->get_xdata(pkg);
|
||||
}
|
||||
|
||||
static void find_requiredby(alpm_pkg_t *pkg, alpm_db_t *db, alpm_list_t **reqs,
|
||||
int optional)
|
||||
{
|
||||
|
@ -510,21 +551,16 @@ static alpm_list_t *compute_requiredby(alpm_pkg_t *pkg, int optional)
|
|||
return reqs;
|
||||
}
|
||||
|
||||
/** Compute the packages requiring a given package. */
|
||||
alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(alpm_pkg_t *pkg)
|
||||
{
|
||||
return compute_requiredby(pkg, 0);
|
||||
}
|
||||
|
||||
/** Compute the packages optionally requiring a given package. */
|
||||
alpm_list_t SYMEXPORT *alpm_pkg_compute_optionalfor(alpm_pkg_t *pkg)
|
||||
{
|
||||
return compute_requiredby(pkg, 1);
|
||||
}
|
||||
|
||||
|
||||
/** @} */
|
||||
|
||||
alpm_file_t *_alpm_file_copy(alpm_file_t *dest,
|
||||
const alpm_file_t *src)
|
||||
{
|
||||
|
@ -651,6 +687,30 @@ static void free_deplist(alpm_list_t *deps)
|
|||
alpm_list_free(deps);
|
||||
}
|
||||
|
||||
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string)
|
||||
{
|
||||
alpm_pkg_xdata_t *pd;
|
||||
const char *sep;
|
||||
if(string == NULL || (sep = strchr(string, '=')) == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CALLOC(pd, 1, sizeof(alpm_pkg_xdata_t), return NULL);
|
||||
STRNDUP(pd->name, string, sep - string, FREE(pd); return NULL);
|
||||
STRDUP(pd->value, sep + 1, FREE(pd->name); FREE(pd); return NULL);
|
||||
|
||||
return pd;
|
||||
}
|
||||
|
||||
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd)
|
||||
{
|
||||
if(pd) {
|
||||
free(pd->name);
|
||||
free(pd->value);
|
||||
free(pd);
|
||||
}
|
||||
}
|
||||
|
||||
void _alpm_pkg_free(alpm_pkg_t *pkg)
|
||||
{
|
||||
if(pkg == NULL) {
|
||||
|
@ -681,6 +741,8 @@ void _alpm_pkg_free(alpm_pkg_t *pkg)
|
|||
}
|
||||
alpm_list_free_inner(pkg->backup, (alpm_list_fn_free)_alpm_backup_free);
|
||||
alpm_list_free(pkg->backup);
|
||||
alpm_list_free_inner(pkg->xdata, (alpm_list_fn_free)_alpm_pkg_xdata_free);
|
||||
alpm_list_free(pkg->xdata);
|
||||
free_deplist(pkg->depends);
|
||||
free_deplist(pkg->optdepends);
|
||||
free_deplist(pkg->checkdepends);
|
||||
|
@ -764,16 +826,6 @@ alpm_pkg_t SYMEXPORT *alpm_pkg_find(alpm_list_t *haystack, const char *needle)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/** Test if a package should be ignored.
|
||||
*
|
||||
* Checks if the package is ignored via IgnorePkg, or if the package is
|
||||
* in a group ignored via IgnoreGroup.
|
||||
*
|
||||
* @param handle the context handle
|
||||
* @param pkg the package to test
|
||||
*
|
||||
* @return 1 if the package should be ignored, 0 otherwise
|
||||
*/
|
||||
int SYMEXPORT alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg)
|
||||
{
|
||||
alpm_list_t *groups = NULL;
|
||||
|
@ -793,3 +845,58 @@ int SYMEXPORT alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* check that package metadata meets our requirements */
|
||||
int _alpm_pkg_check_meta(alpm_pkg_t *pkg)
|
||||
{
|
||||
char *c;
|
||||
int error_found = 0;
|
||||
|
||||
#define EPKGMETA(error) do { \
|
||||
error_found = -1; \
|
||||
_alpm_log(pkg->handle, ALPM_LOG_ERROR, error, pkg->name, pkg->version); \
|
||||
} while(0)
|
||||
|
||||
/* sanity check */
|
||||
if(pkg->handle == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* immediate bail if package doesn't have name or version */
|
||||
if(pkg->name == NULL || pkg->name[0] == '\0'
|
||||
|| pkg->version == NULL || pkg->version[0] == '\0') {
|
||||
_alpm_log(pkg->handle, ALPM_LOG_ERROR,
|
||||
_("invalid package metadata (name or version missing)"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(pkg->name[0] == '-' || pkg->name[0] == '.') {
|
||||
EPKGMETA(_("invalid metadata for package %s-%s "
|
||||
"(package name cannot start with '.' or '-')\n"));
|
||||
}
|
||||
if(_alpm_fnmatch(pkg->name, "[![:alnum:]+_.@-]") == 0) {
|
||||
EPKGMETA(_("invalid metadata for package %s-%s "
|
||||
"(package name contains invalid characters)\n"));
|
||||
}
|
||||
|
||||
/* multiple '-' in pkgver can cause local db entries for different packages
|
||||
* to overlap (e.g. foo-1=2-3 and foo=1-2-3 both give foo-1-2-3) */
|
||||
if((c = strchr(pkg->version, '-')) && (strchr(c + 1, '-'))) {
|
||||
EPKGMETA(_("invalid metadata for package %s-%s "
|
||||
"(package version contains invalid characters)\n"));
|
||||
}
|
||||
if(strchr(pkg->version, '/')) {
|
||||
EPKGMETA(_("invalid metadata for package %s-%s "
|
||||
"(package version contains invalid characters)\n"));
|
||||
}
|
||||
|
||||
/* local db entry is <pkgname>-<pkgver> */
|
||||
if(strlen(pkg->name) + strlen(pkg->version) + 1 > NAME_MAX) {
|
||||
EPKGMETA(_("invalid metadata for package %s-%s "
|
||||
"(package name and version too long)\n"));
|
||||
}
|
||||
|
||||
#undef EPKGMETA
|
||||
|
||||
return error_found;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* package.h
|
||||
*
|
||||
* Copyright (c) 2006-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
||||
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
|
||||
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
|
||||
|
@ -67,6 +67,8 @@ struct pkg_operations {
|
|||
alpm_filelist_t *(*get_files) (alpm_pkg_t *);
|
||||
alpm_list_t *(*get_backup) (alpm_pkg_t *);
|
||||
|
||||
alpm_list_t *(*get_xdata) (alpm_pkg_t *);
|
||||
|
||||
void *(*changelog_open) (alpm_pkg_t *);
|
||||
size_t (*changelog_read) (void *, size_t, const alpm_pkg_t *, void *);
|
||||
int (*changelog_close) (const alpm_pkg_t *, void *);
|
||||
|
@ -83,9 +85,9 @@ struct pkg_operations {
|
|||
* The actual definition is in package.c so it can have access to the
|
||||
* default accessor functions which are defined there.
|
||||
*/
|
||||
extern struct pkg_operations default_pkg_ops;
|
||||
extern const struct pkg_operations default_pkg_ops;
|
||||
|
||||
struct __alpm_pkg_t {
|
||||
struct _alpm_pkg_t {
|
||||
unsigned long name_hash;
|
||||
char *filename;
|
||||
char *base;
|
||||
|
@ -121,7 +123,7 @@ struct __alpm_pkg_t {
|
|||
alpm_list_t *removes; /* in transaction targets only */
|
||||
alpm_pkg_t *oldpkg; /* in transaction targets only */
|
||||
|
||||
struct pkg_operations *ops;
|
||||
const struct pkg_operations *ops;
|
||||
|
||||
alpm_filelist_t files;
|
||||
|
||||
|
@ -136,6 +138,8 @@ struct __alpm_pkg_t {
|
|||
alpm_pkgreason_t reason;
|
||||
int scriptlet;
|
||||
|
||||
alpm_list_t *xdata;
|
||||
|
||||
/* Bitfield from alpm_dbinfrq_t */
|
||||
int infolevel;
|
||||
/* Bitfield from alpm_pkgvalidation_t */
|
||||
|
@ -158,4 +162,9 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
|||
int _alpm_pkg_cmp(const void *p1, const void *p2);
|
||||
int _alpm_pkg_compare_versions(alpm_pkg_t *local_pkg, alpm_pkg_t *pkg);
|
||||
|
||||
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string);
|
||||
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd);
|
||||
|
||||
int _alpm_pkg_check_meta(alpm_pkg_t *pkg);
|
||||
|
||||
#endif /* ALPM_PACKAGE_H */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pkghash.c
|
||||
*
|
||||
* Copyright (c) 2011-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2011-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pkghash.h
|
||||
*
|
||||
* Copyright (c) 2011-2019 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
* Copyright (c) 2011-2025 Pacman Development Team <pacman-dev@lists.archlinux.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
|
||||
|
@ -32,7 +32,7 @@
|
|||
* A combination of a hash table and a list, allowing for fast look-up
|
||||
* by package name but also iteration over the packages.
|
||||
*/
|
||||
struct __alpm_pkghash_t {
|
||||
struct _alpm_pkghash_t {
|
||||
/** data held by the hash table */
|
||||
alpm_list_t **hash_table;
|
||||
/** head node of the hash table data in normal list format */
|
||||
|
@ -45,7 +45,7 @@ struct __alpm_pkghash_t {
|
|||
unsigned int limit;
|
||||
};
|
||||
|
||||
typedef struct __alpm_pkghash_t alpm_pkghash_t;
|
||||
typedef struct _alpm_pkghash_t alpm_pkghash_t;
|
||||
|
||||
alpm_pkghash_t *_alpm_pkghash_create(unsigned int size);
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# Set of available languages.
|
||||
ar
|
||||
ast
|
||||
az_AZ
|
||||
bg
|
||||
br
|
||||
ca
|
||||
|
@ -17,6 +18,7 @@ eu_ES
|
|||
fi
|
||||
fr
|
||||
gl
|
||||
hi
|
||||
hr
|
||||
hu
|
||||
id
|
||||
|
|
|
@ -15,11 +15,11 @@ XGETTEXT_OPTIONS = \
|
|||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||
# package.
|
||||
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@archlinux.org>
|
||||
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings.
|
||||
MSGID_BUGS_ADDRESS = http://bugs.archlinux.org/index.php?project=3
|
||||
MSGID_BUGS_ADDRESS = https://gitlab.archlinux.org/pacman/pacman/-/issues
|
||||
|
||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
||||
# message catalogs shall be used. It is usually empty.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
|
||||
# This file is distributed under the same license as the libalpm package.
|
||||
#
|
||||
# Translators:
|
||||
# kraim <biskraim@gmail.com>, 2013
|
||||
|
@ -16,9 +16,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
|
||||
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
|
||||
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
|
||||
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/ar/)\n"
|
||||
|
@ -29,17 +29,17 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
|
||||
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s محدّثة -- سأتجاوزها\n"
|
||||
|
||||
#: lib/libalpm/add.c:95
|
||||
#: lib/libalpm/add.c:94
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s محدّثة -- سأعيد تثبيتها\n"
|
||||
|
||||
#: lib/libalpm/add.c:100
|
||||
#: lib/libalpm/add.c:99
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "سأُنزِل الحزمة %s (من %s إلى %s)\n"
|
||||
|
@ -49,17 +49,17 @@ msgstr "سأُنزِل الحزمة %s (من %s إلى %s)\n"
|
|||
msgid "cannot allocate disk archive object"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
|
||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
|
||||
#, c-format
|
||||
msgid "warning given when extracting %s (%s)\n"
|
||||
msgstr "تحذير عند الاستخراج %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
|
||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "تعذّر استخراج %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
|
||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
|
||||
#, c-format
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "تعذر إعادة تسمية %s إلى %s (%s)\n"
|
||||
|
@ -102,137 +102,152 @@ msgstr "الاستخراج: عدم الكتابة فوق المجلد بالمل
|
|||
msgid "unable to extract %s.pacnew: path too long"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
|
||||
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "غير قادر على جلب مجلد العمل الحالي\n"
|
||||
|
||||
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
|
||||
#: lib/libalpm/util.c:650
|
||||
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
|
||||
#: lib/libalpm/util.c:684
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "غير قادر على تحويل المجلد إلى %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
|
||||
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
|
||||
#, c-format
|
||||
msgid "could not restore working directory (%s)\n"
|
||||
msgstr "تعذر استعادة مجلد العمل (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:583
|
||||
#: lib/libalpm/add.c:579
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "حدثت مشكلة أثناء ترقية %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:589
|
||||
#: lib/libalpm/add.c:585
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "حدثت مشكلة أثناء تثبيت %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:604
|
||||
#: lib/libalpm/add.c:600
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "غير قادر على تحديث مدخل قاعدة البيانات %s-%s\n"
|
||||
|
||||
#: lib/libalpm/add.c:615
|
||||
#: lib/libalpm/add.c:610
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "غير قادر على إضافة المدخل '%s' إلى المخبئيات\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:267
|
||||
#: lib/libalpm/be_local.c:271
|
||||
#, c-format
|
||||
msgid "error while reading file %s: %s\n"
|
||||
msgstr "خطأ أثناء قراءة الملف %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:364
|
||||
#: lib/libalpm/be_local.c:382
|
||||
#, c-format
|
||||
msgid "removing invalid database: %s\n"
|
||||
msgstr "تجري إزالة قاعدة البيانات الغير صالحة: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
|
||||
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
|
||||
#, c-format
|
||||
msgid "could not create directory %s: %s\n"
|
||||
msgstr "غير قادر على إنشاء الدليل %s : %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
|
||||
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "مدخل قاعدة بيانات غير صالح '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:598
|
||||
#: lib/libalpm/be_local.c:616
|
||||
#, c-format
|
||||
msgid "duplicated database entry '%s'\n"
|
||||
msgstr "مدخل قاعدة بيانات مكرر '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:610
|
||||
#: lib/libalpm/be_local.c:628
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "مدخل قاعدة بيانات معطوب '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
|
||||
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
|
||||
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
|
||||
#: lib/libalpm/util.c:269
|
||||
#: lib/libalpm/be_local.c:663
|
||||
#, fuzzy, c-format
|
||||
msgid "unknown install reason for package %s: %s\n"
|
||||
msgstr "نوع التّحقق غير مألوف في الحزمة %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
|
||||
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
|
||||
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
|
||||
#: lib/libalpm/util.c:289
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "غير قادر على فتح اللمف %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
|
||||
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "%s قاعدة البيانات غير متناسقة : اسم الحزمة غير مطابق %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
|
||||
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "%s قاعدة البيانات غير متناسقة : إصدار الحزمة غير مطابق %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:776
|
||||
#: lib/libalpm/be_local.c:806
|
||||
#, c-format
|
||||
msgid "unknown validation type for package %s: %s\n"
|
||||
msgstr "نوع التّحقق غير مألوف في الحزمة %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
|
||||
#: lib/libalpm/be_package.c:650
|
||||
#: lib/libalpm/be_local.c:841
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in local database\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_package.c:255
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in package description\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
|
||||
#: lib/libalpm/be_package.c:647
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "خطأ أثناء قراءة الحزمة %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
|
||||
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
|
||||
#, c-format
|
||||
msgid "error while reading mtree of package %s: %s\n"
|
||||
msgstr "خطأ أثناء قراءة mtree في الحزمة %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:603
|
||||
#: lib/libalpm/be_package.c:601
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "تعذّر تحليل ملف وصف الحزمة في %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:608
|
||||
#: lib/libalpm/be_package.c:606
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "اسم الحزمة مفقود في %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:612
|
||||
#: lib/libalpm/be_package.c:610
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "إصدارة الحزمة مفقودة في %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:616
|
||||
#: lib/libalpm/be_package.c:614
|
||||
#, c-format
|
||||
msgid "invalid package version in %s\n"
|
||||
msgstr "إصدارة الحزمة غير صالح في %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:657
|
||||
#: lib/libalpm/be_package.c:653
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "معلومات الحزمة مفقودة في %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:750
|
||||
#: lib/libalpm/be_package.c:745
|
||||
#, c-format
|
||||
msgid "failed to read signature file: %s\n"
|
||||
msgstr "فشل في قراءة ملف التّوقيع: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
|
||||
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
|
||||
#, c-format
|
||||
msgid "required key missing from keyring\n"
|
||||
msgstr "مفتاح ضروري غير موجود في حلقة المفاتيح\n"
|
||||
|
@ -242,32 +257,37 @@ msgstr "مفتاح ضروري غير موجود في حلقة المفاتيح\n
|
|||
msgid "removing invalid file: %s\n"
|
||||
msgstr "يجري حذف ملف غير صالح: %s\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:515
|
||||
#: lib/libalpm/be_sync.c:471
|
||||
#, c-format
|
||||
msgid "could not parse package description file '%s' from db '%s'\n"
|
||||
msgstr "تعذّر تحليل ملف وصف الحزمة '%s' من قاعدة البيانات '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:522
|
||||
#: lib/libalpm/be_sync.c:486
|
||||
#, c-format
|
||||
msgid "could not read db '%s' (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
|
||||
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: filename of package %s is illegal\n"
|
||||
msgstr "%s قاعدة البيانات غير متناسقة : اسم ملف الحزمة غير قانوني %s\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:566
|
||||
#: lib/libalpm/be_sync.c:529
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: filename of package %s is too long\n"
|
||||
msgstr "%s قاعدة البيانات غير متناسقة : اسم ملف الحزمة طويل جدًا %s\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:632
|
||||
#: lib/libalpm/be_sync.c:594
|
||||
#, c-format
|
||||
msgid "unknown database file: %s\n"
|
||||
msgstr "ملف قاعدة البيانات مجهول : %s\n"
|
||||
|
||||
#: lib/libalpm/db.c:370
|
||||
#: lib/libalpm/be_sync.c:712
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in sync database\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/db.c:413
|
||||
#, c-format
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "مسار قاعدة البيانات غير معروف\n"
|
||||
|
@ -287,12 +307,12 @@ msgstr "%s سيتم إزالتها بعد %s اعتمادياتها\n"
|
|||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s سيتم تثبيتها قبل %s اعتمادياتها\n"
|
||||
|
||||
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
|
||||
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
|
||||
#, c-format
|
||||
msgid "ignoring package %s-%s\n"
|
||||
msgstr "تجاهل الحزمة %s-%s\n"
|
||||
|
||||
#: lib/libalpm/deps.c:869
|
||||
#: lib/libalpm/deps.c:842
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "تعذّر تحليل \"%s\"، اعتمادية لـ \"%s\"\n"
|
||||
|
@ -307,80 +327,121 @@ msgstr "تعذّر الحصول على معلومات نظام الملفات م
|
|||
msgid "could not open file: %s: %s\n"
|
||||
msgstr "تعذر فتح الملف: %s: %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
|
||||
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
|
||||
#, c-format
|
||||
msgid "could not get filesystem information\n"
|
||||
msgstr "غير قادر على جلب معلومات نظام الملفات\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:242
|
||||
#: lib/libalpm/diskspace.c:254
|
||||
#, c-format
|
||||
msgid "could not get file information for %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
|
||||
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
|
||||
#, c-format
|
||||
msgid "could not determine mount point for file %s\n"
|
||||
msgstr "تعذّر تحديد نقطة الوصل من أجل الملف %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:354
|
||||
#: lib/libalpm/diskspace.c:366
|
||||
#, c-format
|
||||
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
|
||||
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
|
||||
#, c-format
|
||||
msgid "could not determine filesystem mount points\n"
|
||||
msgstr "تعذّر تحديد نقاط وصل أنظمة الملفات\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:385
|
||||
#: lib/libalpm/diskspace.c:397
|
||||
#, c-format
|
||||
msgid "could not determine cachedir mount point %s\n"
|
||||
msgstr "تعذّر تحديد نقطة وصل مجلد المخبئيات %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:438
|
||||
#: lib/libalpm/diskspace.c:450
|
||||
#, c-format
|
||||
msgid "could not determine root mount point %s\n"
|
||||
msgstr "غير قادر على تحديد نقطة وصل الجذر %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:486
|
||||
#: lib/libalpm/diskspace.c:498
|
||||
#, c-format
|
||||
msgid "Partition %s is mounted read only\n"
|
||||
msgstr "القسم %s موصول بصفة القراءة فقط\n"
|
||||
|
||||
#: lib/libalpm/dload.c:161
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "القرص"
|
||||
|
||||
#: lib/libalpm/dload.c:348
|
||||
#: lib/libalpm/dload.c:107
|
||||
#, c-format
|
||||
msgid "failed to create temporary file for download\n"
|
||||
msgstr "غير قادر على إنشاء ملف مؤقت للتحميل\n"
|
||||
|
||||
#: lib/libalpm/dload.c:393
|
||||
#: lib/libalpm/dload.c:198
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "العنوان '%s' غير صالح\n"
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
|
||||
#: lib/libalpm/dload.c:215
|
||||
#, c-format
|
||||
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:310
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "القرص"
|
||||
|
||||
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "فشل في استقبال الملف '%s' من %s : %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:477
|
||||
#: lib/libalpm/dload.c:562
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
|
||||
msgstr "فشل في استقبال الملف '%s' من %s : تم تجاوز حجم التحميل\n"
|
||||
|
||||
#: lib/libalpm/dload.c:532
|
||||
#: lib/libalpm/dload.c:685
|
||||
#, c-format
|
||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
|
||||
msgstr "%s يبدو غير موثوقًا: %jd/%jd بايت\n"
|
||||
|
||||
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
|
||||
#: lib/libalpm/dload.c:776
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "tag td jpldg %s\n"
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "العنوان '%s' غير صالح\n"
|
||||
|
||||
#: lib/libalpm/dload.c:864
|
||||
#, c-format
|
||||
msgid "failed to setup a download payload for %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:876
|
||||
#, c-format
|
||||
msgid "curl returned error %d from transfer\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:900
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:963
|
||||
#, fuzzy, c-format
|
||||
msgid "could not chdir to download directory %s\n"
|
||||
msgstr "تعذّر التعديل على مجلد الجذر (%s)\n"
|
||||
|
||||
#: lib/libalpm/dload.c:968
|
||||
#, c-format
|
||||
msgid "switching to sandbox user '%s' failed!\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files\n"
|
||||
msgstr "تعذّر استقبال بعض الملفات\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1384
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
|
@ -497,7 +558,7 @@ msgstr "لا يوجد خواديم مهيأة للمستودع"
|
|||
msgid "transaction already initialized"
|
||||
msgstr "المُبادلة مهيأة بالفعل"
|
||||
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "لم يتم تهيئة المُبادلة"
|
||||
|
@ -507,86 +568,86 @@ msgstr "لم يتم تهيئة المُبادلة"
|
|||
msgid "duplicate target"
|
||||
msgstr "الهدف مكرر"
|
||||
|
||||
#: lib/libalpm/error.c:96
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "المُبادلة غير مجهزة"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#: lib/libalpm/error.c:100
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "أحبطت المُبادلة"
|
||||
|
||||
#: lib/libalpm/error.c:100
|
||||
#: lib/libalpm/error.c:102
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "العملية غير متوافقة مع نوع المُبادلة"
|
||||
|
||||
#: lib/libalpm/error.c:102
|
||||
#: lib/libalpm/error.c:104
|
||||
#, c-format
|
||||
msgid "transaction commit attempt when database is not locked"
|
||||
msgstr "تتم محاولة بدء المُبادلة عند إلغاء قفل قاعدة البيانات"
|
||||
|
||||
#: lib/libalpm/error.c:104
|
||||
#: lib/libalpm/error.c:106
|
||||
#, c-format
|
||||
msgid "failed to run transaction hooks"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:107
|
||||
#: lib/libalpm/error.c:109
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "غير قادر على إيجاد أو قراءة الحزمة"
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
#: lib/libalpm/error.c:111
|
||||
#, c-format
|
||||
msgid "operation cancelled due to ignorepkg"
|
||||
msgstr "ألغيت العملية بسبب حزمة متجاهلة"
|
||||
|
||||
#: lib/libalpm/error.c:111
|
||||
#: lib/libalpm/error.c:113
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "حزمة غير صالحة أو معطوبة"
|
||||
|
||||
#: lib/libalpm/error.c:113
|
||||
#: lib/libalpm/error.c:115
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package (checksum)"
|
||||
msgstr "حزمة معطوبة أو غير صالحة (البصمة)"
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
#: lib/libalpm/error.c:117
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package (PGP signature)"
|
||||
msgstr "حزمة معطوبة أو غير صالحة (توقيع PGP)"
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
#: lib/libalpm/error.c:119
|
||||
#, c-format
|
||||
msgid "package missing required signature"
|
||||
msgstr "الحزمة مفقودة مطلوب توقيع"
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
#: lib/libalpm/error.c:121
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "غير قادر على فتح ملف الحزمة"
|
||||
|
||||
#: lib/libalpm/error.c:121
|
||||
#: lib/libalpm/error.c:123
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "غير قادر على مسح جميع ملفات الجزمة"
|
||||
|
||||
#: lib/libalpm/error.c:123
|
||||
#: lib/libalpm/error.c:125
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "اسم ملف الحزمة غير سليم"
|
||||
|
||||
#: lib/libalpm/error.c:125
|
||||
#: lib/libalpm/error.c:127
|
||||
#, c-format
|
||||
msgid "package architecture is not valid"
|
||||
msgstr "معمارية الحزمة غير سليمة"
|
||||
|
||||
#: lib/libalpm/error.c:127
|
||||
#, c-format
|
||||
msgid "could not find repository for target"
|
||||
msgstr "تعذّر العثور على المستودع الهدف"
|
||||
|
||||
#: lib/libalpm/error.c:130
|
||||
#, c-format
|
||||
msgid "missing PGP signature"
|
||||
|
@ -652,12 +713,12 @@ msgstr ""
|
|||
msgid "unexpected error"
|
||||
msgstr "خطأ غير متوقع"
|
||||
|
||||
#: lib/libalpm/handle.c:153
|
||||
#: lib/libalpm/handle.c:165
|
||||
#, c-format
|
||||
msgid "lock file missing %s\n"
|
||||
msgstr "الملف المغلق مفقود %s\n"
|
||||
|
||||
#: lib/libalpm/handle.c:159
|
||||
#: lib/libalpm/handle.c:171
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "تعذّر إزالة ملف القفل %s\n"
|
||||
|
@ -729,7 +790,7 @@ msgstr ""
|
|||
msgid "unable to run hook %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
|
||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
|
||||
#, c-format
|
||||
msgid "could not open directory: %s: %s\n"
|
||||
msgstr "تعذّر فتح المجلد: %s: %s\n"
|
||||
|
@ -739,7 +800,7 @@ msgstr "تعذّر فتح المجلد: %s: %s\n"
|
|||
msgid "could not open file: %s%s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
|
||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
|
||||
#, c-format
|
||||
msgid "could not stat file %s: %s\n"
|
||||
msgstr "تعذّر إحصاء الملف %s: %s\n"
|
||||
|
@ -749,283 +810,320 @@ msgstr "تعذّر إحصاء الملف %s: %s\n"
|
|||
msgid "could not read directory: %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:578
|
||||
#: lib/libalpm/package.c:614
|
||||
#, c-format
|
||||
msgid "could not fully load metadata for package %s-%s\n"
|
||||
msgstr "غير قادر على استيراد معلومات الميتا للحزمة %s-%s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:119
|
||||
#: lib/libalpm/package.c:869
|
||||
#, c-format
|
||||
msgid "invalid package metadata (name or version missing)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:874
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name cannot start with '.' or "
|
||||
"'-')\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:878
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name contains invalid "
|
||||
"characters)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package version contains invalid "
|
||||
"characters)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:895
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name and version too long)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:111
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "لم يعثر على %s في قاعدة البيانات -- يجري التجاوز\n"
|
||||
|
||||
#: lib/libalpm/remove.c:154
|
||||
#: lib/libalpm/remove.c:146
|
||||
#, c-format
|
||||
msgid "removing %s from target list\n"
|
||||
msgstr "يجري حذف %s من قائمة الأهداف\n"
|
||||
|
||||
#: lib/libalpm/remove.c:346
|
||||
#: lib/libalpm/remove.c:338
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr ""
|
||||
"تعذر إزالة الملف '%s': %s\n"
|
||||
"\n"
|
||||
|
||||
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
|
||||
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
|
||||
#, c-format
|
||||
msgid "could not backup %s due to PATH_MAX overflow\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:562
|
||||
#: lib/libalpm/remove.c:570
|
||||
#, c-format
|
||||
msgid "cannot remove %s (%s)\n"
|
||||
msgstr "تعذّر إزالة %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/remove.c:735
|
||||
#: lib/libalpm/remove.c:743
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "تعذّر إزالة مدخل قاعدة البيانات %s-%s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:740
|
||||
#: lib/libalpm/remove.c:748
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "تعذر إزالة المدخل '%s' من المخبئيات\n"
|
||||
|
||||
#: lib/libalpm/signing.c:171
|
||||
#: lib/libalpm/signing.c:163
|
||||
#, c-format
|
||||
msgid "Public keyring not found; have you run '%s'?\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
|
||||
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
|
||||
#, c-format
|
||||
msgid "GPGME error: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:284
|
||||
#: lib/libalpm/signing.c:275
|
||||
#, c-format
|
||||
msgid "looking up key %s using WKD\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:293
|
||||
#: lib/libalpm/signing.c:289
|
||||
#, c-format
|
||||
msgid "gpg error: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
|
||||
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
|
||||
#, c-format
|
||||
msgid "keyring is not writable\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:539
|
||||
#: lib/libalpm/signing.c:537
|
||||
#, c-format
|
||||
msgid "key \"%s\" on keyserver\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:544
|
||||
#: lib/libalpm/signing.c:542
|
||||
#, c-format
|
||||
msgid "key \"%s\" could not be imported\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:548
|
||||
#: lib/libalpm/signing.c:546
|
||||
#, c-format
|
||||
msgid "key \"%s\" could not be looked up remotely\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
|
||||
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
|
||||
#, c-format
|
||||
msgid "%s: missing required signature\n"
|
||||
msgstr "التوقيع المطلوب مفقود :%s\n"
|
||||
|
||||
#: lib/libalpm/signing.c:958
|
||||
#: lib/libalpm/signing.c:947
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is marginal trust\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:966
|
||||
#: lib/libalpm/signing.c:955
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is unknown trust\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:973
|
||||
#: lib/libalpm/signing.c:962
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" should never be trusted\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:985
|
||||
#: lib/libalpm/signing.c:974
|
||||
#, c-format
|
||||
msgid "%s: key \"%s\" is unknown\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:994
|
||||
#: lib/libalpm/signing.c:983
|
||||
#, c-format
|
||||
msgid "%s: key \"%s\" is disabled\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:998
|
||||
#: lib/libalpm/signing.c:987
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is expired\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:1002
|
||||
#: lib/libalpm/signing.c:991
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is invalid\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
|
||||
#: lib/libalpm/signing.c:1226
|
||||
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
|
||||
#: lib/libalpm/signing.c:1189
|
||||
#, c-format
|
||||
msgid "%s: signature format error\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
|
||||
#: lib/libalpm/signing.c:1220
|
||||
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
|
||||
#: lib/libalpm/signing.c:1183
|
||||
#, c-format
|
||||
msgid "%s: unsupported signature format\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:99
|
||||
#: lib/libalpm/sync.c:96
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: يجري تجاهل تحديث الحزمة (%s => %s) \n"
|
||||
|
||||
#: lib/libalpm/sync.c:111
|
||||
#: lib/libalpm/sync.c:108
|
||||
#, c-format
|
||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
|
||||
msgstr "%s: يجري تجاهل إرجاع الحزمة (%s => %s) \n"
|
||||
|
||||
#: lib/libalpm/sync.c:114
|
||||
#: lib/libalpm/sync.c:111
|
||||
#, c-format
|
||||
msgid "%s: downgrading from version %s to version %s\n"
|
||||
msgstr "%s: يجري الإرجاع من الإصدار %s إلى الإصدار %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:120
|
||||
#: lib/libalpm/sync.c:117
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: (%s) المحلّي أحدث من %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:161
|
||||
#: lib/libalpm/sync.c:158
|
||||
#, c-format
|
||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
|
||||
msgstr "يجري تجاهل استبدال الحزمة (%s-%s => %s-%s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:177
|
||||
#: lib/libalpm/sync.c:174
|
||||
#, c-format
|
||||
msgid "cannot replace %s by %s\n"
|
||||
msgstr "تعذر استبدال %s بـ %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
|
||||
#: lib/libalpm/sync.c:477
|
||||
#, c-format
|
||||
msgid "packages %s and %s have the same filename: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "حدثت تعارضات حزميّة تعذّر تحليلها\n"
|
||||
|
||||
#: lib/libalpm/sync.c:555
|
||||
#: lib/libalpm/sync.c:566
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr " يجري حذف '%s' من قائمة الأهداف بسبب تعارضها مع '%s'\n"
|
||||
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:849
|
||||
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files\n"
|
||||
msgstr "تعذّر استقبال بعض الملفات\n"
|
||||
msgid "%s: could not find package in cache\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1036
|
||||
#: lib/libalpm/sync.c:1066
|
||||
#, c-format
|
||||
msgid "failed to read file %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1223
|
||||
#: lib/libalpm/sync.c:1324
|
||||
#, c-format
|
||||
msgid "not enough free disk space\n"
|
||||
msgstr "لا توجد مساحة خالية كافية على القرص\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1245
|
||||
#: lib/libalpm/sync.c:1346
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "تعذّر بدء مُبادلة الإزالة\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1253
|
||||
#: lib/libalpm/sync.c:1354
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "فشل في بدء المُبادلة\n"
|
||||
|
||||
#: lib/libalpm/trans.c:364
|
||||
#: lib/libalpm/trans.c:369
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "تعذّر إنشاء مجلد مؤقت\n"
|
||||
|
||||
#: lib/libalpm/trans.c:379
|
||||
#: lib/libalpm/trans.c:384
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "تعذّر نسخ الملف المؤقّت إلى %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:410
|
||||
#: lib/libalpm/trans.c:415
|
||||
#, c-format
|
||||
msgid "could not remove %s\n"
|
||||
msgstr ""
|
||||
"تعذر إزالة %s\n"
|
||||
"\n"
|
||||
|
||||
#: lib/libalpm/trans.c:414
|
||||
#: lib/libalpm/trans.c:419
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "تعذّر إزالة المجلد المؤقّت %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:486
|
||||
#: lib/libalpm/util.c:512
|
||||
#, c-format
|
||||
msgid "unable to write to pipe (%s)\n"
|
||||
msgstr "تعذّرت الكتابة إلى الأنبوب (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:545
|
||||
#: lib/libalpm/util.c:571
|
||||
#, c-format
|
||||
msgid "unable to read from pipe (%s)\n"
|
||||
msgstr "تعذّرت القراءة من الأنبوب (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
|
||||
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
|
||||
#, c-format
|
||||
msgid "could not create pipe (%s)\n"
|
||||
msgstr "غير قادر على إنشاء العبارة (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:623
|
||||
#: lib/libalpm/util.c:655
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "تعذّر تفريع العملية إلى عملية جديدة (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:646
|
||||
#: lib/libalpm/util.c:680
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "تعذّر التعديل على مجلد الجذر (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:658
|
||||
#: lib/libalpm/util.c:700
|
||||
#, c-format
|
||||
msgid "call to execv failed (%s)\n"
|
||||
msgstr "تعذّر مخاطبة execv (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:737
|
||||
#: lib/libalpm/util.c:779
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "تعذّر مخاطبةwaitpid (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:747
|
||||
#: lib/libalpm/util.c:789
|
||||
#, c-format
|
||||
msgid "command failed to execute correctly\n"
|
||||
msgstr "فشل تطبيق الأمر بشكل صحيح\n"
|
||||
|
||||
#: lib/libalpm/util.c:754
|
||||
#: lib/libalpm/util.c:796
|
||||
#, c-format
|
||||
msgid "Unknown signal"
|
||||
msgstr "إشارة مجهوله"
|
||||
|
||||
#: lib/libalpm/util.c:756
|
||||
#: lib/libalpm/util.c:798
|
||||
#, c-format
|
||||
msgid "command terminated by signal %d: %s\n"
|
||||
msgstr "تم انهاء الامر بواسطة الاشارة %d: %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:853
|
||||
#: lib/libalpm/util.c:916
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "لا يوجد %s مخبئي، يجري الإنشاء...\n"
|
||||
|
||||
#: lib/libalpm/util.c:884
|
||||
#: lib/libalpm/util.c:947
|
||||
#, c-format
|
||||
msgid "couldn't find or create package cache, using %s instead\n"
|
||||
msgstr "تعذّر إيجاد أو إنشاء مخبئية للحزم ، استخدم %s بدلًا عنها\n"
|
||||
|
|
|
@ -1,20 +1,21 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
|
||||
# This file is distributed under the same license as the libalpm package.
|
||||
#
|
||||
# Translators:
|
||||
# enolp <enolp@softastur.org>, 2015-2016,2018-2019
|
||||
# Ḷḷumex03 <tornes@opmbx.org>, 2014
|
||||
# Ḷḷumex03 <tornes@opmbx.org>, 2014
|
||||
# Ḷḷumex03 <tornes@opmbx.org>, 2014-2015
|
||||
# enolp <enolp@softastur.org>, 2015-2016,2018-2020
|
||||
# Ḷḷumex03, 2014
|
||||
# Ḷḷumex03, 2014
|
||||
# Ḷḷumex03, 2014
|
||||
# Ḷḷumex03, 2014-2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
|
||||
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
|
||||
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"Language-Team: Asturian (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
|
||||
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Ḷḷumex03, 2014\n"
|
||||
"Language-Team: Asturian (http://app.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/ast/)\n"
|
||||
"Language: ast\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
@ -22,17 +23,17 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s ta anováu -- saltando\n"
|
||||
|
||||
#: lib/libalpm/add.c:95
|
||||
#: lib/libalpm/add.c:94
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s ta anováu -- reinstalando\n"
|
||||
|
||||
#: lib/libalpm/add.c:100
|
||||
#: lib/libalpm/add.c:99
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "baxando de versión el paquete %s (%s => %s)\n"
|
||||
|
@ -42,17 +43,17 @@ msgstr "baxando de versión el paquete %s (%s => %s)\n"
|
|||
msgid "cannot allocate disk archive object"
|
||||
msgstr "nun pue allugase l'oxetu del archivu del discu"
|
||||
|
||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
|
||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
|
||||
#, c-format
|
||||
msgid "warning given when extracting %s (%s)\n"
|
||||
msgstr "alvertencia dada al estrayer el paquete %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
|
||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "nun pudo estrayese %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
|
||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
|
||||
#, c-format
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "nun pudo renomase %s a %s (%s)\n"
|
||||
|
@ -97,139 +98,154 @@ msgstr "estración: nun pue sobrescribise'l direutoriu col ficheru %s\n"
|
|||
msgid "unable to extract %s.pacnew: path too long"
|
||||
msgstr "nun pue estrayese %s.pacnew: camín perllargu"
|
||||
|
||||
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
|
||||
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "nun pudo consiguise'l direutoriu de trabayu actual\n"
|
||||
|
||||
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
|
||||
#: lib/libalpm/util.c:650
|
||||
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
|
||||
#: lib/libalpm/util.c:684
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "nun pudo cambiase'l direutoriu a %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
|
||||
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
|
||||
#, c-format
|
||||
msgid "could not restore working directory (%s)\n"
|
||||
msgstr "nun pudo restaurase'l direutoriu de trabayu (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:583
|
||||
#: lib/libalpm/add.c:579
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "asocedió un problema al anovar %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:589
|
||||
#: lib/libalpm/add.c:585
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "asocedió un problema al instalar %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:604
|
||||
#: lib/libalpm/add.c:600
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "nun pudo anovase la entrada de base de datos %s-%s\n"
|
||||
|
||||
#: lib/libalpm/add.c:615
|
||||
#: lib/libalpm/add.c:610
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "nun pudo amestase la entrada '%s' na caché\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:267
|
||||
#: lib/libalpm/be_local.c:271
|
||||
#, c-format
|
||||
msgid "error while reading file %s: %s\n"
|
||||
msgstr "fallu al lleer el ficheru %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:364
|
||||
#: lib/libalpm/be_local.c:382
|
||||
#, c-format
|
||||
msgid "removing invalid database: %s\n"
|
||||
msgstr "desaniciando base de datos non válida: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
|
||||
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
|
||||
#, c-format
|
||||
msgid "could not create directory %s: %s\n"
|
||||
msgstr "nun pudo crease'l direutoriu %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
|
||||
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "nome non válidu pa la base de datos '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:598
|
||||
#: lib/libalpm/be_local.c:616
|
||||
#, c-format
|
||||
msgid "duplicated database entry '%s'\n"
|
||||
msgstr "entrada de base de datos duplicada '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:610
|
||||
#: lib/libalpm/be_local.c:628
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "entrada de base de datos toyida '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
|
||||
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
|
||||
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
|
||||
#: lib/libalpm/util.c:269
|
||||
#: lib/libalpm/be_local.c:663
|
||||
#, fuzzy, c-format
|
||||
msgid "unknown install reason for package %s: %s\n"
|
||||
msgstr "triba de validación desconocida pal paquete %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
|
||||
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
|
||||
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
|
||||
#: lib/libalpm/util.c:289
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "nun pudo abrise'l ficheru %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
|
||||
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr ""
|
||||
"la base de datos %s ye inconsistente: el nome nun concasa nel paquete %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
|
||||
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr ""
|
||||
"la base de datos %s ye inconsistente: la versión nun concasa nel paquete %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:776
|
||||
#: lib/libalpm/be_local.c:806
|
||||
#, c-format
|
||||
msgid "unknown validation type for package %s: %s\n"
|
||||
msgstr "triba de validación desconocida pal paquete %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
|
||||
#: lib/libalpm/be_package.c:650
|
||||
#: lib/libalpm/be_local.c:841
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in local database\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_package.c:255
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in package description\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
|
||||
#: lib/libalpm/be_package.c:647
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "fallu al lleer el paquete %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
|
||||
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
|
||||
#, c-format
|
||||
msgid "error while reading mtree of package %s: %s\n"
|
||||
msgstr "fallu al lleer el mtree del paquete %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:603
|
||||
#: lib/libalpm/be_package.c:601
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "nun pudo analizase'l ficheru de descripción del paquete en %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:608
|
||||
#: lib/libalpm/be_package.c:606
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "nome de paquete faltante en %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:612
|
||||
#: lib/libalpm/be_package.c:610
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "versión de paquete faltante en %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:616
|
||||
#: lib/libalpm/be_package.c:614
|
||||
#, c-format
|
||||
msgid "invalid package version in %s\n"
|
||||
msgstr "versión del paquete non válida en %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:657
|
||||
#: lib/libalpm/be_package.c:653
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "datos meta de paquete faltantes en %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:750
|
||||
#: lib/libalpm/be_package.c:745
|
||||
#, c-format
|
||||
msgid "failed to read signature file: %s\n"
|
||||
msgstr "fallu al lleer el ficheru de robla: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
|
||||
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
|
||||
#, c-format
|
||||
msgid "required key missing from keyring\n"
|
||||
msgstr "clave riquida del aniellu claves faltante\n"
|
||||
|
@ -239,36 +255,41 @@ msgstr "clave riquida del aniellu claves faltante\n"
|
|||
msgid "removing invalid file: %s\n"
|
||||
msgstr "desaniciando ficheru non válidu: %s\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:515
|
||||
#: lib/libalpm/be_sync.c:471
|
||||
#, c-format
|
||||
msgid "could not parse package description file '%s' from db '%s'\n"
|
||||
msgstr ""
|
||||
"nun pudo analizase'l ficheru de descripción del paquete '%s' de la base de "
|
||||
"datos '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:522
|
||||
#: lib/libalpm/be_sync.c:486
|
||||
#, c-format
|
||||
msgid "could not read db '%s' (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
|
||||
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: filename of package %s is illegal\n"
|
||||
msgstr ""
|
||||
"la base de datos %s ye inconsistente: el nome del paquete %s ye illegal\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:566
|
||||
#: lib/libalpm/be_sync.c:529
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: filename of package %s is too long\n"
|
||||
msgstr ""
|
||||
"la base de datos %s ye inconsistente: el nome del paquete %s ye perllargu\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:632
|
||||
#: lib/libalpm/be_sync.c:594
|
||||
#, c-format
|
||||
msgid "unknown database file: %s\n"
|
||||
msgstr "ficheru de base de datos desconocíu: %s\n"
|
||||
|
||||
#: lib/libalpm/db.c:370
|
||||
#: lib/libalpm/be_sync.c:712
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in sync database\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/db.c:413
|
||||
#, c-format
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "nun ta definíu'l camín de la base de datos\n"
|
||||
|
@ -288,12 +309,12 @@ msgstr "%s desaniciaráse dempués de la so dependencia %s\n"
|
|||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s desaniciaráse enantes de la so dependencia %s\n"
|
||||
|
||||
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
|
||||
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
|
||||
#, c-format
|
||||
msgid "ignoring package %s-%s\n"
|
||||
msgstr "inorando paquete %s-%s\n"
|
||||
|
||||
#: lib/libalpm/deps.c:869
|
||||
#: lib/libalpm/deps.c:842
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "nun pue iguase \"%s\", una dependencia de \"%s\"\n"
|
||||
|
@ -308,80 +329,121 @@ msgstr "nun pudo consiguise la información del sistema ficheros pa %s: %s\n"
|
|||
msgid "could not open file: %s: %s\n"
|
||||
msgstr "nun pudo abrise'l ficheru: %s: %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
|
||||
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
|
||||
#, c-format
|
||||
msgid "could not get filesystem information\n"
|
||||
msgstr "nun pudo consiguise la información del sistema de ficheros\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:242
|
||||
#: lib/libalpm/diskspace.c:254
|
||||
#, c-format
|
||||
msgid "could not get file information for %s\n"
|
||||
msgstr "nun pudo consiguise la información pa %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
|
||||
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
|
||||
#, c-format
|
||||
msgid "could not determine mount point for file %s\n"
|
||||
msgstr "nun pudo determinase'l puntu montaxe pal ficheru %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:354
|
||||
#: lib/libalpm/diskspace.c:366
|
||||
#, c-format
|
||||
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
|
||||
msgstr "La partición %s ta enllena: necesítense %jd, %ju bloques llibres\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
|
||||
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
|
||||
#, c-format
|
||||
msgid "could not determine filesystem mount points\n"
|
||||
msgstr "nun pudieron determinase los puntos de montaxe del sistema ficheros\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:385
|
||||
#: lib/libalpm/diskspace.c:397
|
||||
#, c-format
|
||||
msgid "could not determine cachedir mount point %s\n"
|
||||
msgstr "nun pudo determinase'l puntu del direutoriu caché %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:438
|
||||
#: lib/libalpm/diskspace.c:450
|
||||
#, c-format
|
||||
msgid "could not determine root mount point %s\n"
|
||||
msgstr "nun pudo determinase'l puntu de montaxe root %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:486
|
||||
#: lib/libalpm/diskspace.c:498
|
||||
#, c-format
|
||||
msgid "Partition %s is mounted read only\n"
|
||||
msgstr "La partición %s ta montada como namái llectura\n"
|
||||
|
||||
#: lib/libalpm/dload.c:161
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "discu"
|
||||
|
||||
#: lib/libalpm/dload.c:348
|
||||
#: lib/libalpm/dload.c:107
|
||||
#, c-format
|
||||
msgid "failed to create temporary file for download\n"
|
||||
msgstr "fallu al crear el ficheru temporal pa la descarga\n"
|
||||
|
||||
#: lib/libalpm/dload.c:393
|
||||
#: lib/libalpm/dload.c:198
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "l'enllaz '%s' ye inválidu\n"
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
|
||||
#: lib/libalpm/dload.c:215
|
||||
#, c-format
|
||||
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:310
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "discu"
|
||||
|
||||
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "fallu recibiendo'l ficheru '%s' de %s: %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:477
|
||||
#: lib/libalpm/dload.c:562
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
|
||||
msgstr "fallu recibiendo'l ficheru '%s' de %s: tamañu de descarga superáu\n"
|
||||
|
||||
#: lib/libalpm/dload.c:532
|
||||
#: lib/libalpm/dload.c:685
|
||||
#, c-format
|
||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
|
||||
#: lib/libalpm/dload.c:776
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "fallu al lleer %s\n"
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "l'enllaz '%s' ye inválidu\n"
|
||||
|
||||
#: lib/libalpm/dload.c:864
|
||||
#, c-format
|
||||
msgid "failed to setup a download payload for %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:876
|
||||
#, c-format
|
||||
msgid "curl returned error %d from transfer\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:900
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:963
|
||||
#, fuzzy, c-format
|
||||
msgid "could not chdir to download directory %s\n"
|
||||
msgstr "nun pudo cambiase'l direutoriu root (%s)\n"
|
||||
|
||||
#: lib/libalpm/dload.c:968
|
||||
#, c-format
|
||||
msgid "switching to sandbox user '%s' failed!\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files\n"
|
||||
msgstr "fallu al recuperar dellos ficheros\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1384
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
|
@ -498,7 +560,7 @@ msgstr "nun se configuró dengún sirvidor pal repositoriu"
|
|||
msgid "transaction already initialized"
|
||||
msgstr "yá s'anició la transaición"
|
||||
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr "nun s'anició la transaición"
|
||||
|
@ -508,86 +570,86 @@ msgstr "nun s'anició la transaición"
|
|||
msgid "duplicate target"
|
||||
msgstr "oxetivu duplicáu"
|
||||
|
||||
#: lib/libalpm/error.c:96
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "nun se tresnó la transaición"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#: lib/libalpm/error.c:100
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "albortóse la transaición"
|
||||
|
||||
#: lib/libalpm/error.c:100
|
||||
#: lib/libalpm/error.c:102
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "la operación nun ye compatible cola triba de transaición"
|
||||
|
||||
#: lib/libalpm/error.c:102
|
||||
#: lib/libalpm/error.c:104
|
||||
#, c-format
|
||||
msgid "transaction commit attempt when database is not locked"
|
||||
msgstr "intentu d'unviu de transaiciones al nun tar bloquiada la base de datos"
|
||||
|
||||
#: lib/libalpm/error.c:104
|
||||
#: lib/libalpm/error.c:106
|
||||
#, c-format
|
||||
msgid "failed to run transaction hooks"
|
||||
msgstr "fallu al executar los gabitos de transaiciones"
|
||||
|
||||
#: lib/libalpm/error.c:107
|
||||
#: lib/libalpm/error.c:109
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "nun pudo alcontrase o lleese'l paquete"
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
#: lib/libalpm/error.c:111
|
||||
#, c-format
|
||||
msgid "operation cancelled due to ignorepkg"
|
||||
msgstr "operación encaboxada pola mor de ignorepkg"
|
||||
|
||||
#: lib/libalpm/error.c:111
|
||||
#: lib/libalpm/error.c:113
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "paquete toriáu o non válidu"
|
||||
|
||||
#: lib/libalpm/error.c:113
|
||||
#: lib/libalpm/error.c:115
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package (checksum)"
|
||||
msgstr "paquete toriáu o non válidu (suma de comprobación)"
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
#: lib/libalpm/error.c:117
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package (PGP signature)"
|
||||
msgstr "paquete toriáu o non válidu (robla PGP)"
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
#: lib/libalpm/error.c:119
|
||||
#, c-format
|
||||
msgid "package missing required signature"
|
||||
msgstr "el paquete rique una robla que falta"
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
#: lib/libalpm/error.c:121
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "nun pue abrise'l ficheru de paquete"
|
||||
|
||||
#: lib/libalpm/error.c:121
|
||||
#: lib/libalpm/error.c:123
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "nun puen desaniciase tolos ficheros del paquete"
|
||||
|
||||
#: lib/libalpm/error.c:123
|
||||
#: lib/libalpm/error.c:125
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "el nome del paquete nun ye válidu"
|
||||
|
||||
#: lib/libalpm/error.c:125
|
||||
#: lib/libalpm/error.c:127
|
||||
#, c-format
|
||||
msgid "package architecture is not valid"
|
||||
msgstr "l'arquietctura del paquete nun ye válida"
|
||||
|
||||
#: lib/libalpm/error.c:127
|
||||
#, c-format
|
||||
msgid "could not find repository for target"
|
||||
msgstr "nun pudo alcontrase'l repositoriu pal oxetivu"
|
||||
|
||||
#: lib/libalpm/error.c:130
|
||||
#, c-format
|
||||
msgid "missing PGP signature"
|
||||
|
@ -653,12 +715,12 @@ msgstr ""
|
|||
msgid "unexpected error"
|
||||
msgstr "fallu inesperáu"
|
||||
|
||||
#: lib/libalpm/handle.c:153
|
||||
#: lib/libalpm/handle.c:165
|
||||
#, c-format
|
||||
msgid "lock file missing %s\n"
|
||||
msgstr "falta'l ficheru de bloquéu %s\n"
|
||||
|
||||
#: lib/libalpm/handle.c:159
|
||||
#: lib/libalpm/handle.c:171
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "nun pudo desaniciase'l ficheru de bloquéu %s\n"
|
||||
|
@ -730,7 +792,7 @@ msgstr ""
|
|||
msgid "unable to run hook %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
|
||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
|
||||
#, c-format
|
||||
msgid "could not open directory: %s: %s\n"
|
||||
msgstr "nun pudo abrise'l direutoriu: %s: %s\n"
|
||||
|
@ -738,9 +800,9 @@ msgstr "nun pudo abrise'l direutoriu: %s: %s\n"
|
|||
#: lib/libalpm/hook.c:575
|
||||
#, c-format
|
||||
msgid "could not open file: %s%s: %s\n"
|
||||
msgstr ""
|
||||
msgstr "nun pudo abrise'l ficheru: %s%s: %s\n"
|
||||
|
||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
|
||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
|
||||
#, c-format
|
||||
msgid "could not stat file %s: %s\n"
|
||||
msgstr ""
|
||||
|
@ -748,282 +810,318 @@ msgstr ""
|
|||
#: lib/libalpm/hook.c:621
|
||||
#, c-format
|
||||
msgid "could not read directory: %s: %s\n"
|
||||
msgstr ""
|
||||
msgstr "nun pudo lleese'l ficheru: %s: %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:578
|
||||
#: lib/libalpm/package.c:614
|
||||
#, c-format
|
||||
msgid "could not fully load metadata for package %s-%s\n"
|
||||
msgstr "nun pudieron cargase dafechu los datos meta pal paquete %s-%s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:119
|
||||
#: lib/libalpm/package.c:869
|
||||
#, c-format
|
||||
msgid "invalid package metadata (name or version missing)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:874
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name cannot start with '.' or "
|
||||
"'-')\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:878
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name contains invalid "
|
||||
"characters)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package version contains invalid "
|
||||
"characters)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:895
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name and version too long)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:111
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "nun pudo alcontrase %s na base de datos -- saltando\n"
|
||||
|
||||
#: lib/libalpm/remove.c:154
|
||||
#: lib/libalpm/remove.c:146
|
||||
#, c-format
|
||||
msgid "removing %s from target list\n"
|
||||
msgstr "desaniciando %s de la llista d'oxetivos\n"
|
||||
|
||||
#: lib/libalpm/remove.c:346
|
||||
#: lib/libalpm/remove.c:338
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "nun pue desaniciase'l ficheru '%s': %s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
|
||||
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
|
||||
#, c-format
|
||||
msgid "could not backup %s due to PATH_MAX overflow\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:562
|
||||
#: lib/libalpm/remove.c:570
|
||||
#, c-format
|
||||
msgid "cannot remove %s (%s)\n"
|
||||
msgstr "nun pue desaniciase %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/remove.c:735
|
||||
#: lib/libalpm/remove.c:743
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "nun pudo desaniciase la entrada de la base de datos %s-%s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:740
|
||||
#: lib/libalpm/remove.c:748
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "nun pudo desaniciase la entrada '%s' de la caché\n"
|
||||
|
||||
#: lib/libalpm/signing.c:171
|
||||
#: lib/libalpm/signing.c:163
|
||||
#, c-format
|
||||
msgid "Public keyring not found; have you run '%s'?\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
|
||||
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
|
||||
#, c-format
|
||||
msgid "GPGME error: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:284
|
||||
#: lib/libalpm/signing.c:275
|
||||
#, c-format
|
||||
msgid "looking up key %s using WKD\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:293
|
||||
#: lib/libalpm/signing.c:289
|
||||
#, c-format
|
||||
msgid "gpg error: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
|
||||
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
|
||||
#, c-format
|
||||
msgid "keyring is not writable\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:539
|
||||
#: lib/libalpm/signing.c:537
|
||||
#, c-format
|
||||
msgid "key \"%s\" on keyserver\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:544
|
||||
#: lib/libalpm/signing.c:542
|
||||
#, c-format
|
||||
msgid "key \"%s\" could not be imported\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:548
|
||||
#: lib/libalpm/signing.c:546
|
||||
#, c-format
|
||||
msgid "key \"%s\" could not be looked up remotely\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
|
||||
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
|
||||
#, c-format
|
||||
msgid "%s: missing required signature\n"
|
||||
msgstr "%s: falta la robla riquida\n"
|
||||
|
||||
#: lib/libalpm/signing.c:958
|
||||
#: lib/libalpm/signing.c:947
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is marginal trust\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:966
|
||||
#: lib/libalpm/signing.c:955
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is unknown trust\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:973
|
||||
#: lib/libalpm/signing.c:962
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" should never be trusted\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:985
|
||||
#: lib/libalpm/signing.c:974
|
||||
#, c-format
|
||||
msgid "%s: key \"%s\" is unknown\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:994
|
||||
#: lib/libalpm/signing.c:983
|
||||
#, c-format
|
||||
msgid "%s: key \"%s\" is disabled\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:998
|
||||
#: lib/libalpm/signing.c:987
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is expired\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:1002
|
||||
#: lib/libalpm/signing.c:991
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is invalid\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
|
||||
#: lib/libalpm/signing.c:1226
|
||||
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
|
||||
#: lib/libalpm/signing.c:1189
|
||||
#, c-format
|
||||
msgid "%s: signature format error\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
|
||||
#: lib/libalpm/signing.c:1220
|
||||
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
|
||||
#: lib/libalpm/signing.c:1183
|
||||
#, c-format
|
||||
msgid "%s: unsupported signature format\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:99
|
||||
#: lib/libalpm/sync.c:96
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: inorando anovamientu del paquete (%s => %s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:111
|
||||
#: lib/libalpm/sync.c:108
|
||||
#, c-format
|
||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
|
||||
msgstr "%s: inorando baxada de versión del paquete (%s => %s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:114
|
||||
#: lib/libalpm/sync.c:111
|
||||
#, c-format
|
||||
msgid "%s: downgrading from version %s to version %s\n"
|
||||
msgstr "%s: baxando de la versión %s a la %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:120
|
||||
#: lib/libalpm/sync.c:117
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: llocal (%s) ye más nuevu que %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:161
|
||||
#: lib/libalpm/sync.c:158
|
||||
#, c-format
|
||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
|
||||
msgstr "inorando troquéu de paquete (%s-%s => %s-%s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:177
|
||||
#: lib/libalpm/sync.c:174
|
||||
#, c-format
|
||||
msgid "cannot replace %s by %s\n"
|
||||
msgstr "nun pue trocase %s por %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
|
||||
#: lib/libalpm/sync.c:477
|
||||
#, c-format
|
||||
msgid "packages %s and %s have the same filename: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "deteutaos conflictos de paquete que nun puen iguase\n"
|
||||
|
||||
#: lib/libalpm/sync.c:555
|
||||
#: lib/libalpm/sync.c:566
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
|
||||
msgstr ""
|
||||
"desaniciando '%s' de la llista d'oxetivos porque ta en conflictu con '%s'\n"
|
||||
|
||||
#: lib/libalpm/sync.c:849
|
||||
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files\n"
|
||||
msgstr "fallu al recuperar dellos ficheros\n"
|
||||
msgid "%s: could not find package in cache\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1036
|
||||
#: lib/libalpm/sync.c:1066
|
||||
#, c-format
|
||||
msgid "failed to read file %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/sync.c:1223
|
||||
#: lib/libalpm/sync.c:1324
|
||||
#, c-format
|
||||
msgid "not enough free disk space\n"
|
||||
msgstr "nun hai espaciu llibre abondu\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1245
|
||||
#: lib/libalpm/sync.c:1346
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "nun pudo unviase la transaición de desaniciu\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1253
|
||||
#: lib/libalpm/sync.c:1354
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "nun pudo unviase la transaición\n"
|
||||
|
||||
#: lib/libalpm/trans.c:364
|
||||
#: lib/libalpm/trans.c:369
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "nun pudo creaase'l direutoriu temporal\n"
|
||||
|
||||
#: lib/libalpm/trans.c:379
|
||||
#: lib/libalpm/trans.c:384
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "nun pudo copiase'l ficheru temporal a %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:410
|
||||
#: lib/libalpm/trans.c:415
|
||||
#, c-format
|
||||
msgid "could not remove %s\n"
|
||||
msgstr "nun pudo desaniciase %s\n"
|
||||
|
||||
#: lib/libalpm/trans.c:414
|
||||
#: lib/libalpm/trans.c:419
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "nun pudo desaniciase'l direutoriu temporal %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:486
|
||||
#: lib/libalpm/util.c:512
|
||||
#, c-format
|
||||
msgid "unable to write to pipe (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:545
|
||||
#: lib/libalpm/util.c:571
|
||||
#, c-format
|
||||
msgid "unable to read from pipe (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
|
||||
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
|
||||
#, c-format
|
||||
msgid "could not create pipe (%s)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/util.c:623
|
||||
#: lib/libalpm/util.c:655
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "Nun pudo bifurcase un procesu nuevu (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:646
|
||||
#: lib/libalpm/util.c:680
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "nun pudo cambiase'l direutoriu root (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:658
|
||||
#: lib/libalpm/util.c:700
|
||||
#, c-format
|
||||
msgid "call to execv failed (%s)\n"
|
||||
msgstr "llamada a execv fallida (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:737
|
||||
#: lib/libalpm/util.c:779
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "llamada a waitpid fallida (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:747
|
||||
#: lib/libalpm/util.c:789
|
||||
#, c-format
|
||||
msgid "command failed to execute correctly\n"
|
||||
msgstr "el comandu falló al executase afayadizamente\n"
|
||||
|
||||
#: lib/libalpm/util.c:754
|
||||
#: lib/libalpm/util.c:796
|
||||
#, c-format
|
||||
msgid "Unknown signal"
|
||||
msgstr "Señal desconocida"
|
||||
|
||||
#: lib/libalpm/util.c:756
|
||||
#: lib/libalpm/util.c:798
|
||||
#, c-format
|
||||
msgid "command terminated by signal %d: %s\n"
|
||||
msgstr "comandu fináu pola señal %d: %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:853
|
||||
#: lib/libalpm/util.c:916
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "nun esiste'l caché %s, creando...\n"
|
||||
|
||||
#: lib/libalpm/util.c:884
|
||||
#: lib/libalpm/util.c:947
|
||||
#, c-format
|
||||
msgid "couldn't find or create package cache, using %s instead\n"
|
||||
msgstr ""
|
||||
|
|
1133
lib/libalpm/po/az_AZ.po
Normal file
1133
lib/libalpm/po/az_AZ.po
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,18 +1,18 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
|
||||
# This file is distributed under the same license as the libalpm package.
|
||||
#
|
||||
# Translators:
|
||||
# Galin Iskrenov <loot270@abv.bg>, 2017-2019
|
||||
# Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022,2024
|
||||
# Ivailo Monev <xakepa10@gmail.com>, 2014-2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
|
||||
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
|
||||
"PO-Revision-Date: 2019-10-11 13:05+0000\n"
|
||||
"Last-Translator: Galin Iskrenov <loot270@abv.bg>\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/toofishes/archlinux-"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
|
||||
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022,2024\n"
|
||||
"Language-Team: Bulgarian (http://app.transifex.com/toofishes/archlinux-"
|
||||
"pacman/language/bg/)\n"
|
||||
"Language: bg\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
@ -20,17 +20,17 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- skipping\n"
|
||||
msgstr "%s-%s е актуален -- пропускане\n"
|
||||
|
||||
#: lib/libalpm/add.c:95
|
||||
#: lib/libalpm/add.c:94
|
||||
#, c-format
|
||||
msgid "%s-%s is up to date -- reinstalling\n"
|
||||
msgstr "%s-%s е актуален -- преинсталиране\n"
|
||||
|
||||
#: lib/libalpm/add.c:100
|
||||
#: lib/libalpm/add.c:99
|
||||
#, c-format
|
||||
msgid "downgrading package %s (%s => %s)\n"
|
||||
msgstr "понижаване на пакет %s (%s => %s)\n"
|
||||
|
@ -40,17 +40,17 @@ msgstr "понижаване на пакет %s (%s => %s)\n"
|
|||
msgid "cannot allocate disk archive object"
|
||||
msgstr "не се открие указания архив на диск"
|
||||
|
||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
|
||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
|
||||
#, c-format
|
||||
msgid "warning given when extracting %s (%s)\n"
|
||||
msgstr "има предупреждение при извличане %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
|
||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
|
||||
#, c-format
|
||||
msgid "could not extract %s (%s)\n"
|
||||
msgstr "не може да се извлече %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
|
||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
|
||||
#, c-format
|
||||
msgid "could not rename %s to %s (%s)\n"
|
||||
msgstr "не може да се преименува %s на %s (%s)\n"
|
||||
|
@ -95,137 +95,152 @@ msgstr "извличане: не се презаписва папка с фай
|
|||
msgid "unable to extract %s.pacnew: path too long"
|
||||
msgstr "неспешно извличането на %s.pacnew: пътят е твърде дълъг"
|
||||
|
||||
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
|
||||
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
|
||||
#, c-format
|
||||
msgid "could not get current working directory\n"
|
||||
msgstr "не може да се разбере текущата директория\n"
|
||||
|
||||
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
|
||||
#: lib/libalpm/util.c:650
|
||||
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
|
||||
#: lib/libalpm/util.c:684
|
||||
#, c-format
|
||||
msgid "could not change directory to %s (%s)\n"
|
||||
msgstr "не може да се смени директория на %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
|
||||
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
|
||||
#, c-format
|
||||
msgid "could not restore working directory (%s)\n"
|
||||
msgstr "не може да се възстанови работната директория (%s)\n"
|
||||
|
||||
#: lib/libalpm/add.c:583
|
||||
#: lib/libalpm/add.c:579
|
||||
#, c-format
|
||||
msgid "problem occurred while upgrading %s\n"
|
||||
msgstr "възникнал проблем при подновяване %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:589
|
||||
#: lib/libalpm/add.c:585
|
||||
#, c-format
|
||||
msgid "problem occurred while installing %s\n"
|
||||
msgstr "възникнал проблем при инсталиране %s\n"
|
||||
|
||||
#: lib/libalpm/add.c:604
|
||||
#: lib/libalpm/add.c:600
|
||||
#, c-format
|
||||
msgid "could not update database entry %s-%s\n"
|
||||
msgstr "не може да се поднови запис в базата %s-%s\n"
|
||||
|
||||
#: lib/libalpm/add.c:615
|
||||
#: lib/libalpm/add.c:610
|
||||
#, c-format
|
||||
msgid "could not add entry '%s' in cache\n"
|
||||
msgstr "не може да се добави запис '%s' в кеша\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:267
|
||||
#: lib/libalpm/be_local.c:271
|
||||
#, c-format
|
||||
msgid "error while reading file %s: %s\n"
|
||||
msgstr "грешка при четене на файл %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:364
|
||||
#: lib/libalpm/be_local.c:382
|
||||
#, c-format
|
||||
msgid "removing invalid database: %s\n"
|
||||
msgstr "премахване на невалидна база: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
|
||||
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
|
||||
#, c-format
|
||||
msgid "could not create directory %s: %s\n"
|
||||
msgstr "не се създава директория %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
|
||||
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
|
||||
#, c-format
|
||||
msgid "invalid name for database entry '%s'\n"
|
||||
msgstr "невалидно име за запис в базата '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:598
|
||||
#: lib/libalpm/be_local.c:616
|
||||
#, c-format
|
||||
msgid "duplicated database entry '%s'\n"
|
||||
msgstr "дублиран запис в базата '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:610
|
||||
#: lib/libalpm/be_local.c:628
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "повреден запис в базата '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
|
||||
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
|
||||
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
|
||||
#: lib/libalpm/util.c:269
|
||||
#: lib/libalpm/be_local.c:663
|
||||
#, c-format
|
||||
msgid "unknown install reason for package %s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
|
||||
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
|
||||
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
|
||||
#: lib/libalpm/util.c:289
|
||||
#, c-format
|
||||
msgid "could not open file %s: %s\n"
|
||||
msgstr "не се отваря файл %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
|
||||
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "%s несъответствие в базата: името не съответства на пакета %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
|
||||
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "%s несъответствие в базата: версията не съответства на пакета %s\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:776
|
||||
#: lib/libalpm/be_local.c:806
|
||||
#, c-format
|
||||
msgid "unknown validation type for package %s: %s\n"
|
||||
msgstr "непознат валидиращ тип на пакета %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
|
||||
#: lib/libalpm/be_package.c:650
|
||||
#: lib/libalpm/be_local.c:841
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in local database\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_package.c:255
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in package description\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
|
||||
#: lib/libalpm/be_package.c:647
|
||||
#, c-format
|
||||
msgid "error while reading package %s: %s\n"
|
||||
msgstr "грешка при четене на пакет %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
|
||||
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
|
||||
#, c-format
|
||||
msgid "error while reading mtree of package %s: %s\n"
|
||||
msgstr "грешка при зареждане на mtree на пакет %s: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:603
|
||||
#: lib/libalpm/be_package.c:601
|
||||
#, c-format
|
||||
msgid "could not parse package description file in %s\n"
|
||||
msgstr "не може да се анализира описателния файл в %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:608
|
||||
#: lib/libalpm/be_package.c:606
|
||||
#, c-format
|
||||
msgid "missing package name in %s\n"
|
||||
msgstr "липсващо име на пакет в %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:612
|
||||
#: lib/libalpm/be_package.c:610
|
||||
#, c-format
|
||||
msgid "missing package version in %s\n"
|
||||
msgstr "липсваща версия на пакет в %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:616
|
||||
#: lib/libalpm/be_package.c:614
|
||||
#, c-format
|
||||
msgid "invalid package version in %s\n"
|
||||
msgstr "невалидна версия на пакет в %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:657
|
||||
#: lib/libalpm/be_package.c:653
|
||||
#, c-format
|
||||
msgid "missing package metadata in %s\n"
|
||||
msgstr "липсват метаданни за пакета %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:750
|
||||
#: lib/libalpm/be_package.c:745
|
||||
#, c-format
|
||||
msgid "failed to read signature file: %s\n"
|
||||
msgstr "не се чете подписващият файл: %s\n"
|
||||
|
||||
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
|
||||
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
|
||||
#, c-format
|
||||
msgid "required key missing from keyring\n"
|
||||
msgstr "нужния ключ липсва от keyring\n"
|
||||
|
@ -235,32 +250,37 @@ msgstr "нужния ключ липсва от keyring\n"
|
|||
msgid "removing invalid file: %s\n"
|
||||
msgstr "премахване невалиден файл: %s\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:515
|
||||
#: lib/libalpm/be_sync.c:471
|
||||
#, c-format
|
||||
msgid "could not parse package description file '%s' from db '%s'\n"
|
||||
msgstr "не може да се анализира описателния файл '%s' от db '%s'\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:522
|
||||
#: lib/libalpm/be_sync.c:486
|
||||
#, c-format
|
||||
msgid "could not read db '%s' (%s)\n"
|
||||
msgstr "не да се прочете db '%s' (%s)\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
|
||||
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: filename of package %s is illegal\n"
|
||||
msgstr "%s базата е непълна: името на пакета %s е недопустимо\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:566
|
||||
#: lib/libalpm/be_sync.c:529
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: filename of package %s is too long\n"
|
||||
msgstr "%s базата е непълна: името на пакета %s е твърде дълго\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:632
|
||||
#: lib/libalpm/be_sync.c:594
|
||||
#, c-format
|
||||
msgid "unknown database file: %s\n"
|
||||
msgstr "непознат датабаза файл: %s\n"
|
||||
|
||||
#: lib/libalpm/db.c:370
|
||||
#: lib/libalpm/be_sync.c:712
|
||||
#, c-format
|
||||
msgid "%s: unknown key '%s' in sync database\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/db.c:413
|
||||
#, c-format
|
||||
msgid "database path is undefined\n"
|
||||
msgstr "пътя към базата е неопределен\n"
|
||||
|
@ -280,12 +300,12 @@ msgstr "%s ще бъде премахната след зависимостта
|
|||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s ще бъде инсталиран преди зависимостта %s\n"
|
||||
|
||||
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
|
||||
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
|
||||
#, c-format
|
||||
msgid "ignoring package %s-%s\n"
|
||||
msgstr "пренебрегване на пакет %s-%s\n"
|
||||
|
||||
#: lib/libalpm/deps.c:869
|
||||
#: lib/libalpm/deps.c:842
|
||||
#, c-format
|
||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
|
||||
msgstr "не може да се разреши \"%s\", зависи от \"%s\"\n"
|
||||
|
@ -300,84 +320,125 @@ msgstr "не се получава системната информация з
|
|||
msgid "could not open file: %s: %s\n"
|
||||
msgstr "не се отворя файл: %s: %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
|
||||
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
|
||||
#, c-format
|
||||
msgid "could not get filesystem information\n"
|
||||
msgstr ""
|
||||
"не се получава системна информация\n"
|
||||
"\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:242
|
||||
#: lib/libalpm/diskspace.c:254
|
||||
#, c-format
|
||||
msgid "could not get file information for %s\n"
|
||||
msgstr "неможе да се вземе информация отностно %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
|
||||
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
|
||||
#, c-format
|
||||
msgid "could not determine mount point for file %s\n"
|
||||
msgstr "не може да се определи точката за монтиране на %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:354
|
||||
#: lib/libalpm/diskspace.c:366
|
||||
#, c-format
|
||||
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
|
||||
msgstr "Партишанът %s е твърде пълен: %jd блока са нужни, %ju блока свободни\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
|
||||
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
|
||||
#, c-format
|
||||
msgid "could not determine filesystem mount points\n"
|
||||
msgstr "не може да се опреди filesystem mount points\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:385
|
||||
#: lib/libalpm/diskspace.c:397
|
||||
#, c-format
|
||||
msgid "could not determine cachedir mount point %s\n"
|
||||
msgstr "не може да се определи cachedir mount point %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:438
|
||||
#: lib/libalpm/diskspace.c:450
|
||||
#, c-format
|
||||
msgid "could not determine root mount point %s\n"
|
||||
msgstr "не може да се определи root mount point %s\n"
|
||||
|
||||
#: lib/libalpm/diskspace.c:486
|
||||
#: lib/libalpm/diskspace.c:498
|
||||
#, c-format
|
||||
msgid "Partition %s is mounted read only\n"
|
||||
msgstr "Дялът %s е монтиран само за четене\n"
|
||||
|
||||
#: lib/libalpm/dload.c:161
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "диск"
|
||||
|
||||
#: lib/libalpm/dload.c:348
|
||||
#: lib/libalpm/dload.c:107
|
||||
#, c-format
|
||||
msgid "failed to create temporary file for download\n"
|
||||
msgstr "не може да се създаде временен файл за сваляне\n"
|
||||
|
||||
#: lib/libalpm/dload.c:393
|
||||
#: lib/libalpm/dload.c:198
|
||||
#, c-format
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "url '%s' е невалиден\n"
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr "твърде много грешки от %s, прескачане на останалото от транзакцията\n"
|
||||
|
||||
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
|
||||
#: lib/libalpm/dload.c:215
|
||||
#, c-format
|
||||
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr "фатална грешка от %s, прескачам остатъка от тази транзакция\n"
|
||||
|
||||
#: lib/libalpm/dload.c:310
|
||||
#, c-format
|
||||
msgid "disk"
|
||||
msgstr "диск"
|
||||
|
||||
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : %s\n"
|
||||
msgstr "неуспех при извличане на файл '%s' от %s : %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:477
|
||||
#: lib/libalpm/dload.c:562
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
|
||||
msgstr ""
|
||||
"неуспех при получаването на файл '%s' от %s : очакваният размер за сваляне е "
|
||||
"надвишен\n"
|
||||
|
||||
#: lib/libalpm/dload.c:532
|
||||
#: lib/libalpm/dload.c:685
|
||||
#, c-format
|
||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
|
||||
msgstr "%s изглежда частичен: %jd/%jd bytes\n"
|
||||
|
||||
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
|
||||
#: lib/libalpm/dload.c:776
|
||||
#, c-format
|
||||
msgid "failed to download %s\n"
|
||||
msgstr "неуспех при сваляне на %s\n"
|
||||
msgid "url '%s' is invalid\n"
|
||||
msgstr "url '%s' е невалиден\n"
|
||||
|
||||
#: lib/libalpm/dload.c:864
|
||||
#, c-format
|
||||
msgid "failed to setup a download payload for %s\n"
|
||||
msgstr "Неуспешно настройване на нужното за изтегляне %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:876
|
||||
#, c-format
|
||||
msgid "curl returned error %d from transfer\n"
|
||||
msgstr "curl върна грешка %d при трансфера\n"
|
||||
|
||||
#: lib/libalpm/dload.c:900
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr "curl трансферна грешка: %d\n"
|
||||
|
||||
#: lib/libalpm/dload.c:963
|
||||
#, c-format
|
||||
msgid "could not chdir to download directory %s\n"
|
||||
msgstr "неуспех на chdir до директория за сваляне %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:968
|
||||
#, c-format
|
||||
msgid "switching to sandbox user '%s' failed!\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files\n"
|
||||
msgstr "неуспех при извличане на файлове\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1384
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr "изтеглянето завърши успешно, но няма файл в кеша\n"
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
|
@ -494,7 +555,7 @@ msgstr "няма конфигуриран сърър за източник"
|
|||
msgid "transaction already initialized"
|
||||
msgstr "транзакцията вече е инициализирана"
|
||||
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
|
||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
|
||||
#, c-format
|
||||
msgid "transaction not initialized"
|
||||
msgstr " транзакцията не е инициализирана"
|
||||
|
@ -504,86 +565,86 @@ msgstr " транзакцията не е инициализирана"
|
|||
msgid "duplicate target"
|
||||
msgstr "дублирана цел"
|
||||
|
||||
#: lib/libalpm/error.c:96
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr "дублиране на файлово име"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
msgid "transaction not prepared"
|
||||
msgstr "транзакцията не е подготвена"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#: lib/libalpm/error.c:100
|
||||
#, c-format
|
||||
msgid "transaction aborted"
|
||||
msgstr "транзакцията е преустановена"
|
||||
|
||||
#: lib/libalpm/error.c:100
|
||||
#: lib/libalpm/error.c:102
|
||||
#, c-format
|
||||
msgid "operation not compatible with the transaction type"
|
||||
msgstr "операцията е несъвместима с типа транзакция"
|
||||
|
||||
#: lib/libalpm/error.c:102
|
||||
#: lib/libalpm/error.c:104
|
||||
#, c-format
|
||||
msgid "transaction commit attempt when database is not locked"
|
||||
msgstr "транзакцията иска достъп до незаключена база"
|
||||
|
||||
#: lib/libalpm/error.c:104
|
||||
#: lib/libalpm/error.c:106
|
||||
#, c-format
|
||||
msgid "failed to run transaction hooks"
|
||||
msgstr "неуспех при пускането на транзакционни куки"
|
||||
|
||||
#: lib/libalpm/error.c:107
|
||||
#: lib/libalpm/error.c:109
|
||||
#, c-format
|
||||
msgid "could not find or read package"
|
||||
msgstr "няма или не се чете пакет"
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
#: lib/libalpm/error.c:111
|
||||
#, c-format
|
||||
msgid "operation cancelled due to ignorepkg"
|
||||
msgstr "отменена операция според ignorepkg"
|
||||
|
||||
#: lib/libalpm/error.c:111
|
||||
#: lib/libalpm/error.c:113
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "невалиден или повреден пакет"
|
||||
|
||||
#: lib/libalpm/error.c:113
|
||||
#: lib/libalpm/error.c:115
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package (checksum)"
|
||||
msgstr "невалиден или повреден пакет (checksum)"
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
#: lib/libalpm/error.c:117
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package (PGP signature)"
|
||||
msgstr "невалиден или повреден пакет (PGP signature)"
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
#: lib/libalpm/error.c:119
|
||||
#, c-format
|
||||
msgid "package missing required signature"
|
||||
msgstr "липсва изискващ се подпис на пакет"
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
#: lib/libalpm/error.c:121
|
||||
#, c-format
|
||||
msgid "cannot open package file"
|
||||
msgstr "не се отваря пакетен файл"
|
||||
|
||||
#: lib/libalpm/error.c:121
|
||||
#: lib/libalpm/error.c:123
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "не се премахват всички файлове на пакета"
|
||||
|
||||
#: lib/libalpm/error.c:123
|
||||
#: lib/libalpm/error.c:125
|
||||
#, c-format
|
||||
msgid "package filename is not valid"
|
||||
msgstr "името на пакета не е валидно"
|
||||
|
||||
#: lib/libalpm/error.c:125
|
||||
#: lib/libalpm/error.c:127
|
||||
#, c-format
|
||||
msgid "package architecture is not valid"
|
||||
msgstr "архитектурата на пакета не е валидна"
|
||||
|
||||
#: lib/libalpm/error.c:127
|
||||
#, c-format
|
||||
msgid "could not find repository for target"
|
||||
msgstr "не може да се открие източник за целта"
|
||||
|
||||
#: lib/libalpm/error.c:130
|
||||
#, c-format
|
||||
msgid "missing PGP signature"
|
||||
|
@ -649,12 +710,12 @@ msgstr "компилиран без поддръжка на подпис"
|
|||
msgid "unexpected error"
|
||||
msgstr "неочаквана грешка"
|
||||
|
||||
#: lib/libalpm/handle.c:153
|
||||
#: lib/libalpm/handle.c:165
|
||||
#, c-format
|
||||
msgid "lock file missing %s\n"
|
||||
msgstr "липсва заключващ файл %s\n"
|
||||
|
||||
#: lib/libalpm/handle.c:159
|
||||
#: lib/libalpm/handle.c:171
|
||||
#, c-format
|
||||
msgid "could not remove lock file %s\n"
|
||||
msgstr "не се премахва заключен файл %s\n"
|
||||
|
@ -726,7 +787,7 @@ msgstr "кука %s ред %d: невъзможно да се зададе оп
|
|||
msgid "unable to run hook %s: %s\n"
|
||||
msgstr "невъзможно е пускане на куката %s: %s\n"
|
||||
|
||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
|
||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
|
||||
#, c-format
|
||||
msgid "could not open directory: %s: %s\n"
|
||||
msgstr "не се отваря папка: %s: %s\n"
|
||||
|
@ -736,7 +797,7 @@ msgstr "не се отваря папка: %s: %s\n"
|
|||
msgid "could not open file: %s%s: %s\n"
|
||||
msgstr "не може да се отвори файл: %s%s: %s\n"
|
||||
|
||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
|
||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
|
||||
#, c-format
|
||||
msgid "could not stat file %s: %s\n"
|
||||
msgstr "не се коригира %s: %s\n"
|
||||
|
@ -746,279 +807,317 @@ msgstr "не се коригира %s: %s\n"
|
|||
msgid "could not read directory: %s: %s\n"
|
||||
msgstr "не може да се прочете папката: %s: %s\n"
|
||||
|
||||
#: lib/libalpm/package.c:578
|
||||
#: lib/libalpm/package.c:614
|
||||
#, c-format
|
||||
msgid "could not fully load metadata for package %s-%s\n"
|
||||
msgstr "не пълно извеждане на метаданни за пакет %s-%s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:119
|
||||
#: lib/libalpm/package.c:869
|
||||
#, c-format
|
||||
msgid "invalid package metadata (name or version missing)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:874
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name cannot start with '.' or "
|
||||
"'-')\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:878
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name contains invalid "
|
||||
"characters)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package version contains invalid "
|
||||
"characters)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/package.c:895
|
||||
#, c-format
|
||||
msgid ""
|
||||
"invalid metadata for package %s-%s (package name and version too long)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/libalpm/remove.c:111
|
||||
#, c-format
|
||||
msgid "could not find %s in database -- skipping\n"
|
||||
msgstr "няма %s в базата -- пропускане\n"
|
||||
|
||||
#: lib/libalpm/remove.c:154
|
||||
#: lib/libalpm/remove.c:146
|
||||
#, c-format
|
||||
msgid "removing %s from target list\n"
|
||||
msgstr "премахване %s от списъка с целите\n"
|
||||
|
||||
#: lib/libalpm/remove.c:346
|
||||
#: lib/libalpm/remove.c:338
|
||||
#, c-format
|
||||
msgid "cannot remove file '%s': %s\n"
|
||||
msgstr "не се премахва файла '%s': %s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
|
||||
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
|
||||
#, c-format
|
||||
msgid "could not backup %s due to PATH_MAX overflow\n"
|
||||
msgstr "не може да се архивира %s поради препълване на PATH_MAX\n"
|
||||
|
||||
#: lib/libalpm/remove.c:562
|
||||
#: lib/libalpm/remove.c:570
|
||||
#, c-format
|
||||
msgid "cannot remove %s (%s)\n"
|
||||
msgstr "не се премахва %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/remove.c:735
|
||||
#: lib/libalpm/remove.c:743
|
||||
#, c-format
|
||||
msgid "could not remove database entry %s-%s\n"
|
||||
msgstr "не може да се премахне запис в базата %s-%s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:740
|
||||
#: lib/libalpm/remove.c:748
|
||||
#, c-format
|
||||
msgid "could not remove entry '%s' from cache\n"
|
||||
msgstr "не може да се премахне '%s' от кеша\n"
|
||||
|
||||
#: lib/libalpm/signing.c:171
|
||||
#: lib/libalpm/signing.c:163
|
||||
#, c-format
|
||||
msgid "Public keyring not found; have you run '%s'?\n"
|
||||
msgstr "Публичният ключодържател не е открит; Ще пуснете ли '%s'?\n"
|
||||
|
||||
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
|
||||
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
|
||||
#, c-format
|
||||
msgid "GPGME error: %s\n"
|
||||
msgstr "GPGME грешка: %s\n"
|
||||
|
||||
#: lib/libalpm/signing.c:284
|
||||
#: lib/libalpm/signing.c:275
|
||||
#, c-format
|
||||
msgid "looking up key %s using WKD\n"
|
||||
msgstr "търсене на ключ %s използвайки WKD\n"
|
||||
|
||||
#: lib/libalpm/signing.c:293
|
||||
#: lib/libalpm/signing.c:289
|
||||
#, c-format
|
||||
msgid "gpg error: %s\n"
|
||||
msgstr "gpg грешка: %s\n"
|
||||
|
||||
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
|
||||
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
|
||||
#, c-format
|
||||
msgid "keyring is not writable\n"
|
||||
msgstr "ключодържателя не се записва\n"
|
||||
|
||||
#: lib/libalpm/signing.c:539
|
||||
#: lib/libalpm/signing.c:537
|
||||
#, c-format
|
||||
msgid "key \"%s\" on keyserver\n"
|
||||
msgstr "ключ \"%s\" на ключов съвър\n"
|
||||
|
||||
#: lib/libalpm/signing.c:544
|
||||
#: lib/libalpm/signing.c:542
|
||||
#, c-format
|
||||
msgid "key \"%s\" could not be imported\n"
|
||||
msgstr "ключ \"%s\" не може да се внесе\n"
|
||||
|
||||
#: lib/libalpm/signing.c:548
|
||||
#: lib/libalpm/signing.c:546
|
||||
#, c-format
|
||||
msgid "key \"%s\" could not be looked up remotely\n"
|
||||
msgstr "ключ \"%s\" не може да се прегледа отдалечено\n"
|
||||
|
||||
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
|
||||
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
|
||||
#, c-format
|
||||
msgid "%s: missing required signature\n"
|
||||
msgstr "%s: липсва изискващ се подпис\n"
|
||||
|
||||
#: lib/libalpm/signing.c:958
|
||||
#: lib/libalpm/signing.c:947
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is marginal trust\n"
|
||||
msgstr "%s: подписът от \"%s\" е изрично доверен\n"
|
||||
|
||||
#: lib/libalpm/signing.c:966
|
||||
#: lib/libalpm/signing.c:955
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is unknown trust\n"
|
||||
msgstr "%s: подписът от \"%s\" е с непознато доверие\n"
|
||||
|
||||
#: lib/libalpm/signing.c:973
|
||||
#: lib/libalpm/signing.c:962
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" should never be trusted\n"
|
||||
msgstr "%s: подписът от \"%s\" никога да не се му вярва\n"
|
||||
|
||||
#: lib/libalpm/signing.c:985
|
||||
#: lib/libalpm/signing.c:974
|
||||
#, c-format
|
||||
msgid "%s: key \"%s\" is unknown\n"
|
||||
msgstr "%s: ключ \"%s\" е непознат\n"
|
||||
|
||||
#: lib/libalpm/signing.c:994
|
||||
#: lib/libalpm/signing.c:983
|
||||
#, c-format
|
||||
msgid "%s: key \"%s\" is disabled\n"
|
||||
msgstr "%s: ключа е \"%s\" е негоден\n"
|
||||
|
||||
#: lib/libalpm/signing.c:998
|
||||
#: lib/libalpm/signing.c:987
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is expired\n"
|
||||
msgstr "%s: подписът от \"%s\" е изтекъл\n"
|
||||
|
||||
#: lib/libalpm/signing.c:1002
|
||||
#: lib/libalpm/signing.c:991
|
||||
#, c-format
|
||||
msgid "%s: signature from \"%s\" is invalid\n"
|
||||
msgstr "%s: подписът от \"%s\" е невалиден\n"
|
||||
|
||||
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
|
||||
#: lib/libalpm/signing.c:1226
|
||||
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
|
||||
#: lib/libalpm/signing.c:1189
|
||||
#, c-format
|
||||
msgid "%s: signature format error\n"
|
||||
msgstr "%s: грешен формат на подписа\n"
|
||||
|
||||
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
|
||||
#: lib/libalpm/signing.c:1220
|
||||
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
|
||||
#: lib/libalpm/signing.c:1183
|
||||
#, c-format
|
||||
msgid "%s: unsupported signature format\n"
|
||||
msgstr "%s: неподдържан формат на подписа\n"
|
||||
|
||||
#: lib/libalpm/sync.c:99
|
||||
#: lib/libalpm/sync.c:96
|
||||
#, c-format
|
||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
|
||||
msgstr "%s: игнориране надграждането на пакет (%s => %s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:111
|
||||
#: lib/libalpm/sync.c:108
|
||||
#, c-format
|
||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
|
||||
msgstr "%s: игнориране на пакетен downgrade (%s => %s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:114
|
||||
#: lib/libalpm/sync.c:111
|
||||
#, c-format
|
||||
msgid "%s: downgrading from version %s to version %s\n"
|
||||
msgstr "%s: снижаване на версията от %s към версия %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:120
|
||||
#: lib/libalpm/sync.c:117
|
||||
#, c-format
|
||||
msgid "%s: local (%s) is newer than %s (%s)\n"
|
||||
msgstr "%s: текущият (%s) е по-нов от %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:161
|
||||
#: lib/libalpm/sync.c:158
|
||||
#, c-format
|
||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
|
||||
msgstr "игнориране замяната на пакет (%s-%s => %s-%s)\n"
|
||||
|
||||
#: lib/libalpm/sync.c:177
|
||||
#: lib/libalpm/sync.c:174
|
||||
#, c-format
|
||||
msgid "cannot replace %s by %s\n"
|
||||
msgstr "не може да се замести %s от %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
|
||||
#: lib/libalpm/sync.c:477
|
||||
#, c-format
|
||||
msgid "packages %s and %s have the same filename: %s\n"
|
||||
msgstr "пакети %s и %s имат еднакво име: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
|
||||
#, c-format
|
||||
msgid "unresolvable package conflicts detected\n"
|
||||
msgstr "засечени нерешени пакетни конфликти\n"
|
||||
|
||||
#: lib/libalpm/sync.c:555
|
||||
#: lib/libalpm/sync.c:566
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr "премахване '%s' от целевия списък заради конфликт с '%s'\n"
|
||||
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
|
||||
msgstr ""
|
||||
"Премахване на '%s-%s' от целевия списък, защото противоречи на '%s-%s'\n"
|
||||
|
||||
#: lib/libalpm/sync.c:849
|
||||
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files\n"
|
||||
msgstr "неуспех при извличане на файлове\n"
|
||||
msgid "%s: could not find package in cache\n"
|
||||
msgstr "%s: не можах да намеря пакет в кеша\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1036
|
||||
#: lib/libalpm/sync.c:1066
|
||||
#, c-format
|
||||
msgid "failed to read file %s: %s\n"
|
||||
msgstr "не успя да се прочете файла %s: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1223
|
||||
#: lib/libalpm/sync.c:1324
|
||||
#, c-format
|
||||
msgid "not enough free disk space\n"
|
||||
msgstr "няма достатъчно свободно място на диска\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1245
|
||||
#: lib/libalpm/sync.c:1346
|
||||
#, c-format
|
||||
msgid "could not commit removal transaction\n"
|
||||
msgstr "не се потвърждава транзакцията по премахване\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1253
|
||||
#: lib/libalpm/sync.c:1354
|
||||
#, c-format
|
||||
msgid "could not commit transaction\n"
|
||||
msgstr "не се потвърждава транзакцията\n"
|
||||
|
||||
#: lib/libalpm/trans.c:364
|
||||
#: lib/libalpm/trans.c:369
|
||||
#, c-format
|
||||
msgid "could not create temp directory\n"
|
||||
msgstr "не се създава temp папка\n"
|
||||
|
||||
#: lib/libalpm/trans.c:379
|
||||
#: lib/libalpm/trans.c:384
|
||||
#, c-format
|
||||
msgid "could not copy tempfile to %s (%s)\n"
|
||||
msgstr "не се копира tempfile в %s (%s)\n"
|
||||
|
||||
#: lib/libalpm/trans.c:410
|
||||
#: lib/libalpm/trans.c:415
|
||||
#, c-format
|
||||
msgid "could not remove %s\n"
|
||||
msgstr "не се премахва %s\n"
|
||||
|
||||
#: lib/libalpm/trans.c:414
|
||||
#: lib/libalpm/trans.c:419
|
||||
#, c-format
|
||||
msgid "could not remove tmpdir %s\n"
|
||||
msgstr "не се премахва tmpdir %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:486
|
||||
#: lib/libalpm/util.c:512
|
||||
#, c-format
|
||||
msgid "unable to write to pipe (%s)\n"
|
||||
msgstr "неъспешно записването в тръбата (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:545
|
||||
#: lib/libalpm/util.c:571
|
||||
#, c-format
|
||||
msgid "unable to read from pipe (%s)\n"
|
||||
msgstr "неуспешно четенето от тръбата (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
|
||||
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
|
||||
#, c-format
|
||||
msgid "could not create pipe (%s)\n"
|
||||
msgstr "не се създава pipe (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:623
|
||||
#: lib/libalpm/util.c:655
|
||||
#, c-format
|
||||
msgid "could not fork a new process (%s)\n"
|
||||
msgstr "could not fork a new process (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:646
|
||||
#: lib/libalpm/util.c:680
|
||||
#, c-format
|
||||
msgid "could not change the root directory (%s)\n"
|
||||
msgstr "не може да се промени root папката (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:658
|
||||
#: lib/libalpm/util.c:700
|
||||
#, c-format
|
||||
msgid "call to execv failed (%s)\n"
|
||||
msgstr "неуспех при извикване execv (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:737
|
||||
#: lib/libalpm/util.c:779
|
||||
#, c-format
|
||||
msgid "call to waitpid failed (%s)\n"
|
||||
msgstr "неуспех при извикване на waitpid (%s)\n"
|
||||
|
||||
#: lib/libalpm/util.c:747
|
||||
#: lib/libalpm/util.c:789
|
||||
#, c-format
|
||||
msgid "command failed to execute correctly\n"
|
||||
msgstr "неуспешно правилно изпълнение на команда\n"
|
||||
|
||||
#: lib/libalpm/util.c:754
|
||||
#: lib/libalpm/util.c:796
|
||||
#, c-format
|
||||
msgid "Unknown signal"
|
||||
msgstr "Неизвестен сигнал"
|
||||
|
||||
#: lib/libalpm/util.c:756
|
||||
#: lib/libalpm/util.c:798
|
||||
#, c-format
|
||||
msgid "command terminated by signal %d: %s\n"
|
||||
msgstr "командата прекратена от сигнал %d: %s\n"
|
||||
|
||||
#: lib/libalpm/util.c:853
|
||||
#: lib/libalpm/util.c:916
|
||||
#, c-format
|
||||
msgid "no %s cache exists, creating...\n"
|
||||
msgstr "не %s съществуваш кеш, създаване...\n"
|
||||
|
||||
#: lib/libalpm/util.c:884
|
||||
#: lib/libalpm/util.c:947
|
||||
#, c-format
|
||||
msgid "couldn't find or create package cache, using %s instead\n"
|
||||
msgstr "не се открива или създава пакетен кеш, използва се %s\n"
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue