mirror of
https://git.savannah.gnu.org/git/make.git
synced 2025-06-23 00:00:31 -04:00
Compare commits
950 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d523661ce2 | ||
|
f12a4fddce | ||
|
186522e480 | ||
|
aa8626ce09 | ||
|
93704dd565 | ||
|
101bf5636f | ||
|
9251546bac | ||
|
7dc23aff30 | ||
|
0267eb64fa | ||
|
bba4427b5d | ||
|
c23a7e6232 | ||
|
4d3bf7838f | ||
|
8c8c7fc226 | ||
|
9fee98f843 | ||
|
f800f8bae3 | ||
|
39a4c81062 | ||
|
d97e048b08 | ||
|
c63a5bc6a2 | ||
|
bc979e4949 | ||
|
6970561de0 | ||
|
f0db5e321f | ||
|
8653c25fcf | ||
|
4d883c414d | ||
|
034f862361 | ||
|
49b955a50d | ||
|
69038e62e0 | ||
|
a9e3eb1eec | ||
|
e3f938caf8 | ||
|
40664fef1f | ||
|
f7985ab827 | ||
|
8339232a2f | ||
|
949952258e | ||
|
479c54f6ed | ||
|
033330e34c | ||
|
61ee4578f5 | ||
|
f289ece6cf | ||
|
d791fb4139 | ||
|
0b91f42f58 | ||
|
882d59c672 | ||
|
5fc62f8295 | ||
|
3d4f3e0627 | ||
|
242603fa46 | ||
|
b8a2a4424b | ||
|
bfbf169b63 | ||
|
21a538ce8f | ||
|
3176b60566 | ||
|
07187db947 | ||
|
a493d9ab6c | ||
|
a382ac6cd1 | ||
|
63b602e74f | ||
|
ec348f51d0 | ||
|
51e56a028e | ||
|
1eff20f6f6 | ||
|
82708b3a3a | ||
|
828906b6dc | ||
|
b936970956 | ||
|
1e43a5d104 | ||
|
25049fef16 | ||
|
31036e648f | ||
|
1ff728bff4 | ||
|
1161779ef8 | ||
|
a80670ad41 | ||
|
d86448fe5f | ||
|
33932663b0 | ||
|
89bea82af3 | ||
|
dd1980426e | ||
|
2ce7e40822 | ||
|
b1e240c554 | ||
|
7fa40eb4fc | ||
|
8817efe46a | ||
|
66adfb7c6f | ||
|
9af3e60f4d | ||
|
8061929963 | ||
|
cd33c9a1e9 | ||
|
c4ecd9d9eb | ||
|
6b7f35cb0b | ||
|
1000374759 | ||
|
8d76fb8778 | ||
|
ee366afbf1 | ||
|
b686980c66 | ||
|
8e5c96c318 | ||
|
363bdaef8c | ||
|
b2bf660abc | ||
|
04f4c2b8d9 | ||
|
347316fdf6 | ||
|
1a03888afa | ||
|
07fcee35f0 | ||
|
c85b71a396 | ||
|
032f784601 | ||
|
78e6a89b19 | ||
|
1748e66414 | ||
|
8e0e6c678f | ||
|
3f28ec2f58 | ||
|
24a84f99bb | ||
|
05c86bfcb2 | ||
|
06c75a35b9 | ||
|
ebe0a1c9f1 | ||
|
0880e5c86a | ||
|
0e06c75889 | ||
|
5340a3d5d1 | ||
|
fec72ea308 | ||
|
6cf6311332 | ||
|
c4329fb953 | ||
|
971b02d58e | ||
|
fdd61fc068 | ||
|
80727d709c | ||
|
cd46baab90 | ||
|
54b3202f8d | ||
|
5111087e12 | ||
|
0552b0abc8 | ||
|
c2792d6129 | ||
|
a0d1e76d60 | ||
|
03ecd94488 | ||
|
2611e1991f | ||
|
9db74434cd | ||
|
23f70b0cb8 | ||
|
78c8c44326 | ||
|
caf1d4c28f | ||
|
f99d083418 | ||
|
a367c0640f | ||
|
3088e3e698 | ||
|
bf7f690202 | ||
|
5d1fe2b16d | ||
|
8285852e55 | ||
|
9b9f3351d1 | ||
|
6f3e9e9b84 | ||
|
6128c3e266 | ||
|
ceb52b5d1b | ||
|
d4692df20d | ||
|
e6bd61d949 | ||
|
fcefae5ec9 | ||
|
d66a65ad5a | ||
|
8093e2eee3 | ||
|
74dab224b3 | ||
|
8b8cc3a825 | ||
|
9b6fedef1c | ||
|
8ddb628927 | ||
|
e9dd614d73 | ||
|
f5dc17ac2d | ||
|
ac159491da | ||
|
4436655568 | ||
|
549fc56102 | ||
|
37e0010743 | ||
|
536c3e2b37 | ||
|
4c9b922560 | ||
|
2449ef3c88 | ||
|
fbf8c940e5 | ||
|
62194015fa | ||
|
c85f68c4e9 | ||
|
ffa28f3914 | ||
|
8f03e69af0 | ||
|
e819fc2022 | ||
|
f21cd822a3 | ||
|
2f336608d8 | ||
|
faedfdb0af | ||
|
9709d273b2 | ||
|
eb0bd1aaec | ||
|
d2bf740e77 | ||
|
a8890796a4 | ||
|
be6bb0fd68 | ||
|
db351fe85b | ||
|
8a0d7fd4ef | ||
|
f51fc130cc | ||
|
b99b6cdf3c | ||
|
36f955b0e8 | ||
|
a275f4e9ab | ||
|
11444fb001 | ||
|
0de7a0d3bf | ||
|
1656cd051c | ||
|
31a1337c23 | ||
|
5ae02ff8c1 | ||
|
1ceeb8c64b | ||
|
8791d2b38e | ||
|
f91b8bbb34 | ||
|
8dc66b6c31 | ||
|
ccbaf3861d | ||
|
c4fbfe8b5e | ||
|
e7ce3a655e | ||
|
c580ebae8d | ||
|
56d2978141 | ||
|
c91b269f66 | ||
|
29f453739f | ||
|
937e9aa32d | ||
|
8e9c7db1e1 | ||
|
15dfad96d7 | ||
|
76d2e5d98d | ||
|
a581146562 | ||
|
b2c7446023 | ||
|
89427039c3 | ||
|
7d8756a4a3 | ||
|
8e805c7ba6 | ||
|
132528b266 | ||
|
8f9e7722ff | ||
|
95c2db7b8d | ||
|
5d1b757517 | ||
|
c0023150f1 | ||
|
a89eef87e6 | ||
|
6164608900 | ||
|
a99183ed2b | ||
|
dc2d963989 | ||
|
53b8f6a5da | ||
|
6c1a6dd77c | ||
|
1b51ba1f5d | ||
|
4c9d87f4ae | ||
|
bb5df35133 | ||
|
92ab2e642d | ||
|
deb4ff272a | ||
|
e80ce6fc90 | ||
|
d71c0bb0ce | ||
|
090d99dd2d | ||
|
6b45f89adb | ||
|
11f7198f64 | ||
|
4321c5e562 | ||
|
ed493f6c91 | ||
|
7c3260bbdd | ||
|
38b19976f5 | ||
|
1dd52ab472 | ||
|
92789aa2e7 | ||
|
4e18732a1d | ||
|
11f9da227e | ||
|
b92340a1ea | ||
|
8064aee4f9 | ||
|
cf78e65fda | ||
|
04f0d8427f | ||
|
f8401ad28b | ||
|
e4b3bf7f97 | ||
|
d18a87d0a4 | ||
|
41c35f2ffe | ||
|
deb4a42c3e | ||
|
252c26bd20 | ||
|
6f8da5f4b8 | ||
|
c46b5a9e0e | ||
|
b4157d2ff4 | ||
|
f364e0d8d6 | ||
|
bb0c05a7f0 | ||
|
f987d181c4 | ||
|
cad3ddd165 | ||
|
54214176b1 | ||
|
c2f92c980f | ||
|
5b1ca277ca | ||
|
7c71df5695 | ||
|
a0956c1803 | ||
|
4ec74e568d | ||
|
d9fc1ac5d2 | ||
|
9f55e9fd13 | ||
|
7bb7bb4ba4 | ||
|
b79791533b | ||
|
9d24d41801 | ||
|
2d943d3d2e | ||
|
b16913a67e | ||
|
72ee43c473 | ||
|
e5e538fb7a | ||
|
c453f898a0 | ||
|
18c4b508ef | ||
|
383eb3a923 | ||
|
01b1d4f401 | ||
|
bf2d71498c | ||
|
3e20e376b7 | ||
|
7ddfc42ee3 | ||
|
ca92d83cde | ||
|
ae80eefe65 | ||
|
01142a53c9 | ||
|
dee6af912a | ||
|
7296991d6c | ||
|
d51ac70122 | ||
|
3cb84fe933 | ||
|
ad84ec2fdc | ||
|
26b9f30714 | ||
|
5ac80176a3 | ||
|
c801a7fb67 | ||
|
c2eddf9be2 | ||
|
f8852311cc | ||
|
a99378ebe4 | ||
|
6c87f3fb85 | ||
|
38116baee9 | ||
|
614033f8c6 | ||
|
f3640ecf4f | ||
|
c4e232e44f | ||
|
aa99e810a9 | ||
|
8f49029561 | ||
|
f7ed583675 | ||
|
cf7f7de7ae | ||
|
d4cb7ae6d4 | ||
|
387d349dc8 | ||
|
caad0e2181 | ||
|
990d6f9b9a | ||
|
134480787e | ||
|
a9a4919909 | ||
|
d12ff78cb2 | ||
|
fabb03eac4 | ||
|
618c53a225 | ||
|
88d126d6c4 | ||
|
f6ea899d83 | ||
|
ee861a4e9f | ||
|
ca4234c4b5 | ||
|
257b82ac1f | ||
|
aac4004444 | ||
|
86fc644dcc | ||
|
02b3a6ad46 | ||
|
77734be2af | ||
|
820210ab85 | ||
|
77706874a7 | ||
|
a9548aeb8f | ||
|
70ba0357a0 | ||
|
7d48401707 | ||
|
1fc13bf576 | ||
|
896908180e | ||
|
80e9a422e4 | ||
|
15a7e3830f | ||
|
26e359c71d | ||
|
4da2055a10 | ||
|
a2ba5ccbda | ||
|
5eff618c8c | ||
|
10e130b207 | ||
|
62da1c45e5 | ||
|
ab31f0b594 | ||
|
8f1b6bca46 | ||
|
6faa02247e | ||
|
c72e1ec446 | ||
|
91d87ccf32 | ||
|
7ad2593b2d | ||
|
09cce75c30 | ||
|
07eea3aa49 | ||
|
16e14b4114 | ||
|
77881d2281 | ||
|
2fe96e4a41 | ||
|
dd24a4c1cf | ||
|
f36c6c7347 | ||
|
87d24154af | ||
|
614557d04c | ||
|
047544785b | ||
|
73b08af181 | ||
|
5c1d9e54c7 | ||
|
2d7b5d6d80 | ||
|
5dc7358547 | ||
|
e33af0fb4a | ||
|
6f7e06ec4e | ||
|
3f3eecc115 | ||
|
b09e9af0b8 | ||
|
9992cb0b83 | ||
|
0cbee1b475 | ||
|
d63925d863 | ||
|
0793658c09 | ||
|
98da874c43 | ||
|
88d6c22a48 | ||
|
c3b39d0654 | ||
|
fe55d6e1e3 | ||
|
768f287a06 | ||
|
8dd302cda6 | ||
|
df75efb114 | ||
|
3ec497f8f8 | ||
|
84ed34ba5a | ||
|
08c964b4ac | ||
|
97e51c0285 | ||
|
59abb46bc9 | ||
|
6d6f12b0c3 | ||
|
621d3196fa | ||
|
e4b7ac21dc | ||
|
d444b87173 | ||
|
1c179f9636 | ||
|
5690084634 | ||
|
9fa63eb918 | ||
|
668eda0527 | ||
|
4e1be4a60c | ||
|
5b1e871d2d | ||
|
2da3bb46f2 | ||
|
b264d3d4f8 | ||
|
51c1c07e7a | ||
|
700af780af | ||
|
f14824878d | ||
|
8c2aa889bb | ||
|
bb21dd4d2d | ||
|
93fd0c0c9a | ||
|
cf56036c60 | ||
|
88ceff8b2f | ||
|
9755d4c09c | ||
|
634ef057ad | ||
|
949c0464a9 | ||
|
416664b1e7 | ||
|
667d70eac2 | ||
|
b9078e5bd3 | ||
|
0de7b74896 | ||
|
236589642e | ||
|
cb9ac2b0cc | ||
|
40a6751abf | ||
|
1bc35a7ae7 | ||
|
8cdaabbf8e | ||
|
2be8661433 | ||
|
8b3e678ace | ||
|
ec09ec775a | ||
|
bdaeca49e9 | ||
|
342a9bb54b | ||
|
6761122be0 | ||
|
1fd0bfaf1e | ||
|
8eb171e469 | ||
|
7154e316b7 | ||
|
f3e345c869 | ||
|
d34f46c1f3 | ||
|
f0ab709640 | ||
|
5f2d114c6d | ||
|
cbe0d2e47f | ||
|
f485881d4a | ||
|
15db387f18 | ||
|
aab51f7ef2 | ||
|
2b25eac587 | ||
|
e72c5e021f | ||
|
b6a779d262 | ||
|
26f4bb89bd | ||
|
320714ae85 | ||
|
6682fbc2cb | ||
|
f2b130bda8 | ||
|
8aba33a8bd | ||
|
d365bdfdbc | ||
|
f440c3ebe2 | ||
|
3efba8a145 | ||
|
e7b2f6818c | ||
|
c90db9276a | ||
|
7192d0ec4a | ||
|
9230bfb9ae | ||
|
55b993ae09 | ||
|
1d20aa7247 | ||
|
21f7ac8f47 | ||
|
aa376ad638 | ||
|
35b51df110 | ||
|
e62f4cf9a2 | ||
|
116767901f | ||
|
71eb0a8038 | ||
|
d9291d09b8 | ||
|
f3ad572099 | ||
|
cefe747e85 | ||
|
3ecf97d3af | ||
|
21d3865973 | ||
|
29d92d4091 | ||
|
f8f9d371ff | ||
|
f5af979357 | ||
|
76cb186732 | ||
|
6c06c547dc | ||
|
c5d4b7b2f2 | ||
|
9e4b3d3f4c | ||
|
5a96d5a066 | ||
|
4488592dda | ||
|
e7eb8b5962 | ||
|
0c2fc00544 | ||
|
214df0e92a | ||
|
b2e898d0bf | ||
|
abb1e8d10b | ||
|
cc6dc70b16 | ||
|
2638552859 | ||
|
de48d6a4f7 | ||
|
55f06bdc3f | ||
|
0d367bbe6e | ||
|
f4b8ddf260 | ||
|
e13fd5c83d | ||
|
7c4e6b0299 | ||
|
b9c4fc441b | ||
|
65b73ce434 | ||
|
2d73c9bf25 | ||
|
33468b3f31 | ||
|
1cffd0a203 | ||
|
b580949ae0 | ||
|
f2771aa614 | ||
|
5e829188d3 | ||
|
297cb5adb7 | ||
|
012918bf11 | ||
|
1ae90c030d | ||
|
0fb6f2d985 | ||
|
97a8d9b45a | ||
|
c5c02accb7 | ||
|
76a099997b | ||
|
c5319e75f5 | ||
|
510e5ce801 | ||
|
144f436c4b | ||
|
52056d7b2c | ||
|
c66ec5fa20 | ||
|
da6fc6aae2 | ||
|
d9aff6b817 | ||
|
e5f6dc54b9 | ||
|
88732a29f2 | ||
|
7b0a741857 | ||
|
74bd8b3aa5 | ||
|
9043b28250 | ||
|
fcc11d05a6 | ||
|
a8f4669b23 | ||
|
bd4829096c | ||
|
7044e0c93c | ||
|
94d9077691 | ||
|
c4cc2e9595 | ||
|
5e234e4048 | ||
|
950f3d305f | ||
|
58a37927e6 | ||
|
ec272f3a9c | ||
|
ef6aca5a38 | ||
|
b262ea5d8f | ||
|
cc20f90507 | ||
|
9e2fa24649 | ||
|
2dc0280d82 | ||
|
90959b8b70 | ||
|
19ae6fe72a | ||
|
0e020bbc24 | ||
|
c01222c018 | ||
|
957aa450a0 | ||
|
e49e11e069 | ||
|
f4f353bb54 | ||
|
a80b0096f5 | ||
|
62e8f029e9 | ||
|
db7658e042 | ||
|
fa7f95c66c | ||
|
df5f30a76a | ||
|
1770540217 | ||
|
c8a6263eb5 | ||
|
a015d1f822 | ||
|
c604e53a45 | ||
|
d79fe162c0 | ||
|
0c326a66c9 | ||
|
f79bde1a6d | ||
|
289108cc9b | ||
|
61c413d5ea | ||
|
d3a53d5d16 | ||
|
1306023a4f | ||
|
80b90b7866 | ||
|
8e024a2532 | ||
|
660a2eafe5 | ||
|
8277806db6 | ||
|
6ba5ea022a | ||
|
4533348826 | ||
|
68fbad6667 | ||
|
f430a65ccb | ||
|
c30da63fd2 | ||
|
3fb7312e9f | ||
|
dd6adfa454 | ||
|
3b5e47b2e2 | ||
|
4e277f6fbd | ||
|
ec946d7e21 | ||
|
16d06006a4 | ||
|
b774aebffa | ||
|
06de697268 | ||
|
fdfe0446b6 | ||
|
12b14f0484 | ||
|
4e12a5fa45 | ||
|
e56243fe57 | ||
|
7449abfe1b | ||
|
53b9770b40 | ||
|
766baeef0a | ||
|
ee204c78f2 | ||
|
e64674b718 | ||
|
564fb212a7 | ||
|
30cc10093b | ||
|
69c5a2128b | ||
|
577dd1ff6d | ||
|
86f2f8bcb5 | ||
|
c72205b28b | ||
|
057e33d6b5 | ||
|
e4499a1fb5 | ||
|
57b043c7fb | ||
|
f389aabde6 | ||
|
acbef3f612 | ||
|
3822f77c1d | ||
|
1cf3932a39 | ||
|
33bda40086 | ||
|
e666a6a021 | ||
|
5920d6d2b3 | ||
|
2e6468c811 | ||
|
393d2a2d4a | ||
|
bd7d03f8cd | ||
|
a4a173928f | ||
|
0e113897f7 | ||
|
b0eab8ecb9 | ||
|
f84821b249 | ||
|
99d1423059 | ||
|
7fbd58cd6b | ||
|
3ede0b96ac | ||
|
1d289b424a | ||
|
96285f875b | ||
|
bd4ce86785 | ||
|
e1c072aa7e | ||
|
af0074547d | ||
|
4a7a8278e8 | ||
|
00fa3ca3a5 | ||
|
00e590fdef | ||
|
4c64a5f986 | ||
|
414af96a50 | ||
|
1b976397e5 | ||
|
9bc5491712 | ||
|
57b13c8020 | ||
|
02a4c2913a | ||
|
8acb89c8c4 | ||
|
271e572ba2 | ||
|
bde990bfea | ||
|
60e54608bd | ||
|
60905a8afb | ||
|
ebe1d37104 | ||
|
c0cb9c8b3d | ||
|
34ee9adaed | ||
|
64f5375fe0 | ||
|
da81e0815f | ||
|
9be3c0e2b2 | ||
|
9da708772c | ||
|
0967624050 | ||
|
ba950a796a | ||
|
005a251689 | ||
|
76b6e668a6 | ||
|
5ff6ae6177 | ||
|
7c202b50fa | ||
|
f0182df865 | ||
|
0a6c38eff8 | ||
|
4b45e2828d | ||
|
4f3a41c60a | ||
|
757a9d06e3 | ||
|
31394f7f53 | ||
|
b6884c73b7 | ||
|
8bffc8d53c | ||
|
a9609084f4 | ||
|
8d820d57f6 | ||
|
73e11a5024 | ||
|
85cdc9e9ae | ||
|
7e60ffe83e | ||
|
715c787dc6 | ||
|
e304a03b6d | ||
|
2273ab7069 | ||
|
2e388a18a1 | ||
|
39bf50b2da | ||
|
a0c17b5af1 | ||
|
a483334f97 | ||
|
069f2bca99 | ||
|
40847ce9b8 | ||
|
a01c5bee02 | ||
|
38e96eadea | ||
|
d7cfbf1961 | ||
|
ee167c650e | ||
|
4d00ceba26 | ||
|
1c045bca52 | ||
|
4ed31830cb | ||
|
d7ff21ecd7 | ||
|
da2b275658 | ||
|
f32ca1666f | ||
|
9ce370249b | ||
|
b5de783f77 | ||
|
389dcb608f | ||
|
8c888d95f6 | ||
|
1710573272 | ||
|
80ca781adf | ||
|
4a31ca461f | ||
|
214865ed5c | ||
|
5d6508a475 | ||
|
ac11ec5497 | ||
|
d603b2e6ac | ||
|
8fd614e238 | ||
|
92032bc16a | ||
|
67e6d81256 | ||
|
a1bb739165 | ||
|
05769ca009 | ||
|
e2234bc1ab | ||
|
f9ba22e029 | ||
|
eedea52afb | ||
|
a9975756d0 | ||
|
a37fa47e32 | ||
|
9ff4d6af92 | ||
|
a370268739 | ||
|
1129df27b8 | ||
|
749a54d7a4 | ||
|
fa937343f5 | ||
|
3112c87993 | ||
|
8bde7db16f | ||
|
5d985c2851 | ||
|
3f194b69e3 | ||
|
b7acb10e86 | ||
|
b36a8ec92a | ||
|
23554ee658 | ||
|
0ce880e5ee | ||
|
c808f10d08 | ||
|
1dfd55ca36 | ||
|
0bc699a761 | ||
|
63b42fa235 | ||
|
a7b0dfddac | ||
|
73ac4526b9 | ||
|
afbecbd9dc | ||
|
192469952f | ||
|
8a731d1b2c | ||
|
48c8a116a9 | ||
|
fb779d2f1e | ||
|
1af314465e | ||
|
b80837c553 | ||
|
aa44e66c8f | ||
|
a7e0dd98e4 | ||
|
0c44ca2683 | ||
|
b280989ab7 | ||
|
9860296198 | ||
|
4fd56724ad | ||
|
0ca31088dc | ||
|
ef7a1b7d6e | ||
|
0c5a9f9b92 | ||
|
6264deece3 | ||
|
b9c25de370 | ||
|
193f1e81ed | ||
|
d8728efc80 | ||
|
baa57d2cf9 | ||
|
7ef56bc8dc | ||
|
ac97214635 | ||
|
22fd578693 | ||
|
78b5fec689 | ||
|
75b5268faf | ||
|
66a9b5c3ba | ||
|
b552b05251 | ||
|
5345adf82f | ||
|
248f70510e | ||
|
b90fabc8d6 | ||
|
816a867ff5 | ||
|
8ff529b1cb | ||
|
5acc59c704 | ||
|
68be4f74fc | ||
|
2b8e3bb23f | ||
|
c4f30e6012 | ||
|
fbf71ec25a | ||
|
e20c48e385 | ||
|
fda00f88d3 | ||
|
d9d4e06084 | ||
|
a95cb30ab5 | ||
|
d351c1fef2 | ||
|
3daaa4dd3e | ||
|
a359e32eb5 | ||
|
bee153c762 | ||
|
c5ccc4930c | ||
|
45bf0e3a67 | ||
|
c6966b3238 | ||
|
0029ea8941 | ||
|
053d49367c | ||
|
80861cce43 | ||
|
72af7ce8af | ||
|
e4a9c9b825 | ||
|
3d7c17c5a9 | ||
|
9c487cc537 | ||
|
1c9790e6f5 | ||
|
b13dcfe501 | ||
|
212cb00923 | ||
|
ac90d80b2a | ||
|
a3f6e49705 | ||
|
db72ca1b7d | ||
|
8d0aff7e81 | ||
|
bc9d72beb0 | ||
|
d3bba301ce | ||
|
15066b73f4 | ||
|
7ed37f0166 | ||
|
912a0df127 | ||
|
0b41373312 | ||
|
6f339b22eb | ||
|
e26560508c | ||
|
9ab8af7cd8 | ||
|
f522852f07 | ||
|
a3d8c086d5 | ||
|
4762480ae9 | ||
|
ef6c059e1e | ||
|
cf4ed2ebe8 | ||
|
5a4f9a67a3 | ||
|
2987163ac4 | ||
|
ec61980122 | ||
|
9bb994e831 | ||
|
e2ebea35f1 | ||
|
c73ed7dd1c | ||
|
ba8383efd8 | ||
|
6f7fb050b4 | ||
|
45200a42d3 | ||
|
4c9e10fd94 | ||
|
6e640321fd | ||
|
7241d136f4 | ||
|
c2be1df880 | ||
|
f1a9625001 | ||
|
047bd5a16f | ||
|
3fc99a48e1 | ||
|
87a5f98d24 | ||
|
53554e41e8 | ||
|
5bd7ad2b22 | ||
|
65115e7095 | ||
|
75dd0bd8bc | ||
|
8b54c5cff9 | ||
|
65c447289e | ||
|
86b20728fe | ||
|
b8a8af6550 | ||
|
360b76af84 | ||
|
c9e6ab9ac7 | ||
|
40277b8850 | ||
|
35047f824a | ||
|
e97159745d | ||
|
2b9dd215d5 | ||
|
fc2ddebdae | ||
|
b4682cb479 | ||
|
09202bc880 | ||
|
9ae02b7916 | ||
|
247b71e690 | ||
|
e33f3d72bf | ||
|
fd1dd7c398 | ||
|
14b2d7effb | ||
|
85c788572d | ||
|
8164c8ab3d | ||
|
fb7a7adc8a | ||
|
4f8be4bb28 | ||
|
e2b39edc22 | ||
|
8530d77c68 | ||
|
89e18c12eb | ||
|
bccd01354b | ||
|
5f9d341160 | ||
|
798ebd241b | ||
|
4db6d0c694 | ||
|
b754a35df7 | ||
|
168f12375d | ||
|
83443c706a | ||
|
4a5377aef7 | ||
|
48391c2817 | ||
|
42745a900f | ||
|
43181f1f82 | ||
|
c18b23f7b2 | ||
|
fe5585528f | ||
|
0205d3d08c | ||
|
9ef06be018 | ||
|
ac9a39dad7 | ||
|
c6ac580785 | ||
|
9efd477e98 | ||
|
5036dd120a | ||
|
7e849f3b81 | ||
|
a80a8b8a10 | ||
|
e4ac28e830 | ||
|
1fae20a2b7 | ||
|
292da6f686 | ||
|
3c487e7ed5 | ||
|
c0380823a2 | ||
|
1faae1d4ed | ||
|
18eb093f56 | ||
|
894ee7f6c8 | ||
|
e75662bc6a | ||
|
d1df4b21f3 | ||
|
a66bf2d736 | ||
|
31c2024b2e | ||
|
7df0fe77d8 | ||
|
9fc787c658 | ||
|
1afb0ad372 | ||
|
86a058029b | ||
|
0a3a0756b9 | ||
|
3712e8a819 | ||
|
9ed452b041 | ||
|
b11bef0bea | ||
|
bd716a1ec1 | ||
|
b484efca56 | ||
|
562344122f | ||
|
9a2451af0b | ||
|
7f9ce6e97b | ||
|
621e9edfe9 | ||
|
986632ec23 | ||
|
95ffcda425 | ||
|
dcca1b5b0e | ||
|
9cad73ad82 | ||
|
8e7a28a6a4 | ||
|
98de32a681 | ||
|
5369be5079 | ||
|
8de07f3e4a | ||
|
f970315766 | ||
|
579ee85941 | ||
|
7e51810bb5 | ||
|
bd30df4478 | ||
|
1f2fd22fec | ||
|
ab1210b1fe | ||
|
241787d8e4 | ||
|
faeeb27166 | ||
|
cab353d1dd | ||
|
8b01e6bebf | ||
|
55c00544cc | ||
|
8d577c2ff4 | ||
|
e44d6a12bb | ||
|
423c3955d9 | ||
|
ac67346d0f | ||
|
e364498113 | ||
|
85047eb904 | ||
|
0faa98a0bb | ||
|
8411528fdd | ||
|
d2a3e9ca9c | ||
|
e1863c05d8 | ||
|
b981bfd197 | ||
|
88713683fe | ||
|
a7cac0f0e3 | ||
|
165ccf3137 | ||
|
24620378ba | ||
|
9c8b68a905 | ||
|
432cb6575d | ||
|
a4937bc897 | ||
|
889303cdfe | ||
|
99385ee6f7 | ||
|
f5f5adb62c | ||
|
865d90bb1e | ||
|
30b25acc4e | ||
|
f8905059c3 | ||
|
12a3104c3d | ||
|
7b485daffb | ||
|
757849cd93 | ||
|
9d58570c77 | ||
|
d49ab08ae0 | ||
|
10a4b120bd | ||
|
309768aff1 | ||
|
9c28d5125d | ||
|
a7794f483b | ||
|
5d653b535a | ||
|
53b4a9e668 | ||
|
d4723d643d | ||
|
107ab16bf6 | ||
|
07f2666b91 | ||
|
f4b746b8c2 | ||
|
d7f25cfda5 | ||
|
b9a01a8b3b | ||
|
d654bff457 | ||
|
74ed682c54 | ||
|
e498e464dc | ||
|
d1d737d0fa | ||
|
87e5b64f41 | ||
|
70df3c35bf | ||
|
01a745025d | ||
|
4792e154b6 | ||
|
188b2a0f23 | ||
|
52191d9d61 | ||
|
dc9ae5e017 | ||
|
723e047428 | ||
|
b69b04dc8c | ||
|
b539908f73 | ||
|
2fb91e19a0 | ||
|
f96c114e22 | ||
|
98197303b1 | ||
|
f8786092ad | ||
|
1d4c15b4e1 | ||
|
b1c7f0df4e | ||
|
8e12202870 | ||
|
1f4ca0539b | ||
|
d0944ee2e8 | ||
|
38066b6f19 | ||
|
3bf3fde984 | ||
|
543521cd47 | ||
|
e8122ecb5d | ||
|
55a0c0e414 | ||
|
8a3436c65d | ||
|
fd30db1290 | ||
|
c3524b83b9 | ||
|
0296e40fc7 | ||
|
f69922b335 | ||
|
65931ce7a9 | ||
|
1a991ada47 | ||
|
7e77685bc3 | ||
|
300d1296fb | ||
|
822f8dae41 | ||
|
d2d44f76c4 | ||
|
6c3e88e60f | ||
|
9cd01958da | ||
|
4120f91846 | ||
|
30a5ee0d85 | ||
|
8a6205b43f | ||
|
bc120f27bd |
28
.ccls
Normal file
28
.ccls
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
clang
|
||||||
|
%h --include=makeint.h
|
||||||
|
-DHAVE_CONFIG_H
|
||||||
|
-Isrc
|
||||||
|
-Ilib
|
||||||
|
-DLIBDIR="/usr/local/lib"
|
||||||
|
-DLOCALEDIR="/usr/local/share/locale"
|
||||||
|
-DMAKE_MAINTAINER_MODE
|
||||||
|
-pthread
|
||||||
|
-isystem
|
||||||
|
/usr/include/guile/2.0
|
||||||
|
-Wall
|
||||||
|
-Wextra
|
||||||
|
-Werror
|
||||||
|
-Wwrite-strings
|
||||||
|
-Wshadow
|
||||||
|
-Wdeclaration-after-statement
|
||||||
|
-Wbad-function-cast
|
||||||
|
-Wformat-security
|
||||||
|
-Wtype-limits
|
||||||
|
-Wunused-but-set-parameter
|
||||||
|
-Wlogical-op
|
||||||
|
-Wpointer-arith
|
||||||
|
-Wignored-qualifiers
|
||||||
|
-Wformat-signedness
|
||||||
|
-Wduplicated-cond
|
||||||
|
-Wno-address
|
||||||
|
-Wno-string-compare
|
14
.clangd
Normal file
14
.clangd
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
CompileFlags:
|
||||||
|
Add: [-xc, -DHAVE_CONFIG_H, -DMAKE_MAINTAINER_MODE, -DLIBDIR="/usr/local/lib", -DLOCALEDIR="/usr/local/share/locale", -I../src, -Isrc, -I../lib, -Ilib, -Wall, -Wextra, -Wwrite-strings, -Wshadow, -Wdeclaration-after-statement, -Wbad-function-cast, -Wformat-security, -Wtype-limits, -Wunused-but-set-parameter, -Wlogical-op, -Wpointer-arith, -Wignored-qualifiers, -Wformat-signedness, -Wduplicated-cond, -Wno-string-compare, -Wno-unused-includes]
|
||||||
|
|
||||||
|
---
|
||||||
|
If:
|
||||||
|
PathMatch: .*\.h
|
||||||
|
CompileFlags:
|
||||||
|
Add: [-xc-header, --include=makeint.h]
|
||||||
|
|
||||||
|
---
|
||||||
|
If:
|
||||||
|
PathMatch: .*/makeint\.h
|
||||||
|
Diagnostics:
|
||||||
|
UnusedIncludes: None
|
21
.dir-locals.el
Normal file
21
.dir-locals.el
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
(
|
||||||
|
(nil . ((bug-reference-bug-regexp . "\\(\\bSV[- ]\\([0-9]+\\)\\)")
|
||||||
|
(bug-reference-url-format . "https://savannah.gnu.org/bugs/?%s")
|
||||||
|
(ccls-initialization-options
|
||||||
|
. (:index (:threads 6
|
||||||
|
:initialBlacklist ["/make-[0-9]" "tests/work/" "/\\.deps"
|
||||||
|
"/\\..*cache" "/\\.git"])))
|
||||||
|
(lsp-file-watch-ignored-directories
|
||||||
|
. ("[/\\\\]\\.git$"
|
||||||
|
"[/\\\\]\\..*cache$"
|
||||||
|
;; autotools content
|
||||||
|
"[/\\\\]\\.deps$"
|
||||||
|
"[/\\\\]autom4te\\.cache$"
|
||||||
|
"[/\\\\]build-aux$"
|
||||||
|
;; make-specific content
|
||||||
|
"[/\\\\]doc[/\\\\]manual$"
|
||||||
|
"[/\\\\]tests[/\\\\]work$"
|
||||||
|
"[/\\\\]make-[0-9]"))
|
||||||
|
))
|
||||||
|
(c-mode . ((c-file-style . "gnu")))
|
||||||
|
)
|
62
.gitignore
vendored
62
.gitignore
vendored
@ -1,46 +1,78 @@
|
|||||||
# Development artifacts
|
# Development artifacts
|
||||||
ID
|
ID
|
||||||
TAGS
|
TAGS
|
||||||
|
GPATH
|
||||||
|
GRTAGS
|
||||||
|
GTAGS
|
||||||
|
.*cache
|
||||||
.*gdbinit
|
.*gdbinit
|
||||||
.gdb_history
|
.gdb_history
|
||||||
|
.vscode
|
||||||
*~
|
*~
|
||||||
#*
|
#*
|
||||||
.#*
|
.#*
|
||||||
|
*.diff
|
||||||
|
*.patch
|
||||||
|
*.orig
|
||||||
|
*.rej
|
||||||
|
|
||||||
# Configure artifacts
|
# Configure artifacts
|
||||||
|
/lib/
|
||||||
|
/m4/
|
||||||
ABOUT-NLS
|
ABOUT-NLS
|
||||||
|
INSTALL
|
||||||
Makefile
|
Makefile
|
||||||
Makefile.in
|
Makefile.in
|
||||||
|
Basic.mk
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
autom4te.cache
|
autom4te.cache/
|
||||||
|
build-aux/
|
||||||
|
config.cache
|
||||||
config.h
|
config.h
|
||||||
config.h.in
|
config.h.in
|
||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
configure
|
configure
|
||||||
stamp-h1
|
/mk/Posix.mk
|
||||||
|
stamp-*
|
||||||
|
.dirstamp
|
||||||
|
gnulib
|
||||||
|
*.sed
|
||||||
|
|
||||||
# Build artifacts
|
# Build artifacts
|
||||||
.deps
|
.deps/
|
||||||
gmk-default.h
|
gmk-default.h
|
||||||
loadavg
|
loadavg
|
||||||
make
|
make
|
||||||
|
*.i
|
||||||
*.o
|
*.o
|
||||||
|
*.a
|
||||||
|
*.exe
|
||||||
|
*.dll.a
|
||||||
|
*.obj
|
||||||
|
*.lib
|
||||||
|
*.pdb
|
||||||
|
*.sbr
|
||||||
|
|
||||||
|
# Windows build artifacts
|
||||||
|
WinDebug/
|
||||||
|
WinRel/
|
||||||
|
GccDebug/
|
||||||
|
GccRel/
|
||||||
|
TccDebug/
|
||||||
|
TccRel/
|
||||||
|
|
||||||
|
# Test artifacts
|
||||||
|
makeerror-*
|
||||||
|
test-suite.log
|
||||||
|
|
||||||
# Distribution artifacts
|
# Distribution artifacts
|
||||||
.dep_segment
|
.dep_segment
|
||||||
Makefile.DOS
|
.check-git-HEAD
|
||||||
NMakefile
|
ChangeLog
|
||||||
README
|
README
|
||||||
README.DOS
|
build.cfg
|
||||||
README.OS2
|
mkconfig.h
|
||||||
README.W32
|
|
||||||
SMakefile
|
|
||||||
build.sh
|
|
||||||
build.sh.in
|
|
||||||
config.ami
|
|
||||||
config.h-vms
|
|
||||||
config.h.W32
|
|
||||||
configh.dos
|
|
||||||
make-[0-9]*/
|
make-[0-9]*/
|
||||||
make-[0-9]*.tar.*
|
make-[0-9]*.tar.*
|
||||||
|
checkcfg.*.log
|
||||||
|
12
.purify
12
.purify
@ -1,12 +0,0 @@
|
|||||||
# Solaris (2.5.1) has a couple if issues.
|
|
||||||
#
|
|
||||||
suppress plk malloc; setvbuf "libc*"; main "main.c"
|
|
||||||
suppress umr kstat_read; kstat_chain_update; kstat_open; getloadavg
|
|
||||||
suppress umr kstat_chain_update; kstat_open; getloadavg
|
|
||||||
|
|
||||||
# The command line options stuff leaks a little bit. No big deal.
|
|
||||||
#
|
|
||||||
suppress mlk malloc; xmalloc "misc.c"; decode_env_switches "main.c"
|
|
||||||
suppress plk malloc; xmalloc "misc.c"; decode_env_switches "main.c"
|
|
||||||
suppress mlk malloc; xmalloc "misc.c"; concat "misc.c"; decode_env_switches "main.c"
|
|
||||||
suppress plk malloc; xmalloc "misc.c"; concat "misc.c"; decode_env_switches "main.c"
|
|
70
AUTHORS
70
AUTHORS
@ -1,15 +1,16 @@
|
|||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
GNU make development up to version 3.75 by:
|
GNU Make development starting with GNU Make 3.76 by:
|
||||||
Roland McGrath <roland@gnu.org>
|
|
||||||
|
|
||||||
|
|
||||||
Development starting with GNU make 3.76 by:
|
|
||||||
Paul D. Smith <psmith@gnu.org>
|
Paul D. Smith <psmith@gnu.org>
|
||||||
|
|
||||||
Additional development starting with GNU make 3.81 by:
|
Additional development starting with GNU Make 4.3 by:
|
||||||
|
Dmitry Goncharov <dgoncharov@users.sf.net>
|
||||||
|
|
||||||
|
Additional development starting with GNU Make 3.81 by:
|
||||||
Boris Kolpackov <boris@kolpackov.net>
|
Boris Kolpackov <boris@kolpackov.net>
|
||||||
|
|
||||||
|
GNU Make development up to version 3.75 by:
|
||||||
|
Roland McGrath <roland@gnu.org>
|
||||||
|
|
||||||
GNU Make User's Manual
|
GNU Make User's Manual
|
||||||
Written by:
|
Written by:
|
||||||
@ -22,7 +23,7 @@ GNU Make User's Manual
|
|||||||
Paul D. Smith <psmith@gnu.org>
|
Paul D. Smith <psmith@gnu.org>
|
||||||
|
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
GNU make porting efforts:
|
GNU Make porting efforts:
|
||||||
|
|
||||||
Port to VMS by:
|
Port to VMS by:
|
||||||
Klaus Kaempf <kkaempf@progis.de>
|
Klaus Kaempf <kkaempf@progis.de>
|
||||||
@ -31,8 +32,8 @@ GNU make porting efforts:
|
|||||||
John W. Eaton <jwe@bevo.che.wisc.edu>
|
John W. Eaton <jwe@bevo.che.wisc.edu>
|
||||||
Martin Zinser <zinser@decus.decus.de>
|
Martin Zinser <zinser@decus.decus.de>
|
||||||
|
|
||||||
Port to Amiga by:
|
Port to MS-Windows (native/MinGW) maintained by:
|
||||||
Aaron Digulla <digulla@fh-konstanz.de>
|
Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
Port to MS-DOS (DJGPP), OS/2, and MS-Windows (native/MinGW) by:
|
Port to MS-DOS (DJGPP), OS/2, and MS-Windows (native/MinGW) by:
|
||||||
DJ Delorie <dj@delorie.com>
|
DJ Delorie <dj@delorie.com>
|
||||||
@ -42,37 +43,76 @@ GNU make porting efforts:
|
|||||||
Andreas Beuning <andreas.buening@nexgo.de>
|
Andreas Beuning <andreas.buening@nexgo.de>
|
||||||
Earnie Boyd <earnie@uses.sf.net>
|
Earnie Boyd <earnie@uses.sf.net>
|
||||||
Troy Runkel <Troy.Runkel@mathworks.com>
|
Troy Runkel <Troy.Runkel@mathworks.com>
|
||||||
|
Juan M. Guerrero <juan.guerrero@gmx.de>
|
||||||
|
KO Myung-Hun <komh78@gmail.com>
|
||||||
|
|
||||||
|
Port to z/OS by:
|
||||||
|
Igor Todorovski <itodorov@ca.ibm.com>
|
||||||
|
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
Other contributors:
|
Other contributors:
|
||||||
|
|
||||||
|
Luke Allardyce <lukeallardyce@gmail.com>
|
||||||
|
Costas Argyris <costas.argyris@gmail.com>
|
||||||
|
Aron Barath <baratharon@caesar.elte.hu>
|
||||||
|
David Boyce <dsb@boyski.com>
|
||||||
|
Kevin Buettner <kevinb@redhat.com>
|
||||||
Janet Carson <janet_carson@tivoli.com>
|
Janet Carson <janet_carson@tivoli.com>
|
||||||
Howard Chu <hyc@highlandsun.com>
|
Howard Chu <hyc@highlandsun.com>
|
||||||
Ludovic Courtès <ludo@gnu.org>
|
Ludovic Courtès <ludo@gnu.org>
|
||||||
|
Joe Crayne <oh.hello.joe@gmail.com>
|
||||||
|
Jeremy Devenport <jeremy.devenport@gmail.com>
|
||||||
|
Pete Dietl <petedietl@gmail.com>
|
||||||
|
Aaron Digulla <digulla@fh-konstanz.de>
|
||||||
|
Hannes Domani <ssbssa@yahoo.de>
|
||||||
|
Martin Dorey <martin.dorey@hds.com>
|
||||||
|
Christian Eggers <ceggers@arri.de>
|
||||||
Paul Eggert <eggert@twinsun.com>
|
Paul Eggert <eggert@twinsun.com>
|
||||||
|
Mike Frysinger <vapier@gentoo.org>
|
||||||
Ramon Garcia Fernandez <ramon.garcia.f@gmail.com>
|
Ramon Garcia Fernandez <ramon.garcia.f@gmail.com>
|
||||||
|
Noah Goldstein <goldstein.w.n@gmail.com>
|
||||||
|
Mike Haboustak <haboustak@gmail.com>
|
||||||
|
Frank Heckenbach <f.heckenbach@fh-soft.de>
|
||||||
Klaus Heinz <kamar@ease.rhein-main.de>
|
Klaus Heinz <kamar@ease.rhein-main.de>
|
||||||
|
Ben Hutchings <ben@decadent.org.uk>
|
||||||
|
Cao jin <caoj.fnst@cn.fujitsu.com>
|
||||||
Michael Joosten
|
Michael Joosten
|
||||||
|
Christian Jullien <eligis@orange.fr>
|
||||||
Jim Kelton <jim_kelton@tivoli.com>
|
Jim Kelton <jim_kelton@tivoli.com>
|
||||||
|
Kaz Kylheku <kaz@kylheku.com>
|
||||||
David Lubbren <uhay@rz.uni-karlsruhe.de>
|
David Lubbren <uhay@rz.uni-karlsruhe.de>
|
||||||
Tim Magill <tim.magill@telops.gte.com>
|
Tim Magill <tim.magill@telops.gte.com>
|
||||||
Markus Mauhart <qwe123@chello.at>
|
Markus Mauhart <qwe123@chello.at>
|
||||||
Greg McGary <greg@mcgary.org>
|
Greg McGary <greg@mcgary.org>
|
||||||
Thien-Thi Nguyen <ttn@gnuvola.org>
|
Thien-Thi Nguyen <ttn@gnuvola.org>
|
||||||
Thomas Riedl <thomas.riedl@siemens.com>
|
|
||||||
Han-Wen Nienhuys <hanwen@cs.uu.nl>
|
Han-Wen Nienhuys <hanwen@cs.uu.nl>
|
||||||
Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
Enrique Olaizola <enrique_olaizola16@hotmail.com>
|
||||||
|
Ola Olsson <ola1olsson@gmail.com>
|
||||||
|
Jens Rehsack <sno@netbsd.org>
|
||||||
|
Thomas Riedl <thomas.riedl@siemens.com>
|
||||||
|
Jaak Ristioja <jaak@ristioja.ee>
|
||||||
|
Christoph Schulz <develop@kristov.de>
|
||||||
|
Andreas Schwab <schwab@suse.de>
|
||||||
|
spagoveanu <spagoveanu@gmail.com>
|
||||||
Carl Staelin (Princeton University)
|
Carl Staelin (Princeton University)
|
||||||
Ian Stewartson (Data Logic Limited)
|
Ian Stewartson (Data Logic Limited)
|
||||||
|
Tobias Stoeckmann <tobias@stoeckmann.org>
|
||||||
|
Torbjörn Svensson <torbjorn.svensson@foss.st.com>
|
||||||
|
Sergei Trofimovich <siarheit@google.com>
|
||||||
|
Justine Tunney <jtunney@gmail.com>
|
||||||
|
Marc Ullman <marc@mathworks.com>
|
||||||
|
Christof Warlich <cwarlich@gmx.de>
|
||||||
|
Florian Weimer <fweimer@redhat.com>
|
||||||
David A. Wheeler <dwheeler@dwheeler.com>
|
David A. Wheeler <dwheeler@dwheeler.com>
|
||||||
David Boyce <dsb@boyski.com>
|
Bernhard M. Wiedemann <bwiedemann@suse.de>
|
||||||
Frank Heckenbach <f.heckenbach@fh-soft.de>
|
Ben Wijen <ben@wijen.net>
|
||||||
|
Jouke Witteveen <j.witteveen@gmail.com>
|
||||||
|
|
||||||
With suggestions/comments/bug reports from a cast of ... well ...
|
With suggestions/comments/bug reports from a cast of ... well ...
|
||||||
hundreds, anyway :)
|
hundreds, anyway :)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 1997-2013 Free Software Foundation, Inc.
|
Copyright (C) 1997-2024 Free Software Foundation, Inc.
|
||||||
This file is part of GNU Make.
|
This file is part of GNU Make.
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
@ -85,4 +125,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
134
Basic.mk.template
Normal file
134
Basic.mk.template
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
# Basic GNU -*-Makefile-*- to build GNU Make
|
||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# If you have no 'make' program at all to process this makefile:
|
||||||
|
# * On Windows, run ".\build_w32.bat" to bootstrap one.
|
||||||
|
# * On MS-DOS, run ".\builddos.bat" to bootstrap one.
|
||||||
|
#
|
||||||
|
# Once you have a GNU Make program created, you can use it with this makefile
|
||||||
|
# to keep it up to date if you make changes, as:
|
||||||
|
#
|
||||||
|
# make.exe -f Basic.mk
|
||||||
|
#
|
||||||
|
# Copyright (C) 2017-2024 Free Software Foundation, Inc.
|
||||||
|
# This file is part of GNU Make.
|
||||||
|
#
|
||||||
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 3 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
all:
|
||||||
|
|
||||||
|
src = src/
|
||||||
|
lib = lib/
|
||||||
|
|
||||||
|
make_SOURCES = %make_SOURCES%
|
||||||
|
glob_SOURCES = %glob_SOURCES%
|
||||||
|
loadavg_SOURCES = %loadavg_SOURCES%
|
||||||
|
alloca_SOURCES = %alloca_SOURCES%
|
||||||
|
w32_SOURCES = %w32_SOURCES%
|
||||||
|
vms_SOURCES = %vms_SOURCES%
|
||||||
|
|
||||||
|
remote_SOURCES = $(src)remote-stub.c
|
||||||
|
|
||||||
|
OUTDIR =
|
||||||
|
SRCDIR = .
|
||||||
|
|
||||||
|
OBJEXT = o
|
||||||
|
EXEEXT =
|
||||||
|
|
||||||
|
PREFIX = /usr/local
|
||||||
|
INCLUDEDIR = $(PREFIX)/include
|
||||||
|
LIBDIR = $(PREFIX)/lib
|
||||||
|
LOCALEDIR = $(PREFIX)/share
|
||||||
|
|
||||||
|
PROG = $(OUTDIR)make$(EXEEXT)
|
||||||
|
|
||||||
|
prog_SOURCES = $(make_SOURCES) $(remote_SOURCES)
|
||||||
|
|
||||||
|
BUILT_SOURCES =
|
||||||
|
|
||||||
|
OBJECTS = $(patsubst %.c,$(OUTDIR)%.$(OBJEXT),$(prog_SOURCES))
|
||||||
|
|
||||||
|
RESOURCE_OBJECTS =
|
||||||
|
|
||||||
|
OBJDIRS = $(addsuffix .,$(sort $(dir $(OBJECTS))))
|
||||||
|
|
||||||
|
# Use the default value of CC
|
||||||
|
LD = $(CC)
|
||||||
|
|
||||||
|
# Reserved for command-line override
|
||||||
|
CPPFLAGS =
|
||||||
|
CFLAGS = -g -O2
|
||||||
|
LDFLAGS =
|
||||||
|
|
||||||
|
extra_CPPFLAGS = -DHAVE_CONFIG_H -I$(OUTDIR)src -I$(SRCDIR)/src -I$(OUTDIR)lib -I$(SRCDIR)/lib \
|
||||||
|
-DLIBDIR=\"$(LIBDIR)\" -DINCLUDEDIR=\"$(INCLUDEDIR)\" -DLOCALEDIR=\"$(LOCALDIR)\"
|
||||||
|
extra_CFLAGS =
|
||||||
|
extra_LDFLAGS = $(extra_CFLAGS) $(CFLAGS)
|
||||||
|
|
||||||
|
C_SOURCE = -c
|
||||||
|
OUTPUT_OPTION = -o $@
|
||||||
|
LINK_OUTPUT = -o $@
|
||||||
|
|
||||||
|
# Command lines
|
||||||
|
|
||||||
|
# $(call COMPILE.cmd,<src>,<tgt>)
|
||||||
|
COMPILE.cmd = $(CC) $(extra_CFLAGS) $(CFLAGS) $(extra_CPPFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $(OUTPUT_OPTION) $(C_SOURCE) $1
|
||||||
|
|
||||||
|
# $(call LINK.cmd,<objectlist>)
|
||||||
|
LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $1 $(LDLIBS) $(LINK_OUTPUT)
|
||||||
|
|
||||||
|
# $(CHECK.cmd) $(CHECK.args)
|
||||||
|
CHECK.cmd = cd $(SRCDIR)/tests && ./run_make_tests -make $(shell cd $(<D) && pwd)/$(<F)
|
||||||
|
CHECK.args ?=
|
||||||
|
|
||||||
|
# $(call MKDIR.cmd,<dirlist>)
|
||||||
|
MKDIR.cmd = mkdir -p $1
|
||||||
|
|
||||||
|
# $(call RM.cmd,<filelist>)
|
||||||
|
RM.cmd = rm -f $1
|
||||||
|
|
||||||
|
# $(call CP.cmd,<from>,<to>)
|
||||||
|
CP.cmd = cp $1 $2
|
||||||
|
|
||||||
|
CLEANSPACE = $(call RM.cmd,$(OBJECTS) $(RESOURCE_OBJECTS) $(PROG) $(BUILT_SOURCES))
|
||||||
|
|
||||||
|
# Load overrides for the above variables.
|
||||||
|
include $(firstword $(wildcard $(SRCDIR)/mk/$(lastword $(subst -, ,$(MAKE_HOST)).mk)))
|
||||||
|
|
||||||
|
VPATH = $(SRCDIR)
|
||||||
|
|
||||||
|
all: $(PROG)
|
||||||
|
|
||||||
|
$(PROG): $(OBJECTS) $(RESOURCE_OBJECTS)
|
||||||
|
$(call LINK.cmd,$^)
|
||||||
|
|
||||||
|
$(OBJECTS): $(OUTDIR)%.$(OBJEXT): %.c
|
||||||
|
$(call COMPILE.cmd,$<)
|
||||||
|
|
||||||
|
$(OBJECTS): | $(OBJDIRS) $(BUILT_SOURCES)
|
||||||
|
|
||||||
|
$(OBJDIRS):
|
||||||
|
$(call MKDIR.cmd,$@)
|
||||||
|
|
||||||
|
check:
|
||||||
|
$(CHECK.cmd) $(CHECK.args)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(CLEANSPACE)
|
||||||
|
|
||||||
|
$(filter %.h,$(BUILT_SOURCES)): %.h : %.in.h
|
||||||
|
$(call RM.cmd,$@)
|
||||||
|
$(call CP.cmd,$<,$@)
|
||||||
|
|
||||||
|
.PHONY: all check clean
|
8
COPYING
8
COPYING
@ -1,7 +1,7 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
|
|||||||
You should also get your employer (if you work as a programmer) or school,
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
For more information on this, and how to apply and follow the GNU GPL, see
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
<http://www.gnu.org/licenses/>.
|
<https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
The GNU General Public License does not permit incorporating your program
|
The GNU General Public License does not permit incorporating your program
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
may consider it more useful to permit linking proprietary applications with
|
may consider it more useful to permit linking proprietary applications with
|
||||||
the library. If this is what you want to do, use the GNU Lesser General
|
the library. If this is what you want to do, use the GNU Lesser General
|
||||||
Public License instead of this License. But first, please read
|
Public License instead of this License. But first, please read
|
||||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
<https://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||||
|
10
ChangeLog.1
10
ChangeLog.1
@ -1703,7 +1703,7 @@ Thu Sep 14 18:29:38 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU)
|
|||||||
existing variable's origin, is `o_env', make it `o_env_override'.
|
existing variable's origin, is `o_env', make it `o_env_override'.
|
||||||
|
|
||||||
* load.c: Use the symbol KERNEL_FILE_NAME instead of KERNEL_FILE.
|
* load.c: Use the symbol KERNEL_FILE_NAME instead of KERNEL_FILE.
|
||||||
* compatMakefile: Changed the comment for `LOAD_AVG' accordinly.
|
* compatMakefile: Changed the comment for `LOAD_AVG' accordingly.
|
||||||
|
|
||||||
Thu Sep 7 16:46:26 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU)
|
Thu Sep 7 16:46:26 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU)
|
||||||
|
|
||||||
@ -3218,7 +3218,7 @@ Sun Feb 5 19:52:38 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU)
|
|||||||
* variable.c (expand_function: `shell'): Use
|
* variable.c (expand_function: `shell'): Use
|
||||||
`shell_function_completed'. Block children before forking and
|
`shell_function_completed'. Block children before forking and
|
||||||
unblock after `shell_function_pid' is set properly and
|
unblock after `shell_function_pid' is set properly and
|
||||||
`shell_functon_completed' is reset to 0.
|
`shell_function_completed' is reset to 0.
|
||||||
|
|
||||||
* commands.c (child_handler): When the child of the `shell' function
|
* commands.c (child_handler): When the child of the `shell' function
|
||||||
completes, set `shell_function_completed' to 1 if it actually ran,
|
completes, set `shell_function_completed' to 1 if it actually ran,
|
||||||
@ -4465,7 +4465,7 @@ Fri Sep 16 13:59:59 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU)
|
|||||||
`maxsuffix', and must be called before count_implicit_rule_limits.
|
`maxsuffix', and must be called before count_implicit_rule_limits.
|
||||||
|
|
||||||
* rule.c (pattern_search): If an existent (non-intermediate)
|
* rule.c (pattern_search): If an existent (non-intermediate)
|
||||||
dependendency was found via a terminal rule, set its
|
dependency was found via a terminal rule, set its
|
||||||
`tried_implicit' flag, so it will never have implicit rule search done.
|
`tried_implicit' flag, so it will never have implicit rule search done.
|
||||||
|
|
||||||
* glob.c: Bug fix to avoid alloca(0).
|
* glob.c: Bug fix to avoid alloca(0).
|
||||||
@ -4826,7 +4826,7 @@ Sat Jul 30 15:47:23 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU)
|
|||||||
new entry as the old entry's prev pointer.
|
new entry as the old entry's prev pointer.
|
||||||
|
|
||||||
* dir.c: Re-indented the `struct dir' definition to be right.
|
* dir.c: Re-indented the `struct dir' definition to be right.
|
||||||
(dir_load): Cleaned up slighty.
|
(dir_load): Cleaned up slightly.
|
||||||
(file_exists_p): Removed comment saying we could use `access', since
|
(file_exists_p): Removed comment saying we could use `access', since
|
||||||
that is a bad idea (except for setuid programs). Cleaned up slightly.
|
that is a bad idea (except for setuid programs). Cleaned up slightly.
|
||||||
|
|
||||||
@ -4994,4 +4994,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
@ -1322,7 +1322,7 @@
|
|||||||
non-standard versions of free() don't like it.
|
non-standard versions of free() don't like it.
|
||||||
|
|
||||||
* configure.in (--enable-dmalloc): Install some support for using
|
* configure.in (--enable-dmalloc): Install some support for using
|
||||||
dmalloc (http://www.dmalloc.com/) with make. Use --enable-dmalloc
|
dmalloc (https://www.dmalloc.com/) with make. Use --enable-dmalloc
|
||||||
with configure to enable it.
|
with configure to enable it.
|
||||||
|
|
||||||
* function.c (function_table_entry): Whoops! The function.c
|
* function.c (function_table_entry): Whoops! The function.c
|
||||||
@ -6632,7 +6632,7 @@ Fri Nov 1 19:34:28 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
|
|||||||
|
|
||||||
See ChangeLog.1, available in the Git repository at:
|
See ChangeLog.1, available in the Git repository at:
|
||||||
|
|
||||||
http://git.savannah.gnu.org/cgit/make.git/tree/
|
https://git.savannah.gnu.org/cgit/make.git/tree/
|
||||||
|
|
||||||
for earlier changes.
|
for earlier changes.
|
||||||
|
|
||||||
@ -6650,4 +6650,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
@ -1,3 +1,213 @@
|
|||||||
|
2013-10-09 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
Version 4.0 released.
|
||||||
|
|
||||||
|
* configure.ac: Updated for the release.
|
||||||
|
* NEWS: Updated for the release.
|
||||||
|
|
||||||
|
* maintMakefile (tag-release): New target to add a Git tag.
|
||||||
|
* read.c (eval): Typo fix.
|
||||||
|
* ChangeLog.1: Typo fixes.
|
||||||
|
* w32/subproc/sub_proc.c (process_cleanup): Typo fix.
|
||||||
|
|
||||||
|
2013-10-07 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
* w32/compat/posixfcn.c (tmpfile): Move declaration of h before
|
||||||
|
the first executable statement. Reported by Gisle Vanem
|
||||||
|
<gvanem@yahoo.no>.
|
||||||
|
|
||||||
|
2013-10-05 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* makeint.h (MAP_USERFUNC): A new map type for function names.
|
||||||
|
* main.c (initialize_stopchar_map): Set up the function name map.
|
||||||
|
|
||||||
|
* gnumake.h (gmk_func_ptr): Define a type for function pointers.
|
||||||
|
(gmk_add_function): Convert the last argument to FLAGS.
|
||||||
|
(GMK_FUNC_*): Define flags for the function. Change the default
|
||||||
|
behavior to "expand" since that's the most common one.
|
||||||
|
|
||||||
|
* function.c (function_table_entry): Use new function pointer type.
|
||||||
|
(lookup_function): Accept any valid function name character based
|
||||||
|
on the MAP_USERFUNC values.
|
||||||
|
(define_new_function): Use the new calling signature. Verify that
|
||||||
|
registered functions have valid names.
|
||||||
|
|
||||||
|
* guile.c (guile_gmake_setup): Use new calling signatures.
|
||||||
|
* loadapi.c (gmk_add_function): Ditto.
|
||||||
|
* variable.h (define_new_function): Ditto.
|
||||||
|
|
||||||
|
* doc/make.texi (Loaded Object API): Make the registered function
|
||||||
|
API documentation more clear.
|
||||||
|
|
||||||
|
2013-10-03 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
* function.c (abspath): Reset root_len to one for Cygwin only when
|
||||||
|
HAVE_DOS_PATHS is defined. Suggested by Christopher Faylor.
|
||||||
|
|
||||||
|
2013-10-02 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
* w32/compat/posixfcn.c (tmpfile): New function, a replacement for
|
||||||
|
the Windows libc version.
|
||||||
|
|
||||||
|
Fix $abspath on Cygwin when HAVE_DOS_PATHS is in effect.
|
||||||
|
* function.c (IS_ABSOLUTE) [__CYGWIN__]: Special definition for
|
||||||
|
Cygwin.
|
||||||
|
(abspath) [__CYGWIN__]: Reset root_len to 1 if the absolute file
|
||||||
|
name has the Posix /foo/bar form.
|
||||||
|
[HAVE_DOS_PATHS]: Use root_len instead of hard-coded 2.
|
||||||
|
|
||||||
|
2013-10-01 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* configure.ac: Update version to 3.99.93.
|
||||||
|
* NEWS: Ditto.
|
||||||
|
|
||||||
|
2013-09-30 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* guile.c: Portability fixes for Guile 1.8.
|
||||||
|
|
||||||
|
2013-09-29 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* output.c (output_dump): Always write Enter/Leave messages to stdio.
|
||||||
|
(log_working_directory): This now always writes to stdio, so we
|
||||||
|
don't need the struct output parameter anymore.
|
||||||
|
(output_start): Show the working directory when output_sync is not
|
||||||
|
set or is recursive.
|
||||||
|
* main.c (main): Ensure the special "already shown Enter message"
|
||||||
|
token is removed from MAKE_RESTARTS before the user can see it.
|
||||||
|
* function.c (func_shell_base): If the output_context stderr
|
||||||
|
exists but is invalid, write to the real stderr.
|
||||||
|
Fixes suggested by Frank Heckenbach <f.heckenbach@fh-soft.de>.
|
||||||
|
|
||||||
|
* output.c: Guard unistd.h inclusion, add io.h.
|
||||||
|
* gnumake.h: Move GMK_EXPORT before the declarations.
|
||||||
|
* make_msvc_net2003.vcproj: Add missing files.
|
||||||
|
Changes for MSVC suggested by Gerte Hoogewerf <g.hoogewerf@gmail.com>
|
||||||
|
|
||||||
|
* function.c (func_shell_base) [EMX]: Fix EMX support for output-sync.
|
||||||
|
* job.c (child_execute_job) [EMX]: Ditto.
|
||||||
|
* job.h (child_execute_job) [EMX]: Ditto.
|
||||||
|
* w32/compat/posixfcn.c: Invert the test for NO_OUTPUT_SYNC.
|
||||||
|
|
||||||
|
* guile.c (GSUBR_TYPE): Pre-2.0 Guile doesn't provide a typedef
|
||||||
|
for gsubr pointers. Create one.
|
||||||
|
(guile_define_module): Use it.
|
||||||
|
(internal_guile_eval): Force UTF-8 encoding for Guile strings.
|
||||||
|
|
||||||
|
* main.c (main): Clear GNUMAKEFLAGS after parsing, to avoid
|
||||||
|
proliferation of options.
|
||||||
|
* NEWS: Document it.
|
||||||
|
* doc/make.texi (Options/Recursion): Ditto.
|
||||||
|
|
||||||
|
2013-09-23 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
* w32/compat/posixfcn.c: Fix the forgotten OUTPUT_SYNC conditional.
|
||||||
|
|
||||||
|
* job.h: Ditto, but in a comment.
|
||||||
|
|
||||||
|
2013-09-22 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* configure.ac: Update version to 3.99.92.
|
||||||
|
* NEWS: Ditto.
|
||||||
|
|
||||||
|
* implicit.c (pattern_search): After second expansion be sure to
|
||||||
|
handle order-only markers inside the expansion properly.
|
||||||
|
Fixes Savannah bug #31155.
|
||||||
|
|
||||||
|
* guile.c (guile_define_module): Technically a void* cannot
|
||||||
|
contain a pointer-to-function and some compilers warn about this.
|
||||||
|
Cast the function pointers.
|
||||||
|
* load.c (load_object): Ditto.
|
||||||
|
|
||||||
|
* read.c (eval): If load_file() returns -1, don't add this to the
|
||||||
|
"to be rebuilt" list.
|
||||||
|
* doc/make.texi (load Directive): Document it.
|
||||||
|
|
||||||
|
* guile.c (guile_gmake_setup): Don't initialize Guile so early.
|
||||||
|
(func_guile): Lazily initialize Guile the first time the $(guile ..)
|
||||||
|
function is invoked. Guile can steal file descriptors which
|
||||||
|
confuses our jobserver FD checking, so we don't want to initialize
|
||||||
|
it before we have to.
|
||||||
|
|
||||||
|
VMS port updates by Hartmut Becker <becker.ismaning@freenet.de>
|
||||||
|
|
||||||
|
* makefile.com: Add output to the filelist.
|
||||||
|
* output.c (va_copy): Add an implementation of this macro for VMS.
|
||||||
|
* commands.c: Ensure filedef.h is #included before dep.h.
|
||||||
|
* dir.c: Ditto.
|
||||||
|
* file.c: Ditto.
|
||||||
|
* guile.c: Ditto.
|
||||||
|
* main.c: Ditto.
|
||||||
|
* misc.c: Ditto.
|
||||||
|
* read.c: Ditto.
|
||||||
|
* rule.c: Ditto.
|
||||||
|
* variable.c: Ditto.
|
||||||
|
* readme.vms: Renamed to README.VMS and updates for this release.
|
||||||
|
* Makefile.am: Ditto.
|
||||||
|
* NEWS: Ditto.
|
||||||
|
* README.template: Ditto.
|
||||||
|
* Makefile.DOS.template: Ditto.
|
||||||
|
|
||||||
|
2013-09-21 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* maintMakefile (check-alt-config): Create a target to test
|
||||||
|
alternative configurations. Each one will build make with a
|
||||||
|
different configuration then run the test suite.
|
||||||
|
|
||||||
|
Invert the output-sync #define to NO_OUTPUT_SYNC
|
||||||
|
|
||||||
|
* configure.ac: Don't set OUTPUT_SYNC.
|
||||||
|
* makeint.h: Ditto.
|
||||||
|
* main.c: Use NO_OUTPUT_SYNC instead of OUTPUT_SYNC.
|
||||||
|
* output.c: Ditto.
|
||||||
|
* output.h: Ditto.
|
||||||
|
* job.h: Ditto.
|
||||||
|
* job.c: Ditto.
|
||||||
|
* config.ami.template: Set NO_OUTPUT_SYNC.
|
||||||
|
* config.h-vms.template: Ditto.
|
||||||
|
* config.h.W32.template: Ditto.
|
||||||
|
* configh.dos.template: Ditto.
|
||||||
|
|
||||||
|
Output generated while reading makefiles should be synced.
|
||||||
|
|
||||||
|
* main.c (make_sync): Define a context for syncing while reading
|
||||||
|
makefiles and other top-level operations.
|
||||||
|
(main): If we request syncing, enable it while we are parsing
|
||||||
|
options, reading makefiles, etc. to capture that output. Just
|
||||||
|
before we start to run rules, dump the output if any.
|
||||||
|
(die): Dump any output we've been syncing before we die
|
||||||
|
* output.h (OUTPUT_SET): Disable output_context if not syncout.
|
||||||
|
|
||||||
|
Stderr generated from shell functions in recipes should be synced.
|
||||||
|
|
||||||
|
* job.h (FD_STDIN, FD_STDOUT, FD_STDERR): Create new macros to
|
||||||
|
avoid magic numbers.
|
||||||
|
(child_execute_job): Take a FD for stderr.
|
||||||
|
* job.c (child_execute_job): Handle STDERR FD's in addition to
|
||||||
|
stdin and stdout.
|
||||||
|
(start_job_command): Call child_execute_job() with the new STDERR
|
||||||
|
parameter. Instead of performing the dup() here, send it to
|
||||||
|
child_execute_job() where it's already being done.
|
||||||
|
* function.c (func_shell_base): Pass the OUTPUT_CONTEXT stderr to
|
||||||
|
child_execute_job() if it's set, otherwise FD_STDERR.
|
||||||
|
* main.c (main): Pass FD_STDERR to child_execute_job().
|
||||||
|
|
||||||
|
2013-09-19 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* main.c (main): Set MAKE_RESTARTS to negative before re-exec if
|
||||||
|
we've already generated an "Entering" message. If we are started
|
||||||
|
and notice that MAKE_RESTARTS is negative, assume we already wrote
|
||||||
|
"Entering" and don't write it again.
|
||||||
|
|
||||||
|
2013-09-18 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* main.c (main): Set starting_directory before we write any
|
||||||
|
errors. Fixes Savannah bug #40043.
|
||||||
|
|
||||||
|
2013-09-16 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
* output.c [WINDOWS32]: Include windows.h and sub_proc.h, to avoid
|
||||||
|
compiler warnings for CLOSE_ON_EXEC.
|
||||||
|
|
||||||
2013-09-16 Paul Smith <psmith@gnu.org>
|
2013-09-16 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* configure.ac: Update version to 3.99.91.
|
* configure.ac: Update version to 3.99.91.
|
||||||
@ -454,7 +664,7 @@
|
|||||||
characters in its name, pass NULL as the first argument to
|
characters in its name, pass NULL as the first argument to
|
||||||
CreateProcess. This avoids weird failures due to buggy quoting by
|
CreateProcess. This avoids weird failures due to buggy quoting by
|
||||||
CreateProcess. For the details, see the discussion starting at
|
CreateProcess. For the details, see the discussion starting at
|
||||||
http://lists.gnu.org/archive/html/make-w32/2013-04/msg00008.html.
|
https://lists.gnu.org/archive/html/make-w32/2013-04/msg00008.html.
|
||||||
|
|
||||||
* load.c (load_object, load_file): Accept an additional argument
|
* load.c (load_object, load_file): Accept an additional argument
|
||||||
DLP and return in it a pointer that can be used to unload the
|
DLP and return in it a pointer that can be used to unload the
|
||||||
@ -496,7 +706,7 @@
|
|||||||
(construct_command_argv_internal): Don't treat a backslash as an
|
(construct_command_argv_internal): Don't treat a backslash as an
|
||||||
escape character before whitespace, if the shell is not a Posix
|
escape character before whitespace, if the shell is not a Posix
|
||||||
shell. For the description of the problem, see
|
shell. For the description of the problem, see
|
||||||
http://lists.gnu.org/archive/html/make-w32/2013-04/msg00014.html.
|
https://lists.gnu.org/archive/html/make-w32/2013-04/msg00014.html.
|
||||||
|
|
||||||
2013-05-01 Paul Smith <psmith@gnu.org>
|
2013-05-01 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
@ -1182,7 +1392,7 @@
|
|||||||
2011-09-16 Paul Smith <psmith@gnu.org>
|
2011-09-16 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* maintMakefile (do-po-update): Apparently we have to avoid
|
* maintMakefile (do-po-update): Apparently we have to avoid
|
||||||
certificate checks on the http://translationproject.org site now.
|
certificate checks on the https://translationproject.org site now.
|
||||||
|
|
||||||
2011-09-12 Paul Smith <psmith@gnu.org>
|
2011-09-12 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
@ -5402,7 +5612,7 @@
|
|||||||
|
|
||||||
See ChangeLog.2, available in the Git repository at:
|
See ChangeLog.2, available in the Git repository at:
|
||||||
|
|
||||||
http://git.savannah.gnu.org/cgit/make.git/tree/
|
https://git.savannah.gnu.org/cgit/make.git/tree/
|
||||||
|
|
||||||
for earlier changes.
|
for earlier changes.
|
||||||
|
|
||||||
@ -5420,4 +5630,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
231
INSTALL
231
INSTALL
@ -1,231 +0,0 @@
|
|||||||
Installation Instructions
|
|
||||||
*************************
|
|
||||||
|
|
||||||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free
|
|
||||||
Software Foundation, Inc.
|
|
||||||
|
|
||||||
This file is free documentation; the Free Software Foundation gives
|
|
||||||
unlimited permission to copy, distribute and modify it.
|
|
||||||
|
|
||||||
Basic Installation
|
|
||||||
==================
|
|
||||||
|
|
||||||
These are generic installation instructions.
|
|
||||||
|
|
||||||
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 only 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. If you're
|
|
||||||
using `csh' on an old version of System V, you might need to type
|
|
||||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
|
||||||
`configure' itself.
|
|
||||||
|
|
||||||
Running `configure' takes awhile. 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.
|
|
||||||
|
|
||||||
4. Type `make install' to install the programs and any data files and
|
|
||||||
documentation.
|
|
||||||
|
|
||||||
5. 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.
|
|
||||||
|
|
||||||
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=c89 CFLAGS=-O2 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 must use a version of `make' that
|
|
||||||
supports the `VPATH' variable, such as 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 `..'.
|
|
||||||
|
|
||||||
If you have to use a `make' that does not support the `VPATH'
|
|
||||||
variable, you have 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.
|
|
||||||
|
|
||||||
Installation Names
|
|
||||||
==================
|
|
||||||
|
|
||||||
By default, `make install' will install the package's files in
|
|
||||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
|
||||||
installation prefix other than `/usr/local' by giving `configure' the
|
|
||||||
option `--prefix=PREFIX'.
|
|
||||||
|
|
||||||
You can specify separate installation prefixes for
|
|
||||||
architecture-specific files and architecture-independent files. If you
|
|
||||||
give `configure' the option `--exec-prefix=PREFIX', the package will
|
|
||||||
use PREFIX as the prefix for installing programs and libraries.
|
|
||||||
Documentation and other data files will 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.
|
|
||||||
|
|
||||||
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'.
|
|
||||||
|
|
||||||
Optional Features
|
|
||||||
=================
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
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 `--target=TYPE' option 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
|
|
||||||
|
|
||||||
will cause the specified gcc to be used as the C compiler (unless it is
|
|
||||||
overridden in the site shell script).
|
|
||||||
|
|
||||||
`configure' Invocation
|
|
||||||
======================
|
|
||||||
|
|
||||||
`configure' recognizes the following options to control how it operates.
|
|
||||||
|
|
||||||
`--help'
|
|
||||||
`-h'
|
|
||||||
Print a summary of the options to `configure', and exit.
|
|
||||||
|
|
||||||
`--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.
|
|
||||||
|
|
||||||
`configure' also accepts some other, not widely useful, options. Run
|
|
||||||
`configure --help' for more details.
|
|
||||||
|
|
@ -1,587 +0,0 @@
|
|||||||
# -*-Makefile-*- template for DJGPP
|
|
||||||
# Makefile.in generated automatically by automake 1.2 from Makefile.am
|
|
||||||
#
|
|
||||||
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
|
||||||
|
|
||||||
srcdir = .
|
|
||||||
VPATH = $(srcdir)
|
|
||||||
# $DJDIR is defined automatically by DJGPP to point
|
|
||||||
# to the root of the DJGPP installation tree.
|
|
||||||
prefix = /dev/env/DJDIR
|
|
||||||
exec_prefix = ${prefix}
|
|
||||||
|
|
||||||
bindir = /bin
|
|
||||||
datadir = /share
|
|
||||||
libdir = /lib
|
|
||||||
infodir = /info
|
|
||||||
mandir = /man
|
|
||||||
includedir = /include
|
|
||||||
oldincludedir = c:/djgpp/include
|
|
||||||
|
|
||||||
DESTDIR = /dev/env/DJDIR
|
|
||||||
|
|
||||||
pkgdatadir = $(datadir)/make
|
|
||||||
pkglibdir = $(libdir)/make
|
|
||||||
pkgincludedir = $(includedir)/make
|
|
||||||
localedir = $(datadir)/locale
|
|
||||||
|
|
||||||
INSTALL = ${exec_prefix}/bin/ginstall -c
|
|
||||||
INSTALL_PROGRAM = ${exec_prefix}/bin/ginstall -c
|
|
||||||
INSTALL_DATA = ${exec_prefix}/bin/ginstall -c -m 644
|
|
||||||
INSTALL_SCRIPT = ${exec_prefix}/bin/ginstall -c
|
|
||||||
transform = s,x,x,
|
|
||||||
|
|
||||||
# This will fail even if they don't have a Unix-like shell (stock DOS
|
|
||||||
# shell doesn't know about `false'). The only difference is that they
|
|
||||||
# get "Error -1" instead of "Error 1".
|
|
||||||
EXIT_FAIL = false
|
|
||||||
|
|
||||||
NORMAL_INSTALL = :
|
|
||||||
PRE_INSTALL = :
|
|
||||||
POST_INSTALL = :
|
|
||||||
NORMAL_UNINSTALL = :
|
|
||||||
PRE_UNINSTALL = :
|
|
||||||
POST_UNINSTALL = :
|
|
||||||
EXEEXT = .exe
|
|
||||||
OBJEXT = o
|
|
||||||
|
|
||||||
AR = ar
|
|
||||||
AWK = gawk
|
|
||||||
CC = gcc
|
|
||||||
CPP = gcc -E
|
|
||||||
LIBOBJS =
|
|
||||||
MAKEINFO = ${exec_prefix}/bin/makeinfo
|
|
||||||
PACKAGE = make
|
|
||||||
PERL = perl
|
|
||||||
RANLIB = ranlib
|
|
||||||
REMOTE = stub
|
|
||||||
VERSION = %VERSION%
|
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = 1.2
|
|
||||||
|
|
||||||
bin_PROGRAMS = %PROGRAMS%$(EXEEXT)
|
|
||||||
|
|
||||||
make_SOURCES = %SOURCES%
|
|
||||||
# This should include the glob/ prefix
|
|
||||||
libglob_a_SOURCES = %GLOB_SOURCES%
|
|
||||||
make_LDADD = glob/libglob.a
|
|
||||||
|
|
||||||
man_MANS = make.1
|
|
||||||
|
|
||||||
INCLUDES = -I$(srcdir)/glob -DLIBDIR=\"$(prefix)$(libdir)\" -DINCLUDEDIR=\"$(prefix)$(includedir)\" -DLOCALEDIR=\"$(prefix)$(localedir)\"
|
|
||||||
|
|
||||||
BUILT_SOURCES = README build.sh-in
|
|
||||||
|
|
||||||
EXTRA_DIST = $(BUILT_SOURCES) $(man_MANS) README.customs remote-cstms.c make-stds.texi texinfo.tex SCOPTIONS SMakefile Makefile.ami README.Amiga config.ami amiga.c amiga.h NMakefile README.DOS configh.dos configure.bat makefile.com README.W32 build_w32.bat config.h-W32 subproc.bat make.lnk config.h-vms makefile.vms readme.vms vmsdir.h vmsfunctions.c vmsify.c gmk-default.scm gmk-default.h
|
|
||||||
|
|
||||||
SUBDIRS = glob doc
|
|
||||||
mkinstalldirs = ${exec_prefix}/bin/gmkdir -p
|
|
||||||
CONFIG_HEADER = config.h
|
|
||||||
CONFIG_CLEAN_FILES = build.sh
|
|
||||||
PROGRAMS = $(bin_PROGRAMS)
|
|
||||||
|
|
||||||
MAKE_HOST = i386-pc-msdosdjgpp
|
|
||||||
|
|
||||||
|
|
||||||
DEFS = -I. -I$(srcdir) -I.
|
|
||||||
CPPFLAGS = -DHAVE_CONFIG_H
|
|
||||||
LDFLAGS =
|
|
||||||
LIBS =
|
|
||||||
make_OBJECTS = %OBJECTS%
|
|
||||||
make_DEPENDENCIES = glob/libglob.a
|
|
||||||
make_LDFLAGS =
|
|
||||||
libglob_a_LIBADD =
|
|
||||||
libglob_a_OBJECTS = %GLOB_OBJECTS%
|
|
||||||
noinst_LIBRARIES = glob/libglob.a
|
|
||||||
CFLAGS = -O2 -g
|
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
|
||||||
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
|
||||||
TEXI2DVI = texi2dvi
|
|
||||||
TEXINFO_TEX = $(srcdir)/config/texinfo.tex
|
|
||||||
INFO_DEPS = doc/make.info
|
|
||||||
DVIS = doc/make.dvi
|
|
||||||
TEXINFOS = doc/make.texi
|
|
||||||
noinst_TEXINFOS = doc/fdl.texi doc/make-stds.texi
|
|
||||||
man1dir = $(mandir)/man1
|
|
||||||
MANS = $(man_MANS)
|
|
||||||
|
|
||||||
NROFF = nroff
|
|
||||||
DIST_COMMON = README ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL Makefile.am Makefile.in NEWS acconfig.h aclocal.m4 alloca.c build.sh-in config.h-in configure configure.ac getloadavg.c
|
|
||||||
|
|
||||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
|
||||||
|
|
||||||
TAR = gtar
|
|
||||||
GZIP = --best
|
|
||||||
SOURCES = $(make_SOURCES)
|
|
||||||
OBJECTS = $(make_OBJECTS)
|
|
||||||
HEADERS = $(wildcard $(srcdir)/*.h)
|
|
||||||
|
|
||||||
default: all
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
.SUFFIXES: .c .dvi .info .o .obj .ps .texi .tex .html
|
|
||||||
|
|
||||||
mostlyclean-hdr:
|
|
||||||
|
|
||||||
clean-hdr:
|
|
||||||
|
|
||||||
distclean-hdr:
|
|
||||||
-rm -f config.h
|
|
||||||
|
|
||||||
maintainer-clean-hdr:
|
|
||||||
|
|
||||||
mostlyclean-binPROGRAMS:
|
|
||||||
|
|
||||||
clean-binPROGRAMS:
|
|
||||||
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
|
||||||
|
|
||||||
distclean-binPROGRAMS:
|
|
||||||
|
|
||||||
maintainer-clean-binPROGRAMS:
|
|
||||||
|
|
||||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
|
||||||
@list='$(bin_PROGRAMS)'; for p in $$list; do if test -f $$p; then echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`"; $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; else :; fi; done
|
|
||||||
|
|
||||||
uninstall-binPROGRAMS:
|
|
||||||
$(NORMAL_UNINSTALL)
|
|
||||||
list='$(bin_PROGRAMS)'; for p in $$list; do rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`.exe; done
|
|
||||||
|
|
||||||
.c.o:
|
|
||||||
$(COMPILE) -c $<
|
|
||||||
|
|
||||||
clean-noinstLIBRARIES:
|
|
||||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
|
||||||
|
|
||||||
mostlyclean-compile:
|
|
||||||
-rm -f *.$(OBJEXT) *$(EXEEXT) make.new core
|
|
||||||
|
|
||||||
clean-compile:
|
|
||||||
|
|
||||||
distclean-compile:
|
|
||||||
-rm -f *.tab.c *_tab.c
|
|
||||||
|
|
||||||
maintainer-clean-compile:
|
|
||||||
|
|
||||||
make$(EXEEXT): $(make_OBJECTS) $(make_DEPENDENCIES)
|
|
||||||
@command.com /c if exist make del make
|
|
||||||
@command.com /c if exist make.exe del make.exe
|
|
||||||
$(LINK) $(make_LDFLAGS) $(make_OBJECTS) $(make_LDADD) $(LIBS)
|
|
||||||
|
|
||||||
# Documentation
|
|
||||||
|
|
||||||
make.info: make.texi
|
|
||||||
make.dvi: make.texi
|
|
||||||
make.ps: make.dvi make.texi
|
|
||||||
make.html: make.texi
|
|
||||||
|
|
||||||
|
|
||||||
DVIPS = dvips
|
|
||||||
|
|
||||||
.texi.info:
|
|
||||||
@command.com /c if exist make.info* del make.info*
|
|
||||||
@command.com /c if exist make.i* del make.i*
|
|
||||||
$(MAKEINFO) -I$(srcdir) --no-split $< -o ./$@
|
|
||||||
|
|
||||||
.texi:
|
|
||||||
@command.com /c if exist make.info* del make.info*
|
|
||||||
@command.com /c if exist make.i* del make.i*
|
|
||||||
$(MAKEINFO) -I$(srcdir) --no-split $< -o ./$@
|
|
||||||
|
|
||||||
.texi.dvi:
|
|
||||||
TEXINPUTS="$(srcdir);$$TEXINPUTS" MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
|
||||||
|
|
||||||
.dvi.ps:
|
|
||||||
$(DVIPS) $< -o $@
|
|
||||||
|
|
||||||
# Other documentation formats
|
|
||||||
|
|
||||||
html: html-recursive
|
|
||||||
|
|
||||||
.texi.html:
|
|
||||||
@command.com /c if exist make.html* del make.html*
|
|
||||||
$(MAKEINFO) --html -I$(srcdir) --no-split $< -o ./$@
|
|
||||||
|
|
||||||
install-info-am: $(INFO_DEPS)
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
$(mkinstalldirs) $(DESTDIR)$(infodir)
|
|
||||||
@for file in $(INFO_DEPS); do iifile=`echo $$file | sed "s|doc/||"`; d=$(srcdir); for ifile in `cd $$d && echo $$file`; do if test -f $$d/$$ifile; then echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$iifile"; $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$iifile; else : ; fi; done; done
|
|
||||||
@$(POST_INSTALL)
|
|
||||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then for file in $(INFO_DEPS); do iifile=`echo $$file | sed "s|doc/||"`; echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$iifile"; install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$iifile || :; done; else : ; fi
|
|
||||||
|
|
||||||
uninstall-info:
|
|
||||||
$(PRE_UNINSTALL)
|
|
||||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then ii=yes; else ii=; fi; for file in $(INFO_DEPS); do test -z $ii || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; done
|
|
||||||
$(NORMAL_UNINSTALL)
|
|
||||||
for file in $(INFO_DEPS); do (cd $(DESTDIR)$(infodir) && rm -f $$file); done
|
|
||||||
|
|
||||||
dist-info: $(INFO_DEPS)
|
|
||||||
for base in $(INFO_DEPS); do d=$(srcdir); for file in `cd $$d && eval echo $$base*`; do test -f $(distdir)/$$file || ln $$d/$$file $(distdir)/$$file 2> /dev/null || cp -p $$d/$$file $(distdir)/$$file; done; done
|
|
||||||
|
|
||||||
mostlyclean-aminfo:
|
|
||||||
-rm -f $(srcdir)/doc/make.aux $(srcdir)/doc/make.cp $(srcdir)/doc/make.cps $(srcdir)/doc/make.dvi \
|
|
||||||
$(srcdir)/doc/make.fn $(srcdir)/doc/make.fns $(srcdir)/doc/make.ky $(srcdir)/doc/make.kys \
|
|
||||||
$(srcdir)/doc/make.ps $(srcdir)/doc/make.log $(srcdir)/doc/make.pg $(srcdir)/doc/make.toc \
|
|
||||||
$(srcdir)/doc/make.tp $(srcdir)/doc/make.tps $(srcdir)/doc/make.vr $(srcdir)/doc/make.vrs \
|
|
||||||
$(srcdir)/doc/make.op $(srcdir)/doc/make.tr $(srcdir)/doc/make.cv $(srcdir)/doc/make.cn \
|
|
||||||
$(srcdir)/doc/make.html
|
|
||||||
|
|
||||||
clean-aminfo:
|
|
||||||
|
|
||||||
distclean-aminfo:
|
|
||||||
|
|
||||||
maintainer-clean-aminfo:
|
|
||||||
for i in $(INFO_DEPS); do rm -f $$i*; done
|
|
||||||
|
|
||||||
install-man1:
|
|
||||||
$(mkinstalldirs) $(DESTDIR)$(man1dir)
|
|
||||||
@list='$(man1_MANS)'; \
|
|
||||||
l2='$(man_MANS)'; for i in $$l2; do \
|
|
||||||
case "$$i" in \
|
|
||||||
*.1*) list="$$list $$i" ;; \
|
|
||||||
esac; \
|
|
||||||
done; \
|
|
||||||
for i in $$list; do \
|
|
||||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
|
||||||
else file=$$i; fi; \
|
|
||||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
|
||||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
|
||||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
|
||||||
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
|
|
||||||
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
|
|
||||||
done
|
|
||||||
|
|
||||||
uninstall-man1:
|
|
||||||
@list='$(man1_MANS)'; \
|
|
||||||
l2='$(man_MANS)'; for i in $$l2; do \
|
|
||||||
case "$$i" in \
|
|
||||||
*.1*) list="$$list $$i" ;; \
|
|
||||||
esac; \
|
|
||||||
done; \
|
|
||||||
for i in $$list; do \
|
|
||||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
|
||||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
|
||||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
|
||||||
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
|
|
||||||
rm -f $(DESTDIR)$(man1dir)/$$inst; \
|
|
||||||
done
|
|
||||||
install-man: $(MANS)
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
$(MAKE) install-man1
|
|
||||||
uninstall-man:
|
|
||||||
@$(NORMAL_UNINSTALL)
|
|
||||||
$(MAKE) uninstall-man1
|
|
||||||
|
|
||||||
# Assume that the only thing to do in glob is to build libglob.a,
|
|
||||||
# but do a sanity check: if $SUBDIRS will ever have more than
|
|
||||||
# a single directory, yell bloody murder.
|
|
||||||
all-recursive:
|
|
||||||
ifeq ($(findstring glob, $(SUBDIRS)), glob)
|
|
||||||
@command.com /c if not exist glob\\nul md glob
|
|
||||||
@echo Making all in glob
|
|
||||||
$(MAKE) -C glob -f ../Makefile INCLUDES='-I$(srcdir) -I$(srcdir)/glob' DEFS='-I.. -I$(srcdir)' VPATH=$(srcdir)/glob libglob.a
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(SUBDIRS):
|
|
||||||
command.com /c md $@
|
|
||||||
|
|
||||||
libglob.a: $(libglob_a_OBJECTS)
|
|
||||||
command.com /c if exist libglob.a del libglob.a
|
|
||||||
$(AR) cru libglob.a $(libglob_a_OBJECTS) $(libglob_a_LIBADD)
|
|
||||||
$(RANLIB) libglob.a
|
|
||||||
|
|
||||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
|
||||||
maintainer-clean-recursive check-recursive:
|
|
||||||
ifeq ($(words $(SUBDIRS)), 2)
|
|
||||||
@echo Making $(shell echo $@ | sed s/-recursive//) in glob
|
|
||||||
$(MAKE) -C glob -f ../Makefile $(shell echo $@ | sed s/-recursive//)-am
|
|
||||||
@echo Making $(shell echo $@ | sed s/-recursive//) in doc
|
|
||||||
$(MAKE) -C doc -f ../Makefile $(shell echo $@ | sed s/-recursive//)-am
|
|
||||||
else
|
|
||||||
@echo FATAL: There is more than two directory in "($(SUBDIRS))"
|
|
||||||
@$(EXIT_FAIL)
|
|
||||||
endif
|
|
||||||
|
|
||||||
tags-in-glob: $(libglob_a_SOURCES)
|
|
||||||
etags $(addprefix $(srcdir)/,$^) -o ./glob/TAGS
|
|
||||||
|
|
||||||
tags-recursive:
|
|
||||||
ifeq ($(words $(SUBDIRS)), 2)
|
|
||||||
$(MAKE) tags-in-glob
|
|
||||||
else
|
|
||||||
@echo FATAL: There is more than two directory in "($(SUBDIRS))"
|
|
||||||
@$(EXIT_FAIL)
|
|
||||||
endif
|
|
||||||
|
|
||||||
tags: TAGS
|
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES)
|
|
||||||
mkid $(srcdir)/$(SOURCES) $(srcdir)/$(libglob_a_SOURCES) ./config.h $(HEADERS)
|
|
||||||
|
|
||||||
TAGS: tags-recursive $(HEADERS) $(srcdir)/$(SOURCES) config.h $(TAGS_DEPENDENCIES)
|
|
||||||
etags -i ./glob/TAGS $(ETAGS_ARGS) $(srcdir)/$(SOURCES) ./config.h $(HEADERS)
|
|
||||||
|
|
||||||
mostlyclean-tags:
|
|
||||||
|
|
||||||
clean-tags:
|
|
||||||
|
|
||||||
distclean-tags:
|
|
||||||
-rm -f TAGS ID
|
|
||||||
|
|
||||||
maintainer-clean-tags:
|
|
||||||
|
|
||||||
distdir = $(PACKAGE)-$(VERSION)
|
|
||||||
top_distdir = $(distdir)
|
|
||||||
|
|
||||||
# This target untars the dist file and tries a VPATH configuration. Then
|
|
||||||
# it guarantees that the distribution is self-contained by making another
|
|
||||||
# tarfile.
|
|
||||||
distcheck: dist
|
|
||||||
rm -rf $(distdir)
|
|
||||||
GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz
|
|
||||||
mkdir $(distdir)/=build
|
|
||||||
mkdir $(distdir)/=inst
|
|
||||||
dc_install_base=`cd $(distdir)/=inst && pwd`; cd $(distdir)/=build && ../configure --srcdir=.. --prefix=$$dc_install_base && $(MAKE) && $(MAKE) dvi && $(MAKE) check && $(MAKE) install && $(MAKE) installcheck && $(MAKE) dist
|
|
||||||
rm -rf $(distdir)
|
|
||||||
@echo "========================"; echo "$(distdir).tar.gz is ready for distribution"; echo "========================"
|
|
||||||
dist: distdir
|
|
||||||
-chmod -R a+r $(distdir)
|
|
||||||
GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
|
||||||
rm -rf $(distdir)
|
|
||||||
dist-all: distdir
|
|
||||||
-chmod -R a+r $(distdir)
|
|
||||||
GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
|
||||||
rm -rf $(distdir)
|
|
||||||
distdir: $(DISTFILES)
|
|
||||||
rm -rf $(distdir)
|
|
||||||
mkdir $(distdir)
|
|
||||||
-chmod 777 $(distdir)
|
|
||||||
@for file in $(DISTFILES); do d=$(srcdir); test -f $(distdir)/$$file || ln $$d/$$file $(distdir)/$$file 2> /dev/null || cp -p $$d/$$file $(distdir)/$$file; done; for subdir in $(SUBDIRS); do test -d $(distdir)/$$subdir || mkdir $(distdir)/$$subdir || exit 1; chmod 777 $(distdir)/$$subdir; (cd $$subdir && $(MAKE) top_distdir=../$(top_distdir)/$$subdir distdir=../$(distdir)/$$subdir distdir) || exit 1; done
|
|
||||||
$(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
|
|
||||||
$(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook
|
|
||||||
|
|
||||||
info: info-recursive
|
|
||||||
info-recursive:
|
|
||||||
ifeq ($(findstring doc, $(SUBDIRS)), doc)
|
|
||||||
@command.com /c if not exist doc\\nul md doc
|
|
||||||
@echo Making all in doc
|
|
||||||
$(MAKE) -C doc -f ../Makefile VPATH=$(srcdir)/doc make.info
|
|
||||||
endif
|
|
||||||
|
|
||||||
dvi: dvi-recursive
|
|
||||||
dvi-recursive:
|
|
||||||
ifeq ($(findstring doc, $(SUBDIRS)), doc)
|
|
||||||
@command.com /c if not exist doc\\nul md doc
|
|
||||||
@echo Making all in doc
|
|
||||||
$(MAKE) -C doc -f ../Makefile VPATH=$(srcdir)/doc make.dvi
|
|
||||||
endif
|
|
||||||
|
|
||||||
ps: ps-recursive
|
|
||||||
ps-recursive:
|
|
||||||
ifeq ($(findstring doc, $(SUBDIRS)), doc)
|
|
||||||
@command.com /c if not exist doc\\nul md doc
|
|
||||||
@echo Making all in doc
|
|
||||||
$(MAKE) -C doc -f ../Makefile VPATH=$(srcdir)/doc make.ps
|
|
||||||
endif
|
|
||||||
|
|
||||||
html-recursive:
|
|
||||||
ifeq ($(findstring doc, $(SUBDIRS)), doc)
|
|
||||||
@command.com /c if not exist doc\\nul md doc
|
|
||||||
@echo Making all in doc
|
|
||||||
$(MAKE) -C doc -f ../Makefile VPATH=$(srcdir)/doc make.html
|
|
||||||
endif
|
|
||||||
|
|
||||||
check: all-am check-recursive check-local
|
|
||||||
@:
|
|
||||||
installcheck: installcheck-recursive
|
|
||||||
all-recursive-am: config.h
|
|
||||||
$(MAKE) all-recursive
|
|
||||||
|
|
||||||
all-am: Makefile $(PROGRAMS) config.h info
|
|
||||||
|
|
||||||
install-exec-am: install-binPROGRAMS
|
|
||||||
|
|
||||||
install-data-am: install-info-am
|
|
||||||
|
|
||||||
uninstall-am: uninstall-binPROGRAMS uninstall-info
|
|
||||||
|
|
||||||
install-exec: install-exec-recursive install-exec-am
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
|
|
||||||
install-data: install-data-recursive install-data-am
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
|
|
||||||
install-recursive uninstall-recursive:
|
|
||||||
@:
|
|
||||||
|
|
||||||
install: install-recursive install-exec-am install-data-am
|
|
||||||
@:
|
|
||||||
|
|
||||||
uninstall: uninstall-recursive uninstall-am
|
|
||||||
|
|
||||||
all: all-recursive-am all-am
|
|
||||||
|
|
||||||
install-strip:
|
|
||||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
|
||||||
installdirs: installdirs-recursive
|
|
||||||
$(mkinstalldirs) $(bindir) $(infodir)
|
|
||||||
|
|
||||||
|
|
||||||
mostlyclean-generic:
|
|
||||||
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
|
||||||
|
|
||||||
clean-generic:
|
|
||||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
|
||||||
|
|
||||||
distclean-generic:
|
|
||||||
-rm -f Makefile $(DISTCLEANFILES)
|
|
||||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
|
||||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
||||||
|
|
||||||
maintainer-clean-generic:
|
|
||||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
|
||||||
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
|
||||||
mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS mostlyclean-compile mostlyclean-aminfo mostlyclean-tags mostlyclean-generic
|
|
||||||
|
|
||||||
clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-aminfo clean-tags clean-generic mostlyclean-am
|
|
||||||
|
|
||||||
distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile distclean-aminfo distclean-tags distclean-generic clean-am
|
|
||||||
|
|
||||||
maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS maintainer-clean-compile maintainer-clean-aminfo maintainer-clean-tags maintainer-clean-generic distclean-am
|
|
||||||
|
|
||||||
mostlyclean: mostlyclean-recursive mostlyclean-am
|
|
||||||
|
|
||||||
clean: clean-noinstLIBRARIES clean-recursive clean-am
|
|
||||||
|
|
||||||
distclean: distclean-recursive distclean-am
|
|
||||||
rm -f config.status
|
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-recursive maintainer-clean-am
|
|
||||||
@echo "This command is intended for maintainers to use;"
|
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
|
||||||
rm -f config.status
|
|
||||||
|
|
||||||
.PHONY: default mostlyclean-hdr distclean-hdr clean-hdr \
|
|
||||||
maintainer-clean-hdr mostlyclean-binPROGRAMS distclean-binPROGRAMS \
|
|
||||||
clean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \
|
|
||||||
install-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \
|
|
||||||
maintainer-clean-compile install-info-am uninstall-info \
|
|
||||||
mostlyclean-aminfo distclean-aminfo clean-aminfo \
|
|
||||||
maintainer-clean-aminfo install-data-recursive uninstall-data-recursive \
|
|
||||||
install-exec-recursive uninstall-exec-recursive installdirs-recursive \
|
|
||||||
uninstalldirs-recursive all-recursive check-recursive check-am \
|
|
||||||
installcheck-recursive info-recursive dvi-recursive \
|
|
||||||
mostlyclean-recursive distclean-recursive clean-recursive \
|
|
||||||
maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
|
|
||||||
distclean-tags clean-tags maintainer-clean-tags distdir \
|
|
||||||
mostlyclean-depend distclean-depend clean-depend \
|
|
||||||
maintainer-clean-depend info dvi check-local installcheck \
|
|
||||||
all-recursive-am all-am install-exec-am install-data-am uninstall-am \
|
|
||||||
install-exec install-data install uninstall all installdirs \
|
|
||||||
mostlyclean-generic distclean-generic clean-generic \
|
|
||||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean \
|
|
||||||
html
|
|
||||||
|
|
||||||
|
|
||||||
# --------------- Local DIST Section
|
|
||||||
|
|
||||||
# Install the w32 subdirectory
|
|
||||||
#
|
|
||||||
dist-hook:
|
|
||||||
(cd $(srcdir); \
|
|
||||||
w32=`find w32 -follow \( -name .git -prune \) -o -type f -print`; \
|
|
||||||
tar chf - $$w32) \
|
|
||||||
| (cd $(distdir); tar xfBp -)
|
|
||||||
|
|
||||||
# --------------- Local CHECK Section
|
|
||||||
|
|
||||||
# Note: check-loadavg is NOT a prerequisite of check-local, since
|
|
||||||
# there's no uptime utility, and the test it does doesn't make sense
|
|
||||||
# on MSDOS anyway.
|
|
||||||
check-local: check-shell check-regression
|
|
||||||
@banner=" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) "; \
|
|
||||||
dashes=`echo "$$banner" | sed s/./=/g`; \
|
|
||||||
echo; \
|
|
||||||
echo "$$dashes"; \
|
|
||||||
echo "$$banner"; \
|
|
||||||
echo "$$dashes"; \
|
|
||||||
echo
|
|
||||||
|
|
||||||
.PHONY: check-loadavg check-shell check-regression
|
|
||||||
|
|
||||||
# > check-shell
|
|
||||||
#
|
|
||||||
# check-shell is designed to fail if they don't have a Unixy shell
|
|
||||||
# installed. The test suite requires such a shell.
|
|
||||||
check-shell:
|
|
||||||
@echo If Make says Error -1, you do not have Unix-style shell installed
|
|
||||||
@foo=bar.exe :
|
|
||||||
|
|
||||||
# > check-loadavg
|
|
||||||
#
|
|
||||||
loadavg: loadavg.c config.h
|
|
||||||
@rm -f loadavg
|
|
||||||
$(LINK) -DTEST $(make_LDFLAGS) loadavg.c $(LIBS)
|
|
||||||
# We copy getloadavg.c into a different file rather than compiling it
|
|
||||||
# directly because some compilers clobber getloadavg.o in the process.
|
|
||||||
loadavg.c: getloadavg.c
|
|
||||||
ln $(srcdir)/getloadavg.c loadavg.c || \
|
|
||||||
cp $(srcdir)/getloadavg.c loadavg.c
|
|
||||||
check-loadavg: loadavg
|
|
||||||
@echo The system uptime program believes the load average to be:
|
|
||||||
-uptime
|
|
||||||
@echo The GNU load average checking code believes:
|
|
||||||
-./loadavg
|
|
||||||
|
|
||||||
# > check-regression
|
|
||||||
#
|
|
||||||
# Look for the make test suite, and run it if found. Look in MAKE_TEST if
|
|
||||||
# specified, or else in the srcdir or the distdir, their parents, and _their_
|
|
||||||
# parents.
|
|
||||||
#
|
|
||||||
check-regression:
|
|
||||||
@if test -f "$(srcdir)/tests/run_make_tests"; then \
|
|
||||||
if $(PERL) -v >/dev/null 2>&1; then \
|
|
||||||
case `cd $(srcdir); pwd` in `pwd`) : ;; \
|
|
||||||
*) test -d tests || mkdir tests; \
|
|
||||||
for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \
|
|
||||||
rm -rf tests/$$f; cp -pr $(srcdir)/tests/$$f tests; \
|
|
||||||
done ;; \
|
|
||||||
esac; \
|
|
||||||
echo "cd tests && $(PERL) ./run_make_tests.pl -make ../make.exe $(MAKETESTFLAGS)"; \
|
|
||||||
cd tests && $(PERL) ./run_make_tests.pl -make ../make.exe $(MAKETESTFLAGS); \
|
|
||||||
else \
|
|
||||||
echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \
|
|
||||||
fi; \
|
|
||||||
else \
|
|
||||||
echo "Can't find the GNU Make test suite ($(srcdir)/tests)."; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --------------- Maintainer's Section
|
|
||||||
|
|
||||||
# Note this requires GNU make. Not to worry, since it will only be included
|
|
||||||
# in the Makefile if we're in the maintainer's environment.
|
|
||||||
#include $(srcdir)/maintMakefile
|
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
||||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
||||||
.NOEXPORT:
|
|
||||||
|
|
||||||
# --------------- DEPENDENCIES
|
|
280
Makefile.am
280
Makefile.am
@ -1,6 +1,6 @@
|
|||||||
# This is a -*-Makefile-*-, or close enough
|
# This is a -*-Makefile-*-, or close enough
|
||||||
#
|
#
|
||||||
# Copyright (C) 1997-2013 Free Software Foundation, Inc.
|
# Copyright (C) 1997-2024 Free Software Foundation, Inc.
|
||||||
# This file is part of GNU Make.
|
# This file is part of GNU Make.
|
||||||
#
|
#
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -14,146 +14,145 @@
|
|||||||
# details.
|
# details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = 1.8 dist-bzip2 check-news
|
AUTOMAKE_OPTIONS = dist-lzip silent-rules std-options subdir-objects nostdinc
|
||||||
ACLOCAL_AMFLAGS = -I config
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
MAKE_HOST = @MAKE_HOST@
|
MAKE_HOST = @MAKE_HOST@
|
||||||
|
|
||||||
# Only process if target is MS-Windows
|
SUBDIRS = lib po doc
|
||||||
if WINDOWSENV
|
|
||||||
MAYBE_W32 = w32
|
|
||||||
W32INC = -I $(top_srcdir)/w32/include
|
|
||||||
W32LIB = -Lw32 -lw32
|
|
||||||
endif
|
|
||||||
|
|
||||||
SUBDIRS = glob config po doc $(MAYBE_W32)
|
|
||||||
|
|
||||||
bin_PROGRAMS = make
|
bin_PROGRAMS = make
|
||||||
include_HEADERS = gnumake.h
|
include_HEADERS = src/gnumake.h
|
||||||
|
|
||||||
if USE_CUSTOMS
|
man_MANS = doc/make.1
|
||||||
remote = remote-cstms.c
|
|
||||||
else
|
|
||||||
remote = remote-stub.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
make_SOURCES = ar.c arscan.c commands.c default.c dir.c expand.c file.c \
|
make_SRCS = src/ar.c src/arscan.c src/commands.c src/commands.h \
|
||||||
function.c getopt.c getopt1.c implicit.c job.c load.c \
|
src/debug.h src/default.c src/dep.h src/dir.c src/expand.c \
|
||||||
loadapi.c main.c misc.c output.c read.c remake.c rule.c \
|
src/file.c src/filedef.h src/function.c src/getopt.c \
|
||||||
signame.c strcache.c variable.c version.c vpath.c hash.c \
|
src/getopt.h src/getopt1.c src/gettext.h src/guile.c \
|
||||||
$(remote)
|
src/hash.c src/hash.h src/implicit.c src/job.c src/job.h \
|
||||||
|
src/load.c src/loadapi.c src/main.c src/makeint.h src/misc.c \
|
||||||
|
src/mkcustom.h src/os.h src/output.c src/output.h src/read.c \
|
||||||
|
src/remake.c src/rule.c src/rule.h src/shuffle.h src/shuffle.c \
|
||||||
|
src/signame.c src/strcache.c src/variable.c src/variable.h \
|
||||||
|
src/version.c src/vpath.c src/warning.c src/warning.h
|
||||||
|
|
||||||
|
w32_SRCS = src/w32/pathstuff.c src/w32/w32os.c src/w32/compat/dirent.c \
|
||||||
|
src/w32/compat/posixfcn.c src/w32/include/dirent.h \
|
||||||
|
src/w32/include/dlfcn.h src/w32/include/pathstuff.h \
|
||||||
|
src/w32/include/sub_proc.h src/w32/include/w32err.h \
|
||||||
|
src/w32/subproc/misc.c src/w32/subproc/proc.h \
|
||||||
|
src/w32/subproc/sub_proc.c src/w32/subproc/w32err.c
|
||||||
|
|
||||||
|
w32_utf8_SRCS = src/w32/utf8.rc src/w32/utf8.manifest
|
||||||
|
|
||||||
|
vms_SRCS = src/vms_exit.c src/vms_export_symbol.c src/vms_progname.c \
|
||||||
|
src/vmsdir.h src/vmsfunctions.c src/vmsify.c
|
||||||
|
|
||||||
|
glob_SRCS = lib/fnmatch.c lib/fnmatch.h lib/glob.c lib/glob.h
|
||||||
|
|
||||||
|
alloca_SRCS = lib/alloca.c
|
||||||
|
|
||||||
|
loadavg_SRCS = lib/getloadavg.c
|
||||||
|
|
||||||
|
make_SOURCES = $(make_SRCS)
|
||||||
|
EXTRA_make_SOURCES = $(vms_SRCS)
|
||||||
|
|
||||||
if HAVE_GUILE
|
if HAVE_GUILE
|
||||||
make_SOURCES += guile.c
|
_GUILE_CFLAGS = $(GUILE_CFLAGS)
|
||||||
|
_GUILE_LIBS = $(GUILE_LIBS)
|
||||||
|
else
|
||||||
|
_GUILE_CFLAGS =
|
||||||
|
_GUILE_LIBS =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_make_SOURCES = vmsjobs.c remote-stub.c remote-cstms.c
|
make_LDADD = $(LIBOBJS) $(_GUILE_LIBS) lib/libgnu.a $(GETLOADAVG_LIBS) \
|
||||||
|
@LIBINTL@
|
||||||
noinst_HEADERS = commands.h dep.h filedef.h job.h makeint.h rule.h variable.h \
|
|
||||||
debug.h getopt.h gettext.h hash.h output.h
|
|
||||||
|
|
||||||
make_LDADD = @LIBOBJS@ @ALLOCA@ $(GLOBLIB) @GETLOADAVG_LIBS@ @LIBINTL@ \
|
|
||||||
$(GUILE_LIBS)
|
|
||||||
# Only process if target is MS-Windows
|
|
||||||
if WINDOWSENV
|
|
||||||
make_LDADD += $(W32LIB)
|
|
||||||
endif
|
|
||||||
|
|
||||||
man_MANS = make.1
|
|
||||||
|
|
||||||
DEFS = -DLOCALEDIR=\"$(localedir)\" -DLIBDIR=\"$(libdir)\" -DINCLUDEDIR=\"$(includedir)\" @DEFS@
|
|
||||||
|
|
||||||
AM_CPPFLAGS = $(GLOBINC)
|
|
||||||
AM_CFLAGS = $(GUILE_CFLAGS)
|
|
||||||
# Only process if target is MS-Windows
|
|
||||||
if WINDOWSENV
|
|
||||||
AM_CPPFLAGS += $(W32INC)
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Extra stuff to include in the distribution.
|
|
||||||
|
|
||||||
EXTRA_DIST = README build.sh.in $(man_MANS) \
|
|
||||||
README.customs README.OS2 \
|
|
||||||
SCOPTIONS SMakefile \
|
|
||||||
README.Amiga Makefile.ami config.ami make.lnk amiga.c amiga.h \
|
|
||||||
README.DOS Makefile.DOS configure.bat dosbuild.bat configh.dos\
|
|
||||||
README.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \
|
|
||||||
make_msvc_net2003.sln make_msvc_net2003.vcproj \
|
|
||||||
readme.vms makefile.vms makefile.com config.h-vms \
|
|
||||||
vmsdir.h vmsfunctions.c vmsify.c \
|
|
||||||
gmk-default.scm gmk-default.h
|
|
||||||
|
|
||||||
# This is built during configure, but behind configure's back
|
|
||||||
|
|
||||||
DISTCLEANFILES = build.sh
|
|
||||||
|
|
||||||
# Forward targets
|
|
||||||
|
|
||||||
html:
|
|
||||||
cd doc && $(MAKE) $(AM_MAKEFLAGS) $@
|
|
||||||
|
|
||||||
.PHONY: html
|
|
||||||
|
|
||||||
# --------------- Internationalization Section
|
|
||||||
|
|
||||||
localedir = $(datadir)/locale
|
localedir = $(datadir)/locale
|
||||||
|
|
||||||
# --------------- Local INSTALL Section
|
AM_CPPFLAGS = -Isrc -I$(top_srcdir)/src -Ilib -I$(top_srcdir)/lib \
|
||||||
|
-DLIBDIR=\"$(libdir)\" -DLOCALEDIR=\"$(localedir)\"
|
||||||
|
|
||||||
# If necessary, change the gid of the app and turn on the setgid flag.
|
# If prefix is not a standard location, look in prefix as well
|
||||||
#
|
if !KNOWN_PREFIX
|
||||||
|
AM_CPPFLAGS += -DINCLUDEDIR=\"$(includedir)\"
|
||||||
|
endif
|
||||||
|
|
||||||
# Whether or not make needs to be installed setgid.
|
AM_CFLAGS = $(_GUILE_CFLAGS)
|
||||||
# The value should be either 'true' or 'false'.
|
|
||||||
# On many systems, the getloadavg function (used to implement the '-l'
|
|
||||||
# switch) will not work unless make is installed setgid kmem.
|
|
||||||
#
|
|
||||||
inst_setgid = @NEED_SETGID@
|
|
||||||
|
|
||||||
# Install make setgid to this group so it can get the load average.
|
if WINDOWSENV
|
||||||
#
|
make_SOURCES += $(w32_SRCS)
|
||||||
inst_group = @KMEM_GROUP@
|
AM_CPPFLAGS += -I $(top_srcdir)/src/w32/include
|
||||||
|
else
|
||||||
|
make_SOURCES += src/posixos.c
|
||||||
|
endif
|
||||||
|
|
||||||
install-exec-local:
|
UTF8OBJ = src/w32/utf8.$(OBJEXT)
|
||||||
@if $(inst_setgid); then \
|
|
||||||
app=$(DESTDIR)$(bindir)/`echo $(bin_PROGRAMS)|sed '$(transform)'`; \
|
if HAVE_WINDRES
|
||||||
if chgrp $(inst_group) $$app && chmod g+s $$app; then \
|
make_LDADD += $(UTF8OBJ)
|
||||||
echo "chgrp $(inst_group) $$app && chmod g+s $$app"; \
|
endif
|
||||||
else \
|
|
||||||
echo "$$app needs to be owned by group $(inst_group) and setgid;"; \
|
$(UTF8OBJ) : $(w32_utf8_SRCS)
|
||||||
echo "otherwise the '-l' option will probably not work."; \
|
$(WINDRES) -o $@ -i $<
|
||||||
echo "You may need special privileges to complete the installation"; \
|
|
||||||
echo "of $$app."; \
|
if USE_CUSTOMS
|
||||||
fi; \
|
make_SOURCES += src/remote-cstms.c
|
||||||
else true; fi
|
else
|
||||||
|
make_SOURCES += src/remote-stub.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Extra stuff to include in the distribution.
|
||||||
|
|
||||||
|
mk_FILES = Basic.mk mk/msdosdjgpp.mk mk/VMS.mk mk/Windows32.mk
|
||||||
|
# We don't need this, since the standard automake output will do.
|
||||||
|
#mk/Posix.mk.in
|
||||||
|
|
||||||
|
m4_FILES = m4/gnulib-cache.m4
|
||||||
|
|
||||||
|
test_FILES = tests/run_make_tests tests/run_make_tests.bat \
|
||||||
|
tests/run_make_tests.pl tests/test_driver.pl \
|
||||||
|
tests/config-flags.pm.in tests/config_flags_pm.com \
|
||||||
|
tests/config-flags.pm.W32 \
|
||||||
|
tests/mkshadow tests/thelp.pl tests/guile.supp tests/README
|
||||||
|
# test/scripts are added via dist-hook below.
|
||||||
|
|
||||||
|
EXTRA_DIST = ChangeLog INSTALL README build.sh build.cfg.in $(man_MANS) \
|
||||||
|
src/mkconfig.h README.customs README.OS2 README.zOS \
|
||||||
|
README.DOS builddos.bat src/configh.dos \
|
||||||
|
README.W32 build_w32.bat src/config.h.W32 \
|
||||||
|
README.VMS makefile.com src/config.h-vms src/vmsjobs.c \
|
||||||
|
vms_export_symbol_test.com \
|
||||||
|
src/gmk-default.scm src/gmk-default.h \
|
||||||
|
$(mk_FILES) $(m4_FILES) $(test_FILES) $(w32_utf8_SRCS)
|
||||||
|
|
||||||
# --------------- Generate the Guile default module content
|
# --------------- Generate the Guile default module content
|
||||||
|
|
||||||
guile.$(OBJEXT): gmk-default.h
|
src/guile.$(OBJEXT): src/gmk-default.h
|
||||||
gmk-default.h: $(srcdir)/gmk-default.scm
|
src/gmk-default.h: $(top_srcdir)/src/gmk-default.scm
|
||||||
(echo 'static const char *const GUILE_module_defn = " '\\ \
|
(echo 'static const char *const GUILE_module_defn = " '\\ \
|
||||||
&& sed -e 's/;.*//' -e '/^[ \t]*$$/d' -e 's/"/\\"/g' -e 's/$$/ \\/' \
|
&& sed -e 's/;.*//' -e '/^[ \t]*$$/d' -e 's/"/\\"/g' -e 's/$$/ \\/' \
|
||||||
$(srcdir)/gmk-default.scm \
|
$(top_srcdir)/src/gmk-default.scm \
|
||||||
&& echo '";') > $@
|
&& echo '";') > src/gmk-default.h
|
||||||
|
|
||||||
# --------------- Local DIST Section
|
# --------------- Local DIST Section
|
||||||
|
|
||||||
# Install the w32 and tests subdirectories
|
# Install the mk and tests subdirectories
|
||||||
#
|
#
|
||||||
dist-hook:
|
dist-hook:
|
||||||
(cd $(srcdir); \
|
(cd $(top_srcdir); \
|
||||||
sub=`find w32 tests -follow \( -name .git -o -name .deps -o -name work -o -name .gitignore -o -name \*.orig -o -name \*.rej -o -name \*~ -o -name Makefile \) -prune -o -type f -print`; \
|
sub=`find tests/scripts -follow \( -name .git -o -name .deps -o -name work -o -name .gitignore -o -name \*.orig -o -name \*.rej -o -name \*~ -o -name \*.out -o -name Makefile \) -prune -o -type f -print`; \
|
||||||
tar chf - $$sub) \
|
$(AMTAR) chf - $$sub) \
|
||||||
| (cd $(distdir); tar xfBp -)
|
| (cd $(distdir); $(AMTAR) xfBp -)
|
||||||
|
|
||||||
|
|
||||||
# --------------- Local CHECK Section
|
# --------------- Local CHECK Section
|
||||||
|
|
||||||
check-local: check-regression check-loadavg
|
check-local: check-regression
|
||||||
@banner=" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) "; \
|
@banner=" Regression PASSED: $(PACKAGE_STRING) ($(MAKE_HOST)) built with $(CC) "; \
|
||||||
dashes=`echo "$$banner" | sed s/./=/g`; \
|
dashes=`echo "$$banner" | sed s/./=/g`; \
|
||||||
echo; \
|
echo; \
|
||||||
echo "$$dashes"; \
|
echo "$$dashes"; \
|
||||||
@ -161,46 +160,53 @@ check-local: check-regression check-loadavg
|
|||||||
echo "$$dashes"; \
|
echo "$$dashes"; \
|
||||||
echo
|
echo
|
||||||
|
|
||||||
.PHONY: check-loadavg check-regression
|
|
||||||
|
|
||||||
check-loadavg: loadavg$(EXEEXT)
|
|
||||||
@echo The system uptime program believes the load average to be:
|
|
||||||
-uptime
|
|
||||||
@echo The GNU load average checking code thinks:
|
|
||||||
-./loadavg$(EXEEXT)
|
|
||||||
|
|
||||||
# The loadavg function is invoked during "make check" to test getloadavg.
|
|
||||||
check_PROGRAMS = loadavg
|
|
||||||
nodist_loadavg_SOURCES = getloadavg.c
|
|
||||||
loadavg_CPPFLAGS = -DTEST
|
|
||||||
loadavg_LDADD = @GETLOADAVG_LIBS@
|
|
||||||
|
|
||||||
# > check-regression
|
# > check-regression
|
||||||
#
|
#
|
||||||
# Look for the make test suite, and run it if found and we can find perl.
|
# Look for the make test suite, and run it if found and we can find perl.
|
||||||
# If we're building outside the tree, we use symlinks to make a local copy of
|
|
||||||
# the test suite. Unfortunately the test suite itself isn't localizable yet.
|
|
||||||
#
|
#
|
||||||
MAKETESTFLAGS =
|
MAKETESTFLAGS =
|
||||||
|
|
||||||
check-regression:
|
.PHONY: check-regression
|
||||||
@if test -f '$(srcdir)/tests/run_make_tests'; then \
|
|
||||||
|
GMK_OUTDIR = ..
|
||||||
|
|
||||||
|
testlog = test-suite.log
|
||||||
|
testresult = tests/.test-result
|
||||||
|
errorpre = makeerror-$(PACKAGE_VERSION)-$(host_triplet)
|
||||||
|
|
||||||
|
testfiles = $(testlog) $(testresult) $(errorfile)
|
||||||
|
MOSTLYCLEANFILES = $(testfiles)
|
||||||
|
|
||||||
|
errordetails = config.status config.log src/config.h src/mkconfig.h \
|
||||||
|
$(testlog) tests/work
|
||||||
|
|
||||||
|
# Create a 4-letter random sequence
|
||||||
|
rand_value = c = "abcdefghijklmnopqrstuvwxyz0123456789"
|
||||||
|
rand_char = substr(c,int(rand()*36),1)
|
||||||
|
rand_string = $(AWK) 'BEGIN{srand(); $(rand_value); print $(rand_char) "" $(rand_char) "" $(rand_char) "" $(rand_char);}'
|
||||||
|
|
||||||
|
check-regression: tests/config-flags.pm
|
||||||
|
$(AM_V_at) rm -f $(testfiles)
|
||||||
|
$(AM_V_at) if test -f '$(top_srcdir)/tests/run_make_tests.pl'; then \
|
||||||
|
ulimit -n 128; \
|
||||||
if $(PERL) -v >/dev/null 2>&1; then \
|
if $(PERL) -v >/dev/null 2>&1; then \
|
||||||
case `cd '$(srcdir)'; pwd` in `pwd`) : ;; \
|
echo "cd tests && $(PERL) $(PERLFLAGS) $(abs_top_srcdir)/tests/run_make_tests.pl -make $(GMK_OUTDIR)/make$(EXEEXT) $(MAKETESTFLAGS)"; \
|
||||||
*) test -d tests || mkdir tests; \
|
(cd tests && $(PERL) $(PERLFLAGS) '$(abs_top_srcdir)/tests/run_make_tests.pl' -make '$(GMK_OUTDIR)/make$(EXEEXT)' $(MAKETESTFLAGS); echo $$? >.test-result) 2>&1 | tee $(testlog); \
|
||||||
rm -f srctests; \
|
export TAR_OPTIONS='$(filter-out --sort%,$(TAR_OPTIONS))'; \
|
||||||
if ln -s '$(srcdir)/tests' srctests; then \
|
er=$$(cat $(testresult)); if test "$$er" -ne 0; then \
|
||||||
for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \
|
dirnm="$(errorpre)-$$($(rand_string))"; fnm="$$dirnm.tar.gz"; \
|
||||||
rm -f tests/$$f; ln -s ../srctests/$$f tests; \
|
rm -rf "$$dirnm"; mkdir "$$dirnm"; \
|
||||||
done; fi ;; \
|
$(AMTAR) chf - $(errordetails) | (cd "$$dirnm"; $(AMTAR) xf -); \
|
||||||
esac; \
|
$(AMTAR) chf - "$$dirnm" | eval GZIP= gzip $(GZIP_ENV) -c >"$$fnm"; \
|
||||||
echo "cd tests && $(PERL) ./run_make_tests.pl -srcdir $(abs_srcdir) -make ../make$(EXEEXT) $(MAKETESTFLAGS)"; \
|
echo "*** Testing FAILED! Details: $$fnm"; \
|
||||||
cd tests && $(PERL) ./run_make_tests.pl -srcdir '$(abs_srcdir)' -make '../make$(EXEEXT)' $(MAKETESTFLAGS); \
|
echo '*** Please report to <$(PACKAGE_BUGREPORT)>'; echo; \
|
||||||
|
exit $$er; \
|
||||||
|
fi; \
|
||||||
else \
|
else \
|
||||||
echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \
|
echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \
|
||||||
fi; \
|
fi; \
|
||||||
else \
|
else \
|
||||||
echo "Can't find the GNU Make test suite ($(srcdir)/tests)."; \
|
echo "Can't find the $(PACKAGE_NAME) test suite ($(top_srcdir)/tests)."; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
308
Makefile.ami
308
Makefile.ami
@ -1,308 +0,0 @@
|
|||||||
# -*-Makefile-*- for GNU make on Amiga
|
|
||||||
#
|
|
||||||
# NOTE: If you have no 'make' program at all to process this makefile, run
|
|
||||||
# 'build.sh' instead.
|
|
||||||
#
|
|
||||||
# Copyright (C) 1995-2013 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#
|
|
||||||
# Makefile for GNU Make
|
|
||||||
#
|
|
||||||
|
|
||||||
CC = sc
|
|
||||||
RM = delete
|
|
||||||
|
|
||||||
CFLAGS =
|
|
||||||
CPPFLAGS =
|
|
||||||
LDFLAGS =
|
|
||||||
|
|
||||||
# Define these for your system as follows:
|
|
||||||
# -DNO_ARCHIVES To disable 'ar' archive support.
|
|
||||||
# -DNO_FLOAT To avoid using floating-point numbers.
|
|
||||||
# -DENUM_BITFIELDS If the compiler isn't GCC but groks enum foo:2.
|
|
||||||
# Some compilers apparently accept this
|
|
||||||
# without complaint but produce losing code,
|
|
||||||
# so beware.
|
|
||||||
# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline.
|
|
||||||
# See also 'config.h'.
|
|
||||||
defines =
|
|
||||||
|
|
||||||
# Which flavor of remote job execution support to use.
|
|
||||||
# The code is found in 'remote-$(REMOTE).c'.
|
|
||||||
REMOTE = stub
|
|
||||||
|
|
||||||
# If you are using the GNU C library, or have the GNU getopt functions in
|
|
||||||
# your C library, you can comment these out.
|
|
||||||
GETOPT = getopt.o getopt1.o
|
|
||||||
GETOPT_SRC = $(srcdir)getopt.c $(srcdir)getopt1.c $(srcdir)getopt.h
|
|
||||||
|
|
||||||
# If you are using the GNU C library, or have the GNU glob functions in
|
|
||||||
# your C library, you can comment this out. GNU make uses special hooks
|
|
||||||
# into the glob functions to be more efficient (by using make's directory
|
|
||||||
# cache for globbing), so you must use the GNU functions even if your
|
|
||||||
# system's C library has the 1003.2 glob functions already. Also, the glob
|
|
||||||
# functions in the AIX and HPUX C libraries are said to be buggy.
|
|
||||||
GLOB = glob/glob.lib
|
|
||||||
|
|
||||||
# If your system doesn't have alloca, or the one provided is bad, define this.
|
|
||||||
ALLOCA = alloca.o
|
|
||||||
ALLOCA_SRC = $(srcdir)alloca.c
|
|
||||||
|
|
||||||
# If your system needs extra libraries loaded in, define them here.
|
|
||||||
# System V probably need -lPW for alloca. HP-UX 7.0's alloca in
|
|
||||||
# libPW.a is broken on HP9000s300 and HP9000s400 machines. Use
|
|
||||||
# alloca.c instead on those machines.
|
|
||||||
LOADLIBES =
|
|
||||||
|
|
||||||
# Any extra object files your system needs.
|
|
||||||
extras = amiga.o
|
|
||||||
|
|
||||||
# Common prefix for machine-independent installed files.
|
|
||||||
prefix =
|
|
||||||
# Common prefix for machine-dependent installed files.
|
|
||||||
exec_prefix =
|
|
||||||
|
|
||||||
# Directory to install 'make' in.
|
|
||||||
bindir = sc:c
|
|
||||||
# Directory to find libraries in for '-lXXX'.
|
|
||||||
libdir = lib:
|
|
||||||
# Directory to search by default for included makefiles.
|
|
||||||
includedir = include:
|
|
||||||
# Directory to install the Info files in.
|
|
||||||
infodir = doc:
|
|
||||||
# Directory to install the man page in.
|
|
||||||
mandir = t:
|
|
||||||
# Number to put on the man page filename.
|
|
||||||
manext = 1
|
|
||||||
# Prefix to put on installed 'make' binary file name.
|
|
||||||
binprefix =
|
|
||||||
# Prefix to put on installed 'make' man page file name.
|
|
||||||
manprefix = $(binprefix)
|
|
||||||
|
|
||||||
# Whether or not make needs to be installed setgid.
|
|
||||||
# The value should be either 'true' or 'false'.
|
|
||||||
# On many systems, the getloadavg function (used to implement the '-l'
|
|
||||||
# switch) will not work unless make is installed setgid kmem.
|
|
||||||
install_setgid = false
|
|
||||||
# Install make setgid to this group so it can read /dev/kmem.
|
|
||||||
group = sys
|
|
||||||
|
|
||||||
# Program to install 'make'.
|
|
||||||
INSTALL_PROGRAM = copy
|
|
||||||
# Program to install the man page.
|
|
||||||
INSTALL_DATA = copy
|
|
||||||
# Generic install program.
|
|
||||||
INSTALL = copy
|
|
||||||
|
|
||||||
# Program to format Texinfo source into Info files.
|
|
||||||
MAKEINFO = makeinfo
|
|
||||||
# Program to format Texinfo source into DVI files.
|
|
||||||
TEXI2DVI = texi2dvi
|
|
||||||
|
|
||||||
# Programs to make tags files.
|
|
||||||
ETAGS = etags -w
|
|
||||||
CTAGS = ctags -w
|
|
||||||
|
|
||||||
#guile = guile.o
|
|
||||||
|
|
||||||
objs = commands.o job.o dir.o file.o misc.o main.o read.o remake.o \
|
|
||||||
rule.o implicit.o default.o variable.o expand.o function.o \
|
|
||||||
vpath.o version.o ar.o arscan.o signame.o strcache.o hash.o \
|
|
||||||
remote-$(REMOTE).o $(GETOPT) $(ALLOCA) $(extras) $(guile)
|
|
||||||
|
|
||||||
srcs = $(srcdir)commands.c $(srcdir)job.c $(srcdir)dir.c \
|
|
||||||
$(srcdir)file.c $(srcdir)getloadavg.c $(srcdir)misc.c \
|
|
||||||
$(srcdir)main.c $(srcdir)read.c $(srcdir)remake.c \
|
|
||||||
$(srcdir)rule.c $(srcdir)implicit.c $(srcdir)default.c \
|
|
||||||
$(srcdir)variable.c $(srcdir)expand.c $(srcdir)function.c \
|
|
||||||
$(srcdir)vpath.c $(srcdir)version.c $(srcdir)hash.c \
|
|
||||||
$(srcdir)guile.c $(srcdir)remote-$(REMOTE).c \
|
|
||||||
$(srcdir)ar.c $(srcdir)arscan.c $(srcdir)strcache.c \
|
|
||||||
$(srcdir)signame.c $(srcdir)signame.h $(GETOPT_SRC) \
|
|
||||||
$(srcdir)commands.h $(srcdir)dep.h $(srcdir)filedep.h \
|
|
||||||
$(srcdir)job.h $(srcdir)makeint.h $(srcdir)rule.h \
|
|
||||||
$(srcdir)variable.h $(ALLOCA_SRC) $(srcdir)config.h.in
|
|
||||||
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
.SUFFIXES: .o .c .h .ps .dvi .info .texinfo
|
|
||||||
|
|
||||||
all: make
|
|
||||||
info: make.info
|
|
||||||
dvi: make.dvi
|
|
||||||
# Some makes apparently use .PHONY as the default goal if it is before 'all'.
|
|
||||||
.PHONY: all check info dvi
|
|
||||||
|
|
||||||
make.info: make.texinfo
|
|
||||||
$(MAKEINFO) -I$(srcdir) $(srcdir)make.texinfo -o make.info
|
|
||||||
|
|
||||||
make.dvi: make.texinfo
|
|
||||||
$(TEXI2DVI) $(srcdir)make.texinfo
|
|
||||||
|
|
||||||
make.ps: make.dvi
|
|
||||||
dvi2ps make.dvi > make.ps
|
|
||||||
|
|
||||||
make: $(objs) $(GLOB)
|
|
||||||
$(CC) Link $(LDFLAGS) $(objs) Lib $(GLOB) $(LOADLIBES) To make.new
|
|
||||||
-delete make
|
|
||||||
rename make.new make
|
|
||||||
|
|
||||||
TMPFILE = t:Make$$
|
|
||||||
|
|
||||||
$(GLOB):
|
|
||||||
cd glob @@\
|
|
||||||
$(MAKE) -$(MAKEFLAGS) -f Makefile
|
|
||||||
|
|
||||||
# -I. is needed to find config.h in the build directory.
|
|
||||||
OUTPUT_OPTION =
|
|
||||||
.c.o:
|
|
||||||
$(CC) $(defines) IDir "" IDir glob \
|
|
||||||
$(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)
|
|
||||||
|
|
||||||
# For some losing Unix makes.
|
|
||||||
SHELL = /bin/sh
|
|
||||||
#@SET_MAKE@
|
|
||||||
|
|
||||||
glob/libglob.a: FORCE config.h
|
|
||||||
cd glob; $(MAKE) libglob.a
|
|
||||||
FORCE:
|
|
||||||
|
|
||||||
.PHONY: install installdirs
|
|
||||||
install: installdirs \
|
|
||||||
$(bindir)$(binprefix)make $(infodir)make.info \
|
|
||||||
$(mandir)$(manprefix)make.$(manext)
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(SHELL) ${srcdir}/mkinstalldirs $(bindir) $(infodir) $(mandir)
|
|
||||||
|
|
||||||
$(bindir)$(binprefix)make: make
|
|
||||||
$(INSTALL_PROGRAM) make $@.new
|
|
||||||
@if $(install_setgid); then \
|
|
||||||
if chgrp $(group) $@.new && chmod g+s $@.new; then \
|
|
||||||
echo "chgrp $(group) $@.new && chmod g+s $@.new"; \
|
|
||||||
else \
|
|
||||||
echo "$@ needs to be owned by group $(group) and setgid;"; \
|
|
||||||
echo "otherwise the '-l' option will probably not work."; \
|
|
||||||
echo "You may need special privileges to install $@."; \
|
|
||||||
fi; \
|
|
||||||
else true; fi
|
|
||||||
# Some systems can't deal with renaming onto a running binary.
|
|
||||||
-$(RM) $@.old
|
|
||||||
-mv $@ $@.old
|
|
||||||
mv $@.new $@
|
|
||||||
|
|
||||||
$(infodir)make.info: make.info
|
|
||||||
if [ -r ./make.info ]; then dir=.; else dir=$(srcdir); fi; \
|
|
||||||
for file in $${dir}/make.info*; do \
|
|
||||||
name="`basename $$file`"; \
|
|
||||||
$(INSTALL_DATA) $$file \
|
|
||||||
`echo $@ | sed "s,make.info\$$,$$name,"`; \
|
|
||||||
done
|
|
||||||
# Run install-info only if it exists.
|
|
||||||
# Use 'if' instead of just prepending '-' to the
|
|
||||||
# line so we notice real errors from install-info.
|
|
||||||
# We use '$(SHELL) -c' because some shells do not
|
|
||||||
# fail gracefully when there is an unknown command.
|
|
||||||
if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
|
||||||
if [ -r ./make.info ]; then dir=.; else dir=$(srcdir); fi; \
|
|
||||||
install-info --infodir=$(infodir) $$dir/make.info; \
|
|
||||||
else true; fi
|
|
||||||
|
|
||||||
$(mandir)$(manprefix)make.$(manext): make.man
|
|
||||||
$(INSTALL_DATA) $(srcdir)make.man $@
|
|
||||||
|
|
||||||
|
|
||||||
loadavg: loadavg.c config.h
|
|
||||||
$(CC) $(defines) -DTEST -I. -I$(srcdir) $(CFLAGS) $(LDFLAGS) \
|
|
||||||
loadavg.c $(LOADLIBES) -o $@
|
|
||||||
# We copy getloadavg.c into a different file rather than compiling it
|
|
||||||
# directly because some compilers clobber getloadavg.o in the process.
|
|
||||||
loadavg.c: getloadavg.c
|
|
||||||
ln $(srcdir)getloadavg.c loadavg.c || \
|
|
||||||
cp $(srcdir)getloadavg.c loadavg.c
|
|
||||||
check-loadavg: loadavg
|
|
||||||
@echo The system uptime program believes the load average to be:
|
|
||||||
-uptime
|
|
||||||
@echo The GNU load average checking code believes:
|
|
||||||
./loadavg
|
|
||||||
check: check-loadavg
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: clean realclean distclean mostlyclean
|
|
||||||
clean: glob-clean
|
|
||||||
-$(RM) make loadavg "#?.o" core make.dvi
|
|
||||||
|
|
||||||
distclean: clean glob-realclean
|
|
||||||
-$(RM) Makefile config.h config.status build.sh
|
|
||||||
-$(RM) config.log config.cache
|
|
||||||
-$(RM) TAGS tags
|
|
||||||
-$(RM) make.?? make.??s make.log make.toc make.*aux
|
|
||||||
-$(RM) loadavg.c
|
|
||||||
|
|
||||||
realclean: distclean
|
|
||||||
-$(RM) make.info*
|
|
||||||
mostlyclean: clean
|
|
||||||
|
|
||||||
.PHONY: glob-clean glob-realclean
|
|
||||||
glob-clean glob-realclean:
|
|
||||||
cd glob @@\
|
|
||||||
$(MAKE) $@
|
|
||||||
|
|
||||||
# This tells versions [3.59,3.63) of GNU make not to export all variables.
|
|
||||||
.NOEXPORT:
|
|
||||||
|
|
||||||
# The automatically generated dependencies below may omit config.h
|
|
||||||
# because it is included with '#include <config.h>' rather than
|
|
||||||
# '#include "config.h"'. So we add the explicit dependency to make sure.
|
|
||||||
$(objs): config.h
|
|
||||||
|
|
||||||
# Automatically generated dependencies will be put at the end of the file.
|
|
||||||
|
|
||||||
# Automatically generated dependencies.
|
|
||||||
commands.o: commands.c makeint.h dep.h filedef.h variable.h job.h \
|
|
||||||
commands.h
|
|
||||||
job.o: job.c makeint.h job.h filedef.h commands.h variable.h
|
|
||||||
dir.o: dir.c makeint.h
|
|
||||||
file.o: file.c makeint.h dep.h filedef.h job.h commands.h variable.h
|
|
||||||
misc.o: misc.c makeint.h dep.h
|
|
||||||
main.o: main.c makeint.h dep.h filedef.h variable.h job.h commands.h \
|
|
||||||
getopt.h
|
|
||||||
guile.o: guile.c makeint.h dep.h debug.h variable.h gmk-default.h
|
|
||||||
read.o: read.c makeint.h dep.h filedef.h job.h commands.h variable.h \
|
|
||||||
glob/glob.h
|
|
||||||
remake.o: remake.c makeint.h filedef.h job.h commands.h dep.h
|
|
||||||
rule.o: rule.c makeint.h dep.h filedef.h job.h commands.h variable.h \
|
|
||||||
rule.h
|
|
||||||
implicit.o: implicit.c makeint.h rule.h dep.h filedef.h
|
|
||||||
default.o: default.c makeint.h rule.h dep.h filedef.h job.h commands.h \
|
|
||||||
variable.h
|
|
||||||
variable.o: variable.c makeint.h dep.h filedef.h job.h commands.h \
|
|
||||||
variable.h
|
|
||||||
expand.o: expand.c makeint.h filedef.h job.h commands.h variable.h
|
|
||||||
function.o: function.c makeint.h filedef.h variable.h dep.h job.h \
|
|
||||||
commands.h amiga.h
|
|
||||||
vpath.o: vpath.c makeint.h filedef.h variable.h
|
|
||||||
strcache.o: strcache.c makeint.h hash.h
|
|
||||||
version.o: version.c
|
|
||||||
ar.o: ar.c makeint.h filedef.h dep.h
|
|
||||||
arscan.o: arscan.c makeint.h
|
|
||||||
signame.o: signame.c signame.h
|
|
||||||
remote-stub.o: remote-stub.c makeint.h filedef.h job.h commands.h
|
|
||||||
getopt.o: getopt.c
|
|
||||||
getopt1.o : getopt1.c getopt.h
|
|
||||||
getloadavg.o: getloadavg.c
|
|
||||||
amiga.o: amiga.c makeint.h variable.h amiga.h
|
|
@ -1,125 +0,0 @@
|
|||||||
# -*-Makefile-*- to build GNU make with nmake
|
|
||||||
#
|
|
||||||
# NOTE: If you have no 'make' program at all to process this makefile,
|
|
||||||
# run 'build_w32.bat' instead.
|
|
||||||
#
|
|
||||||
# Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
LINK = link
|
|
||||||
CC = cl
|
|
||||||
MAKE = nmake
|
|
||||||
|
|
||||||
OUTDIR=.
|
|
||||||
MAKEFILE=NMakefile
|
|
||||||
SUBPROC_MAKEFILE=NMakefile
|
|
||||||
|
|
||||||
CFLAGS_any = /nologo /MT /W4 /GX /Zi /YX /I . /I glob /I w32/include /D WIN32 /D WINDOWS32 /D _CONSOLE /D HAVE_CONFIG_H
|
|
||||||
CFLAGS_debug = $(CFLAGS_any) /Od /D DEBUG /D _DEBUG /FR.\WinDebug/ /Fp.\WinDebug/make.pch /Fo.\WinDebug/ /Fd.\WinDebug/make.pdb
|
|
||||||
CFLAGS_release = $(CFLAGS_any) /O2 /D NDEBUG /FR.\WinRel/ /Fp.\WinRel/make.pch /Fo.\WinRel/
|
|
||||||
|
|
||||||
LDFLAGS_debug = w32\subproc\WinDebug\subproc.lib /NOLOGO /SUBSYSTEM:console\
|
|
||||||
/INCREMENTAL:no /PDB:WinDebug/make.pdb /OUT:WinDebug/make.exe /DEBUG
|
|
||||||
LDFLAGS_release = w32\subproc\WinRel\subproc.lib /NOLOGO /SUBSYSTEM:console\
|
|
||||||
/INCREMENTAL:no /OUT:WinRel/make.exe
|
|
||||||
|
|
||||||
all: config.h subproc Release Debug
|
|
||||||
|
|
||||||
#
|
|
||||||
# Make sure we build the subproc library first. It has it's own
|
|
||||||
# makefile. To be portable to Windows 95, we put the instructions
|
|
||||||
# on how to build the library into a batch file. On NT, we could
|
|
||||||
# simply have done foo && bar && dog, but this doesn't port.
|
|
||||||
#
|
|
||||||
subproc: w32/subproc/WinDebug/subproc.lib w32/subproc/WinRel/subproc.lib
|
|
||||||
|
|
||||||
w32/subproc/WinDebug/subproc.lib w32/subproc/WinRel/subproc.lib: w32/subproc/misc.c w32/subproc/sub_proc.c w32/subproc/w32err.c
|
|
||||||
subproc.bat $(SUBPROC_MAKEFILE) $(MAKE)
|
|
||||||
if exist WinDebug\make.exe erase WinDebug\make.exe
|
|
||||||
if exist WinRel\make.exe erase WinRel\make.exe
|
|
||||||
|
|
||||||
config.h: config.h.W32
|
|
||||||
copy $? $@
|
|
||||||
|
|
||||||
Release:
|
|
||||||
$(MAKE) /f $(MAKEFILE) LDFLAGS="$(LDFLAGS_release)" CFLAGS="$(CFLAGS_release)" OUTDIR=WinRel WinRel/make.exe
|
|
||||||
Debug:
|
|
||||||
$(MAKE) /f $(MAKEFILE) LDFLAGS="$(LDFLAGS_debug)" CFLAGS="$(CFLAGS_debug)" OUTDIR=WinDebug WinDebug/make.exe
|
|
||||||
|
|
||||||
clean:
|
|
||||||
if exist WinDebug\nul rmdir /s /q WinDebug
|
|
||||||
if exist WinRel\nul rmdir /s /q WinRel
|
|
||||||
if exist w32\subproc\WinDebug\nul rmdir /s /q w32\subproc\WinDebug
|
|
||||||
if exist w32\subproc\WinRel\nul rmdir /s /q w32\subproc\WinRel
|
|
||||||
if exist config.h erase config.h
|
|
||||||
erase *.pdb
|
|
||||||
|
|
||||||
$(OUTDIR):
|
|
||||||
if not exist .\$@\nul mkdir .\$@
|
|
||||||
|
|
||||||
LIBS = kernel32.lib user32.lib advapi32.lib
|
|
||||||
|
|
||||||
#guile = $(OUTDIR)/guile.obj
|
|
||||||
|
|
||||||
OBJS = \
|
|
||||||
$(OUTDIR)/ar.obj \
|
|
||||||
$(OUTDIR)/arscan.obj \
|
|
||||||
$(OUTDIR)/commands.obj \
|
|
||||||
$(OUTDIR)/default.obj \
|
|
||||||
$(OUTDIR)/dir.obj \
|
|
||||||
$(OUTDIR)/expand.obj \
|
|
||||||
$(OUTDIR)/file.obj \
|
|
||||||
$(OUTDIR)/function.obj \
|
|
||||||
$(OUTDIR)/getloadavg.obj \
|
|
||||||
$(OUTDIR)/getopt.obj \
|
|
||||||
$(OUTDIR)/getopt1.obj \
|
|
||||||
$(OUTDIR)/hash.obj \
|
|
||||||
$(OUTDIR)/implicit.obj \
|
|
||||||
$(OUTDIR)/job.obj \
|
|
||||||
$(OUTDIR)/main.obj \
|
|
||||||
$(OUTDIR)/misc.obj \
|
|
||||||
$(OUTDIR)/output.obj \
|
|
||||||
$(OUTDIR)/read.obj \
|
|
||||||
$(OUTDIR)/remake.obj \
|
|
||||||
$(OUTDIR)/remote-stub.obj \
|
|
||||||
$(OUTDIR)/rule.obj \
|
|
||||||
$(OUTDIR)/signame.obj \
|
|
||||||
$(OUTDIR)/strcache.obj \
|
|
||||||
$(OUTDIR)/variable.obj \
|
|
||||||
$(OUTDIR)/version.obj \
|
|
||||||
$(OUTDIR)/vpath.obj \
|
|
||||||
$(OUTDIR)/glob.obj \
|
|
||||||
$(OUTDIR)/fnmatch.obj \
|
|
||||||
$(OUTDIR)/dirent.obj \
|
|
||||||
$(OUTDIR)/pathstuff.obj \
|
|
||||||
$(guile)
|
|
||||||
|
|
||||||
$(OUTDIR)/make.exe: $(OUTDIR) $(OBJS)
|
|
||||||
$(LINK) @<<
|
|
||||||
$(LDFLAGS) $(LIBS) $(OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(OUTDIR)}.obj:
|
|
||||||
$(CC) $(CFLAGS) /c $<
|
|
||||||
|
|
||||||
$(OUTDIR)/glob.obj : glob/glob.c
|
|
||||||
$(CC) $(CFLAGS) /c $?
|
|
||||||
$(OUTDIR)/fnmatch.obj : glob/fnmatch.c
|
|
||||||
$(CC) $(CFLAGS) /c $?
|
|
||||||
$(OUTDIR)/dirent.obj : w32/compat/dirent.c
|
|
||||||
$(CC) $(CFLAGS) /c $?
|
|
||||||
$(OUTDIR)/pathstuff.obj : w32/pathstuff.c
|
|
||||||
$(CC) $(CFLAGS) /c $?
|
|
77
README.Amiga
77
README.Amiga
@ -1,77 +0,0 @@
|
|||||||
Short: Port of GNU make with SAS/C (no ixemul.library required)
|
|
||||||
Author: GNU, Amiga port by Aaron "Optimizer" Digulla
|
|
||||||
Uploader: Aaron "Optimizer" Digulla (digulla@fh-konstanz.de)
|
|
||||||
Type: dev/c
|
|
||||||
|
|
||||||
This is a pure Amiga port of GNU make. It needs no extra libraries or
|
|
||||||
anything. It has the following features (in addition to any features of
|
|
||||||
GNU make):
|
|
||||||
|
|
||||||
- Runs Amiga-Commands with SystemTags() (Execute)
|
|
||||||
- Can run multi-line statements
|
|
||||||
- Allows to use Device-Names in targets:
|
|
||||||
|
|
||||||
c:make : make.o
|
|
||||||
|
|
||||||
is ok. To distinguish between device-names and target : or ::, MAKE
|
|
||||||
looks for spaces. If there are any around :, it's taken as a target
|
|
||||||
delimiter, if there are none, it's taken as the name of a device. Note
|
|
||||||
that "make:make.o" tries to create "make.o" on the device "make:".
|
|
||||||
- Replaces @@ by a newline in any command line:
|
|
||||||
|
|
||||||
if exists make @@\
|
|
||||||
delete make.bak quiet @@\
|
|
||||||
rename make make.bak @@\
|
|
||||||
endif @@\
|
|
||||||
$(CC) Link Make.o To make
|
|
||||||
|
|
||||||
works. Note that the @@ must stand alone (i.e., "make@@\" is illegal).
|
|
||||||
Also be careful that there is a space after the "\" (i.e., at the
|
|
||||||
beginning of the next line).
|
|
||||||
- Can be made resident to save space and time
|
|
||||||
- Amiga specific wildcards can be used in $(wildcard ...)
|
|
||||||
|
|
||||||
BUGS:
|
|
||||||
- The line
|
|
||||||
|
|
||||||
dummy.h : src/*.c
|
|
||||||
|
|
||||||
tries to make dummy.h from "src/*.c" (i.e., no wildcard-expansion takes
|
|
||||||
place). You have to use "$(wildcard src/*.c)" instead.
|
|
||||||
|
|
||||||
COMPILING FROM SCRATCH
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
To recompile, you need SAS/C 6.51. make itself is not necessary, there
|
|
||||||
is an smakefile.
|
|
||||||
|
|
||||||
1. Copy config.ami to config.h
|
|
||||||
2. If you use make to compile, copy Makefile.ami to Makefile and
|
|
||||||
glob/Makefile.ami to glob/Makefile. Copy make into the current
|
|
||||||
directory.
|
|
||||||
|
|
||||||
3. Run smake/make
|
|
||||||
|
|
||||||
INSTALLATION
|
|
||||||
|
|
||||||
Copy make somewhere in your search path (e.g., sc:c or sc:bin).
|
|
||||||
If you plan to use recursive makes, install make resident:
|
|
||||||
|
|
||||||
Resident make Add
|
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Copyright (C) 1995-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
@ -27,8 +27,8 @@ New (since 3.74) DOS-specific features:
|
|||||||
8. Can be built without (a previous version of) Make.
|
8. Can be built without (a previous version of) Make.
|
||||||
|
|
||||||
9. The build process requires only standard tools. (Optional
|
9. The build process requires only standard tools. (Optional
|
||||||
targets like "install:" and "clean:" still need additional
|
targets like "check:" still need additional programs, though,
|
||||||
programs, though, see below.)
|
see below.)
|
||||||
|
|
||||||
10. Beginning with v3.78, the test suite works in the DJGPP
|
10. Beginning with v3.78, the test suite works in the DJGPP
|
||||||
environment (requires Perl and auxiliary tools; see below).
|
environment (requires Perl and auxiliary tools; see below).
|
||||||
@ -55,78 +55,34 @@ To build from sources:
|
|||||||
either DJTAR (which is part of the DJGPP development
|
either DJTAR (which is part of the DJGPP development
|
||||||
environment), or the DJGPP port of GNU Tar.
|
environment), or the DJGPP port of GNU Tar.
|
||||||
|
|
||||||
2. Invoke the 'configure.bat' batch file.
|
2. If you have a working Make already, you can run:
|
||||||
|
|
||||||
If you are building Make in-place, i.e. in the same directory
|
make -f Basic.mk
|
||||||
where its sources are kept, just type "configure.bat" and press
|
|
||||||
[Enter]. Otherwise, you need to supply the path to the source
|
|
||||||
directory as an argument to the batch file, like this:
|
|
||||||
|
|
||||||
c:\djgpp\gnu\make-%VERSION%\configure.bat c:/djgpp/gnu/make-%VERSION%
|
3. If you don't have a working Make already you can bootstrap one
|
||||||
|
by running:
|
||||||
|
|
||||||
Note the forward slashes in the source path argument: you MUST
|
.\builddos.bat
|
||||||
use them here.
|
|
||||||
|
|
||||||
3. If configure.bat doesn't find a working Make, it will suggest to
|
4. If you are building from outside of the source directory, you
|
||||||
use the 'dosbuild.bat' batch file to build Make. Either do as it
|
|
||||||
suggests or install another Make program (a pre-compiled binary
|
|
||||||
should be available from the usual DJGPP sites) and rerun
|
|
||||||
configure.bat.
|
|
||||||
|
|
||||||
4. If you will need to run Make on machines without an FPU, you
|
|
||||||
might consider building a version of Make which doesn't issue
|
|
||||||
floating-point instructions (they don't help much on MSDOS
|
|
||||||
anyway). To this end, edit the Makefile created by
|
|
||||||
configure.bat and add -DNO_FLOAT to the value of CPPFLAGS.
|
|
||||||
|
|
||||||
5. Invoke Make.
|
|
||||||
|
|
||||||
If you are building from outside of the source directory, you
|
|
||||||
need to tell Make where the sources are, like this:
|
need to tell Make where the sources are, like this:
|
||||||
|
|
||||||
make srcdir=c:/djgpp/gnu/make-%VERSION%
|
make -f c:/djgpp/gnu/make/Basic.mk SRCDIR=c:/djgpp/gnu/make
|
||||||
|
|
||||||
(configure.bat will tell you this when it finishes). You MUST
|
or:
|
||||||
use a full, not relative, name of the source directory here, or
|
|
||||||
else Make might fail.
|
|
||||||
|
|
||||||
6. After Make finishes, if you have a Unix-style shell installed,
|
c:/djgpp/gnu/make/builddos.bat c:/djgpp/gnu/make
|
||||||
you can use the 'install' target to install the package. You
|
|
||||||
will also need GNU Fileutils and GNU Sed for this (they should
|
|
||||||
be available from the DJGPP sites).
|
|
||||||
|
|
||||||
By default, GNU make will install into your DJGPP installation
|
5. To run the test suite, type "make check". This requires a Unix
|
||||||
area. If you wish to use a different directory, override the
|
|
||||||
DESTDIR variable when invoking "make install", like this:
|
|
||||||
|
|
||||||
make install DESTDIR=c:/other/dir
|
|
||||||
|
|
||||||
This causes the make executable to be placed in c:/other/dir/bin,
|
|
||||||
the man pages in c:/other/dir/man, etc.
|
|
||||||
|
|
||||||
Without a Unix-style shell, you will have to install programs
|
|
||||||
and the docs manually. Copy make.exe to a directory on your
|
|
||||||
PATH, make.i* info files to your Info directory, and update the
|
|
||||||
file 'dir' in your Info directory by adding the following item
|
|
||||||
to the main menu:
|
|
||||||
|
|
||||||
* Make: (make.info). The GNU make utility.
|
|
||||||
|
|
||||||
If you have the 'install-info' program (from the GNU Texinfo
|
|
||||||
package), it will do that for you if you invoke it like this:
|
|
||||||
|
|
||||||
install-info --info-dir=c:/djgpp/info c:/djgpp/info/make.info
|
|
||||||
|
|
||||||
(If your Info directory is other than C:\DJGPP\INFO, change this
|
|
||||||
command accordingly.)
|
|
||||||
|
|
||||||
7. The 'clean' targets also require Unix-style shell, and GNU Sed
|
|
||||||
and 'rm' programs (the latter from Fileutils).
|
|
||||||
|
|
||||||
8. To run the test suite, type "make check". This requires a Unix
|
|
||||||
shell (I used the DJGPP port of Bash 2.03), Perl, Sed, Fileutils
|
shell (I used the DJGPP port of Bash 2.03), Perl, Sed, Fileutils
|
||||||
and Sh-utils.
|
and Sh-utils.
|
||||||
|
|
||||||
|
6. To install copy make.exe to the preferred location.
|
||||||
|
|
||||||
|
Since GNU Make 4.3, support for customized platform installations
|
||||||
|
has been removed. If you'd like to collaborate on reinstating
|
||||||
|
these capabilities, contact bug-make@gnu.org.
|
||||||
|
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
-----
|
-----
|
||||||
@ -324,7 +280,7 @@ Bug reports:
|
|||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
Copyright (C) 1996-2024 Free Software Foundation, Inc.
|
||||||
This file is part of GNU Make.
|
This file is part of GNU Make.
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
@ -337,4 +293,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
@ -1,6 +1,6 @@
|
|||||||
Port of GNU make to OS/2.
|
Port of GNU Make to OS/2.
|
||||||
|
|
||||||
Features of GNU make that do not work under OS/2:
|
Features of GNU Make that do not work under OS/2:
|
||||||
- remote job execution
|
- remote job execution
|
||||||
- dynamic load balancing
|
- dynamic load balancing
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ Special features of the OS/2 version:
|
|||||||
|
|
||||||
Due to the fact that some people might want to use sh syntax in
|
Due to the fact that some people might want to use sh syntax in
|
||||||
Makefiles while others might want to use OS/2's native shell cmd.exe,
|
Makefiles while others might want to use OS/2's native shell cmd.exe,
|
||||||
GNU make supports both shell types. The following list defines the order
|
GNU Make supports both shell types. The following list defines the order
|
||||||
that is used to determine the shell:
|
that is used to determine the shell:
|
||||||
|
|
||||||
1. The shell specified by the environment variable MAKESHELL.
|
1. The shell specified by the environment variable MAKESHELL.
|
||||||
@ -37,7 +37,7 @@ I. ***** SPECIAL OPTIONS *****
|
|||||||
cmd or by specifying SHELL=cmd in your Makefile.
|
cmd or by specifying SHELL=cmd in your Makefile.
|
||||||
|
|
||||||
- At compile time you can set CPPFLAGS="-DNO_CHDIR2" to turn off that
|
- At compile time you can set CPPFLAGS="-DNO_CHDIR2" to turn off that
|
||||||
GNU make prints drive letters. This is necessary if you want to run
|
GNU Make prints drive letters. This is necessary if you want to run
|
||||||
the testsuite.
|
the testsuite.
|
||||||
|
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ A standard Unix like build environment:
|
|||||||
release 2)
|
release 2)
|
||||||
If you use pdksh it is recommended to update to 5.2.14 release 2. Older
|
If you use pdksh it is recommended to update to 5.2.14 release 2. Older
|
||||||
versions may not work! You can get this version at
|
versions may not work! You can get this version at
|
||||||
http://www.math.ohio-state.edu/~ilya/software/os2/pdksh-5.2.14-bin-2.zip
|
https://www.math.ohio-state.edu/~ilya/software/os2/pdksh-5.2.14-bin-2.zip
|
||||||
- GNU file utilities (make sure that install.exe from the file utilities
|
- GNU file utilities (make sure that install.exe from the file utilities
|
||||||
is in front of your PATH before X:\OS2\INSTALL\INSTALL.EXE. I recommend
|
is in front of your PATH before X:\OS2\INSTALL\INSTALL.EXE. I recommend
|
||||||
also to change the filename to ginstall.exe instead of install.exe
|
also to change the filename to ginstall.exe instead of install.exe
|
||||||
@ -59,7 +59,7 @@ A standard Unix like build environment:
|
|||||||
- gawk
|
- gawk
|
||||||
- grep
|
- grep
|
||||||
- sed
|
- sed
|
||||||
- GNU make 3.79.1 (special OS/2 patched version) or higher
|
- GNU Make 3.79.1 (special OS/2 patched version) or higher
|
||||||
- perl 5.005 or higher
|
- perl 5.005 or higher
|
||||||
- GNU texinfo (you can use 3.1 (gnuinfo.zip), but I recommend 4.0)
|
- GNU texinfo (you can use 3.1 (gnuinfo.zip), but I recommend 4.0)
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ III. ***** COMPILATION AND INSTALLATION *****
|
|||||||
To recreate the configuration files use:
|
To recreate the configuration files use:
|
||||||
|
|
||||||
export EMXSHELL=ksh
|
export EMXSHELL=ksh
|
||||||
aclocal -I config
|
aclocal -I m4
|
||||||
automake
|
automake
|
||||||
autoconf
|
autoconf
|
||||||
autoheader
|
autoheader
|
||||||
@ -93,7 +93,7 @@ Recommended environment variables and installation options:
|
|||||||
export CFLAGS="-O2 -Zomf -Zmt"
|
export CFLAGS="-O2 -Zomf -Zmt"
|
||||||
export LDFLAGS="-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000"
|
export LDFLAGS="-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000"
|
||||||
export RANLIB="echo"
|
export RANLIB="echo"
|
||||||
./configure --prefix=x:/usr --infodir=x:/usr/share/info --mandir=x:/usr/share/man --without-included-gettext
|
./configure --prefix=x:/usr --infodir=x:/usr/share/info --mandir=x:/usr/share/man
|
||||||
make AR=emxomfar
|
make AR=emxomfar
|
||||||
make install
|
make install
|
||||||
|
|
||||||
@ -102,18 +102,21 @@ Note: If you use gcc 2.9.x I recommend to set also LIBS="-lgcc"
|
|||||||
Note: You can add -DNO_CMD_DEFAULT and -DNO_CHDIR2 to CPPFLAGS.
|
Note: You can add -DNO_CMD_DEFAULT and -DNO_CHDIR2 to CPPFLAGS.
|
||||||
See section I. for details.
|
See section I. for details.
|
||||||
|
|
||||||
|
Note: If you use Open Watcom Linker instead of IBM Linker, remove
|
||||||
|
'-Zlinker /exepack:2' from LDFLAGS.
|
||||||
|
|
||||||
|
|
||||||
IV. ***** NLS support *****
|
IV. ***** NLS support *****
|
||||||
|
|
||||||
GNU make has NLS (National Language Support), with the following
|
GNU Make has NLS (National Language Support), with the following
|
||||||
caveats:
|
caveats:
|
||||||
|
|
||||||
a) It will only work with GNU gettext, and
|
a) It will only work with GNU gettext, and
|
||||||
b) GNU gettext support is not included in the GNU make package.
|
b) GNU gettext support is not included in the GNU Make package.
|
||||||
|
|
||||||
Therefore, if you wish to enable the internationalization features of
|
Therefore, if you wish to enable the internationalization features of
|
||||||
GNU make you must install GNU gettext on your system before configuring
|
GNU Make you must install GNU gettext on your system before configuring
|
||||||
GNU make.
|
GNU Make.
|
||||||
|
|
||||||
You can choose the languages to be installed. To install support for
|
You can choose the languages to be installed. To install support for
|
||||||
English, German and French only enter:
|
English, German and French only enter:
|
||||||
@ -138,7 +141,7 @@ testsuite itself. -DNO_CMD_DEFAULT causes make to use /bin/sh as default
|
|||||||
shell in every case. Normally you could simply set MAKESHELL="/bin/sh"
|
shell in every case. Normally you could simply set MAKESHELL="/bin/sh"
|
||||||
to do this but the testsuite ignores the environment. -DNO_CHDIR2 causes
|
to do this but the testsuite ignores the environment. -DNO_CHDIR2 causes
|
||||||
make not to use drive letters for directory names (i.e. _chdir2() and
|
make not to use drive letters for directory names (i.e. _chdir2() and
|
||||||
_getcwd2() are NOT used). The testsuite interpretes the whole output of
|
_getcwd2() are NOT used). The testsuite interprets the whole output of
|
||||||
make, especially statements like make[1]: Entering directory
|
make, especially statements like make[1]: Entering directory
|
||||||
'C:/somewhere/make-3.79.1/tests' where the testsuite does not expect the
|
'C:/somewhere/make-3.79.1/tests' where the testsuite does not expect the
|
||||||
drive letter. This would be interpreted as an error even if there is
|
drive letter. This would be interpreted as an error even if there is
|
||||||
@ -160,7 +163,7 @@ from the make source tree.
|
|||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2003-2013 Free Software Foundation, Inc.
|
Copyright (C) 2003-2024 Free Software Foundation, Inc.
|
||||||
This file is part of GNU Make.
|
This file is part of GNU Make.
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
@ -173,4 +176,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
515
README.VMS
Normal file
515
README.VMS
Normal file
@ -0,0 +1,515 @@
|
|||||||
|
Overview: -*-text-mode-*-
|
||||||
|
---------
|
||||||
|
|
||||||
|
This version of GNU Make has been tested on:
|
||||||
|
OpenVMS V8.3/V8.4 (Alpha) and V8.4 (Integrity) AND V7.3 (VAX)
|
||||||
|
|
||||||
|
This version of GNU Make is intended to be run from DCL to run
|
||||||
|
make scripts with a special syntax that is described below. It
|
||||||
|
likely will not be able to run unmodified Unix makefiles.
|
||||||
|
|
||||||
|
There is an older implementation of GNU Make that was ported to GNV.
|
||||||
|
Work is now in progress to merge that port to get a single version
|
||||||
|
of GNU Make available. When that merge is done, GNU Make will auto
|
||||||
|
detect that it is running under a POSIX shell and then operate as close to
|
||||||
|
GNU Make on Unix as possible.
|
||||||
|
|
||||||
|
The descriptions below are for running GNU Make from DCL or equivalent.
|
||||||
|
|
||||||
|
Recipe differences:
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
GNU Make for OpenVMS can not currently run native Unix make files because of
|
||||||
|
differences in the implementation.
|
||||||
|
|
||||||
|
I am trying to document the current behavior in this section. This is based
|
||||||
|
on the information in the file NEWS. and running the test suite.
|
||||||
|
TODO: More tests are needed to validate and demonstrate the OpenVMS
|
||||||
|
expected behavior.
|
||||||
|
|
||||||
|
In some cases the older behavior of GNU Make when run from DCL is not
|
||||||
|
compatible with standard makefile behavior.
|
||||||
|
|
||||||
|
This behavior can be changed when running GNU Make from DCL by setting
|
||||||
|
either DCL symbols or logical names of the format GNV$. The settings
|
||||||
|
are enabled with a string starting with one of '1', 'T', or 'E' for "1",
|
||||||
|
"TRUE", or "ENABLE". They are disabled with a '0', 'F', or 'D' for "1",
|
||||||
|
"FALSE", or "DISABLE". If they are not explicitly set to one of these
|
||||||
|
values, then they will be set to their default values.
|
||||||
|
|
||||||
|
The value of the setting DECC$FILENAME_UNIX_REPORT or
|
||||||
|
DECC$FILENAME_UNIX_ONLY will now cause the $(dir x) function to return
|
||||||
|
'./' or '[]' as appropriate.
|
||||||
|
|
||||||
|
The name GNV$MAKE_OLD_VMS when enabled will cause GNU Make to behave as
|
||||||
|
much as the older method as can be done with out disabling VMS features.
|
||||||
|
When it is disabled GNU Make have the new behavior which more closely
|
||||||
|
matches Unix Make behavior.
|
||||||
|
|
||||||
|
The default is currently the old behavior when running GNU Make from DCL.
|
||||||
|
In the future this may change. When running make from GNV Bash the new
|
||||||
|
behavior is the default.
|
||||||
|
|
||||||
|
This is a global setting that sets the default behavior for several other
|
||||||
|
options that can be individually changed. Many of the individual settings
|
||||||
|
are to make it so that the self tests for GNU Make need less VMS specific
|
||||||
|
modifications.
|
||||||
|
|
||||||
|
The name GNV$MAKE_COMMA when enabled will cause GNU Make to expect a comma
|
||||||
|
for a path separator and use a comma for the separator for a list of files.
|
||||||
|
When disabled, it will cause GNU Make to use a colon for a path separator
|
||||||
|
and a space for the separator for a list of files. The default is to be
|
||||||
|
enabled if the GNU Make is set to the older behavior.
|
||||||
|
|
||||||
|
The name GNV$MAKE_SHELL_SIM when enabled will cause GNU Make to try to
|
||||||
|
simulate a POSIX shell more closely. The following behaviors occur:
|
||||||
|
|
||||||
|
* Single quotes are converted to double quotes and any double
|
||||||
|
quotes inside of them are doubled. No environment variable expansion
|
||||||
|
is simulated.
|
||||||
|
* A exit command status will be converted to a POSIX Exit
|
||||||
|
where 0 is success and non-zero is failure.
|
||||||
|
* The $ character will cause environment variable expansion.
|
||||||
|
* Environment variables can be set on the command line before a command.
|
||||||
|
|
||||||
|
VMS generally uses logical name search lists instead of path variables
|
||||||
|
where the resolution is handled by VMS independent of the program. Which
|
||||||
|
means that it is likely that nothing will notice if the default path
|
||||||
|
specifier is changed in the future.
|
||||||
|
|
||||||
|
Currently the built in VMS specific macros and recipes depend on the comma
|
||||||
|
being used as a file list separator.
|
||||||
|
TODO: Remove this dependency as other functions in GNU Make depend on a
|
||||||
|
space being used as a separator.
|
||||||
|
|
||||||
|
The format for recipes are a combination of Unix macros, a subset of
|
||||||
|
simulated UNIX commands, some shell emulation, and OpenVMS commands.
|
||||||
|
This makes the resulting makefiles unique to the OpenVMS port of GNU Make.
|
||||||
|
|
||||||
|
If you are creating a OpenVMS specific makefile from scratch, you should also
|
||||||
|
look at MMK (Madgoat Make) available at https://github.com/endlesssoftware/mmk
|
||||||
|
MMK uses full OpenVMS syntax and a persistent sub-process is used for the
|
||||||
|
recipe lines, allowing multiple line rules.
|
||||||
|
|
||||||
|
The default makefile search order is "makefile.vms", "gnumakefile",
|
||||||
|
"makefile". TODO: See if that lookup is case sensitive.
|
||||||
|
|
||||||
|
When Make is invoked from DCL, it will create a foreign command
|
||||||
|
using the name of executable image, with any facility prefix removed,
|
||||||
|
for the duration of the make program, so it can be used internally
|
||||||
|
to recursively run make(). The macro MAKE_COMMAND will be set to
|
||||||
|
this foreign command.
|
||||||
|
|
||||||
|
When make is launched from an exec*() command from a C program,
|
||||||
|
the foreign command is not created. The macro MAKE_COMMAND will be
|
||||||
|
set to the actual command passed as argv[0] to the exec*() function.
|
||||||
|
|
||||||
|
If the DCL symbol or logical name GNV$MAKE_USE_MCR exists, then
|
||||||
|
the macro MAKE_COMMAND will be set to be an "MCR" command with the
|
||||||
|
absolute path used by DCL to launch make. The foreign command
|
||||||
|
will not be created.
|
||||||
|
|
||||||
|
The macro MAKE is set to be the same value as the macro MAKE_COMMAND
|
||||||
|
on all platforms.
|
||||||
|
|
||||||
|
Each recipe command is normally run as a separate spawned processes,
|
||||||
|
except for the cases documented below where a temporary DCL command
|
||||||
|
file may be used.
|
||||||
|
|
||||||
|
BUG: Testing has shown that the commands in the temporary command files
|
||||||
|
are not always created properly. This issue is still under investigation.
|
||||||
|
|
||||||
|
Any macros marked as exported are temporarily created as DCL symbols
|
||||||
|
for child images to use. DCL symbol substitution is not done with these
|
||||||
|
commands.
|
||||||
|
Untested: Symbol substitution.
|
||||||
|
|
||||||
|
When a temporary DCL command file is used, DCL symbol substitution
|
||||||
|
will work.
|
||||||
|
|
||||||
|
For VMS 7.3-1 and earlier, command lines are limited to 255 characters
|
||||||
|
or 1024 characters in a command file.
|
||||||
|
For VMS 7.3-2 and later, command lines are limited to 4059 characters
|
||||||
|
or 8192 characters in a command file.
|
||||||
|
|
||||||
|
VMS limits each token of a command line to 256 characters, and limits
|
||||||
|
a command line to 127 tokens.
|
||||||
|
|
||||||
|
Command lines above the limit length are written to a command file
|
||||||
|
in sys$scratch:.
|
||||||
|
|
||||||
|
In order to handle Unix style extensions to VMS DCL, GNU Make has
|
||||||
|
parsed the recipe commands and them modified them as needed. The
|
||||||
|
parser has been re-written to resolve numerous bugs in handling
|
||||||
|
valid VMS syntax and potential buffer overruns.
|
||||||
|
|
||||||
|
The new parser may need whitespace characters where DCL does not require
|
||||||
|
it, and also may require that quotes are matched were DCL forgives if
|
||||||
|
they are not. There is a small chance that existing VMS specific makefiles
|
||||||
|
will be affected.
|
||||||
|
|
||||||
|
The '<', '>' was previously implemented using command files. Now
|
||||||
|
GNU Make will check to see if the is already a VMS "PIPE" command and
|
||||||
|
if it is not, will convert the command to a VMS "PIPE" command.
|
||||||
|
|
||||||
|
The '>>' redirection has been implemented by using a temporary command file.
|
||||||
|
This will be described later.
|
||||||
|
|
||||||
|
The DCL symbol or logical name GNV$MAKE_USE_CMD_FILE when set to a
|
||||||
|
string starting with one of '1','T', or 'E' for "1", "TRUE", or "ENABLE",
|
||||||
|
then temporary DCL command files are always used for running commands.
|
||||||
|
|
||||||
|
Some recipe strings with embedded new lines will not be handled correctly
|
||||||
|
when a command file is used.
|
||||||
|
|
||||||
|
GNU Make generally does text comparisons for the targets and sources. The
|
||||||
|
make program itself can handle either Unix or OpenVMS format filenames, but
|
||||||
|
normally does not do any conversions from one format to another.
|
||||||
|
TODO: The OpenVMS format syntax handling is incomplete.
|
||||||
|
TODO: ODS-5 EFS support is missing.
|
||||||
|
BUG: The internal routines to convert filenames to and from OpenVMS format
|
||||||
|
do not work correctly.
|
||||||
|
|
||||||
|
Note: In the examples below, line continuations such as a backslash may have
|
||||||
|
been added to make the examples easier to read in this format.
|
||||||
|
BUG: That feature does not completely work at this time.
|
||||||
|
|
||||||
|
Since the OpenVMS utilities generally expect OpenVMS format paths, you will
|
||||||
|
usually have to use OpenVMS format paths for rules and targets.
|
||||||
|
BUG: Relative OpenVMS paths may not work in targets, especially combined
|
||||||
|
with vpaths. This is because GNU Make will just concatenate the directories
|
||||||
|
as it does on Unix.
|
||||||
|
|
||||||
|
The variables $^ and $@ separate files with commas instead of spaces.
|
||||||
|
This is controlled by the name GNV$MAKE_COMMA as documented in the
|
||||||
|
previous section.
|
||||||
|
|
||||||
|
While this may seem the natural thing to do with OpenVMS, it actually
|
||||||
|
causes problems when trying to use other make functions that expect the
|
||||||
|
files to be separated by spaces. If you run into this, you need the
|
||||||
|
following workaround to convert the output.
|
||||||
|
TODO: Look at have the $^ and $@ use spaces like on Unix and have
|
||||||
|
and easy to use function to do the conversions and have the built
|
||||||
|
in OpenVMS specific recipes and macros use it.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
comma := ,
|
||||||
|
empty :=
|
||||||
|
space := $(empty) $(empty)
|
||||||
|
|
||||||
|
foo: $(addsuffix .3,$(subs $(comma),$(space),$^)
|
||||||
|
|
||||||
|
|
||||||
|
Makefile variables are looked up in the current environment. You can set
|
||||||
|
symbols or logicals in DCL and evaluate them in the Makefile via
|
||||||
|
$(<name-of-symbol-or-logical>). Variables defined in the Makefile
|
||||||
|
override OpenVMS symbols/logicals.
|
||||||
|
|
||||||
|
OpenVMS logical and symbols names show up as "environment" using the
|
||||||
|
origin function. when the "-e" option is specified, the origin function
|
||||||
|
shows them as "environment override". On POSIX the test scripts indicate
|
||||||
|
that they should show up just as "environment".
|
||||||
|
|
||||||
|
When GNU Make reads in a symbol or logical name into the environment, it
|
||||||
|
converts any dollar signs found to double dollar signs for convenience in
|
||||||
|
using DCL symbols and logical names in recipes. When GNU Make exports a
|
||||||
|
DCL symbol for a child process, if the first dollar sign found is followed
|
||||||
|
by second dollar sign, then all double dollar signs will be converted to
|
||||||
|
single dollar signs.
|
||||||
|
|
||||||
|
The variable $(ARCH) is predefined as IA64, ALPHA or VAX respectively.
|
||||||
|
Makefiles for different OpenVMS systems can now be written by checking
|
||||||
|
$(ARCH). Since IA64 and ALPHA are similar, usually just a check for
|
||||||
|
VAX or not VAX is sufficient.
|
||||||
|
|
||||||
|
You may have to update makefiles that assume VAX if not ALPHA.
|
||||||
|
|
||||||
|
ifeq ($(ARCH),VAX)
|
||||||
|
$(ECHO) "On the VAX"
|
||||||
|
else
|
||||||
|
$(ECHO) "On the ALPHA or IA64"
|
||||||
|
endif
|
||||||
|
|
||||||
|
Empty commands are handled correctly and don't end in a new DCL process.
|
||||||
|
|
||||||
|
The exit command needs to have OpenVMS exit codes. To pass a POSIX code
|
||||||
|
back to the make script, you need to encode it by multiplying it by 8
|
||||||
|
and then adding %x1035a002 for a failure code and %x1035a001 for a
|
||||||
|
success. Make will interpret any POSIX code other than 0 as a failure.
|
||||||
|
TODO: Add an option have simulate POSIX exit commands in recipes.
|
||||||
|
|
||||||
|
Lexical functions can be used in pipes to simulate shell file test rules.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
POSIX:
|
||||||
|
b : c ; [ -f $@ ] || echo >> $@
|
||||||
|
|
||||||
|
OpenVMS:
|
||||||
|
b : c ; if f$$search("$@") then pipe open/append xx $@ ; write xx "" ; close xx
|
||||||
|
|
||||||
|
|
||||||
|
You can also use pipes and turning messages off to silently test for a
|
||||||
|
failure.
|
||||||
|
|
||||||
|
x = %x1035a00a
|
||||||
|
|
||||||
|
%.b : %.c
|
||||||
|
<tab>pipe set mess/nofac/noiden/nosev/notext ; type $^/output=$@ || exit $(x)
|
||||||
|
|
||||||
|
|
||||||
|
Runtime issues:
|
||||||
|
|
||||||
|
The OpenVMS C Runtime has a convention for encoding a POSIX exit status into
|
||||||
|
to OpenVMS exit codes. These status codes will have the hex value of
|
||||||
|
0x35a000. OpenVMS exit code may also have a hex value of %x10000000 set on
|
||||||
|
them. This is a flag to tell DCL not to write out the exit code.
|
||||||
|
|
||||||
|
To convert an OpenVMS encoded POSIX exit status code to the original code
|
||||||
|
You subtract %x35a000 and any flags from the OpenVMS code and divide it by 8.
|
||||||
|
|
||||||
|
WARNING: Backward-incompatibility!
|
||||||
|
The make program exit now returns the same encoded POSIX exit code as on
|
||||||
|
Unix. Previous versions returned the OpenVMS exit status code if that is what
|
||||||
|
caused the recipe to fail.
|
||||||
|
TODO: Provide a way for scripts calling make to obtain that OpenVMS status
|
||||||
|
code.
|
||||||
|
|
||||||
|
Make internally has two error codes, MAKE_FAILURE and MAKE_TROUBLE. These
|
||||||
|
will have the error "-E-" severity set on exit.
|
||||||
|
|
||||||
|
MAKE_TROUBLE is returned only if the option "-q" or "--question" is used and
|
||||||
|
has a POSIX value of 1 and an OpenVMS status of %x1035a00a.
|
||||||
|
|
||||||
|
MAKE_FAILURE has a POSIX value of 2 and an OpenVMS status of %x1035a012.
|
||||||
|
|
||||||
|
Output from GNU Make may have single quotes around some values where on
|
||||||
|
other platforms it does not. Also output that would be in double quotes
|
||||||
|
on some platforms may show up as single quotes on VMS.
|
||||||
|
|
||||||
|
There may be extra blank lines in the output on VMS.
|
||||||
|
https://savannah.gnu.org/bugs/?func=detailitem&item_id=41760
|
||||||
|
|
||||||
|
There may be a "Waiting for unfinished jobs..." show up in the output.
|
||||||
|
|
||||||
|
Error messages generated by Make or Unix utilities may slightly vary from
|
||||||
|
POSIX platforms. Typically the case may be different.
|
||||||
|
|
||||||
|
When make deletes files, on POSIX platforms it writes out 'rm' and the list
|
||||||
|
of files. On VMS, only the files are written out, one per line.
|
||||||
|
TODO: VMS
|
||||||
|
|
||||||
|
There may be extra leading white space or additional or missing whitespace
|
||||||
|
in the output of recipes.
|
||||||
|
|
||||||
|
GNU Make uses sys$scratch: for the tempfiles that it creates.
|
||||||
|
|
||||||
|
The OpenVMS CRTL library maps /tmp to sys$scratch if the TMP: logical name
|
||||||
|
does not exist. As the CRTL may use both sys$scratch: and /tmp internally,
|
||||||
|
if you define the TMP logical name to be different than SYS$SCRATCH:,
|
||||||
|
you may end up with only some temporary files in TMP: and some in SYS$SCRATCH:
|
||||||
|
|
||||||
|
The default include directory for including other makefiles is
|
||||||
|
SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
|
||||||
|
SYS$LIBRARY: instead; maybe it wouldn't work that way).
|
||||||
|
TODO: A better default may be desired.
|
||||||
|
|
||||||
|
If the device for a file in a recipe does not exist, on OpenVMS an error
|
||||||
|
message of "stat: <file>: no such device or address" will be output.
|
||||||
|
|
||||||
|
Make ignores success, informational, or warning errors (-S-, -I-, or
|
||||||
|
-W-). But it will stop on -E- and -F- errors. (unless you do something
|
||||||
|
to override this in your makefile, or whatever).
|
||||||
|
|
||||||
|
|
||||||
|
Unix compatibility features:
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
If the command 'echo' is seen, any single quotes on the line will be
|
||||||
|
converted to double quotes.
|
||||||
|
|
||||||
|
The variable $(CD) is implemented as a built in Change Directory
|
||||||
|
command. This invokes the 'builtin_cd' Executing a 'set default'
|
||||||
|
recipe doesn't do the trick, since it only affects the sub-process
|
||||||
|
spawned for that command.
|
||||||
|
|
||||||
|
The 'builtin_cd' is generally expected to be on its own line.
|
||||||
|
The 'builtin_cd' either from the expansion of $(CD) or directly
|
||||||
|
put in a recipe line will be executed before any other commands in
|
||||||
|
that recipe line. DCL parameter substitution will not work for the
|
||||||
|
'builtin_cd' command.
|
||||||
|
|
||||||
|
Putting a 'builtin_cd' in a pipeline or an IF-THEN line should not be
|
||||||
|
done because the 'builtin_cd' is always executed
|
||||||
|
and executed first. The directory change is persistent.
|
||||||
|
|
||||||
|
Unix shell style I/O redirection is supported. You can now write lines like:
|
||||||
|
"<tab>mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt"
|
||||||
|
|
||||||
|
POSIX shells have ":" as a null command. These are now handled.
|
||||||
|
https://savannah.gnu.org/bugs/index.php?41761
|
||||||
|
|
||||||
|
A note on appending the redirected output. A simple mechanism is
|
||||||
|
implemented to make ">>" work in action lines. In OpenVMS there is no simple
|
||||||
|
feature like ">>" to have DCL command or program output redirected and
|
||||||
|
appended to a file. GNU Make for OpenVMS implements the redirection
|
||||||
|
of ">>" by using a command procedure.
|
||||||
|
|
||||||
|
The current algorithm creates the output file if it does not exist and
|
||||||
|
then uses the DCL open/append to extend it. SYS$OUTPUT is then directed
|
||||||
|
to that file.
|
||||||
|
|
||||||
|
The implementation supports only one redirected append output to a file
|
||||||
|
and that redirection is done before any other commands in that line
|
||||||
|
are executed, so it redirects all output for that command.
|
||||||
|
|
||||||
|
The older implementation wrote the output to a temporary file in
|
||||||
|
in sys$scratch: and then attempted to append the file to the existing file.
|
||||||
|
The temporary file names looked like "CMDxxxxx.". Any time the created
|
||||||
|
command procedure can not complete, this happens. Pressing CTRL+Y to
|
||||||
|
abort make is one case.
|
||||||
|
|
||||||
|
In case of CTRL+Y the associated command procedure is left in SYS$SCRATCH:.
|
||||||
|
The command procedures will be named gnv$make_cmd*.com.
|
||||||
|
|
||||||
|
The CtrlY handler now uses $delprc to delete all children. This way also
|
||||||
|
actions with DCL commands will be stopped. As before the CtrlY handler
|
||||||
|
then sends SIGQUIT to itself, which is handled in common code.
|
||||||
|
|
||||||
|
Temporary command files are now deleted in the OpenVMS child termination
|
||||||
|
handler. That deletes them even if a CTRL+C was pressed.
|
||||||
|
TODO: Does the previous section about >> leaving files still apply?
|
||||||
|
|
||||||
|
The behavior of pressing CTRL+C is not changed. It still has only an effect,
|
||||||
|
after the current action is terminated. If that doesn't happen or takes too
|
||||||
|
long, CTRL+Y should be used instead.
|
||||||
|
|
||||||
|
|
||||||
|
Build Options:
|
||||||
|
|
||||||
|
Added support to have case sensitive targets and dependencies but to
|
||||||
|
still use case blind file names. This is especially useful for Java
|
||||||
|
makefiles on VMS:
|
||||||
|
|
||||||
|
<TAB>.SUFFIXES :
|
||||||
|
<TAB>.SUFFIXES : .class .java
|
||||||
|
<TAB>.java.class :
|
||||||
|
<TAB><TAB>javac "$<"
|
||||||
|
<TAB>HelloWorld.class : HelloWorld.java
|
||||||
|
|
||||||
|
A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
|
||||||
|
It needs to be enabled to get this feature; default is disabled.
|
||||||
|
TODO: This should be a run-time setting based on if the process
|
||||||
|
has been set to case sensitive.
|
||||||
|
|
||||||
|
|
||||||
|
Unimplemented functionality:
|
||||||
|
|
||||||
|
The new feature "Loadable objects" is not yet supported. If you need it,
|
||||||
|
please send a change request or submit a bug report.
|
||||||
|
|
||||||
|
The new option --output-sync (-O) is accepted but has no effect: GNU Make
|
||||||
|
for OpenVMS does not support running multiple commands simultaneously.
|
||||||
|
|
||||||
|
|
||||||
|
Self test failures and todos:
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
The test harness can not handle testing some of the VMS specific modes
|
||||||
|
because of the features needed for to be set for the Perl to run.
|
||||||
|
Need to find a way to set the VMS features before running make as a
|
||||||
|
child.
|
||||||
|
|
||||||
|
GNU Make was not currently translating the OpenVMS encoded POSIX values
|
||||||
|
returned to it back to the POSIX values. I have temporarily modified the
|
||||||
|
Perl test script to compensate for it. This should be being handled
|
||||||
|
internally to Make.
|
||||||
|
TODO: Verify and update the Perl test script.
|
||||||
|
|
||||||
|
The features/parallelism test was failing. OpenVMS is executing the rules
|
||||||
|
in sequence not in parallel as this feature was not implemented.
|
||||||
|
GNU Make on VMS no longer claims it is implemented.
|
||||||
|
TODO: Implement it.
|
||||||
|
|
||||||
|
Symlink support is not present. Symlinks are supported by OpenVMS 8.3 and
|
||||||
|
later.
|
||||||
|
|
||||||
|
Error messages should be suppressed with the "-" at the beginning of a line.
|
||||||
|
On openVMS they were showing up. TODO: Is this still an issue?
|
||||||
|
|
||||||
|
The internal vmsify and unixify OpenVMS to/from UNIX are not handling logical
|
||||||
|
names correctly.
|
||||||
|
|
||||||
|
|
||||||
|
Build instructions:
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Don't use the HP C V7.2-001 compiler, which has an incompatible change
|
||||||
|
how __STDC__ is defined. This results at least in compile time warnings.
|
||||||
|
|
||||||
|
Make a 1st version
|
||||||
|
$ @makefile.com ! ignore any compiler and/or linker warning
|
||||||
|
$ copy make.exe 1st-make.exe
|
||||||
|
|
||||||
|
Use the 1st version to generate a 2nd version as a test.
|
||||||
|
$ mc sys$disk:[]1st-make clean ! ignore any file not found messages
|
||||||
|
$ mc sys$disk:[]1st-make
|
||||||
|
|
||||||
|
Verify your 2nd version by building Make again.
|
||||||
|
$ copy make.exe 2nd-make.exe
|
||||||
|
$ mc sys$disk:[]2nd-make clean
|
||||||
|
$ mc sys$disk:[]2nd-make
|
||||||
|
|
||||||
|
|
||||||
|
Running the tests:
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Running the tests on OpenVMS requires the following software to be installed
|
||||||
|
as most of the tests are Unix oriented.
|
||||||
|
|
||||||
|
* Perl 5.18 or later.
|
||||||
|
https://sourceforge.net/projects/vmsperlkit/files/
|
||||||
|
* GNV 2.1.3 + Updates including a minimum of:
|
||||||
|
* Bash 4.3.30
|
||||||
|
* ld_tools 3.0.2
|
||||||
|
* coreutils 8.21
|
||||||
|
https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/
|
||||||
|
https://sourceforge.net/projects/gnv/files/
|
||||||
|
|
||||||
|
As the test scripts need to create some foreign commands that persist
|
||||||
|
after the test is run, it is recommend that either you use a sub-process or
|
||||||
|
a dedicated login to run the tests.
|
||||||
|
|
||||||
|
To get detailed information for running the tests:
|
||||||
|
|
||||||
|
$ set default [.tests]
|
||||||
|
$ @run_make_tests help
|
||||||
|
|
||||||
|
Running the script with no parameters will run all the tests.
|
||||||
|
|
||||||
|
After the the test script has been run once in a session, assuming
|
||||||
|
that you built make in sys$disk:[make], you can redefined the
|
||||||
|
"bin" logical name as follows:
|
||||||
|
|
||||||
|
$ define bin sys$disk:[make],gnv$gnu:[bin]
|
||||||
|
|
||||||
|
Then you can use Perl to run the scripts.
|
||||||
|
|
||||||
|
$ perl run_make_tests.pl
|
||||||
|
|
||||||
|
|
||||||
|
Acknowledgments:
|
||||||
|
----------------
|
||||||
|
|
||||||
|
See NEWS. for details of past changes.
|
||||||
|
|
||||||
|
These are the currently known contributors to this port.
|
||||||
|
|
||||||
|
Hartmut Becker
|
||||||
|
John Malmberg
|
||||||
|
Michael Gehre
|
||||||
|
John Eisenbraun
|
||||||
|
Klaus Kaempf
|
||||||
|
Mike Moretti
|
||||||
|
John W. Eaton
|
@ -1,52 +1,46 @@
|
|||||||
This version of GNU make has been tested on
|
This version of GNU Make has been tested on:
|
||||||
Microsoft Windows 2000/XP/2003/Vista/7/2008.
|
Microsoft Windows 2000/XP/2003/Vista/7/8/10/11
|
||||||
It has also been used on Windows 95/98/NT, and on OS/2.
|
It has also been used on Windows 95/98/NT, and on OS/2.
|
||||||
|
|
||||||
It builds with the MinGW port of GCC (tested with GCC 3.4.2).
|
It builds with the MinGW port of GCC (tested with GCC 3.4.2, 4.8.1,
|
||||||
|
and 4.9.3).
|
||||||
|
|
||||||
It also builds with MSVC 2.x, 4.x, 5.x, 6.x, and 2003 as well as
|
It also builds with MSVC 2.x, 4.x, 5.x, 6.x, 2005, 2008, 2010, 2012,
|
||||||
with .NET 7.x and .NET 2003.
|
2013, and 2015 as well as with .NET 7.x and .NET 2003.
|
||||||
|
|
||||||
As of version 3.83, a build with Guile is supported (tested with Guile
|
Building with Guile is supported (tested with Guile 2.0.x). To build
|
||||||
2.0.3). To build with Guile, you will need, in addition to Guile
|
with Guile, you will need, in addition to Guile itself, its dependency
|
||||||
itself, its dependency libraries and the pkg-config program. The
|
libraries and the pkg-config program. The latter is used to figure out
|
||||||
latter is used to figure out which compilation and link switches and
|
which compilation and link switches and libraries need to be mentioned
|
||||||
libraries need to be mentioned on the compiler command lines to
|
on the compiler command lines to correctly link with Guile. A Windows
|
||||||
correctly link with Guile. A Windows port of pkg-config can be found
|
port of pkg-config can be found on ezwinports site:
|
||||||
on the Windows download page of the GTK+ project:
|
|
||||||
|
|
||||||
http://www.gtk.org/download/win32.php
|
https://sourceforge.net/projects/ezwinports/
|
||||||
|
|
||||||
The libraries on which Guile depends can vary depending on your
|
The libraries on which Guile depends can vary depending on your
|
||||||
version and build of Guile. At the very least, the Boehm's GC library
|
version and build of Guile. At the very least, the Boehm's GC library
|
||||||
will be needed, and typically also GNU MP, libffi, libunistring, and
|
will be needed, and typically also GNU MP, libffi, libunistring, and
|
||||||
libtool's libltdl. Whoever built the port of Guile you have should
|
libtool's libltdl. Whoever built the port of Guile you have should
|
||||||
also provide you with these dependencies or a URL where to download
|
also provide you with these dependencies or a URL where to download
|
||||||
them.
|
them. A precompiled 32-bit Windows build of Guile is available from
|
||||||
|
the ezwinports site mentioned above.
|
||||||
|
|
||||||
The Windows 32-bit port of GNU make is maintained jointly by various
|
The Windows port of GNU Make is maintained jointly by various people.
|
||||||
people. It was originally made by Rob Tulloh.
|
It was originally made by Rob Tulloh.
|
||||||
|
It is currently maintained by Eli Zaretskii.
|
||||||
|
|
||||||
|
|
||||||
Do this first, regardless of the build method you choose:
|
Do this first, regardless of the build method you choose:
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
|
|
||||||
1. At the Windows command prompt run:
|
1. If you have special requirements, edit config.h.W32 to your liking
|
||||||
|
(especially the shell-related defines, or HAVE_CASE_INSENSITIVE_FS which
|
||||||
|
corresponds to './configure --enable-case-insensitive-file-system'). We
|
||||||
|
don't recommend to define HAVE_CASE_INSENSITIVE_FS, but you may wish to
|
||||||
|
consider that if you have a lot of files whose names are in upper case,
|
||||||
|
while Makefile rules are written for lower-case versions.
|
||||||
|
|
||||||
if not exist NMakefile copy NMakefile.template NMakefile
|
If you don't have special requirements no changes are needed.
|
||||||
if not exist config.h copy config.h.W32 config.h
|
|
||||||
|
|
||||||
Then edit config.h to your liking (especially the few shell-related
|
|
||||||
defines near the end, or HAVE_CASE_INSENSITIVE_FS which corresponds
|
|
||||||
to './configure --enable-case-insensitive-file-system').
|
|
||||||
|
|
||||||
|
|
||||||
Using make_msvc_net2003.vcproj
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
2. Open make_msvc_net2003.vcproj in MSVS71 or MSVC71 or any compatible IDE,
|
|
||||||
then build this project as usual. There's also a solution file for
|
|
||||||
Studio 2003.
|
|
||||||
|
|
||||||
|
|
||||||
Building with (MinGW-)GCC using build_w32.bat
|
Building with (MinGW-)GCC using build_w32.bat
|
||||||
@ -55,47 +49,116 @@ Building with (MinGW-)GCC using build_w32.bat
|
|||||||
2. Open a W32 command prompt for your installed (MinGW-)GCC, setup a
|
2. Open a W32 command prompt for your installed (MinGW-)GCC, setup a
|
||||||
correct PATH and other environment variables for it, then execute ...
|
correct PATH and other environment variables for it, then execute ...
|
||||||
|
|
||||||
build_w32.bat gcc
|
.\build_w32.bat gcc
|
||||||
|
|
||||||
This produces gnumake.exe in the current directory.
|
This produces gnumake.exe in the GccRel directory.
|
||||||
|
|
||||||
|
If you want a version of GNU Make built with debugging enabled,
|
||||||
|
add the --debug option. Output goes into the GccDebug directory.
|
||||||
|
|
||||||
The batch file will probe for Guile installation, and will build
|
The batch file will probe for Guile installation, and will build
|
||||||
gnumake.exe with Guile if it finds it. If you have Guile
|
gnumake.exe with Guile if it finds it. If you have Guile
|
||||||
installed, but want to build Make without Guile support, type
|
installed, but want to build Make without Guile support, type
|
||||||
|
|
||||||
build_w32.bat --without-guile gcc
|
.\build_w32.bat --without-guile gcc
|
||||||
|
|
||||||
|
|
||||||
Building with (MSVC++-)cl using build_w32.bat or NMakefile
|
Building with (MSVC++-)cl using build_w32.bat
|
||||||
----------------------------------------------------------
|
---------------------------------------------
|
||||||
|
|
||||||
2. Open a W32 command prompt for your installed (MSVC++-)cl, setup a
|
2. Open a command shell, then execute ...
|
||||||
correct PATH and other environment variables for it (usually via
|
|
||||||
executing vcvars32.bat or vsvars32.bat from the cl-installation,
|
|
||||||
e.g. "%VS71COMNTOOLS%vsvars32.bat"; or using a corresponding start
|
|
||||||
menue entry from the cl-installation), then execute EITHER ...
|
|
||||||
|
|
||||||
build_w32.bat
|
.\build_w32.bat
|
||||||
|
|
||||||
(this produces WinDebug/gnumake.exe and WinRel/gnumake.exe)
|
This produces a 64bit Release build of gnumake.exe in .\WinRel, using
|
||||||
|
the compiler found on the %Path%. If no compiler is found, the batch
|
||||||
|
file will probe your system and choose the newest MSVC version it can
|
||||||
|
find.
|
||||||
|
|
||||||
... OR ...
|
If you want a 32bit version of GNU Make, add the --x86 option.
|
||||||
|
|
||||||
nmake /f NMakefile
|
If you want a Debug build of GNU Make, add the --debug option. Output
|
||||||
|
will go into the .\WinDebug directory.
|
||||||
(this produces WinDebug/make.exe and WinRel/make.exe).
|
|
||||||
|
|
||||||
The batch file will probe for Guile installation, and will build
|
The batch file will probe for Guile installation, and will build
|
||||||
gnumake.exe with Guile if it finds it. If you have Guile
|
gnumake.exe with Guile if it finds it. If Guile is installed,
|
||||||
installed, but want to build Make without Guile support, type
|
but you prefer to build GNU Make without Guile support, add the
|
||||||
|
--without-guile option.
|
||||||
|
|
||||||
|
|
||||||
|
Building with (MinGW-)GCC using GNU Make
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
2. If you already have a version of GNU Make available you can use it
|
||||||
|
to build this version. Open a W32 command prompt for your installed
|
||||||
|
(MinGW-)GCC, setup a correct PATH and other environment variables
|
||||||
|
for it, then execute ...
|
||||||
|
|
||||||
|
make -f Basic.mk TOOLCHAIN=gcc
|
||||||
|
|
||||||
|
This produces GccRel\gnumake.exe.
|
||||||
|
If you want a version of GNU Make built with debugging enabled,
|
||||||
|
add the TARGET_TYPE=debug option:
|
||||||
|
|
||||||
|
make -f Basic.mk TOOLCHAIN=gcc TARGET_TYPE=debug
|
||||||
|
|
||||||
|
The makefile doesn't support Guile integration. Use build_w32.bat
|
||||||
|
if you want to build with Guile support.
|
||||||
|
|
||||||
|
|
||||||
|
Building with (MSVC++-)cl using GNU Make
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
2. If you already have a version of GNU Make available you can use it
|
||||||
|
to build this version. Open a W32 command prompt for your installed
|
||||||
|
(MSVC++-)cl, setup a correct PATH and other environment variables
|
||||||
|
for it (usually via executing vcvars32.bat or vsvars32.bat from the
|
||||||
|
cl-installation, or using a corresponding start menu entry from the
|
||||||
|
cl-installation), then execute ...
|
||||||
|
|
||||||
|
make -f Basic.mk
|
||||||
|
|
||||||
|
This produces an optimized WinRel/gnumake.exe.
|
||||||
|
If you want a version of GNU Make built with debugging enabled,
|
||||||
|
add the TARGET_TYPE=debug option:
|
||||||
|
|
||||||
|
make -f Basic.mk TARGET_TYPE=debug
|
||||||
|
|
||||||
|
The makefile doesn't support Guile integration. Use build_w32.bat
|
||||||
|
if you want to build with Guile support.
|
||||||
|
|
||||||
|
|
||||||
|
Running the test suite
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
3. You will need an installation of Perl. Be sure to use a relatively
|
||||||
|
modern version: older versions will sometimes throw spurious errors.
|
||||||
|
|
||||||
|
To run the suite after building using GNU Make, use:
|
||||||
|
|
||||||
|
make -f Basic.mk check
|
||||||
|
|
||||||
|
Alternatively if you'd like to run tests by hand, use:
|
||||||
|
|
||||||
|
cd tests
|
||||||
|
.\run_make_tests.bat -make <path-to-make>
|
||||||
|
|
||||||
|
I've found <path-to-make> seems to want forward-slashes in the path.
|
||||||
|
For example if building with .\build_w32.bat non-debug, use:
|
||||||
|
|
||||||
|
cd tests
|
||||||
|
.\run_make_tests.bat -make ../WinRel/gnumake.exe
|
||||||
|
|
||||||
|
I've tested this with the MSYS2 shell and POSIX tools installation
|
||||||
|
that you get by installing Git for Windows.
|
||||||
|
|
||||||
|
|
||||||
build_w32.bat --without-guile
|
|
||||||
|
|
||||||
-------------------
|
-------------------
|
||||||
-- Notes/Caveats --
|
-- Notes/Caveats --
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
GNU make on Windows 32-bit platforms:
|
GNU Make on Windows 32-bit platforms:
|
||||||
|
|
||||||
This version of make is ported natively to Windows32 platforms
|
This version of make is ported natively to Windows32 platforms
|
||||||
(Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP,
|
(Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP,
|
||||||
@ -105,11 +168,11 @@ GNU make on Windows 32-bit platforms:
|
|||||||
officially are the MinGW port of GNU GCC, and the various
|
officially are the MinGW port of GNU GCC, and the various
|
||||||
versions of the Microsoft C compiler.
|
versions of the Microsoft C compiler.
|
||||||
|
|
||||||
Do not confuse this port of GNU make with other Windows32 projects
|
Do not confuse this port of GNU Make with other Windows32 projects
|
||||||
which provide a GNU make binary. These are separate projects
|
which provide a GNU Make binary. These are separate projects
|
||||||
and are not connected to this port effort.
|
and are not connected to this port effort.
|
||||||
|
|
||||||
GNU make and sh.exe:
|
GNU Make and sh.exe:
|
||||||
|
|
||||||
This port prefers if you have a working sh.exe somewhere on
|
This port prefers if you have a working sh.exe somewhere on
|
||||||
your system. If you don't have sh.exe, the port falls back to
|
your system. If you don't have sh.exe, the port falls back to
|
||||||
@ -119,12 +182,12 @@ GNU make and sh.exe:
|
|||||||
|
|
||||||
There are very few true ports of Bourne shell for NT right now.
|
There are very few true ports of Bourne shell for NT right now.
|
||||||
There is a version of GNU bash available from Cygnus "Cygwin"
|
There is a version of GNU bash available from Cygnus "Cygwin"
|
||||||
porting effort (http://www.cygwin.com/).
|
porting effort (https://www.cygwin.com/).
|
||||||
Other possibilities are the MKS version of sh.exe, or building
|
Other possibilities are the MKS version of sh.exe, or building
|
||||||
your own with a package like NutCracker (DataFocus) or Portage
|
your own with a package like NutCracker (DataFocus) or Portage
|
||||||
(Consensys). Also MinGW includes sh (http://mingw.org/).
|
(Consensys). Also MinGW includes sh.
|
||||||
|
|
||||||
GNU make and brain-dead shells (BATCH_MODE_ONLY_SHELL):
|
GNU Make and brain-dead shells (BATCH_MODE_ONLY_SHELL):
|
||||||
|
|
||||||
Some versions of Bourne shell do not behave well when invoked
|
Some versions of Bourne shell do not behave well when invoked
|
||||||
as 'sh -c' from CreateProcess(). The main problem is they seem
|
as 'sh -c' from CreateProcess(). The main problem is they seem
|
||||||
@ -147,26 +210,24 @@ GNU make and brain-dead shells (BATCH_MODE_ONLY_SHELL):
|
|||||||
|
|
||||||
Support for parallel builds
|
Support for parallel builds
|
||||||
|
|
||||||
Parallel builds (-jN) are supported in this port, with 1
|
Parallel builds (-jN) are supported in this port. The number of
|
||||||
limitation: The number of concurrent processes has a hard
|
concurrent processes has a hard limit of 4095.
|
||||||
limit of 64, due to the way this port implements waiting for
|
|
||||||
its subprocesses.
|
|
||||||
|
|
||||||
GNU make and Cygnus GNU Windows32 tools:
|
GNU Make and Cygnus GNU Windows32 tools:
|
||||||
|
|
||||||
Good news! Make now has native support for Cygwin sh. To enable,
|
Good news! Make now has native support for Cygwin sh. To enable,
|
||||||
define the HAVE_CYGWIN_SHELL in config.h and rebuild make
|
define the HAVE_CYGWIN_SHELL in config.h and rebuild make
|
||||||
from scratch. This version of make tested with B20.1 of Cygwin.
|
from scratch. This version of make tested with B20.1 of Cygwin.
|
||||||
Do not define BATCH_MODE_ONLY_SHELL if you use HAVE_CYGWIN_SHELL.
|
Do not define BATCH_MODE_ONLY_SHELL if you use HAVE_CYGWIN_SHELL.
|
||||||
|
|
||||||
GNU make and the MKS shell:
|
GNU Make and the MKS shell:
|
||||||
|
|
||||||
There is now semi-official support for the MKS shell. To turn this
|
There is now semi-official support for the MKS shell. To turn this
|
||||||
support on, define HAVE_MKS_SHELL in the config.h.W32 before you
|
support on, define HAVE_MKS_SHELL in the config.h.W32 before you
|
||||||
build make. Do not define BATCH_MODE_ONLY_SHELL if you turn
|
build make. Do not define BATCH_MODE_ONLY_SHELL if you turn
|
||||||
on HAVE_MKS_SHELL.
|
on HAVE_MKS_SHELL.
|
||||||
|
|
||||||
GNU make handling of drive letters in pathnames (PATH, vpath, VPATH):
|
GNU Make handling of drive letters in pathnames (PATH, vpath, VPATH):
|
||||||
|
|
||||||
There is a caveat that should be noted with respect to handling
|
There is a caveat that should be noted with respect to handling
|
||||||
single character pathnames on Windows systems. When colon is
|
single character pathnames on Windows systems. When colon is
|
||||||
@ -204,13 +265,6 @@ GNU make handling of drive letters in pathnames (PATH, vpath, VPATH):
|
|||||||
both Unix and Windows systems, then no ifdef'ing will be
|
both Unix and Windows systems, then no ifdef'ing will be
|
||||||
necessary in the makefile source.
|
necessary in the makefile source.
|
||||||
|
|
||||||
GNU make test suite:
|
|
||||||
|
|
||||||
I verified all functionality with a slightly modified version
|
|
||||||
of make-test-%VERSION% (modifications to get test suite to run
|
|
||||||
on Windows NT). All tests pass in an environment that includes
|
|
||||||
sh.exe. Tests were performed on both Windows NT and Windows 95.
|
|
||||||
|
|
||||||
Pathnames and white space:
|
Pathnames and white space:
|
||||||
|
|
||||||
Unlike Unix, Windows 95/NT systems encourage pathnames which
|
Unlike Unix, Windows 95/NT systems encourage pathnames which
|
||||||
@ -239,7 +293,7 @@ Pathnames and Case insensitivity:
|
|||||||
the file with other case permutations will succeed (i.e. opening a
|
the file with other case permutations will succeed (i.e. opening a
|
||||||
file named "target" or "TARGET" will open the file "Target").
|
file named "target" or "TARGET" will open the file "Target").
|
||||||
|
|
||||||
By default, GNU make retains its case sensitivity when comparing
|
By default, GNU Make retains its case sensitivity when comparing
|
||||||
target names and existing files or directories. It can be
|
target names and existing files or directories. It can be
|
||||||
configured, however, into a case preserving and case insensitive
|
configured, however, into a case preserving and case insensitive
|
||||||
mode by adding a define for HAVE_CASE_INSENSITIVE_FS to
|
mode by adding a define for HAVE_CASE_INSENSITIVE_FS to
|
||||||
@ -257,10 +311,10 @@ Pathnames and Case insensitivity:
|
|||||||
SUBDIR/DepTarget: SubDir/TARGET
|
SUBDIR/DepTarget: SubDir/TARGET
|
||||||
cp $^ $@
|
cp $^ $@
|
||||||
|
|
||||||
Reliance on this behavior also eliminates the ability of GNU make
|
Reliance on this behavior also eliminates the ability of GNU Make
|
||||||
to use case in comparison of matching rules. For example, it is
|
to use case in comparison of matching rules. For example, it is
|
||||||
not possible to set up a C++ rule using %.C that is different
|
not possible to set up a C++ rule using %.C that is different
|
||||||
than a C rule using %.c. GNU make will consider these to be the
|
than a C rule using %.c. GNU Make will consider these to be the
|
||||||
same rule and will issue a warning.
|
same rule and will issue a warning.
|
||||||
|
|
||||||
SAMBA/NTFS/VFAT:
|
SAMBA/NTFS/VFAT:
|
||||||
@ -290,10 +344,10 @@ FAT:
|
|||||||
Bug reports:
|
Bug reports:
|
||||||
|
|
||||||
Please submit bugs via the normal bug reporting mechanism which
|
Please submit bugs via the normal bug reporting mechanism which
|
||||||
is described in the GNU make manual and the base README.
|
is described in the GNU Make manual and the base README.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
Copyright (C) 1996-2024 Free Software Foundation, Inc.
|
||||||
This file is part of GNU Make.
|
This file is part of GNU Make.
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
@ -306,4 +360,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
@ -1,6 +1,6 @@
|
|||||||
-*-indented-text-*-
|
-*-indented-text-*-
|
||||||
|
|
||||||
GNU make can utilize the Customs library, distributed with Pmake, to
|
GNU Make can utilize the Customs library, distributed with Pmake, to
|
||||||
provide builds distributed across multiple hosts.
|
provide builds distributed across multiple hosts.
|
||||||
|
|
||||||
In order to utilize this capability, you must first download and build
|
In order to utilize this capability, you must first download and build
|
||||||
@ -21,11 +21,11 @@ please see the pmake and Customs documentation for details. The best
|
|||||||
place to look for instructions is in the pmake-2.1.33/INSTALL file.
|
place to look for instructions is in the pmake-2.1.33/INSTALL file.
|
||||||
|
|
||||||
Note that the 2.1.33 Pmake distribution comes with a set of patches to
|
Note that the 2.1.33 Pmake distribution comes with a set of patches to
|
||||||
GNU make, distributed in the pmake-2.1.33/etc/gnumake/ directory. These
|
GNU Make, distributed in the pmake-2.1.33/etc/gnumake/ directory. These
|
||||||
patches are based on GNU make 3.75 (there are patches for earlier
|
patches are based on GNU Make 3.75 (there are patches for earlier
|
||||||
versions of GNU make, also). The parts of this patchfile which relate
|
versions of GNU Make, also). The parts of this patchfile which relate
|
||||||
directly to Customs support have already been incorporated into this
|
directly to Customs support have already been incorporated into this
|
||||||
version of GNU make, so you should _NOT_ apply the patch file.
|
version of GNU Make, so you should _NOT_ apply the patch file.
|
||||||
|
|
||||||
However, there are a few non-Customs specific (as far as I could tell)
|
However, there are a few non-Customs specific (as far as I could tell)
|
||||||
changes here which are not incorporated (for example, the modification
|
changes here which are not incorporated (for example, the modification
|
||||||
@ -42,14 +42,14 @@ install' there directly).
|
|||||||
BUILDING GNU MAKE
|
BUILDING GNU MAKE
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Once you've installed Customs, you can build GNU make to use it. When
|
Once you've installed Customs, you can build GNU Make to use it. When
|
||||||
configuring GNU make, merely use the '--with-customs=DIR' option.
|
configuring GNU Make, merely use the '--with-customs=DIR' option.
|
||||||
Provide the directory containing the 'lib' and 'include/customs'
|
Provide the directory containing the 'lib' and 'include/customs'
|
||||||
subdirectories as DIR. For example, if you installed the customs
|
subdirectories as DIR. For example, if you installed the customs
|
||||||
library in /usr/local/lib and the headers in /usr/local/include/customs,
|
library in /usr/local/lib and the headers in /usr/local/include/customs,
|
||||||
then you'd pass '--with-customs=/usr/local' as an option to configure.
|
then you'd pass '--with-customs=/usr/local' as an option to configure.
|
||||||
|
|
||||||
Run make (or use build.sh) normally to build GNU make as described in
|
Run make (or use build.sh) normally to build GNU Make as described in
|
||||||
the INSTALL file.
|
the INSTALL file.
|
||||||
|
|
||||||
See the documentation for Customs for information on starting and
|
See the documentation for Customs for information on starting and
|
||||||
@ -83,7 +83,7 @@ PROBLEMS
|
|||||||
|
|
||||||
SunOS 4.1.x:
|
SunOS 4.1.x:
|
||||||
The customs/sprite.h header file #includes the <malloc.h> header
|
The customs/sprite.h header file #includes the <malloc.h> header
|
||||||
files; this conflicts with GNU make's configuration so you'll get a
|
files; this conflicts with GNU Make's configuration so you'll get a
|
||||||
compile error if you use GCC (or any other ANSI-capable C compiler).
|
compile error if you use GCC (or any other ANSI-capable C compiler).
|
||||||
|
|
||||||
I commented out the #include in sprite.h:107:
|
I commented out the #include in sprite.h:107:
|
||||||
@ -96,7 +96,7 @@ SunOS 4.1.x:
|
|||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 1998-2013 Free Software Foundation, Inc.
|
Copyright (C) 1998-2024 Free Software Foundation, Inc.
|
||||||
This file is part of GNU Make.
|
This file is part of GNU Make.
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
@ -109,4 +109,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
408
README.git
408
README.git
@ -1,7 +1,7 @@
|
|||||||
-*-text-*-
|
-*-text-*-
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2002-2013 Free Software Foundation, Inc.
|
Copyright (C) 2002-2024 Free Software Foundation, Inc.
|
||||||
This file is part of GNU Make.
|
This file is part of GNU Make.
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
@ -14,7 +14,7 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
Obtaining Git Code
|
Obtaining Git Code
|
||||||
@ -23,7 +23,7 @@ Obtaining Git Code
|
|||||||
This seems redundant, since if you're reading this you most likely have
|
This seems redundant, since if you're reading this you most likely have
|
||||||
already performed this step; however, for completeness, you can obtain the GNU
|
already performed this step; however, for completeness, you can obtain the GNU
|
||||||
make source code via Git from the FSF's Savannah project
|
make source code via Git from the FSF's Savannah project
|
||||||
<http://savannah.gnu.org/projects/make/>:
|
<https://savannah.gnu.org/projects/make/>:
|
||||||
|
|
||||||
$ git clone git://git.savannah.gnu.org/make.git
|
$ git clone git://git.savannah.gnu.org/make.git
|
||||||
|
|
||||||
@ -31,231 +31,379 @@ make source code via Git from the FSF's Savannah project
|
|||||||
Changes using Git
|
Changes using Git
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
For non-developers, please continue to provide patches as before, or if you
|
If you do not have push privileges to the GNU Make Git repository, see the
|
||||||
make a public repository I can pull from that if you prefer.
|
README file section "Submitting Patches" for information.
|
||||||
|
|
||||||
For developers, I'm still new to Git myself, so I don't have a ton of advice.
|
If you have push privileges to the GNU Make Git repository keep this
|
||||||
In this release we will continue to create ChangeLog files by hand so please
|
information in mind:
|
||||||
don't forget to update the ChangeLog.
|
|
||||||
|
|
||||||
Rule #1: Don't rewrite pushed history (don't use "git push --force").
|
Starting with GNU Make 4.0 we no longer keep a separate ChangeLog file in
|
||||||
|
source control. We use the Gnulib git-to-changelog conversion script to
|
||||||
|
convert the Git comments into ChangeLog-style entries for release. As a
|
||||||
|
result, please format your Git comments carefully so they will look clean
|
||||||
|
after conversion. In particular, each line of your comment will have a TAB
|
||||||
|
added before it so be sure your comment lines are not longer than 72
|
||||||
|
characters; prefer 70 or less. Please use standard ChangeLog formats for
|
||||||
|
your commit messages (sans the leading TAB of course).
|
||||||
|
|
||||||
|
Rule #1: Don't rewrite pushed history on master (no "git push --force").
|
||||||
|
Rule #2: Feel free to rewrite pushed history on personal branches.
|
||||||
|
Rule #3: Squash-merge or rebase + merge --ff-only, rather than merging from
|
||||||
|
personal branches into master.
|
||||||
|
|
||||||
Typical simple workflow might be:
|
Typical simple workflow might be:
|
||||||
|
|
||||||
* Edit files
|
* Edit files / make / make check
|
||||||
* Use "git status" and "git diff" to verify your changes
|
* Use "git status" and "git diff" to verify your changes
|
||||||
* Use "git add" to stage the changes you want to make
|
* Use "git add" to stage the changes you want to make
|
||||||
* Use "git commit" to commit the staged changes to your local repository
|
* Use "git commit" to commit the staged changes to your local repository
|
||||||
* Use "git pull" to accept & merge new changes from the Savannah repository
|
* Use "git pull -r" to accept new changes from the upstream repository
|
||||||
* Use "git push" to push your commits back to the Savannah repository
|
* Use "git push" to push your commits back to the upstream repository
|
||||||
|
|
||||||
For Emacs users, there are many options for Git integration but I strongly
|
For Emacs users, there are many options for Git integration but I strongly
|
||||||
recommend the Magit package: http://www.emacswiki.org/emacs/Magit
|
recommend Magit: https://magit.vc/ It makes the workflow much clearer, and
|
||||||
It makes the workflow much clearer, and has advanced features such as
|
has advanced features such as constructing multiple commits from various files
|
||||||
constructing multiple commits from various files and even from different
|
and even from different diff chunks in the same file. There is a video
|
||||||
diff chunks in the same file. There is a video available which helps a lot.
|
available which helps a lot.
|
||||||
|
|
||||||
|
|
||||||
Coding Standards
|
Coding Standards
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
GNU make code adheres to the GNU Coding Standards. Additionally, GNU make is
|
GNU Make code adheres to the GNU Coding Standards. Please use only spaces and
|
||||||
a foundational bootstrap package for the GNU project; as such it is very
|
no TAB characters in source code.
|
||||||
conservative about language features it expects. It should build with any C
|
|
||||||
compiler conforming to the ANSI C89 / ISO C90 standard.
|
|
||||||
|
|
||||||
Please use only spaces and no TAB characters in source code.
|
Additionally, GNU Make is a foundational bootstrap package for the GNU
|
||||||
|
project; as such it is conservative about language features it expects.
|
||||||
|
However, GNU Make does rely on the Gnulib portability library, and Gnulib
|
||||||
|
currently requires a ISO C99 compiler. So features in ISO C99 can be
|
||||||
|
assumed.
|
||||||
|
|
||||||
|
|
||||||
Building From Git
|
Building From Git for POSIX
|
||||||
-----------------
|
---------------------------
|
||||||
|
|
||||||
To build GNU make from Git, you will need Autoconf, Automake, and
|
To build GNU Make from Git on POSIX systems such as GNU/Linux, you will
|
||||||
Gettext, and any tools that those utilities require (GNU m4, Perl,
|
need to install the following extra software:
|
||||||
etc.). See the configure.ac file to find the minimum versions of each
|
|
||||||
of these tools. You will also need a copy of wget.
|
* autoconf >= 2.69
|
||||||
|
* automake >= 1.16.1
|
||||||
|
* autopoint
|
||||||
|
* texinfo (for makeinfo)
|
||||||
|
* gettext
|
||||||
|
* pkg-config
|
||||||
|
* GCC
|
||||||
|
* GNU Make (POSIX make is not sufficient)
|
||||||
|
|
||||||
|
And any tools that those utilities require (GNU m4, etc.)
|
||||||
|
|
||||||
|
To run the tests you must install Perl.
|
||||||
|
|
||||||
|
To create dist files you will additionally need:
|
||||||
|
|
||||||
|
* lzip (to create tar.lz dist files)
|
||||||
|
* texlive (or some other TeX package)
|
||||||
|
|
||||||
|
GNU Make requires Gnulib to provide some facilities. If you want to maintain
|
||||||
|
a local installation of gnulib you can set GNULIB_SRCDIR to point to it.
|
||||||
|
Otherwise, ./bootstrap will obtain a clone for you.
|
||||||
|
|
||||||
|
Due to issues with gnulib's getloadavg, you must have automake 1.16.1 or
|
||||||
|
above. This version may not yet be available through GNU/Linux package
|
||||||
|
managers. If you need to install from source be sure to set ACLOCAL_PATH to
|
||||||
|
point to the pkg-config location (e.g., /usr/share/aclocal).
|
||||||
|
|
||||||
|
If you want to build from Git with a non-GCC compiler, add "MAKE_CFLAGS=" to
|
||||||
|
your make command line (or at least remove any flags your compiler does not
|
||||||
|
support).
|
||||||
|
|
||||||
When building from Git you must build in the source directory: "VPATH
|
When building from Git you must build in the source directory: "VPATH
|
||||||
builds" from remote directories are not supported. Once you've created
|
builds" from remote directories are not supported. Once you've created
|
||||||
a distribution, of course, you can unpack it and do a VPATH build from
|
a distribution, of course, you can unpack it and do a VPATH build from
|
||||||
there.
|
there.
|
||||||
|
|
||||||
After checking out the code, you will need to perform these steps to get
|
After checking out the code, you will need to run the bootstrap script:
|
||||||
to the point where you can run "make".
|
|
||||||
|
|
||||||
|
$ ./bootstrap
|
||||||
|
|
||||||
1) $ autoreconf -i
|
Alternatively you can just pull content from remote locations with:
|
||||||
|
|
||||||
This rebuilds all the things that need rebuilding, installing
|
$ ./bootstrap --pull
|
||||||
missing files as symbolic links.
|
|
||||||
|
|
||||||
You may get warnings here about missing files like README, etc.
|
And/or just re-generate auto-generatable files with:
|
||||||
Ignore them, they are harmless.
|
|
||||||
|
|
||||||
|
$ ./bootstrap --gen
|
||||||
|
|
||||||
2) $ ./configure
|
(Running ./bootstrap does both in one step.)
|
||||||
|
|
||||||
Generate a Makefile
|
|
||||||
|
|
||||||
|
|
||||||
3) $ make update
|
|
||||||
|
|
||||||
Use wget to retrieve various other files that GNU make relies on,
|
|
||||||
but does not keep in its own source tree.
|
|
||||||
|
|
||||||
NB: You may need GNU make to correctly perform this step; if you use
|
|
||||||
a platform-local make you may get problems with missing files in doc/.
|
|
||||||
|
|
||||||
|
|
||||||
At this point you have successfully brought your Git copy of the GNU
|
At this point you have successfully brought your Git copy of the GNU
|
||||||
make source directory up to the point where it can be treated
|
make source directory up to the point where it can be treated
|
||||||
more-or-less like the official package you would get from ftp.gnu.org.
|
more-or-less like the official package you would get from ftp.gnu.org.
|
||||||
That is, you can just run:
|
That is, you can just run:
|
||||||
|
|
||||||
$ make && make check && make install
|
$ ./configure
|
||||||
|
$ make check
|
||||||
|
|
||||||
to build and install GNU make.
|
to build and test GNU Make.
|
||||||
|
|
||||||
|
NOTE! This method builds GNU Make in "maintainer mode". Make programs built
|
||||||
|
in this mode will be slower, possibly MUCH slower: there are various
|
||||||
|
sanity checks enabled. Further this mode assumes a modern GCC, GNU
|
||||||
|
libc, and well-formed system headers and enables a high level of
|
||||||
|
warnings AND enables -Werror to turn warnings into failures.
|
||||||
|
|
||||||
|
If you want to build from Git with "maintainer mode" disabled, add
|
||||||
|
"MAKE_MAINTAINER_MODE=" to the make command line. If you want to turn
|
||||||
|
off the extra warning flags, add "MAKE_CFLAGS=" to the make command
|
||||||
|
line. If you want to keep the warnings but not fail, add
|
||||||
|
"EXTRA_CFLAGS=-Wno-error" to the make command line.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
$ ./configure
|
||||||
|
$ make check MAKE_MAINTAINER_MODE= MAKE_CFLAGS=
|
||||||
|
$ make install
|
||||||
|
|
||||||
|
|
||||||
Windows builds from Git
|
Building From Git for Windows
|
||||||
-----------------------
|
-----------------------------
|
||||||
|
|
||||||
If you have a UNIX emulation like CYGWIN you can opt to run the general
|
If you have a UNIX emulation like CYGWIN you can opt to run the general build
|
||||||
build procedure above; it will work. Be sure to read
|
procedure above; it will work. Consult README.W32 for information on options
|
||||||
README.W32.template for information on options you might want to use
|
you might want to use when running ./configure.
|
||||||
when running ./configure.
|
|
||||||
|
|
||||||
If you can't or don't want to do that, then rename the file
|
If you can't or don't want to do that, then first run the .\bootstrap.bat
|
||||||
README.W32.template to README.W32 and follow those instructions.
|
script to "prime" your Git workspace:
|
||||||
|
|
||||||
|
> .\bootstrap.bat
|
||||||
|
|
||||||
|
Next, follow the instructions in the README.W32 file.
|
||||||
|
|
||||||
|
Note, neither of these methods are tested regularly by the GNU Make
|
||||||
|
maintainers. Building for Windows from a distribution tarball IS tested
|
||||||
|
regularly.
|
||||||
|
|
||||||
|
NOTE! "Maintainer mode" (see above) IS ENABLED when building from Git using
|
||||||
|
the build_w32.bat file.
|
||||||
|
|
||||||
|
|
||||||
|
Debugging and Testing
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
These instructions have been tested on GNU systems. I have no idea if they
|
||||||
|
work on non-GNU systems (Windows, MacOS, etc.)
|
||||||
|
|
||||||
|
* Alternate Configurations:
|
||||||
|
The maintMakefile has a rule for running configure with various different
|
||||||
|
options, with and without packages. Run:
|
||||||
|
|
||||||
|
make check-alt-config
|
||||||
|
|
||||||
|
* Valgrind:
|
||||||
|
You can run all tests under valgrind by passing the -memcheck option:
|
||||||
|
|
||||||
|
(cd tests && ./run_make_tests -make ../make -memcheck)
|
||||||
|
|
||||||
|
Note, this is slow! Also some tests will fail because of invoking valgrind.
|
||||||
|
|
||||||
|
* ASAN:
|
||||||
|
You can build with ASAN and run tests, like this:
|
||||||
|
|
||||||
|
make clean
|
||||||
|
make -j8 CFLAGS='-ggdb3 -fsanitize=address' LDFLAGS='-ggdb3 -fsanitize=address'
|
||||||
|
|
||||||
|
Then to check for corruption only but not memory leaks run:
|
||||||
|
|
||||||
|
ASAN_OPTIONS='detect_stack_after_use_return=true:detect_leaks=false' make check
|
||||||
|
|
||||||
|
To check for leaks too run:
|
||||||
|
|
||||||
|
make check
|
||||||
|
|
||||||
|
Note that ASAN is reporting many more errors than valgrind. I don't know
|
||||||
|
which one is wrong: I haven't looked at them closely.
|
||||||
|
|
||||||
|
|
||||||
Creating a Package
|
Creating a Package
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
Once you have performed the above steps (including the configuration and
|
Once you have performed the above steps (including the configuration and
|
||||||
build) you can create a GNU make package. This is very simple, just
|
build) you can create a GNU Make package. This is very simple, just
|
||||||
run:
|
run:
|
||||||
|
|
||||||
$ make dist-gzip
|
$ make dist-gzip
|
||||||
|
|
||||||
and, if you like:
|
and, if you like:
|
||||||
|
|
||||||
$ make dist-bzip2
|
$ make dist-lzip
|
||||||
|
|
||||||
Even better, you should run this:
|
Even better, you should run this:
|
||||||
|
|
||||||
$ make distcheck
|
$ make distcheck
|
||||||
|
|
||||||
Which will build both .gz and .bz2 package files, then unpack them into
|
Which will build both .gz and .lz package files, then unpack one into a
|
||||||
a temporary location, try to build them, and repack them, verifying that
|
temporary location, try to build it and repack it, then verifying that
|
||||||
everything works, you get the same results, _and_ no extraneous files
|
everything works, you get the same results, _and_ no extraneous files are
|
||||||
are left over after the "distclean" rule--whew!! Now, _that_ is why
|
left over after the "distclean" rule.
|
||||||
converting to Automake is worth the trouble! A big "huzzah!" to Tom
|
|
||||||
T. and the AutoToolers!
|
This package can be unpacked and built to give a "normal" (non-maintainer
|
||||||
|
mode) result.
|
||||||
|
|
||||||
|
|
||||||
Steps to Release
|
Steps to Release
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Here are the things that need to be done (in more or less this order)
|
Here are the things that need to be done (in more or less this order)
|
||||||
before making an official release:
|
before making an official release. If something breaks such that you need to
|
||||||
|
change code, be sure to start over again sufficiently that everything is
|
||||||
|
consistent (that's why we don't finalize the Git tag, etc. until the end).
|
||||||
|
|
||||||
* Update the configure.ac file with the new release number.
|
* Update the configure.ac file with the new release number.
|
||||||
|
* Update the EDITION value in the doc/make.texi file.
|
||||||
|
* Update the doc/make.1 file with the release date.
|
||||||
* Update the NEWS file with the release number and date.
|
* Update the NEWS file with the release number and date.
|
||||||
* In Savannah modify the "Value", "Rank", and "Description" values for the
|
* Ensure the Savannah bug list URL in the NEWS file uses the correct
|
||||||
current "SCM" entry in both "Component Version" and "Fix Release" fields
|
|
||||||
to refer to the new release, for "Bugs" and "Patches".
|
|
||||||
* Update the Savannah bug list URL in the NEWS file to use the correct
|
|
||||||
"Fixed Release" ID number.
|
"Fixed Release" ID number.
|
||||||
* In Savannah create a new entry for the "Component Version" and "Fix
|
|
||||||
Release" fields:
|
|
||||||
- Value: SCM
|
|
||||||
- Rank: 20
|
|
||||||
- Descr: Fixed in Git; will be available in the next version of Make.
|
|
||||||
* Run "make distcheck" to be sure it all works.
|
* Run "make distcheck" to be sure it all works.
|
||||||
* git tag -u <GPGID> <VER> where GPGID is my GPG key fingerprint,
|
* Run "make check-alt-config" to be sure alternative configurations work
|
||||||
and VER is the release version.
|
* run "make tag-release" to create a Git tag for the release
|
||||||
* Push everything:
|
* Push everything:
|
||||||
git push --tags origin master
|
git push --tags origin master
|
||||||
* Create the new release in the Savannah "Bugs" Administration for
|
|
||||||
both the "Component Version" and "Fixed Release" fields.
|
|
||||||
* Create the new release in the Savannah "Patches" Administration for
|
|
||||||
the "Fixed Release" field.
|
|
||||||
|
|
||||||
|
The safest thing is to create an entirely new repository and build the final
|
||||||
Publishing a Package
|
package from there:
|
||||||
--------------------
|
|
||||||
|
|
||||||
In order to publish a package on the FSF FTP site, either the release
|
|
||||||
site ftp://ftp.gnu.org, or the prerelease site ftp://alpha.gnu.org, you
|
|
||||||
first need to have my GPG private key and my passphrase to unlock it.
|
|
||||||
And, you can't have them! So there! But, just so I remember here's
|
|
||||||
what to do:
|
|
||||||
|
|
||||||
Make sure the "Steps to Release" are complete and committed and tagged.
|
|
||||||
|
|
||||||
git clone git://git.savannah.gnu.org/make.git make-release
|
git clone git://git.savannah.gnu.org/make.git make-release
|
||||||
|
|
||||||
cd make-release
|
cd make-release
|
||||||
|
|
||||||
<run the commands above to build the release>
|
If you don't want to create a new repository then run "git clean -fdx".
|
||||||
|
Then:
|
||||||
|
|
||||||
make upload-alpha # for alpha.gnu.org (pre-releases)
|
./bootstrap
|
||||||
-OR-
|
./configure
|
||||||
make upload-ftp # for ftp.gnu.org (official releases)
|
make distcheck
|
||||||
|
|
||||||
Depending on your distribution (whether GnuPG is integrated with your keyring
|
Perform test builds on whichever systems you have access to.
|
||||||
etc.) it will either pop up a window asking for your GPG key passphrase one
|
|
||||||
time, or else it will use the CLI to ask for the GPG passphrase _THREE_ times.
|
|
||||||
Sigh.
|
|
||||||
|
|
||||||
|
Use a previous announcement as a template to create an announcement in a text
|
||||||
For both final releases and pre-releases, send an email with the URL of
|
file then sign it with GPG:
|
||||||
the package to the GNU translation robot to allow the translators to
|
|
||||||
work on it:
|
|
||||||
|
|
||||||
<coordinator@translationproject.org>
|
|
||||||
|
|
||||||
|
|
||||||
Where to Announce
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Create the announcement in a text file, then sign it with GPG.
|
|
||||||
|
|
||||||
gpg --clearsign <announcement.txt>
|
gpg --clearsign <announcement.txt>
|
||||||
|
|
||||||
Upload to gnu.org, then login and send from my account there.
|
Or, use your mail client's PGP/GPG signing capabilities.
|
||||||
|
|
||||||
To: bug-make@gnu.org, help-make@gnu.org, make-w32@gnu.org
|
NOTE! In order to publish a package on the FSF FTP site you need to have my
|
||||||
CC: info-gnu@gnu.org
|
GPG private key, and my passphrase to unlock it.
|
||||||
BCC: make-alpha@gnu.org
|
|
||||||
|
|
||||||
Add a news item to the Savannah project site.
|
Depending on your distribution (whether GnuPG is integrated with your
|
||||||
|
keyring etc.) the upload operation will either pop up a window asking
|
||||||
|
for the GPG key passphrase one time, or else it will use the CLI to ask
|
||||||
|
for the GPG passphrase _THREE_ times. Sigh.
|
||||||
|
|
||||||
Add an update to freshmeat.net.
|
|
||||||
|
Publishing a Release Candidate
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Usually I publish one or two release candidates for people to test before
|
||||||
|
making an official release. Release candidates use a GNU numbering scheme,
|
||||||
|
which add a ".9x" release number to the PREVIOUS major release. So the first
|
||||||
|
release candidate for GNU Make 4.4 would be GNU Make 4.3.90, the second
|
||||||
|
release candidate would be 4.3.91, etc.
|
||||||
|
|
||||||
|
Upload a release candidate using:
|
||||||
|
|
||||||
|
make upload-alpha
|
||||||
|
|
||||||
|
Announce a release candidate to these mailing lists:
|
||||||
|
|
||||||
|
To: bug-make@gnu.org
|
||||||
|
BCC: help-make@gnu.org, make-w32@gnu.org, make-alpha@gnu.org
|
||||||
|
|
||||||
|
You will have to approve the BCC's on the mailing list admin sites. Send
|
||||||
|
separate copies to (don't use CC as replies will go to these lists):
|
||||||
|
|
||||||
|
* coordinator@translationproject.org
|
||||||
|
* platform-testers@gnu.org
|
||||||
|
|
||||||
|
|
||||||
|
Publishing a Release
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
When publishing a final release there are extra steps that need to be taken:
|
||||||
|
|
||||||
|
* Run "make update-makeweb" to get a copy of the GNU Make web pages
|
||||||
|
* Run "make update-gnuweb" to get a copy of the GNU website boilerplate pages
|
||||||
|
* Update the web page boilerplate if necessary:
|
||||||
|
( cd ~/src/make/make-web \
|
||||||
|
&& ~/src/gnu-www/www/server/standards/patch-from-parent \
|
||||||
|
make.html \
|
||||||
|
~/src/gnu-www/www/server/standards/boilerplate.html )
|
||||||
|
* Run "make gendocs" (requires gnulib) to generate the manual files for
|
||||||
|
the GNU Make web pages.
|
||||||
|
* Follow the directions from gendocs for the web page repository
|
||||||
|
|
||||||
|
Manage the Savannah project for GNU Make:
|
||||||
|
|
||||||
|
* In Savannah edit the "Component Version" field and choose the "SCM" entry.
|
||||||
|
Modify the "Value", "Rank", and "Description" values for the to refer to
|
||||||
|
the new release. The "Rank" field should be 10 less than the previous
|
||||||
|
release so it orders properly.
|
||||||
|
|
||||||
|
* In Savannah edit the "Fixed Release" field and choose the "SCM" entry.
|
||||||
|
Modify the "Value", "Rank", and "Description" values for the to refer to
|
||||||
|
the new release. The "Rank" field should be 10 less than the previous
|
||||||
|
release so it orders properly.
|
||||||
|
|
||||||
|
* In Savannah create a new entry for the "Component Version" field:
|
||||||
|
- Value: SCM
|
||||||
|
- Rank: 20
|
||||||
|
- Descr: Issues found in code retrieved from Source Code Management (Git), rather than a distributed version. Please include the SHA you are working with.
|
||||||
|
|
||||||
|
* In Savannah create a new entry for the "Fix Release" field:
|
||||||
|
- Value: SCM
|
||||||
|
- Rank: 20
|
||||||
|
- Descr: Fixed in Source Code Management (Git). The fix will be included in the next release of GNU Make.
|
||||||
|
|
||||||
|
Upload a release using:
|
||||||
|
|
||||||
|
make upload-ftp
|
||||||
|
|
||||||
|
Announce a release to these mailing lists:
|
||||||
|
|
||||||
|
To: info-gnu@gnu.org, bug-make@gnu.org
|
||||||
|
BCC: help-make@gnu.org, make-w32@gnu.org, make-alpha@gnu.org
|
||||||
|
|
||||||
|
You will have to approve the BCC's on the mailing list admin sites. Send
|
||||||
|
separate copies to (don't use CC as replies will go to these lists):
|
||||||
|
|
||||||
|
* coordinator@translationproject.org
|
||||||
|
* platform-testers@gnu.org
|
||||||
|
|
||||||
|
Announce on Savannah:
|
||||||
|
|
||||||
|
* Add a news item to the Savannah project site.
|
||||||
|
|
||||||
|
Start the next release:
|
||||||
|
|
||||||
|
* Update configure.ac and add a ".90" to the release number.
|
||||||
|
* Update the NEWS file with a new section for the release / date.
|
||||||
|
* Update the Savannah URL for the bugs fixed in the NEWS section.
|
||||||
|
|
||||||
|
|
||||||
Appendix A - For The Brave
|
Appendix A - For The Brave
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
For those of you who trust me implicitly, or are just brave (or
|
For those of you who trust me implicitly, or are just brave (or
|
||||||
foolhardy), here is a canned sequence of commands to build a GNU make
|
foolhardy), here is a canned sequence of commands to build a GNU Make
|
||||||
distribution package from a virgin Git source checkout (assuming all the
|
distribution package from a virgin Git source checkout (assuming all the
|
||||||
prerequisites are available of course).
|
prerequisites are available of course).
|
||||||
|
|
||||||
This list is eminently suitable for a quick swipe o' the mouse and a
|
This list is eminently suitable for a quick swipe o' the mouse and a
|
||||||
swift click o' mouse-2 into an xterm. Go for it!
|
swift click o' mouse-2 into an xterm. Go for it!
|
||||||
|
|
||||||
autoreconf -i
|
For a debugging version:
|
||||||
./configure
|
|
||||||
make update
|
|
||||||
make
|
|
||||||
make check
|
|
||||||
|
|
||||||
Or, for a debugging version:
|
./bootstrap && ./configure CFLAGS=-g && make check
|
||||||
|
|
||||||
autoreconf -i && ./configure CFLAGS=-g && make update && make && make check
|
For an optimized version
|
||||||
|
|
||||||
Or, all-in-one:
|
./bootstrap && ./configure && make check
|
||||||
|
|
||||||
autoreconf -i && ./configure && make update && make && make check
|
|
||||||
|
216
README.in
Normal file
216
README.in
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
This directory contains the @PACKAGE_VERSION@ release of @PACKAGE_NAME@.
|
||||||
|
|
||||||
|
See the file NEWS for the user-visible changes from previous releases.
|
||||||
|
In addition, there have been bugs fixed.
|
||||||
|
|
||||||
|
>> If you are trying to build GNU Make from a Git clone rather than a
|
||||||
|
>> downloaded source distribution, see the README.git file for instructions.
|
||||||
|
|
||||||
|
Please check the system-specific notes below for any caveats related to your
|
||||||
|
operating system.
|
||||||
|
|
||||||
|
This README assumes you are building on a POSIX-based operating system.
|
||||||
|
For ports to other operating systems please see the system-specific README
|
||||||
|
files, as described in the "Ports" section below.
|
||||||
|
|
||||||
|
For source distribution building and installation instructions, see the file
|
||||||
|
INSTALL.
|
||||||
|
|
||||||
|
If you need to build GNU Make and have no other 'make' program to use, you can
|
||||||
|
use the shell script 'build.sh' instead. To do this, first run 'configure' as
|
||||||
|
described in INSTALL. Then, instead of typing 'make' to build the program,
|
||||||
|
type 'sh build.sh'. This will compile the program in the current directory.
|
||||||
|
Then you will have a 'make' program that you can use for './make install', or
|
||||||
|
whatever else.
|
||||||
|
|
||||||
|
Some systems' 'make' programs cannot process the Makefile for GNU Make.
|
||||||
|
If you get errors from your system's 'make' when building GNU Make, try using
|
||||||
|
'build.sh' instead.
|
||||||
|
|
||||||
|
|
||||||
|
GNU Make is free software. See the file COPYING for copying conditions.
|
||||||
|
GNU Make is copyright by the Free Software Foundation. Copyright notices
|
||||||
|
condense sequential years into a range; e.g. "1987-1994" means all years
|
||||||
|
from 1987 to 1994 inclusive.
|
||||||
|
|
||||||
|
|
||||||
|
Downloading
|
||||||
|
-----------
|
||||||
|
|
||||||
|
GNU Make can be obtained in many different ways. See a description here:
|
||||||
|
|
||||||
|
https://www.gnu.org/software/software.html
|
||||||
|
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
GNU Make is fully documented in the GNU Make manual, which is contained in
|
||||||
|
this distribution as the file make.texi. You can also find on-line and
|
||||||
|
preformatted (PostScript and DVI) versions at the FSF's web site. There is
|
||||||
|
information there about ordering hardcopy documentation.
|
||||||
|
|
||||||
|
https://www.gnu.org/
|
||||||
|
https://www.gnu.org/doc/doc.html
|
||||||
|
https://www.gnu.org/manual/manual.html
|
||||||
|
|
||||||
|
|
||||||
|
Development
|
||||||
|
-----------
|
||||||
|
|
||||||
|
GNU Make development is hosted by Savannah, the FSF's online development
|
||||||
|
management tool. Savannah is here:
|
||||||
|
|
||||||
|
https://savannah.gnu.org
|
||||||
|
|
||||||
|
And the GNU Make development page is here:
|
||||||
|
|
||||||
|
https://savannah.gnu.org/projects/make/
|
||||||
|
|
||||||
|
You can find most information concerning the development of GNU Make at
|
||||||
|
this site.
|
||||||
|
|
||||||
|
|
||||||
|
Regression Tests
|
||||||
|
----------------
|
||||||
|
|
||||||
|
GNU Make contains a suite of regression tests. To run them use "make check"
|
||||||
|
after building GNU Make. If they fail a tar package will be created
|
||||||
|
containing useful information, which can be emailed (as an attachment) to
|
||||||
|
the <bug-make@gnu.org> mailing list.
|
||||||
|
|
||||||
|
Please note that since these tests rely on known-good-output comparisons,
|
||||||
|
they can show spurious failures on some systems (particularly non-POSIX systems
|
||||||
|
such as Windows).
|
||||||
|
|
||||||
|
|
||||||
|
Bug Reporting
|
||||||
|
-------------
|
||||||
|
|
||||||
|
If you need help using GNU Make, try asking on <help-make@gnu.org>.
|
||||||
|
|
||||||
|
If you found a bug, you can send a bug reports to <bug-make@gnu.org>.
|
||||||
|
Please see the section of the GNU Make manual entitled 'Problems and Bugs'
|
||||||
|
for information on submitting useful and complete bug reports.
|
||||||
|
|
||||||
|
You do not need to subscribe to these lists first.
|
||||||
|
|
||||||
|
You can also use the online bug tracking system in the Savannah GNU Make
|
||||||
|
project to submit new problem reports or search for existing ones:
|
||||||
|
|
||||||
|
https://savannah.gnu.org/bugs/?group=make
|
||||||
|
|
||||||
|
We prefer to use the bug tracking system ONLY for bugs or enhancements,
|
||||||
|
not for help requests: please use the mailing lists to get help.
|
||||||
|
|
||||||
|
|
||||||
|
Submitting Patches
|
||||||
|
------------------
|
||||||
|
|
||||||
|
If you'd like to propose a change to GNU Make, you can provide a patch with
|
||||||
|
your changes. If you are making your changes in a Git workspace you can run
|
||||||
|
"git format-patch" to create a patch file. If not, you can use the diff(1)
|
||||||
|
utility to create a patch file; please use "diff -u".
|
||||||
|
|
||||||
|
Once you have a patch you can submit it in any of these ways:
|
||||||
|
|
||||||
|
* Create a bug on Savannah and add the patch as an attachment:
|
||||||
|
https://savannah.gnu.org/bugs/?group=make&func=additem
|
||||||
|
|
||||||
|
* Send the patch via email to <bug-make@gnu.org>: be sure to add it as an
|
||||||
|
attachment to avoid interference by email processors.
|
||||||
|
|
||||||
|
All non-trivial changes require FSF copyright paperwork to be completed
|
||||||
|
before they can be accepted. Contact <bug-make@gnu.org> for help.
|
||||||
|
|
||||||
|
|
||||||
|
Git Access
|
||||||
|
----------
|
||||||
|
|
||||||
|
The GNU Make source repository is available via Git from the GNU Savannah Git
|
||||||
|
server; look here for details:
|
||||||
|
|
||||||
|
https://savannah.gnu.org/git/?group=make
|
||||||
|
|
||||||
|
Please note: you won't be able to build GNU Make from Git without installing
|
||||||
|
appropriate maintainer's tools, such as GNU m4, automake, autoconf, Perl, GNU
|
||||||
|
make, and GCC.
|
||||||
|
|
||||||
|
See the README.git file for instructions on how to build GNU Make once these
|
||||||
|
tools are available. We make no guarantees about the contents or quality of
|
||||||
|
the latest code in the Git repository: it is not unheard of for code that is
|
||||||
|
known to be broken to be checked in. Use at your own risk.
|
||||||
|
|
||||||
|
|
||||||
|
System-specific Notes
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
One area that is often a problem in configuration and porting is the code
|
||||||
|
to check the system's current load average. To make it easier to test and
|
||||||
|
debug this code, you can do 'make check-loadavg' to see if it works
|
||||||
|
properly on your system. (You must run 'configure' beforehand, but you
|
||||||
|
need not build 'make' itself to run this test.)
|
||||||
|
|
||||||
|
Another potential source of porting problems is the support for large
|
||||||
|
files (LFS) in configure for those operating systems that provide it.
|
||||||
|
Please report any bugs that you find in this area. If you run into
|
||||||
|
difficulties, then as a workaround you should be able to disable LFS by
|
||||||
|
adding the '--disable-largefile' option to the 'configure' script.
|
||||||
|
|
||||||
|
On systems that support micro- and nano-second timestamp values and
|
||||||
|
where stat(2) provides this information, GNU Make will use it when
|
||||||
|
comparing timestamps to get the most accurate possible result. However,
|
||||||
|
note that many current implementations of tools that *set* timestamps do
|
||||||
|
not preserve micro- or nano-second granularity. This means that "cp -p"
|
||||||
|
and other similar tools (tar, etc.) may not exactly duplicate timestamps
|
||||||
|
with micro- and nano-second granularity on some systems. If your build
|
||||||
|
system contains rules that depend on proper behavior of tools like "cp
|
||||||
|
-p", you should consider using the .LOW_RESOLUTION_TIME pseudo-target to
|
||||||
|
force make to treat them properly. See the manual for details.
|
||||||
|
|
||||||
|
|
||||||
|
Ports
|
||||||
|
-----
|
||||||
|
|
||||||
|
- See README.customs for details on integrating GNU Make with the
|
||||||
|
Customs distributed build environment from the Pmake distribution.
|
||||||
|
|
||||||
|
- See README.VMS for details about GNU Make on OpenVMS.
|
||||||
|
|
||||||
|
- See README.zOS for details about GNU Make on z/OS.
|
||||||
|
|
||||||
|
- See README.W32 for details about GNU Make on Windows NT, 95, or 98.
|
||||||
|
|
||||||
|
- See README.DOS for compilation instructions on MS-DOS and MS-Windows
|
||||||
|
using DJGPP tools.
|
||||||
|
|
||||||
|
A precompiled binary of the MSDOS port of GNU Make is available as part
|
||||||
|
of DJGPP; see the WWW page https://www.delorie.com/djgpp/ for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
The Cygwin project maintains its own port of GNU Make. That port may have
|
||||||
|
patches which are not present in this version. If you are using Cygwin
|
||||||
|
you should use their version of GNU Make, and if you have questions about
|
||||||
|
it you should start by asking on those mailing lists and forums.
|
||||||
|
|
||||||
|
Please note there are two _separate_ ports of GNU Make for Microsoft
|
||||||
|
systems: a native Windows port built with (for example) MSVC or MinGW,
|
||||||
|
and a DOS-based port built with DJGPP. Please be sure you are looking
|
||||||
|
at the right README!
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 1988-2024 Free Software Foundation, Inc.
|
||||||
|
This file is part of GNU Make.
|
||||||
|
|
||||||
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU General Public License as published by the Free Software
|
||||||
|
Foundation; either version 3 of the License, or (at your option) any later
|
||||||
|
version.
|
||||||
|
|
||||||
|
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
178
README.template
178
README.template
@ -1,178 +0,0 @@
|
|||||||
This directory contains the %VERSION% release of GNU Make.
|
|
||||||
|
|
||||||
See the file NEWS for the user-visible changes from previous releases.
|
|
||||||
In addition, there have been bugs fixed.
|
|
||||||
|
|
||||||
Please check the system-specific notes below for any caveats related to
|
|
||||||
your operating system.
|
|
||||||
|
|
||||||
For general building and installation instructions, see the file INSTALL.
|
|
||||||
|
|
||||||
If you need to build GNU Make and have no other 'make' program to use,
|
|
||||||
you can use the shell script 'build.sh' instead. To do this, first run
|
|
||||||
'configure' as described in INSTALL. Then, instead of typing 'make' to
|
|
||||||
build the program, type 'sh build.sh'. This should compile the program
|
|
||||||
in the current directory. Then you will have a Make program that you can
|
|
||||||
use for './make install', or whatever else.
|
|
||||||
|
|
||||||
Some systems' Make programs are broken and cannot process the Makefile for
|
|
||||||
GNU Make. If you get errors from your system's Make when building GNU
|
|
||||||
Make, try using 'build.sh' instead.
|
|
||||||
|
|
||||||
|
|
||||||
GNU Make is free software. See the file COPYING for copying conditions.
|
|
||||||
GNU Make is copyright by the Free Software Foundation. Copyright notices
|
|
||||||
condense sequential years into a range; e.g. "1987-1994" means all years
|
|
||||||
from 1987 to 1994 inclusive.
|
|
||||||
|
|
||||||
Downloading
|
|
||||||
-----------
|
|
||||||
|
|
||||||
GNU Make can be obtained in many different ways. See a description here:
|
|
||||||
|
|
||||||
http://www.gnu.org/software/software.html
|
|
||||||
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
-------------
|
|
||||||
|
|
||||||
GNU make is fully documented in the GNU Make manual, which is contained
|
|
||||||
in this distribution as the file make.texinfo. You can also find
|
|
||||||
on-line and preformatted (PostScript and DVI) versions at the FSF's web
|
|
||||||
site. There is information there about ordering hardcopy documentation.
|
|
||||||
|
|
||||||
http://www.gnu.org/
|
|
||||||
http://www.gnu.org/doc/doc.html
|
|
||||||
http://www.gnu.org/manual/manual.html
|
|
||||||
|
|
||||||
|
|
||||||
Development
|
|
||||||
-----------
|
|
||||||
|
|
||||||
GNU Make development is hosted by Savannah, the FSF's online development
|
|
||||||
management tool. Savannah is here:
|
|
||||||
|
|
||||||
http://savannah.gnu.org
|
|
||||||
|
|
||||||
And the GNU Make development page is here:
|
|
||||||
|
|
||||||
http://savannah.gnu.org/projects/make/
|
|
||||||
|
|
||||||
You can find most information concerning the development of GNU Make at
|
|
||||||
this site.
|
|
||||||
|
|
||||||
|
|
||||||
Bug Reporting
|
|
||||||
-------------
|
|
||||||
|
|
||||||
You can send GNU make bug reports to <bug-make@gnu.org>. Please see the
|
|
||||||
section of the GNU make manual entitled 'Problems and Bugs' for
|
|
||||||
information on submitting useful and complete bug reports.
|
|
||||||
|
|
||||||
You can also use the online bug tracking system in the Savannah GNU Make
|
|
||||||
project to submit new problem reports or search for existing ones:
|
|
||||||
|
|
||||||
http://savannah.gnu.org/bugs/?group=make
|
|
||||||
|
|
||||||
If you need help using GNU make, try these forums:
|
|
||||||
|
|
||||||
help-make@gnu.org
|
|
||||||
help-utils@gnu.org
|
|
||||||
news:gnu.utils.help
|
|
||||||
news:gnu.utils.bug
|
|
||||||
|
|
||||||
|
|
||||||
Git Access
|
|
||||||
----------
|
|
||||||
|
|
||||||
The GNU make source repository is available via Git from the
|
|
||||||
GNU Savannah Git server; look here for details:
|
|
||||||
|
|
||||||
http://savannah.gnu.org/git/?group=make
|
|
||||||
|
|
||||||
Please note: you won't be able to build GNU make from Git without
|
|
||||||
installing appropriate maintainer's tools, such as GNU m4, automake,
|
|
||||||
autoconf, Perl, GNU make, and GCC. See the README.git file for hints on
|
|
||||||
how to build GNU make once these tools are available. We make no
|
|
||||||
guarantees about the contents or quality of the latest code in the Git
|
|
||||||
repository: it is not unheard of for code that is known to be broken to
|
|
||||||
be checked in. Use at your own risk.
|
|
||||||
|
|
||||||
|
|
||||||
System-specific Notes
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
It has been reported that the XLC 1.2 compiler on AIX 3.2 is buggy such
|
|
||||||
that if you compile make with 'cc -O' on AIX 3.2, it will not work
|
|
||||||
correctly. It is said that using 'cc' without '-O' does work.
|
|
||||||
|
|
||||||
The standard /bin/sh on SunOS 4.1.3_U1 and 4.1.4 is broken and cannot be
|
|
||||||
used to configure GNU make. Please install a different shell such as
|
|
||||||
bash or pdksh in order to run "configure". See this message for more
|
|
||||||
information:
|
|
||||||
http://mail.gnu.org/archive/html/bug-autoconf/2003-10/msg00190.html
|
|
||||||
|
|
||||||
One area that is often a problem in configuration and porting is the code
|
|
||||||
to check the system's current load average. To make it easier to test and
|
|
||||||
debug this code, you can do 'make check-loadavg' to see if it works
|
|
||||||
properly on your system. (You must run 'configure' beforehand, but you
|
|
||||||
need not build Make itself to run this test.)
|
|
||||||
|
|
||||||
Another potential source of porting problems is the support for large
|
|
||||||
files (LFS) in configure for those operating systems that provide it.
|
|
||||||
Please report any bugs that you find in this area. If you run into
|
|
||||||
difficulties, then as a workaround you should be able to disable LFS by
|
|
||||||
adding the '--disable-largefile' option to the 'configure' script.
|
|
||||||
|
|
||||||
On systems that support micro- and nano-second timestamp values and
|
|
||||||
where stat(2) provides this information, GNU make will use it when
|
|
||||||
comparing timestamps to get the most accurate possible result. However,
|
|
||||||
note that many current implementations of tools that *set* timestamps do
|
|
||||||
not preserve micro- or nano-second granularity. This means that "cp -p"
|
|
||||||
and other similar tools (tar, etc.) may not exactly duplicate timestamps
|
|
||||||
with micro- and nano-second granularity on some systems. If your build
|
|
||||||
system contains rules that depend on proper behavior of tools like "cp
|
|
||||||
-p", you should consider using the .LOW_RESOLUTION_TIME pseudo-target to
|
|
||||||
force make to treat them properly. See the manual for details.
|
|
||||||
|
|
||||||
|
|
||||||
Ports
|
|
||||||
-----
|
|
||||||
|
|
||||||
- See README.customs for details on integrating GNU make with the
|
|
||||||
Customs distributed build environment from the Pmake distribution.
|
|
||||||
|
|
||||||
- See readme.vms for details about GNU Make on OpenVMS.
|
|
||||||
|
|
||||||
- See README.Amiga for details about GNU Make on AmigaDOS.
|
|
||||||
|
|
||||||
- See README.W32 for details about GNU Make on Windows NT, 95, or 98.
|
|
||||||
|
|
||||||
- See README.DOS for compilation instructions on MS-DOS and MS-Windows
|
|
||||||
using DJGPP tools.
|
|
||||||
|
|
||||||
A precompiled binary of the MSDOS port of GNU Make is available as part
|
|
||||||
of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
Please note there are two _separate_ ports of GNU make for Microsoft
|
|
||||||
systems: a native Windows tool built with (for example) MSVC or Cygwin,
|
|
||||||
and a DOS-based tool built with DJGPP. Please be sure you are looking
|
|
||||||
at the right README!
|
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Copyright (C) 1988-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
83
README.zOS
Normal file
83
README.zOS
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
-*-text-*-
|
||||||
|
GNU Make has been ported to z/OS, tested on z/OS V2R4.
|
||||||
|
|
||||||
|
|
||||||
|
PREREQUISITES
|
||||||
|
-------------
|
||||||
|
Building GNU Make requires certain tools be installed on your z/OS system.
|
||||||
|
These tools can be downloaded from: https://github.com/ZOSOpenTools
|
||||||
|
For detailed instructions on how to set up these tools, visit
|
||||||
|
https://zosopentools.github.io/meta/#/Guides/Pre-req
|
||||||
|
|
||||||
|
You will need curl, tar, and gzip to download and unpack the GNU Make release
|
||||||
|
package, but presumably you've already worked this out if you're reading this
|
||||||
|
document!
|
||||||
|
|
||||||
|
You will need the IBM C/C++ compiler. You can download a web deliverable
|
||||||
|
add-on feature to your XL C/C++ compiler here:
|
||||||
|
https://www-40.ibm.com/servers/resourcelink/svc00100.nsf/pages/xlCC++V241ForZOsV24
|
||||||
|
|
||||||
|
Alternatively, you can install and manage C/C++ for Open Enterprise Languages
|
||||||
|
on z/OS using RedHat OpenShift Container Platform and IBM Z and Cloud
|
||||||
|
Modernization Stack.
|
||||||
|
|
||||||
|
GNU Make has a dependency on the ZOSLIB library, which is documented here:
|
||||||
|
https://zosopentools.github.io/meta/#/Guides/Zoslib.
|
||||||
|
|
||||||
|
To obtain the latest release of zoslib, you can download it from here:
|
||||||
|
https://github.com/ZOSOpenTools/zoslibport/releases.
|
||||||
|
|
||||||
|
|
||||||
|
BUILDING
|
||||||
|
--------
|
||||||
|
If you are trying to build from a checked-out Git workspace, see README.git.
|
||||||
|
|
||||||
|
Before building GNU Make, you will need to ensure that the following
|
||||||
|
environment variables are set, to turn on z/OS enhanced ASCII support:
|
||||||
|
|
||||||
|
export _BPXK_AUTOCVT=ON
|
||||||
|
export _CEE_RUNOPTS="$_CEE_RUNOPTS FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)"
|
||||||
|
export _TAG_REDIR_ERR=txt
|
||||||
|
export _TAG_REDIR_IN=txt
|
||||||
|
export _TAG_REDIR_OUT=txt
|
||||||
|
|
||||||
|
To ensure proper functioning of xlclang, set the following environment
|
||||||
|
variables before building:
|
||||||
|
|
||||||
|
export _CC_CCMODE=1
|
||||||
|
export _C89_CCMODE=1
|
||||||
|
export _CXX_CCMODE=1
|
||||||
|
|
||||||
|
Set PATH_TO_ZOSLIB to the location of your zoslib installation; e.g.:
|
||||||
|
|
||||||
|
PATH_TO_ZOSLIB=$HOME/zopen/prod/zoslib
|
||||||
|
|
||||||
|
Invoke ./configure as follows:
|
||||||
|
|
||||||
|
./configure \
|
||||||
|
CC=xlclang \
|
||||||
|
CPPFLAGS="-DNSIG=42 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE -D_OPEN_SYS_FILE_EXT=1 -D_AE_BIMODAL=1 -D_ENHANCED_ASCII_EXT=0xFFFFFFF -DZOSLIB_OVERRIDE_CLIB=1" \
|
||||||
|
CFLAGS="-qascii -std=gnu11 -qnocsect -qenum=int -I$PATH_TO_ZOSLIB/include" \
|
||||||
|
LDFLAGS="-L$PATH_TO_ZOSLIB/lib" \
|
||||||
|
LIBS="-lzoslib $PATH_TO_ZOSLIB/lib/CXXRT64.x"
|
||||||
|
|
||||||
|
If you have an instance of make already available you can build with:
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
If not, you can build with:
|
||||||
|
|
||||||
|
./build.sh
|
||||||
|
|
||||||
|
|
||||||
|
TESTING
|
||||||
|
-------
|
||||||
|
To run the regression tests you'll need to install Perl and enable it.
|
||||||
|
Then you can run:
|
||||||
|
|
||||||
|
./make check
|
||||||
|
|
||||||
|
|
||||||
|
INSTALLING
|
||||||
|
----------
|
||||||
|
Copy the "make" program to wherever you want it to be installed, on your PATH.
|
13
SCOPTIONS
13
SCOPTIONS
@ -1,13 +0,0 @@
|
|||||||
ERRORREXX
|
|
||||||
OPTIMIZE
|
|
||||||
NOVERSION
|
|
||||||
OPTIMIZERTIME
|
|
||||||
OPTIMIZERALIAS
|
|
||||||
DEFINE INCLUDEDIR="include:"
|
|
||||||
DEFINE LIBDIR="lib:"
|
|
||||||
DEFINE NO_ALLOCA
|
|
||||||
DEFINE NO_FLOAT
|
|
||||||
DEFINE NO_ARCHIVES
|
|
||||||
IGNORE=161
|
|
||||||
IGNORE=100
|
|
||||||
STARTUP=cres
|
|
@ -1,218 +0,0 @@
|
|||||||
# -*-Makefile-*- for building GNU make with smake
|
|
||||||
#
|
|
||||||
# NOTE: If you have no 'make' program at all to process this makefile,
|
|
||||||
# run 'build.sh' instead.
|
|
||||||
#
|
|
||||||
# Copyright (C) 1995-2013 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#
|
|
||||||
# Makefile for GNU Make
|
|
||||||
#
|
|
||||||
|
|
||||||
# Ultrix 2.2 make doesn't expand the value of VPATH.
|
|
||||||
VPATH = /make-%VERSION%/
|
|
||||||
# This must repeat the value, because configure will remove 'VPATH = .'.
|
|
||||||
srcdir = /make-%VERSION%/
|
|
||||||
|
|
||||||
CC = sc
|
|
||||||
RM = delete
|
|
||||||
MAKE = smake
|
|
||||||
|
|
||||||
CFLAGS =
|
|
||||||
CPPFLAGS =
|
|
||||||
LDFLAGS =
|
|
||||||
|
|
||||||
# Define these for your system as follows:
|
|
||||||
# -DNO_ARCHIVES To disable 'ar' archive support.
|
|
||||||
# -DNO_FLOAT To avoid using floating-point numbers.
|
|
||||||
# -DENUM_BITFIELDS If the compiler isn't GCC but groks enum foo:2.
|
|
||||||
# Some compilers apparently accept this
|
|
||||||
# without complaint but produce losing code,
|
|
||||||
# so beware.
|
|
||||||
# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline.
|
|
||||||
# See also 'config.h'.
|
|
||||||
defines =
|
|
||||||
|
|
||||||
# Which flavor of remote job execution support to use.
|
|
||||||
# The code is found in 'remote-$(REMOTE).c'.
|
|
||||||
REMOTE = stub
|
|
||||||
|
|
||||||
# If you are using the GNU C library, or have the GNU getopt functions in
|
|
||||||
# your C library, you can comment these out.
|
|
||||||
GETOPT = getopt.o getopt1.o
|
|
||||||
GETOPT_SRC = $(srcdir)getopt.c $(srcdir)getopt1.c $(srcdir)getopt.h
|
|
||||||
|
|
||||||
# If you are using the GNU C library, or have the GNU glob functions in
|
|
||||||
# your C library, you can comment this out. GNU make uses special hooks
|
|
||||||
# into the glob functions to be more efficient (by using make's directory
|
|
||||||
# cache for globbing), so you must use the GNU functions even if your
|
|
||||||
# system's C library has the 1003.2 glob functions already. Also, the glob
|
|
||||||
# functions in the AIX and HPUX C libraries are said to be buggy.
|
|
||||||
GLOB = Lib glob/glob.lib
|
|
||||||
|
|
||||||
# If your system doesn't have alloca, or the one provided is bad, define this.
|
|
||||||
ALLOCA = alloca.o
|
|
||||||
ALLOCA_SRC = $(srcdir)alloca.c
|
|
||||||
|
|
||||||
# If your system needs extra libraries loaded in, define them here.
|
|
||||||
# System V probably need -lPW for alloca. HP-UX 7.0's alloca in
|
|
||||||
# libPW.a is broken on HP9000s300 and HP9000s400 machines. Use
|
|
||||||
# alloca.c instead on those machines.
|
|
||||||
LOADLIBES =
|
|
||||||
|
|
||||||
# Any extra object files your system needs.
|
|
||||||
extras = amiga.o
|
|
||||||
|
|
||||||
# Common prefix for machine-independent installed files.
|
|
||||||
prefix =
|
|
||||||
# Common prefix for machine-dependent installed files.
|
|
||||||
exec_prefix =
|
|
||||||
|
|
||||||
# Directory to install 'make' in.
|
|
||||||
bindir = sc:c
|
|
||||||
# Directory to find libraries in for '-lXXX'.
|
|
||||||
libdir = lib:
|
|
||||||
# Directory to search by default for included makefiles.
|
|
||||||
includedir = include:
|
|
||||||
# Directory to install the Info files in.
|
|
||||||
infodir = doc:
|
|
||||||
# Directory to install the man page in.
|
|
||||||
mandir = t:
|
|
||||||
# Number to put on the man page filename.
|
|
||||||
manext = 1
|
|
||||||
# Prefix to put on installed 'make' binary file name.
|
|
||||||
binprefix =
|
|
||||||
# Prefix to put on installed 'make' man page file name.
|
|
||||||
manprefix = $(binprefix)
|
|
||||||
|
|
||||||
# Whether or not make needs to be installed setgid.
|
|
||||||
# The value should be either 'true' or 'false'.
|
|
||||||
# On many systems, the getloadavg function (used to implement the '-l'
|
|
||||||
# switch) will not work unless make is installed setgid kmem.
|
|
||||||
install_setgid = false
|
|
||||||
# Install make setgid to this group so it can read /dev/kmem.
|
|
||||||
group = sys
|
|
||||||
|
|
||||||
# Program to install 'make'.
|
|
||||||
INSTALL_PROGRAM = copy
|
|
||||||
# Program to install the man page.
|
|
||||||
INSTALL_DATA = copy
|
|
||||||
# Generic install program.
|
|
||||||
INSTALL = copy
|
|
||||||
|
|
||||||
# Program to format Texinfo source into Info files.
|
|
||||||
MAKEINFO = makeinfo
|
|
||||||
# Program to format Texinfo source into DVI files.
|
|
||||||
TEXI2DVI = texi2dvi
|
|
||||||
|
|
||||||
# Programs to make tags files.
|
|
||||||
ETAGS = etags -w
|
|
||||||
CTAGS = ctags -w
|
|
||||||
|
|
||||||
#guile = guile.o
|
|
||||||
|
|
||||||
objs = commands.o job.o dir.o file.o misc.o main.o read.o remake.o \
|
|
||||||
rule.o implicit.o default.o variable.o expand.o function.o \
|
|
||||||
vpath.o version.o ar.o arscan.o signame.o strcache.o hash.o \
|
|
||||||
output.o remote-$(REMOTE).o $(GLOB) $(GETOPT) $(ALLOCA) \
|
|
||||||
$(extras) $(guile)
|
|
||||||
|
|
||||||
srcs = $(srcdir)commands.c $(srcdir)job.c $(srcdir)dir.c \
|
|
||||||
$(srcdir)file.c $(srcdir)getloadavg.c $(srcdir)misc.c \
|
|
||||||
$(srcdir)main.c $(srcdir)read.c $(srcdir)remake.c \
|
|
||||||
$(srcdir)rule.c $(srcdir)implicit.c $(srcdir)default.c \
|
|
||||||
$(srcdir)variable.c $(srcdir)expand.c $(srcdir)function.c \
|
|
||||||
$(srcdir)vpath.c $(srcdir)version.c $(srcdir)hash.c \
|
|
||||||
$(srcdir)guile.c $(srcdir)remote-$(REMOTE).c \
|
|
||||||
$(srcdir)ar.c $(srcdir)arscan.c $(srcdir)strcache.c \
|
|
||||||
$(srcdir)signame.c $(srcdir)signame.h $(GETOPT_SRC) \
|
|
||||||
$(srcdir)commands.h $(srcdir)dep.h $(srcdir)file.h \
|
|
||||||
$(srcdir)job.h $(srcdir)makeint.h $(srcdir)rule.h \
|
|
||||||
$(srcdir)output.c $(srcdir)output.h \
|
|
||||||
$(srcdir)variable.h $(ALLOCA_SRC) $(srcdir)config.h.in
|
|
||||||
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
.SUFFIXES: .o .c .h .ps .dvi .info .texinfo
|
|
||||||
|
|
||||||
all: make
|
|
||||||
info: make.info
|
|
||||||
dvi: make.dvi
|
|
||||||
# Some makes apparently use .PHONY as the default goal if it is before 'all'.
|
|
||||||
.PHONY: all check info dvi
|
|
||||||
|
|
||||||
make.info: make.texinfo
|
|
||||||
$(MAKEINFO) -I$(srcdir) $(srcdir)make.texinfo -o make.info
|
|
||||||
|
|
||||||
make.dvi: make.texinfo
|
|
||||||
$(TEXI2DVI) $(srcdir)make.texinfo
|
|
||||||
|
|
||||||
make.ps: make.dvi
|
|
||||||
dvi2ps make.dvi > make.ps
|
|
||||||
|
|
||||||
make: $(objs) glob/glob.lib
|
|
||||||
$(CC) Link $(LDFLAGS) $(objs) $(LOADLIBES) To make.new
|
|
||||||
-delete quiet make
|
|
||||||
rename make.new make
|
|
||||||
|
|
||||||
# -I. is needed to find config.h in the build directory.
|
|
||||||
.c.o:
|
|
||||||
$(CC) $(defines) IDir "" IDir $(srcdir)glob \
|
|
||||||
$(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)
|
|
||||||
|
|
||||||
glob/glob.lib:
|
|
||||||
execute <<
|
|
||||||
cd glob
|
|
||||||
smake
|
|
||||||
<
|
|
||||||
|
|
||||||
tagsrcs = $(srcs) $(srcdir)remote-*.c
|
|
||||||
TAGS: $(tagsrcs)
|
|
||||||
$(ETAGS) $(tagsrcs)
|
|
||||||
tags: $(tagsrcs)
|
|
||||||
$(CTAGS) $(tagsrcs)
|
|
||||||
|
|
||||||
.PHONY: install installdirs
|
|
||||||
install:
|
|
||||||
copy make sc:c
|
|
||||||
|
|
||||||
loadavg: loadavg.c config.h
|
|
||||||
$(CC) $(defines) -DTEST -I. -I$(srcdir) $(CFLAGS) $(LDFLAGS) \
|
|
||||||
loadavg.c $(LOADLIBES) -o $@
|
|
||||||
|
|
||||||
clean: glob-clean
|
|
||||||
-$(RM) -f make loadavg *.o core make.dvi
|
|
||||||
|
|
||||||
distclean: clean glob-realclean
|
|
||||||
-$(RM) -f Makefile config.h config.status build.sh
|
|
||||||
-$(RM) -f config.log config.cache
|
|
||||||
-$(RM) -f TAGS tags
|
|
||||||
-$(RM) -f make.?? make.??s make.log make.toc make.*aux
|
|
||||||
-$(RM) -f loadavg.c
|
|
||||||
|
|
||||||
realclean: distclean
|
|
||||||
-$(RM) -f make.info*
|
|
||||||
|
|
||||||
mostlyclean: clean
|
|
||||||
|
|
||||||
.PHONY: glob-clean glob-realclean
|
|
||||||
|
|
||||||
glob-clean glob-realclean:
|
|
||||||
execute <<
|
|
||||||
cd glob
|
|
||||||
smake $@
|
|
||||||
<
|
|
28
TODO.private
28
TODO.private
@ -99,33 +99,9 @@ The Rest of the List
|
|||||||
you just can't figure it out. The way variables are expanded now
|
you just can't figure it out. The way variables are expanded now
|
||||||
means this isn't 100% trivial, but it probably won't be hard.
|
means this isn't 100% trivial, but it probably won't be hard.
|
||||||
|
|
||||||
8) Integration of Guile as an embedded scripting language. This means:
|
|
||||||
allowing Guile functions to be declared in makefiles somehow, then
|
|
||||||
providing a syntax for invoking them. At least one formulation of
|
|
||||||
that would have the function resolve to a string which would be
|
|
||||||
substituted in the makefile, kind of like $(shell ...) does now, but
|
|
||||||
using the embedded interpreter so there's no process forked of
|
|
||||||
course. Obviously this is an optional add-on feature.
|
|
||||||
|
|
||||||
It could be more advanced than that, even, who knows? Maybe make
|
|
||||||
could provide Guile functions that allow Guile scripts more direct
|
|
||||||
access to internal make structures, somehow. This kind of thing
|
|
||||||
needs a lot of thought.
|
|
||||||
|
|
||||||
Also there's always the flip side: in some very fundamental ways
|
|
||||||
make isn't the best choice right now for a complex build tool. It's
|
|
||||||
great for simple-to-medium tasks, but there are already other tools
|
|
||||||
available for the really tough situations. Ask yourself,
|
|
||||||
realistically, how much work is worthwhile to add to make, given the
|
|
||||||
fundamentals you can't really overcome without significantly
|
|
||||||
affecting backward compatibility--and then why not use another tool
|
|
||||||
in the first place?
|
|
||||||
|
|
||||||
Something to think about.
|
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 1997-2013 Free Software Foundation, Inc.
|
Copyright (C) 1997-2024 Free Software Foundation, Inc.
|
||||||
This file is part of GNU Make.
|
This file is part of GNU Make.
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
@ -138,4 +114,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
503
alloca.c
503
alloca.c
@ -1,503 +0,0 @@
|
|||||||
/* alloca.c -- allocate automatically reclaimed memory
|
|
||||||
(Mostly) portable public-domain implementation -- D A Gwyn
|
|
||||||
|
|
||||||
This implementation of the PWB library alloca function,
|
|
||||||
which is used to allocate space off the run-time stack so
|
|
||||||
that it is automatically reclaimed upon procedure exit,
|
|
||||||
was inspired by discussions with J. Q. Johnson of Cornell.
|
|
||||||
J.Otto Tennant <jot@cray.com> contributed the Cray support.
|
|
||||||
|
|
||||||
There are some preprocessor constants that can
|
|
||||||
be defined when compiling for your specific system, for
|
|
||||||
improved efficiency; however, the defaults should be okay.
|
|
||||||
|
|
||||||
The general concept of this implementation is to keep
|
|
||||||
track of all alloca-allocated blocks, and reclaim any
|
|
||||||
that are found to be deeper in the stack than the current
|
|
||||||
invocation. This heuristic does not reclaim storage as
|
|
||||||
soon as it becomes invalid, but it will do so eventually.
|
|
||||||
|
|
||||||
As a special case, alloca(0) reclaims storage without
|
|
||||||
allocating any. It is a good idea to use alloca(0) in
|
|
||||||
your main control loop, etc. to force garbage collection. */
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STRING_H
|
|
||||||
#include <string.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_STDLIB_H
|
|
||||||
#include <stdlib.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef emacs
|
|
||||||
#include "blockinput.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If compiling with GCC 2, this file's not needed. */
|
|
||||||
#if !defined (__GNUC__) || __GNUC__ < 2
|
|
||||||
|
|
||||||
/* If someone has defined alloca as a macro,
|
|
||||||
there must be some other way alloca is supposed to work. */
|
|
||||||
#ifndef alloca
|
|
||||||
|
|
||||||
#ifdef emacs
|
|
||||||
#ifdef static
|
|
||||||
/* actually, only want this if static is defined as ""
|
|
||||||
-- this is for usg, in which emacs must undefine static
|
|
||||||
in order to make unexec workable
|
|
||||||
*/
|
|
||||||
#ifndef STACK_DIRECTION
|
|
||||||
you
|
|
||||||
lose
|
|
||||||
-- must know STACK_DIRECTION at compile-time
|
|
||||||
#endif /* STACK_DIRECTION undefined */
|
|
||||||
#endif /* static */
|
|
||||||
#endif /* emacs */
|
|
||||||
|
|
||||||
/* If your stack is a linked list of frames, you have to
|
|
||||||
provide an "address metric" ADDRESS_FUNCTION macro. */
|
|
||||||
|
|
||||||
#if defined (CRAY) && defined (CRAY_STACKSEG_END)
|
|
||||||
long i00afunc ();
|
|
||||||
#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
|
|
||||||
#else
|
|
||||||
#define ADDRESS_FUNCTION(arg) &(arg)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __STDC__
|
|
||||||
typedef void *pointer;
|
|
||||||
#else
|
|
||||||
typedef char *pointer;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
#define NULL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Different portions of Emacs need to call different versions of
|
|
||||||
malloc. The Emacs executable needs alloca to call xmalloc, because
|
|
||||||
ordinary malloc isn't protected from input signals. On the other
|
|
||||||
hand, the utilities in lib-src need alloca to call malloc; some of
|
|
||||||
them are very simple, and don't have an xmalloc routine.
|
|
||||||
|
|
||||||
Non-Emacs programs expect this to call use xmalloc.
|
|
||||||
|
|
||||||
Callers below should use malloc. */
|
|
||||||
|
|
||||||
#ifndef emacs
|
|
||||||
#define malloc xmalloc
|
|
||||||
#endif
|
|
||||||
extern pointer malloc ();
|
|
||||||
|
|
||||||
/* Define STACK_DIRECTION if you know the direction of stack
|
|
||||||
growth for your system; otherwise it will be automatically
|
|
||||||
deduced at run-time.
|
|
||||||
|
|
||||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
|
||||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
|
||||||
STACK_DIRECTION = 0 => direction of growth unknown */
|
|
||||||
|
|
||||||
#ifndef STACK_DIRECTION
|
|
||||||
#define STACK_DIRECTION 0 /* Direction unknown. */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if STACK_DIRECTION != 0
|
|
||||||
|
|
||||||
#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
|
|
||||||
|
|
||||||
#else /* STACK_DIRECTION == 0; need run-time code. */
|
|
||||||
|
|
||||||
static int stack_dir; /* 1 or -1 once known. */
|
|
||||||
#define STACK_DIR stack_dir
|
|
||||||
|
|
||||||
static void
|
|
||||||
find_stack_direction (void)
|
|
||||||
{
|
|
||||||
static char *addr = NULL; /* Address of first 'dummy', once known. */
|
|
||||||
auto char dummy; /* To get stack address. */
|
|
||||||
|
|
||||||
if (addr == NULL)
|
|
||||||
{ /* Initial entry. */
|
|
||||||
addr = ADDRESS_FUNCTION (dummy);
|
|
||||||
|
|
||||||
find_stack_direction (); /* Recurse once. */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Second entry. */
|
|
||||||
if (ADDRESS_FUNCTION (dummy) > addr)
|
|
||||||
stack_dir = 1; /* Stack grew upward. */
|
|
||||||
else
|
|
||||||
stack_dir = -1; /* Stack grew downward. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* STACK_DIRECTION == 0 */
|
|
||||||
|
|
||||||
/* An "alloca header" is used to:
|
|
||||||
(a) chain together all alloca'ed blocks;
|
|
||||||
(b) keep track of stack depth.
|
|
||||||
|
|
||||||
It is very important that sizeof(header) agree with malloc
|
|
||||||
alignment chunk size. The following default should work okay. */
|
|
||||||
|
|
||||||
#ifndef ALIGN_SIZE
|
|
||||||
#define ALIGN_SIZE sizeof(double)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef union hdr
|
|
||||||
{
|
|
||||||
char align[ALIGN_SIZE]; /* To force sizeof(header). */
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
union hdr *next; /* For chaining headers. */
|
|
||||||
char *deep; /* For stack depth measure. */
|
|
||||||
} h;
|
|
||||||
} header;
|
|
||||||
|
|
||||||
static header *last_alloca_header = NULL; /* -> last alloca header. */
|
|
||||||
|
|
||||||
/* Return a pointer to at least SIZE bytes of storage,
|
|
||||||
which will be automatically reclaimed upon exit from
|
|
||||||
the procedure that called alloca. Originally, this space
|
|
||||||
was supposed to be taken from the current stack frame of the
|
|
||||||
caller, but that method cannot be made to work for some
|
|
||||||
implementations of C, for example under Gould's UTX/32. */
|
|
||||||
|
|
||||||
pointer
|
|
||||||
alloca (unsigned size)
|
|
||||||
{
|
|
||||||
auto char probe; /* Probes stack depth: */
|
|
||||||
register char *depth = ADDRESS_FUNCTION (probe);
|
|
||||||
|
|
||||||
#if STACK_DIRECTION == 0
|
|
||||||
if (STACK_DIR == 0) /* Unknown growth direction. */
|
|
||||||
find_stack_direction ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Reclaim garbage, defined as all alloca'd storage that
|
|
||||||
was allocated from deeper in the stack than currently. */
|
|
||||||
|
|
||||||
{
|
|
||||||
register header *hp; /* Traverses linked list. */
|
|
||||||
|
|
||||||
#ifdef emacs
|
|
||||||
BLOCK_INPUT;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (hp = last_alloca_header; hp != NULL;)
|
|
||||||
if ((STACK_DIR > 0 && hp->h.deep > depth)
|
|
||||||
|| (STACK_DIR < 0 && hp->h.deep < depth))
|
|
||||||
{
|
|
||||||
register header *np = hp->h.next;
|
|
||||||
|
|
||||||
free ((pointer) hp); /* Collect garbage. */
|
|
||||||
|
|
||||||
hp = np; /* -> next header. */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break; /* Rest are not deeper. */
|
|
||||||
|
|
||||||
last_alloca_header = hp; /* -> last valid storage. */
|
|
||||||
|
|
||||||
#ifdef emacs
|
|
||||||
UNBLOCK_INPUT;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (size == 0)
|
|
||||||
return NULL; /* No allocation required. */
|
|
||||||
|
|
||||||
/* Allocate combined header + user data storage. */
|
|
||||||
|
|
||||||
{
|
|
||||||
register pointer new = malloc (sizeof (header) + size);
|
|
||||||
/* Address of header. */
|
|
||||||
|
|
||||||
if (new == 0)
|
|
||||||
abort();
|
|
||||||
|
|
||||||
((header *) new)->h.next = last_alloca_header;
|
|
||||||
((header *) new)->h.deep = depth;
|
|
||||||
|
|
||||||
last_alloca_header = (header *) new;
|
|
||||||
|
|
||||||
/* User storage begins just after header. */
|
|
||||||
|
|
||||||
return (pointer) ((char *) new + sizeof (header));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined (CRAY) && defined (CRAY_STACKSEG_END)
|
|
||||||
|
|
||||||
#ifdef DEBUG_I00AFUNC
|
|
||||||
#include <stdio.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CRAY_STACK
|
|
||||||
#define CRAY_STACK
|
|
||||||
#ifndef CRAY2
|
|
||||||
/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
|
|
||||||
struct stack_control_header
|
|
||||||
{
|
|
||||||
long shgrow:32; /* Number of times stack has grown. */
|
|
||||||
long shaseg:32; /* Size of increments to stack. */
|
|
||||||
long shhwm:32; /* High water mark of stack. */
|
|
||||||
long shsize:32; /* Current size of stack (all segments). */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* The stack segment linkage control information occurs at
|
|
||||||
the high-address end of a stack segment. (The stack
|
|
||||||
grows from low addresses to high addresses.) The initial
|
|
||||||
part of the stack segment linkage control information is
|
|
||||||
0200 (octal) words. This provides for register storage
|
|
||||||
for the routine which overflows the stack. */
|
|
||||||
|
|
||||||
struct stack_segment_linkage
|
|
||||||
{
|
|
||||||
long ss[0200]; /* 0200 overflow words. */
|
|
||||||
long sssize:32; /* Number of words in this segment. */
|
|
||||||
long ssbase:32; /* Offset to stack base. */
|
|
||||||
long:32;
|
|
||||||
long sspseg:32; /* Offset to linkage control of previous
|
|
||||||
segment of stack. */
|
|
||||||
long:32;
|
|
||||||
long sstcpt:32; /* Pointer to task common address block. */
|
|
||||||
long sscsnm; /* Private control structure number for
|
|
||||||
microtasking. */
|
|
||||||
long ssusr1; /* Reserved for user. */
|
|
||||||
long ssusr2; /* Reserved for user. */
|
|
||||||
long sstpid; /* Process ID for pid based multi-tasking. */
|
|
||||||
long ssgvup; /* Pointer to multitasking thread giveup. */
|
|
||||||
long sscray[7]; /* Reserved for Cray Research. */
|
|
||||||
long ssa0;
|
|
||||||
long ssa1;
|
|
||||||
long ssa2;
|
|
||||||
long ssa3;
|
|
||||||
long ssa4;
|
|
||||||
long ssa5;
|
|
||||||
long ssa6;
|
|
||||||
long ssa7;
|
|
||||||
long sss0;
|
|
||||||
long sss1;
|
|
||||||
long sss2;
|
|
||||||
long sss3;
|
|
||||||
long sss4;
|
|
||||||
long sss5;
|
|
||||||
long sss6;
|
|
||||||
long sss7;
|
|
||||||
};
|
|
||||||
|
|
||||||
#else /* CRAY2 */
|
|
||||||
/* The following structure defines the vector of words
|
|
||||||
returned by the STKSTAT library routine. */
|
|
||||||
struct stk_stat
|
|
||||||
{
|
|
||||||
long now; /* Current total stack size. */
|
|
||||||
long maxc; /* Amount of contiguous space which would
|
|
||||||
be required to satisfy the maximum
|
|
||||||
stack demand to date. */
|
|
||||||
long high_water; /* Stack high-water mark. */
|
|
||||||
long overflows; /* Number of stack overflow ($STKOFEN) calls. */
|
|
||||||
long hits; /* Number of internal buffer hits. */
|
|
||||||
long extends; /* Number of block extensions. */
|
|
||||||
long stko_mallocs; /* Block allocations by $STKOFEN. */
|
|
||||||
long underflows; /* Number of stack underflow calls ($STKRETN). */
|
|
||||||
long stko_free; /* Number of deallocations by $STKRETN. */
|
|
||||||
long stkm_free; /* Number of deallocations by $STKMRET. */
|
|
||||||
long segments; /* Current number of stack segments. */
|
|
||||||
long maxs; /* Maximum number of stack segments so far. */
|
|
||||||
long pad_size; /* Stack pad size. */
|
|
||||||
long current_address; /* Current stack segment address. */
|
|
||||||
long current_size; /* Current stack segment size. This
|
|
||||||
number is actually corrupted by STKSTAT to
|
|
||||||
include the fifteen word trailer area. */
|
|
||||||
long initial_address; /* Address of initial segment. */
|
|
||||||
long initial_size; /* Size of initial segment. */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* The following structure describes the data structure which trails
|
|
||||||
any stack segment. I think that the description in 'asdef' is
|
|
||||||
out of date. I only describe the parts that I am sure about. */
|
|
||||||
|
|
||||||
struct stk_trailer
|
|
||||||
{
|
|
||||||
long this_address; /* Address of this block. */
|
|
||||||
long this_size; /* Size of this block (does not include
|
|
||||||
this trailer). */
|
|
||||||
long unknown2;
|
|
||||||
long unknown3;
|
|
||||||
long link; /* Address of trailer block of previous
|
|
||||||
segment. */
|
|
||||||
long unknown5;
|
|
||||||
long unknown6;
|
|
||||||
long unknown7;
|
|
||||||
long unknown8;
|
|
||||||
long unknown9;
|
|
||||||
long unknown10;
|
|
||||||
long unknown11;
|
|
||||||
long unknown12;
|
|
||||||
long unknown13;
|
|
||||||
long unknown14;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* CRAY2 */
|
|
||||||
#endif /* not CRAY_STACK */
|
|
||||||
|
|
||||||
#ifdef CRAY2
|
|
||||||
/* Determine a "stack measure" for an arbitrary ADDRESS.
|
|
||||||
I doubt that "lint" will like this much. */
|
|
||||||
|
|
||||||
static long
|
|
||||||
i00afunc (long *address)
|
|
||||||
{
|
|
||||||
struct stk_stat status;
|
|
||||||
struct stk_trailer *trailer;
|
|
||||||
long *block, size;
|
|
||||||
long result = 0;
|
|
||||||
|
|
||||||
/* We want to iterate through all of the segments. The first
|
|
||||||
step is to get the stack status structure. We could do this
|
|
||||||
more quickly and more directly, perhaps, by referencing the
|
|
||||||
$LM00 common block, but I know that this works. */
|
|
||||||
|
|
||||||
STKSTAT (&status);
|
|
||||||
|
|
||||||
/* Set up the iteration. */
|
|
||||||
|
|
||||||
trailer = (struct stk_trailer *) (status.current_address
|
|
||||||
+ status.current_size
|
|
||||||
- 15);
|
|
||||||
|
|
||||||
/* There must be at least one stack segment. Therefore it is
|
|
||||||
a fatal error if "trailer" is null. */
|
|
||||||
|
|
||||||
if (trailer == 0)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Discard segments that do not contain our argument address. */
|
|
||||||
|
|
||||||
while (trailer != 0)
|
|
||||||
{
|
|
||||||
block = (long *) trailer->this_address;
|
|
||||||
size = trailer->this_size;
|
|
||||||
if (block == 0 || size == 0)
|
|
||||||
abort ();
|
|
||||||
trailer = (struct stk_trailer *) trailer->link;
|
|
||||||
if ((block <= address) && (address < (block + size)))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the result to the offset in this segment and add the sizes
|
|
||||||
of all predecessor segments. */
|
|
||||||
|
|
||||||
result = address - block;
|
|
||||||
|
|
||||||
if (trailer == 0)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (trailer->this_size <= 0)
|
|
||||||
abort ();
|
|
||||||
result += trailer->this_size;
|
|
||||||
trailer = (struct stk_trailer *) trailer->link;
|
|
||||||
}
|
|
||||||
while (trailer != 0);
|
|
||||||
|
|
||||||
/* We are done. Note that if you present a bogus address (one
|
|
||||||
not in any segment), you will get a different number back, formed
|
|
||||||
from subtracting the address of the first block. This is probably
|
|
||||||
not what you want. */
|
|
||||||
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* not CRAY2 */
|
|
||||||
/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
|
|
||||||
Determine the number of the cell within the stack,
|
|
||||||
given the address of the cell. The purpose of this
|
|
||||||
routine is to linearize, in some sense, stack addresses
|
|
||||||
for alloca. */
|
|
||||||
|
|
||||||
static long
|
|
||||||
i00afunc (long address)
|
|
||||||
{
|
|
||||||
long stkl = 0;
|
|
||||||
|
|
||||||
long size, pseg, this_segment, stack;
|
|
||||||
long result = 0;
|
|
||||||
|
|
||||||
struct stack_segment_linkage *ssptr;
|
|
||||||
|
|
||||||
/* Register B67 contains the address of the end of the
|
|
||||||
current stack segment. If you (as a subprogram) store
|
|
||||||
your registers on the stack and find that you are past
|
|
||||||
the contents of B67, you have overflowed the segment.
|
|
||||||
|
|
||||||
B67 also points to the stack segment linkage control
|
|
||||||
area, which is what we are really interested in. */
|
|
||||||
|
|
||||||
stkl = CRAY_STACKSEG_END ();
|
|
||||||
ssptr = (struct stack_segment_linkage *) stkl;
|
|
||||||
|
|
||||||
/* If one subtracts 'size' from the end of the segment,
|
|
||||||
one has the address of the first word of the segment.
|
|
||||||
|
|
||||||
If this is not the first segment, 'pseg' will be
|
|
||||||
nonzero. */
|
|
||||||
|
|
||||||
pseg = ssptr->sspseg;
|
|
||||||
size = ssptr->sssize;
|
|
||||||
|
|
||||||
this_segment = stkl - size;
|
|
||||||
|
|
||||||
/* It is possible that calling this routine itself caused
|
|
||||||
a stack overflow. Discard stack segments which do not
|
|
||||||
contain the target address. */
|
|
||||||
|
|
||||||
while (!(this_segment <= address && address <= stkl))
|
|
||||||
{
|
|
||||||
#ifdef DEBUG_I00AFUNC
|
|
||||||
fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
|
|
||||||
#endif
|
|
||||||
if (pseg == 0)
|
|
||||||
break;
|
|
||||||
stkl = stkl - pseg;
|
|
||||||
ssptr = (struct stack_segment_linkage *) stkl;
|
|
||||||
size = ssptr->sssize;
|
|
||||||
pseg = ssptr->sspseg;
|
|
||||||
this_segment = stkl - size;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = address - this_segment;
|
|
||||||
|
|
||||||
/* If you subtract pseg from the current end of the stack,
|
|
||||||
you get the address of the previous stack segment's end.
|
|
||||||
This seems a little convoluted to me, but I'll bet you save
|
|
||||||
a cycle somewhere. */
|
|
||||||
|
|
||||||
while (pseg != 0)
|
|
||||||
{
|
|
||||||
#ifdef DEBUG_I00AFUNC
|
|
||||||
fprintf (stderr, "%011o %011o\n", pseg, size);
|
|
||||||
#endif
|
|
||||||
stkl = stkl - pseg;
|
|
||||||
ssptr = (struct stack_segment_linkage *) stkl;
|
|
||||||
size = ssptr->sssize;
|
|
||||||
pseg = ssptr->sspseg;
|
|
||||||
result += size;
|
|
||||||
}
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* not CRAY2 */
|
|
||||||
#endif /* CRAY */
|
|
||||||
|
|
||||||
#endif /* no alloca */
|
|
||||||
#endif /* not GCC version 2 */
|
|
117
amiga.c
117
amiga.c
@ -1,117 +0,0 @@
|
|||||||
/* Running commands on Amiga
|
|
||||||
Copyright (C) 1995-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include "makeint.h"
|
|
||||||
#include "variable.h"
|
|
||||||
#include "amiga.h"
|
|
||||||
#include <assert.h>
|
|
||||||
#include <exec/memory.h>
|
|
||||||
#include <dos/dostags.h>
|
|
||||||
#include <proto/exec.h>
|
|
||||||
#include <proto/dos.h>
|
|
||||||
|
|
||||||
static const char Amiga_version[] = "$VER: Make 3.74.3 (12.05.96) \n"
|
|
||||||
"Amiga Port by A. Digulla (digulla@home.lake.de)";
|
|
||||||
|
|
||||||
int
|
|
||||||
MyExecute (char **argv)
|
|
||||||
{
|
|
||||||
char * buffer, * ptr;
|
|
||||||
char ** aptr;
|
|
||||||
int len = 0;
|
|
||||||
int status;
|
|
||||||
|
|
||||||
for (aptr=argv; *aptr; aptr++)
|
|
||||||
{
|
|
||||||
len += strlen (*aptr) + 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer = AllocMem (len, MEMF_ANY);
|
|
||||||
|
|
||||||
if (!buffer)
|
|
||||||
fatal (NILF, "MyExecute: Cannot allocate space for calling a command");
|
|
||||||
|
|
||||||
ptr = buffer;
|
|
||||||
|
|
||||||
for (aptr=argv; *aptr; aptr++)
|
|
||||||
{
|
|
||||||
if (((*aptr)[0] == ';' && !(*aptr)[1]))
|
|
||||||
{
|
|
||||||
*ptr ++ = '"';
|
|
||||||
strcpy (ptr, *aptr);
|
|
||||||
ptr += strlen (ptr);
|
|
||||||
*ptr ++ = '"';
|
|
||||||
}
|
|
||||||
else if ((*aptr)[0] == '@' && (*aptr)[1] == '@' && !(*aptr)[2])
|
|
||||||
{
|
|
||||||
*ptr ++ = '\n';
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy (ptr, *aptr);
|
|
||||||
ptr += strlen (ptr);
|
|
||||||
}
|
|
||||||
*ptr ++ = ' ';
|
|
||||||
*ptr = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ptr[-1] = '\n';
|
|
||||||
|
|
||||||
status = SystemTags (buffer,
|
|
||||||
SYS_UserShell, TRUE,
|
|
||||||
TAG_END);
|
|
||||||
|
|
||||||
FreeMem (buffer, len);
|
|
||||||
|
|
||||||
if (SetSignal (0L,0L) & SIGBREAKF_CTRL_C)
|
|
||||||
status = 20;
|
|
||||||
|
|
||||||
/* Warnings don't count */
|
|
||||||
if (status == 5)
|
|
||||||
status = 0;
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
wildcard_expansion (char *wc, char *o)
|
|
||||||
{
|
|
||||||
# define PATH_SIZE 1024
|
|
||||||
struct AnchorPath * apath;
|
|
||||||
|
|
||||||
if ( (apath = AllocMem (sizeof (struct AnchorPath) + PATH_SIZE,
|
|
||||||
MEMF_CLEAR))
|
|
||||||
)
|
|
||||||
{
|
|
||||||
apath->ap_Strlen = PATH_SIZE;
|
|
||||||
|
|
||||||
if (MatchFirst (wc, apath) == 0)
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
o = variable_buffer_output (o, apath->ap_Buf,
|
|
||||||
strlen (apath->ap_Buf));
|
|
||||||
o = variable_buffer_output (o, " ",1);
|
|
||||||
} while (MatchNext (apath) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
MatchEnd (apath);
|
|
||||||
FreeMem (apath, sizeof (struct AnchorPath) + PATH_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return o;
|
|
||||||
}
|
|
18
amiga.h
18
amiga.h
@ -1,18 +0,0 @@
|
|||||||
/* Definitions for amiga specific things
|
|
||||||
Copyright (C) 1995-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
int MyExecute (char ** argv);
|
|
||||||
char * wildcard_expansion (char * wc, char * o);
|
|
39
autogen.sh
Executable file
39
autogen.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Convenience script for regenerating all autogeneratable files that are
|
||||||
|
# omitted from the version control repository. In particular, this script
|
||||||
|
# also regenerates all aclocal.m4, config.h.in, Makefile.in, configure files
|
||||||
|
# with new versions of autoconf or automake.
|
||||||
|
|
||||||
|
# Copyright (C) 2003-2024 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Originally written by Paul Eggert. The canonical version of this
|
||||||
|
# script is maintained as top/autogen.sh in gnulib. However, to be
|
||||||
|
# useful to your package, you should place a copy of it under version
|
||||||
|
# control in the top-level directory of your package. The intent is
|
||||||
|
# that all customization can be done with a bootstrap.conf file also
|
||||||
|
# maintained in your version control; gnulib comes with a template
|
||||||
|
# build-aux/bootstrap.conf to get you started.
|
||||||
|
#
|
||||||
|
# Alternatively, you can use an autogen.sh script that is specific
|
||||||
|
# to your package.
|
||||||
|
|
||||||
|
me="$0"
|
||||||
|
medir=`dirname "$me"`
|
||||||
|
|
||||||
|
# Read the function library and the configuration.
|
||||||
|
. "$medir"/bootstrap-funclib.sh
|
||||||
|
|
||||||
|
autogen "$@"
|
37
autopull.sh
Executable file
37
autopull.sh
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Convenience script for fetching auxiliary files that are omitted from
|
||||||
|
# the version control repository of this package.
|
||||||
|
|
||||||
|
# Copyright (C) 2003-2024 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Originally written by Paul Eggert. The canonical version of this
|
||||||
|
# script is maintained as top/autopull.sh in gnulib. However, to be
|
||||||
|
# useful to your package, you should place a copy of it under version
|
||||||
|
# control in the top-level directory of your package. The intent is
|
||||||
|
# that all customization can be done with a bootstrap.conf file also
|
||||||
|
# maintained in your version control; gnulib comes with a template
|
||||||
|
# build-aux/bootstrap.conf to get you started.
|
||||||
|
#
|
||||||
|
# Alternatively, you can use an autopull.sh script that is specific
|
||||||
|
# to your package.
|
||||||
|
|
||||||
|
me="$0"
|
||||||
|
medir=`dirname "$me"`
|
||||||
|
|
||||||
|
# Read the function library and the configuration.
|
||||||
|
. "$medir"/bootstrap-funclib.sh
|
||||||
|
|
||||||
|
autopull "$@"
|
226
bootstrap
Executable file
226
bootstrap
Executable file
@ -0,0 +1,226 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Bootstrap this package from checked-out sources.
|
||||||
|
|
||||||
|
scriptversion=2022-12-27.07; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 2003-2023 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Originally written by Paul Eggert. The canonical version of this
|
||||||
|
# script is maintained as top/bootstrap in gnulib. However, to be
|
||||||
|
# useful to your package, you should place a copy of it under version
|
||||||
|
# control in the top-level directory of your package. The intent is
|
||||||
|
# that all customization can be done with a bootstrap.conf file also
|
||||||
|
# maintained in your version control; gnulib comes with a template
|
||||||
|
# build-aux/bootstrap.conf to get you started.
|
||||||
|
|
||||||
|
# Please report bugs or propose patches to bug-gnulib@gnu.org.
|
||||||
|
|
||||||
|
me="$0"
|
||||||
|
medir=`dirname "$me"`
|
||||||
|
|
||||||
|
# Read the function library and the configuration.
|
||||||
|
. "$medir"/bootstrap-funclib.sh
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage: $me [OPTION]...
|
||||||
|
Bootstrap this package from the checked-out sources.
|
||||||
|
|
||||||
|
Optional environment variables:
|
||||||
|
GNULIB_SRCDIR Specifies the local directory where gnulib
|
||||||
|
sources reside. Use this if you already
|
||||||
|
have gnulib sources on your machine, and
|
||||||
|
do not want to waste your bandwidth downloading
|
||||||
|
them again.
|
||||||
|
GNULIB_URL Cloneable URL of the gnulib repository.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
--pull Do phase 1: pull files from network
|
||||||
|
--gen Do phase 2: generate from local files.
|
||||||
|
(The default is to do both phases.)
|
||||||
|
|
||||||
|
--gnulib-srcdir=DIRNAME specify the local directory where gnulib
|
||||||
|
sources reside. Use this if you already
|
||||||
|
have gnulib sources on your machine, and
|
||||||
|
you want to use these sources. Defaults
|
||||||
|
to \$GNULIB_SRCDIR
|
||||||
|
--gnulib-refdir=DIRNAME specify the local directory where a gnulib
|
||||||
|
repository (with a .git subdirectory) resides.
|
||||||
|
Use this if you already have gnulib sources
|
||||||
|
and history on your machine, and do not want
|
||||||
|
to waste your bandwidth downloading them again.
|
||||||
|
Defaults to \$GNULIB_REFDIR
|
||||||
|
|
||||||
|
--bootstrap-sync if this bootstrap script is not identical to
|
||||||
|
the version in the local gnulib sources,
|
||||||
|
update this script, and then restart it with
|
||||||
|
/bin/sh or the shell \$CONFIG_SHELL
|
||||||
|
--no-bootstrap-sync do not check whether bootstrap is out of sync
|
||||||
|
|
||||||
|
--copy copy files instead of creating symbolic links
|
||||||
|
--force attempt to bootstrap even if the sources seem
|
||||||
|
not to have been checked out
|
||||||
|
--no-git do not use git to update gnulib. Requires that
|
||||||
|
\$GNULIB_SRCDIR or the --gnulib-srcdir option
|
||||||
|
points to a gnulib repository with the correct
|
||||||
|
revision
|
||||||
|
--skip-po do not download po files
|
||||||
|
EOF
|
||||||
|
bootstrap_print_option_usage_hook
|
||||||
|
cat <<EOF
|
||||||
|
If the file bootstrap.conf exists in the same directory as this script, its
|
||||||
|
contents are read as shell variables to configure the bootstrap.
|
||||||
|
|
||||||
|
For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
|
||||||
|
are honored.
|
||||||
|
|
||||||
|
Gnulib sources can be fetched in various ways:
|
||||||
|
|
||||||
|
* If the environment variable GNULIB_SRCDIR is set (either as an
|
||||||
|
environment variable or via the --gnulib-srcdir option), then sources
|
||||||
|
are fetched from that local directory. If it is a git repository and
|
||||||
|
the configuration variable GNULIB_REVISION is set in bootstrap.conf,
|
||||||
|
then that revision is checked out.
|
||||||
|
|
||||||
|
* Otherwise, if this package is in a git repository with a 'gnulib'
|
||||||
|
submodule configured, then that submodule is initialized and updated
|
||||||
|
and sources are fetched from there. If GNULIB_REFDIR is set (either
|
||||||
|
as an environment variable or via the --gnulib-refdir option) and is
|
||||||
|
a git repository, then it is used as a reference.
|
||||||
|
|
||||||
|
* Otherwise, if the 'gnulib' directory does not exist, Gnulib sources
|
||||||
|
are cloned into that directory using git from \$GNULIB_URL, defaulting
|
||||||
|
to $default_gnulib_url.
|
||||||
|
If the configuration variable GNULIB_REVISION is set in bootstrap.conf,
|
||||||
|
then that revision is checked out.
|
||||||
|
|
||||||
|
* Otherwise, the existing Gnulib sources in the 'gnulib' directory are
|
||||||
|
used. If it is a git repository and the configuration variable
|
||||||
|
GNULIB_REVISION is set in bootstrap.conf, then that revision is
|
||||||
|
checked out.
|
||||||
|
|
||||||
|
If you maintain a package and want to pin a particular revision of the
|
||||||
|
Gnulib sources that has been tested with your package, then there are
|
||||||
|
two possible approaches: either configure a 'gnulib' submodule with the
|
||||||
|
appropriate revision, or set GNULIB_REVISION (and if necessary
|
||||||
|
GNULIB_URL) in bootstrap.conf.
|
||||||
|
|
||||||
|
Running without arguments will suffice in most cases.
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse options.
|
||||||
|
|
||||||
|
# Whether to pull and generate.
|
||||||
|
pull=false
|
||||||
|
gen=false
|
||||||
|
|
||||||
|
# Whether to use copies instead of symlinks.
|
||||||
|
copy=false
|
||||||
|
|
||||||
|
# Use git to update gnulib sources
|
||||||
|
use_git=true
|
||||||
|
|
||||||
|
for option
|
||||||
|
do
|
||||||
|
case $option in
|
||||||
|
--help)
|
||||||
|
usage
|
||||||
|
exit;;
|
||||||
|
--version)
|
||||||
|
set -e
|
||||||
|
echo "bootstrap $scriptversion lib $scriptlibversion"
|
||||||
|
echo "$copyright"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--pull)
|
||||||
|
pull=true;;
|
||||||
|
--gen)
|
||||||
|
gen=true;;
|
||||||
|
--gnulib-srcdir=*)
|
||||||
|
GNULIB_SRCDIR=${option#--gnulib-srcdir=};;
|
||||||
|
--gnulib-refdir=*)
|
||||||
|
GNULIB_REFDIR=${option#--gnulib-refdir=};;
|
||||||
|
--skip-po)
|
||||||
|
SKIP_PO=t;;
|
||||||
|
--force)
|
||||||
|
checkout_only_file=;;
|
||||||
|
--copy)
|
||||||
|
copy=true;;
|
||||||
|
--bootstrap-sync)
|
||||||
|
bootstrap_sync=true;;
|
||||||
|
--no-bootstrap-sync)
|
||||||
|
bootstrap_sync=false;;
|
||||||
|
--no-git)
|
||||||
|
use_git=false;;
|
||||||
|
*)
|
||||||
|
bootstrap_option_hook $option || die "$option: unknown option";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Default is to do both.
|
||||||
|
$pull || $gen || pull=true gen=true
|
||||||
|
|
||||||
|
$use_git || test -n "$GNULIB_SRCDIR" \
|
||||||
|
|| die "Error: --no-git requires \$GNULIB_SRCDIR environment variable or --gnulib-srcdir option"
|
||||||
|
test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \
|
||||||
|
|| die "Error: \$GNULIB_SRCDIR environment variable or --gnulib-srcdir option is specified, but does not denote a directory"
|
||||||
|
|
||||||
|
if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
|
||||||
|
die "Bootstrapping from a non-checked-out distribution is risky."
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_build_prerequisites $use_git
|
||||||
|
|
||||||
|
if $bootstrap_sync; then
|
||||||
|
prepare_GNULIB_SRCDIR
|
||||||
|
upgrade_bootstrap
|
||||||
|
# Since we have now upgraded if needed, no need to try it a second time below.
|
||||||
|
bootstrap_sync=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$0: Bootstrapping from checked-out $package sources..."
|
||||||
|
|
||||||
|
# Pass GNULIB_SRCDIR and GNULIB_REFDIR to any subsidiary commands that care.
|
||||||
|
export GNULIB_SRCDIR
|
||||||
|
export GNULIB_REFDIR
|
||||||
|
|
||||||
|
if $pull && { $use_git || test -z "$SKIP_PO"; }; then
|
||||||
|
autopull \
|
||||||
|
`if $bootstrap_sync; then echo ' --bootstrap-sync'; else echo ' --no-bootstrap-sync'; fi` \
|
||||||
|
`if test -z "$checkout_only_file"; then echo ' --force'; fi` \
|
||||||
|
`if ! $use_git; then echo ' --no-git'; fi` \
|
||||||
|
`if test -n "$SKIP_PO"; then echo ' --skip-po'; fi` \
|
||||||
|
|| die "could not fetch auxiliary files"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $gen; then
|
||||||
|
autogen \
|
||||||
|
`if $copy; then echo ' --copy'; fi` \
|
||||||
|
`if test -z "$checkout_only_file"; then echo ' --force'; fi` \
|
||||||
|
|| die "could not generate auxiliary files"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
1285
bootstrap-funclib.sh
Normal file
1285
bootstrap-funclib.sh
Normal file
File diff suppressed because it is too large
Load Diff
116
bootstrap.bat
Normal file
116
bootstrap.bat
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
@echo off
|
||||||
|
:: Copyright (C) 2018-2024 Free Software Foundation, Inc.
|
||||||
|
:: This file is part of GNU Make.
|
||||||
|
::
|
||||||
|
:: GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
|
:: the terms of the GNU General Public License as published by the Free
|
||||||
|
:: Software Foundation; either version 3 of the License, or (at your option)
|
||||||
|
:: any later version.
|
||||||
|
::
|
||||||
|
:: GNU Make is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
:: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
:: FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for.
|
||||||
|
:: more details.
|
||||||
|
::
|
||||||
|
:: You should have received a copy of the GNU General Public License along
|
||||||
|
:: with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
setlocal
|
||||||
|
set "svurl=https://git.savannah.gnu.org/cgit"
|
||||||
|
set "gnuliburl=%svurl%/gnulib.git/plain"
|
||||||
|
|
||||||
|
where curl >nul 2>&1
|
||||||
|
if ERRORLEVEL 1 (
|
||||||
|
echo Cannot find curl: it must be installed for bootstrap
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
where sed >nul 2>&1
|
||||||
|
if ERRORLEVEL 1 (
|
||||||
|
echo Cannot find sed: it must be installed for bootstrap
|
||||||
|
echo Hint: you can use the sed provided in the Git for Windows install
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist lib goto Downloads
|
||||||
|
mkdir lib
|
||||||
|
if ERRORLEVEL 1 exit /b 1
|
||||||
|
|
||||||
|
:Downloads
|
||||||
|
echo -- Downloading Gnulib modules
|
||||||
|
call :Download lib getloadavg.c
|
||||||
|
call :Download lib intprops.h
|
||||||
|
call :Download lib intprops-internal.h
|
||||||
|
|
||||||
|
echo -- Configuring the workspace
|
||||||
|
copy /Y gl\lib\*.* lib > nul
|
||||||
|
|
||||||
|
:: In general it's tricky to use special characters as arguments to a program
|
||||||
|
:: in Windows batch files; the quoting rules are obscure and have changed over
|
||||||
|
:: time which means older systems may behave differently. However, Windows
|
||||||
|
:: echo is a dumb program that just writes out its command line without much
|
||||||
|
:: interpreting: all we have to be careful of is ^ quoting. So, use echo
|
||||||
|
:: to create script files to use with sed -f rather than using sed -e.
|
||||||
|
|
||||||
|
:: Create a sed script to convert templates
|
||||||
|
if exist convert.sed del /Q convert.sed
|
||||||
|
echo s,@PACKAGE@,make,g > convert.sed
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
echo s,@PACKAGE_BUGREPORT@,bug-make@gnu.org,g >> convert.sed
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
echo s,@PACKAGE_NAME@,GNU Make,g >> convert.sed
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
echo s,@PACKAGE_TARNAME@,make,g >> convert.sed
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
echo s,@PACKAGE_URL@,https://www.gnu.org/software/make/,g >> convert.sed
|
||||||
|
echo s/^^AC_INIT^(\[GNU.Make\],\[\^([0-9.]*\^)\].*/s,@PACKAGE_VERSION@,\1,g/p > cac.sed
|
||||||
|
sed -n -f cac.sed configure.ac >> convert.sed
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
:: Get the list of sources from Makefile.am
|
||||||
|
echo s,\\\n,,g > mam.sed
|
||||||
|
echo s,[ \t][ \t]*, ,g >> mam.sed
|
||||||
|
echo s, [^^ ]*\.h,,g >> mam.sed
|
||||||
|
echo s,src/,$^(src^),g >> mam.sed
|
||||||
|
echo s,lib/,$^(lib^),g >> mam.sed
|
||||||
|
echo s/^^\^([A-Za-z0-9]*\^)_SRCS *= *\^(.*\^)/s,%%\1_SOURCES%%,\2,/p > mam2.sed
|
||||||
|
sed -z -f mam.sed Makefile.am | sed -n -f mam2.sed >> convert.sed
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
|
||||||
|
echo - Creating Basic.mk
|
||||||
|
sed -f convert.sed Basic.mk.template > Basic.mk
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
echo - Creating src\mkconfig.h
|
||||||
|
sed -f convert.sed src\mkconfig.h.in > src\mkconfig.h
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
|
||||||
|
echo - Creating src\gmk-default.h
|
||||||
|
echo static const char *const GUILE_module_defn = ^" \ > src\gmk-default.h
|
||||||
|
echo s/;.*// > gmk.sed
|
||||||
|
echo /^^[ \t]*$/d >> gmk.sed
|
||||||
|
echo s/"/\\"/g >> gmk.sed
|
||||||
|
echo s/$/ \\/ >> gmk.sed
|
||||||
|
sed -f gmk.sed src\gmk-default.scm >> src\gmk-default.h
|
||||||
|
if ERRORLEVEL 1 goto Failed
|
||||||
|
echo ^";>> src\gmk-default.h
|
||||||
|
|
||||||
|
:: These files would be created by bootstrap; they are not needed on Windows
|
||||||
|
:: but our makefile depends on them
|
||||||
|
echo >> lib\alloca.in.h
|
||||||
|
|
||||||
|
del /Q convert.sed cac.sed mam.sed mam2.sed gmk.sed
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Done. Run build_w32.bat to build GNU Make.
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:Download
|
||||||
|
if exist "%1\%2" goto :EOF
|
||||||
|
echo - Downloading %1\%2
|
||||||
|
curl -sS -o "%1\%2" "%gnuliburl%/%1/%2"
|
||||||
|
if ERRORLEVEL 1 exit /b 1
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:Failed
|
||||||
|
echo *** Bootstrap failed.
|
||||||
|
echo Resolve the issue, or use the configured source in the release tarball
|
||||||
|
exit /b 1
|
65
bootstrap.conf
Normal file
65
bootstrap.conf
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Bootstrap configuration. -*-shell-script-*-
|
||||||
|
|
||||||
|
# Copyright (C) 2018-2024 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# GNU Make is free software: you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free
|
||||||
|
# Software Foundation; either version 3 of the License, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Allow bootstrap to know that this is not a package
|
||||||
|
checkout_only_file=README.git
|
||||||
|
|
||||||
|
# Choose a specific version of gnulib, when checking out
|
||||||
|
GNULIB_REVISION=stable-202407
|
||||||
|
|
||||||
|
# Always copy files rather than symlink
|
||||||
|
copy=true
|
||||||
|
|
||||||
|
# Additional xgettext options to use. Use "\\\newline" to break lines.
|
||||||
|
# Ensure that all our magical output macros are correctly marked as
|
||||||
|
# C (printf) format strings.
|
||||||
|
XGETTEXT_OPTIONS='\\\
|
||||||
|
--from-code=UTF-8\\\
|
||||||
|
--flag=_:1:pass-c-format\\\
|
||||||
|
--flag=N_:1:pass-c-format\\\
|
||||||
|
--flag=DB:2:c-format --flag=DBF:2:c-format --flag=DBS:2:c-format\\\
|
||||||
|
--flag=O:3:c-format --flag=OSN:3:c-format --flag=ONS:3:c-format\\\
|
||||||
|
--flag=OS:3:c-format --flag=OSS:3:c-format --flag=OSSS:3:c-format\\\
|
||||||
|
--flag=ON:3:c-format --flag=ONN:3:c-format\\\
|
||||||
|
'
|
||||||
|
|
||||||
|
# We manage our own .gitignore files
|
||||||
|
vc_ignore=
|
||||||
|
|
||||||
|
# Build prerequisites
|
||||||
|
buildreq="\
|
||||||
|
autoconf 2.72
|
||||||
|
automake 1.16.5
|
||||||
|
"
|
||||||
|
|
||||||
|
gnulib_name=libgnu
|
||||||
|
gnulib_files="doc/make-stds.texi m4/sig_atomic_t.m4"
|
||||||
|
|
||||||
|
# Using the full strtoll module pulls in a lot of stuff. But, it's pretty
|
||||||
|
# simple to use just the base source file, so pull that. We'll use it in
|
||||||
|
# src/misc.c if strtoll() is not found.
|
||||||
|
gnulib_files="$gnulib_files lib/strtol.c"
|
||||||
|
|
||||||
|
gnulib_modules="\
|
||||||
|
alloca
|
||||||
|
fdl
|
||||||
|
findprog-in
|
||||||
|
getloadavg
|
||||||
|
host-cpu-c-abi
|
||||||
|
largefile
|
||||||
|
make-glob
|
||||||
|
make-macros"
|
38
build.cfg.in
Normal file
38
build.cfg.in
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Configuration for building GNU Make in the absence of any 'make' program.
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# Copyright (C) 1993-2024 Free Software Foundation, Inc.
|
||||||
|
# This file is part of GNU Make.
|
||||||
|
#
|
||||||
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 3 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# See Makefile.in for comments describing these variables.
|
||||||
|
|
||||||
|
top_srcdir='@top_srcdir@'
|
||||||
|
|
||||||
|
prefix='@prefix@'
|
||||||
|
exec_prefix=`eval echo @exec_prefix@`
|
||||||
|
|
||||||
|
CC='@CC@'
|
||||||
|
AR='@AR@'
|
||||||
|
CFLAGS='@CFLAGS@ @GUILE_CFLAGS@'
|
||||||
|
CPPFLAGS='@CPPFLAGS@'
|
||||||
|
DEFS='@DEFS@'
|
||||||
|
ARFLAGS='@ARFLAGS@'
|
||||||
|
LDFLAGS='@AM_LDFLAGS@ @LDFLAGS@'
|
||||||
|
ALLOCA='@ALLOCA@'
|
||||||
|
LOADLIBES='@LIBS@ @GUILE_LIBS@ @LIBINTL@'
|
||||||
|
REMOTE='@REMOTE@'
|
||||||
|
OBJEXT='@OBJEXT@'
|
||||||
|
EXEEXT='@EXEEXT@'
|
176
build.sh
Executable file
176
build.sh
Executable file
@ -0,0 +1,176 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Shell script to build GNU Make in the absence of any 'make' program.
|
||||||
|
|
||||||
|
# Copyright (C) 1993-2024 Free Software Foundation, Inc.
|
||||||
|
# This file is part of GNU Make.
|
||||||
|
#
|
||||||
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 3 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Get configure-generated values
|
||||||
|
. ./build.cfg
|
||||||
|
|
||||||
|
die () { echo "$*" 1>&2; exit 1; }
|
||||||
|
usage () { echo "$0 [-k]"; exit $1; }
|
||||||
|
|
||||||
|
keep_going=false
|
||||||
|
|
||||||
|
: ${OUTDIR:=.}
|
||||||
|
OUTLIB="$OUTDIR/lib"
|
||||||
|
|
||||||
|
# Directory to find libraries in for '-lXXX'.
|
||||||
|
libdir=$exec_prefix/lib
|
||||||
|
# Directory to search by default for included makefiles.
|
||||||
|
includedir=$prefix/include
|
||||||
|
|
||||||
|
localedir=$prefix/share/locale
|
||||||
|
|
||||||
|
defines="-DLOCALEDIR=\"$localedir\" -DLIBDIR=\"$libdir\" -DINCLUDEDIR=\"$includedir\""
|
||||||
|
|
||||||
|
# Look up a make variable value.
|
||||||
|
# It can handle simple recursion where variables are separate words.
|
||||||
|
# Print the value to stdout.
|
||||||
|
get_mk_var ()
|
||||||
|
{
|
||||||
|
v=$(sed -e :a -e '/\\$/N; s/\\\n//; ta' "$1" | sed -n "s=^ *$2 *\= *==p")
|
||||||
|
for w in $v; do
|
||||||
|
case $w in
|
||||||
|
(\$[\(\{]*[\)\}]) w=${w#\$[\(\{]}; (get_mk_var "$1" "${w%[\)\}]}") ;;
|
||||||
|
(*) echo "$w" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Compile source files. Object files are put into $objs.
|
||||||
|
compile ()
|
||||||
|
{
|
||||||
|
success=true
|
||||||
|
objs=
|
||||||
|
for ofile in "$@"; do
|
||||||
|
# We should try to use a Makefile variable like libgnu_a_SOURCES or
|
||||||
|
# something but just hardcode it.
|
||||||
|
file="${ofile%.$OBJEXT}.c"
|
||||||
|
case $file in
|
||||||
|
(lib/libgnu_a-*.c) file="lib/${file#lib/libgnu_a-}" ;;
|
||||||
|
esac
|
||||||
|
echo "compiling $file..."
|
||||||
|
of="$OUTDIR/$ofile"
|
||||||
|
mkdir -p "${of%/*}" || exit 1
|
||||||
|
if $CC $cflags $CPPFLAGS $CFLAGS -c -o "$of" "$top_srcdir/$file"; then
|
||||||
|
: worked
|
||||||
|
else
|
||||||
|
$keep_going || die "Compilation failed."
|
||||||
|
success=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
objs="${objs:+$objs }$of"
|
||||||
|
done
|
||||||
|
|
||||||
|
$success
|
||||||
|
}
|
||||||
|
|
||||||
|
# Use config.status to convert a .in file. Output file is put into $out.
|
||||||
|
# $out will be empty if no conversion was needed.
|
||||||
|
convert ()
|
||||||
|
{
|
||||||
|
out=
|
||||||
|
base=$1
|
||||||
|
var="GENERATE_$(echo $base | tr 'a-z./+' A-Z__X)"
|
||||||
|
|
||||||
|
# Is this file disabled?
|
||||||
|
grep "${var}_FALSE\"]=\"\"" config.status >/dev/null && return 0
|
||||||
|
|
||||||
|
# If there's no .in file then no conversion needed
|
||||||
|
in="$top_srcdir/lib/$(echo ${base%.*}.in.${base##*.} | tr / _)"
|
||||||
|
test -f "$in" || return 0
|
||||||
|
|
||||||
|
# Not disabled, so create it
|
||||||
|
out="$OUTLIB/$base"
|
||||||
|
mkdir -p "${out%/*}"
|
||||||
|
|
||||||
|
# First perform the normal replacements, using config.status
|
||||||
|
sed -e 's|@GUARD_PREFIX@|GL|g' \
|
||||||
|
-e 's/@GNULIB_UNISTD_H_GETOPT@/0/g' \
|
||||||
|
"$in" > "${out}_"
|
||||||
|
./config.status --file "${out}__:${out}_"
|
||||||
|
int="${out}__"
|
||||||
|
|
||||||
|
# Then see if there any files we need to include. Unfortunately there's no
|
||||||
|
# algorithmic conversion so we just have to hard-code it.
|
||||||
|
incls=$(sed -n 's/.*definitions* of \(_[^ $]*\).*/\1/p' "$in")
|
||||||
|
|
||||||
|
for inc in $incls; do
|
||||||
|
case $inc in
|
||||||
|
(_GL_FUNCDECL_RPL) fn=$(get_mk_var lib/Makefile CXXDEFS_H) ;;
|
||||||
|
(_GL_ARG_NONNULL) fn=$(get_mk_var lib/Makefile ARG_NONNULL_H) ;;
|
||||||
|
(_GL_WARN_ON_USE) fn=$(get_mk_var lib/Makefile WARN_ON_USE_H) ;;
|
||||||
|
(_Noreturn) fn=$(get_mk_var lib/Makefile _NORETURN_H) ;;
|
||||||
|
(*) echo "Unknown file replacement: $inc"; exit 1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
fn="$top_srcdir/lib/${fn##*/}"
|
||||||
|
test -f "$fn" || { echo "Missing file: $fn"; exit 1; }
|
||||||
|
|
||||||
|
sed "/definitions* of $inc/r $fn" "$int" > "${int}_"
|
||||||
|
int=${int}_
|
||||||
|
done
|
||||||
|
|
||||||
|
# Done!
|
||||||
|
mv "$int" "$out"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get source files provided from gnulib and convert to object files
|
||||||
|
LIBOBJS=
|
||||||
|
for lo in $( (get_mk_var lib/Makefile libgnu_a_OBJECTS; get_mk_var lib/Makefile libgnu_a_LIBADD) | sed "s=\$[\(\{]OBJEXT[\)\}]=$OBJEXT=g"); do
|
||||||
|
LIBOBJS="${LIBOBJS:+$LIBOBJS }lib/$lo"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Get object files from the Makefile
|
||||||
|
OBJS=$(get_mk_var Makefile make_OBJECTS | sed "s=\$[\(\{]OBJEXT[\)\}]=$OBJEXT=g")
|
||||||
|
|
||||||
|
while test -n "$1"; do
|
||||||
|
case $1 in
|
||||||
|
(-k) keep_going=true; shift ;;
|
||||||
|
(--) shift; break ;;
|
||||||
|
(-[h?]) usage 0 ;;
|
||||||
|
(-*) echo "Unknown option: $1"; usage 1 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
test -z "$1" || die "Unknown argument: $*"
|
||||||
|
|
||||||
|
# Generate gnulib header files that would normally be created by make
|
||||||
|
set -e
|
||||||
|
for b in $(get_mk_var lib/Makefile BUILT_SOURCES); do
|
||||||
|
convert $b
|
||||||
|
done
|
||||||
|
set +e
|
||||||
|
|
||||||
|
# Build the gnulib library
|
||||||
|
cflags="$DEFS -I$OUTLIB -Ilib -I$top_srcdir/lib -I$OUTDIR/src -Isrc -I$top_srcdir/src"
|
||||||
|
compile $LIBOBJS || die "Compilation failed."
|
||||||
|
|
||||||
|
echo "creating libgnu.a..."
|
||||||
|
$AR $ARFLAGS "$OUTLIB"/libgnu.a $objs || die "Archive of libgnu failed."
|
||||||
|
|
||||||
|
# Compile the source files into those objects.
|
||||||
|
cflags="$DEFS $defines -I$OUTDIR/src -Isrc -I$top_srcdir/src -I$OUTLIB -Ilib -I$top_srcdir/lib"
|
||||||
|
compile $OBJS || die "Compilation failed."
|
||||||
|
|
||||||
|
# Link all the objects together.
|
||||||
|
echo "linking make..."
|
||||||
|
$CC $CFLAGS $LDFLAGS -L"$OUTLIB" -o "$OUTDIR/makenew$EXEEXT" $objs -lgnu $LOADLIBES || die "Link failed."
|
||||||
|
|
||||||
|
mv -f "$OUTDIR/makenew$EXEEXT" "$OUTDIR/make$EXEEXT" || exit 1
|
||||||
|
|
||||||
|
echo done.
|
@ -1,81 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Shell script to build GNU Make in the absence of any 'make' program.
|
|
||||||
# @configure_input@
|
|
||||||
|
|
||||||
# Copyright (C) 1993-2013 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# See Makefile.in for comments describing these variables.
|
|
||||||
|
|
||||||
srcdir='@srcdir@'
|
|
||||||
CC='@CC@'
|
|
||||||
CFLAGS='@CFLAGS@'
|
|
||||||
CPPFLAGS='@CPPFLAGS@'
|
|
||||||
LDFLAGS='@LDFLAGS@'
|
|
||||||
ALLOCA='@ALLOCA@'
|
|
||||||
LOADLIBES='@LIBS@ @LIBINTL@'
|
|
||||||
eval extras=\'@LIBOBJS@\'
|
|
||||||
REMOTE='@REMOTE@'
|
|
||||||
GLOBLIB='@GLOBLIB@'
|
|
||||||
PATH_SEPARATOR='@PATH_SEPARATOR@'
|
|
||||||
OBJEXT='@OBJEXT@'
|
|
||||||
EXEEXT='@EXEEXT@'
|
|
||||||
|
|
||||||
# Common prefix for machine-independent installed files.
|
|
||||||
prefix='@prefix@'
|
|
||||||
# Common prefix for machine-dependent installed files.
|
|
||||||
exec_prefix=`eval echo @exec_prefix@`
|
|
||||||
# Directory to find libraries in for '-lXXX'.
|
|
||||||
libdir=${exec_prefix}/lib
|
|
||||||
# Directory to search by default for included makefiles.
|
|
||||||
includedir=${prefix}/include
|
|
||||||
|
|
||||||
localedir=${prefix}/share/locale
|
|
||||||
aliaspath=${localedir}${PATH_SEPARATOR}.
|
|
||||||
|
|
||||||
defines="-DALIASPATH=\"${aliaspath}\" -DLOCALEDIR=\"${localedir}\" -DLIBDIR=\"${libdir}\" -DINCLUDEDIR=\"${includedir}\""' @DEFS@'
|
|
||||||
|
|
||||||
# Exit as soon as any command fails.
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# These are all the objects we need to link together.
|
|
||||||
objs="%objs% remote-${REMOTE}.${OBJEXT} ${extras} ${ALLOCA}"
|
|
||||||
|
|
||||||
if [ x"$GLOBLIB" != x ]; then
|
|
||||||
objs="$objs %globobjs%"
|
|
||||||
globinc=-I${srcdir}/glob
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Compile the source files into those objects.
|
|
||||||
for file in `echo ${objs} | sed 's/\.'${OBJEXT}'/.c/g'`; do
|
|
||||||
echo compiling ${file}...
|
|
||||||
$CC $defines $CPPFLAGS $CFLAGS \
|
|
||||||
-c -I. -I${srcdir} ${globinc} ${srcdir}/$file
|
|
||||||
done
|
|
||||||
|
|
||||||
# The object files were actually all put in the current directory.
|
|
||||||
# Remove the source directory names from the list.
|
|
||||||
srcobjs="$objs"
|
|
||||||
objs=
|
|
||||||
for obj in $srcobjs; do
|
|
||||||
objs="$objs `basename $obj`"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Link all the objects together.
|
|
||||||
echo linking make...
|
|
||||||
$CC $CFLAGS $LDFLAGS $objs $LOADLIBES -o makenew${EXEEXT}
|
|
||||||
echo done
|
|
||||||
mv -f makenew${EXEEXT} make${EXEEXT}
|
|
783
build_w32.bat
783
build_w32.bat
@ -1,321 +1,498 @@
|
|||||||
@echo off
|
@echo off
|
||||||
rem Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
:: Copyright (C) 1996-2024 Free Software Foundation, Inc.
|
||||||
rem This file is part of GNU Make.
|
:: This file is part of GNU Make.
|
||||||
rem
|
::
|
||||||
rem GNU Make is free software; you can redistribute it and/or modify it under
|
:: GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
rem the terms of the GNU General Public License as published by the Free
|
:: the terms of the GNU General Public License as published by the Free
|
||||||
rem Software Foundation; either version 3 of the License, or (at your option)
|
:: Software Foundation; either version 3 of the License, or (at your option)
|
||||||
rem any later version.
|
:: any later version.
|
||||||
rem
|
::
|
||||||
rem GNU Make is distributed in the hope that it will be useful, but WITHOUT
|
:: GNU Make is distributed in the hope that it will be useful, but WITHOUT
|
||||||
rem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
:: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
rem FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for.
|
:: FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for.
|
||||||
rem more details.
|
:: more details.
|
||||||
rem
|
::
|
||||||
rem You should have received a copy of the GNU General Public License along
|
:: You should have received a copy of the GNU General Public License along
|
||||||
rem with this program. If not, see <http://www.gnu.org/licenses/>.
|
:: with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
if "%1" == "-h" GoTo Usage
|
setlocal
|
||||||
if "%1" == "--help" GoTo Usage
|
if not "%RECURSEME%"=="%~0" (
|
||||||
if not exist config.h.W32.template GoTo NotSCM
|
set "RECURSEME=%~0"
|
||||||
sed -n "s/^AC_INIT(\[GNU make\],\[\([^]]\+\)\].*/s,%%VERSION%%,\1,g/p" configure.ac > config.h.W32.sed
|
%ComSpec% /s /c ""%~0" %*"
|
||||||
echo s,%%PACKAGE%%,make,g >> config.h.W32.sed
|
goto :EOF
|
||||||
sed -f config.h.W32.sed config.h.W32.template > config.h.W32
|
)
|
||||||
echo static const char *const GUILE_module_defn = ^" \> gmk-default.h
|
|
||||||
sed -e "s/;.*//" -e "/^[ \t]*$/d" -e "s/\"/\\\\\"/g" -e "s/$/ \\/" gmk-default.scm >> gmk-default.h
|
call :Reset
|
||||||
echo ^";>> gmk-default.h
|
|
||||||
:NotSCM
|
if "%1" == "-h" goto Usage
|
||||||
copy config.h.W32 config.h
|
if "%1" == "--help" goto Usage
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Creating GNU Make for Windows 9X/NT/2K/XP/Vista/7/8/10/11
|
||||||
|
echo.
|
||||||
|
|
||||||
|
set MAKE=gnumake
|
||||||
|
set GUILE=Y
|
||||||
|
set COMPILER=cl.exe
|
||||||
|
set RC=rc.exe
|
||||||
|
set O=obj
|
||||||
|
set ARCH=x64
|
||||||
|
set DEBUG=N
|
||||||
|
set DIRENT=Y
|
||||||
|
set VERBOSE=N
|
||||||
|
|
||||||
|
if exist maintMakefile (
|
||||||
|
set MAINT=Y
|
||||||
|
) else (
|
||||||
|
set MAINT=N
|
||||||
|
)
|
||||||
|
|
||||||
rem Guile configuration
|
|
||||||
set GUILECFLAGS=
|
|
||||||
set GUILELIBS=
|
|
||||||
set GUILESRC=
|
|
||||||
set NOGUILE=
|
|
||||||
set OPT=-O2
|
|
||||||
set COMPILER=
|
|
||||||
set PKGMSC=
|
|
||||||
:ParseSW
|
:ParseSW
|
||||||
if "%1" == "--debug" GoTo SetOpt
|
if "%1" == "--verbose" goto SetVerbose
|
||||||
if "%1" == "--without-guile" GoTo NoGuile
|
if "%1" == "--debug" goto SetDebug
|
||||||
if "%1" == "gcc" GoTo SetCC
|
if "%1" == "--without-guile" goto NoGuile
|
||||||
if "%1" == "" GoTo ChkGuile
|
if "%1" == "--x86" goto Set32Bit
|
||||||
:SetOpt
|
if "%1" == "gcc" goto SetCC
|
||||||
set OPT=-O0
|
if "%1" == "tcc" goto SetTCC
|
||||||
|
if "%1" == "" goto DoneSW
|
||||||
|
goto Usage
|
||||||
|
|
||||||
|
:SetVerbose
|
||||||
|
set VERBOSE=Y
|
||||||
shift
|
shift
|
||||||
GoTo ParseSW
|
goto ParseSW
|
||||||
|
|
||||||
|
:SetDebug
|
||||||
|
set DEBUG=Y
|
||||||
|
echo - Building without compiler optimizations
|
||||||
|
shift
|
||||||
|
goto ParseSW
|
||||||
|
|
||||||
:NoGuile
|
:NoGuile
|
||||||
set NOGUILE=Y
|
set GUILE=N
|
||||||
echo "Building without Guile"
|
echo - Building without Guile
|
||||||
shift
|
shift
|
||||||
GoTo ParseSW
|
goto ParseSW
|
||||||
|
|
||||||
|
:Set32Bit
|
||||||
|
set ARCH=x86
|
||||||
|
echo - Building 32bit GNU Make
|
||||||
|
shift
|
||||||
|
goto ParseSW
|
||||||
|
|
||||||
:SetCC
|
:SetCC
|
||||||
set COMPILER=gcc
|
set COMPILER=gcc
|
||||||
echo "Building with GCC"
|
set RC=windres
|
||||||
|
set O=o
|
||||||
|
echo - Building with GCC
|
||||||
shift
|
shift
|
||||||
GoTo ParseSW
|
goto ParseSW
|
||||||
rem Build with Guile is supported only on NT and later versions
|
|
||||||
:ChkGuile
|
|
||||||
if "%NOGUILE%" == "Y" GoTo GuileDone
|
|
||||||
if not "%OS%" == "Windows_NT" GoTo NoGuile
|
|
||||||
pkg-config --help > guile.tmp 2> NUL
|
|
||||||
if ERRORLEVEL 1 GoTo NoPkgCfg
|
|
||||||
echo "Checking for Guile 2.0"
|
|
||||||
if not "%COMPILER%" == "gcc" set PKGMSC=--msvc-syntax
|
|
||||||
pkg-config --cflags --short-errors "guile-2.0" > guile.tmp
|
|
||||||
if not ERRORLEVEL 1 set /P GUILECFLAGS= < guile.tmp
|
|
||||||
pkg-config --libs --static --short-errors %PKGMSC% "guile-2.0" > guile.tmp
|
|
||||||
if not ERRORLEVEL 1 set /P GUILELIBS= < guile.tmp
|
|
||||||
if not "%GUILECFLAGS%" == "" GoTo GuileDone
|
|
||||||
echo "Checking for Guile 1.8"
|
|
||||||
pkg-config --cflags --short-errors "guile-1.8" > guile.tmp
|
|
||||||
if not ERRORLEVEL 1 set /P GUILECFLAGS= < guile.tmp
|
|
||||||
pkg-config --libs --static --short-errors %PKGMSC% "guile-1.8" > guile.tmp
|
|
||||||
if not ERRORLEVEL 1 set /P GUILELIBS= < guile.tmp
|
|
||||||
if not "%GUILECFLAGS%" == "" GoTo GuileDone
|
|
||||||
echo "No Guile found, building without Guile"
|
|
||||||
GoTo GuileDone
|
|
||||||
:NoPkgCfg
|
|
||||||
echo "pkg-config not found, building without Guile"
|
|
||||||
:GuileDone
|
|
||||||
if not "%GUILECFLAGS%" == "" echo "Guile found, building with Guile"
|
|
||||||
if not "%GUILECFLAGS%" == "" set GUILESRC=guile.c
|
|
||||||
if not "%GUILECFLAGS%" == "" set GUILECFLAGS=%GUILECFLAGS% -DHAVE_GUILE
|
|
||||||
if "%COMPILER%" == "gcc" if "%OPT%" == "-O0" echo "Building without compiler optimizations"
|
|
||||||
cd w32\subproc
|
|
||||||
echo.
|
|
||||||
echo "Creating the subproc library"
|
|
||||||
%ComSpec% /c build.bat
|
|
||||||
cd ..\..
|
|
||||||
|
|
||||||
if exist link.dbg del link.dbg
|
:SetTCC
|
||||||
if exist link.rel del link.rel
|
set COMPILER=tcc
|
||||||
|
set RC=windres
|
||||||
|
set O=o
|
||||||
|
echo - Building with TinyC
|
||||||
|
shift
|
||||||
|
goto ParseSW
|
||||||
|
|
||||||
|
:DoneSW
|
||||||
|
if "%MAINT%" == "Y" echo - Enabling maintainer mode
|
||||||
|
|
||||||
|
if "%COMPILER%" == "gcc" goto FindGcc
|
||||||
|
if "%COMPILER%" == "tcc" goto FindTcc
|
||||||
|
|
||||||
|
:: Find a compiler. Visual Studio requires a lot of effort to locate :-/.
|
||||||
|
call %COMPILER% >nul 2>&1
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
:: Visual Studio 15 2017 and above provides the "vswhere" tool
|
||||||
|
call :FindVswhere
|
||||||
|
if ERRORLEVEL 1 goto LegacyVS
|
||||||
|
|
||||||
|
for /f "tokens=* usebackq" %%i in (`"%VSWHERE%" -latest -property installationPath`) do (
|
||||||
|
set InstallPath=%%i
|
||||||
|
)
|
||||||
|
set "VSVARS=%InstallPath%\VC\Auxiliary\Build\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
:: No "vswhere" or it can't find a compiler. Go old-school.
|
||||||
|
:LegacyVS
|
||||||
|
set "VSVARS=%VS150COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%VS100COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%VS80COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%VS71COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%VS70COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%V6TOOLS%\VC98\Bin\vcvars32.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%V6TOOLS%\VC97\Bin\vcvars32.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
set "VSVARS=%V5TOOLS%\VC\Bin\vcvars32.bat"
|
||||||
|
call :CheckMSVC
|
||||||
|
if not ERRORLEVEL 1 goto FoundMSVC
|
||||||
|
|
||||||
|
:: We did not find anything--fail
|
||||||
|
echo No MSVC compiler available.
|
||||||
|
echo Please run vcvarsall.bat and/or configure your Path.
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
:FoundMSVC
|
||||||
|
set OUTDIR=.\WinRel
|
||||||
|
set LNKOUT=./WinRel
|
||||||
|
set "OPTS=/O2 /D NDEBUG"
|
||||||
|
set LINKOPTS=
|
||||||
|
if "%DEBUG%" == "Y" set OUTDIR=.\WinDebug
|
||||||
|
if "%DEBUG%" == "Y" set LNKOUT=./WinDebug
|
||||||
|
if "%DEBUG%" == "Y" set "OPTS=/Zi /Od /D _DEBUG"
|
||||||
|
if "%DEBUG%" == "Y" set LINKOPTS=/DEBUG
|
||||||
|
if "%MAINT%" == "Y" set "OPTS=%OPTS% /D MAKE_MAINTAINER_MODE"
|
||||||
|
:: Show the compiler version that we found
|
||||||
|
:: Unfortunately this also shows a "usage" note; I can't find anything better.
|
||||||
echo.
|
echo.
|
||||||
echo "Creating GNU Make for Windows 9X/NT/2K/XP/Vista/7/8"
|
call %COMPILER%
|
||||||
if "%COMPILER%" == "gcc" GoTo GCCBuild
|
goto FindRC
|
||||||
set make=gnumake
|
|
||||||
echo on
|
:FindGcc
|
||||||
if not exist .\WinDebug\nul mkdir .\WinDebug
|
set OUTDIR=.\GccRel
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D TIVOLI /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c variable.c
|
set LNKOUT=./GccRel
|
||||||
echo WinDebug\variable.obj >>link.dbg
|
set OPTS=-O2
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c rule.c
|
set DIRENT=N
|
||||||
echo WinDebug\rule.obj >>link.dbg
|
if "%DEBUG%" == "Y" set OPTS=-O0
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c remote-stub.c
|
if "%DEBUG%" == "Y" set OUTDIR=.\GccDebug
|
||||||
echo WinDebug\remote-stub.obj >>link.dbg
|
if "%DEBUG%" == "Y" set LNKOUT=./GccDebug
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c commands.c
|
if "%MAINT%" == "Y" set "OPTS=%OPTS% -DMAKE_MAINTAINER_MODE"
|
||||||
echo WinDebug\commands.obj >>link.dbg
|
:: Show the compiler version that we found
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c file.c
|
echo.
|
||||||
echo WinDebug\file.obj >>link.dbg
|
call %COMPILER% --version
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getloadavg.c
|
if not ERRORLEVEL 1 goto FindRC
|
||||||
echo WinDebug\getloadavg.obj >>link.dbg
|
echo No %COMPILER% found.
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c default.c
|
exit 1
|
||||||
echo WinDebug\default.obj >>link.dbg
|
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c signame.c
|
:FindTcc
|
||||||
echo WinDebug\signame.obj >>link.dbg
|
set OUTDIR=.\TccRel
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c expand.c
|
set LNKOUT=./TccRel
|
||||||
echo WinDebug\expand.obj >>link.dbg
|
set OPTS=-O2
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c dir.c
|
if "%DEBUG%" == "Y" set OPTS=-O0
|
||||||
echo WinDebug\dir.obj >>link.dbg
|
if "%DEBUG%" == "Y" set OUTDIR=.\TccDebug
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od %GUILECFLAGS% /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c main.c
|
if "%DEBUG%" == "Y" set LNKOUT=./TccDebug
|
||||||
echo WinDebug\main.obj >>link.dbg
|
if "%MAINT%" == "Y" set "OPTS=%OPTS% -DMAKE_MAINTAINER_MODE"
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getopt1.c
|
:: Show the compiler version that we found
|
||||||
echo WinDebug\getopt1.obj >>link.dbg
|
echo.
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c job.c
|
call %COMPILER% -v
|
||||||
echo WinDebug\job.obj >>link.dbg
|
if not ERRORLEVEL 1 goto FindRC
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c output.c
|
echo No %COMPILER% found.
|
||||||
echo WinDebug\output.obj >>link.dbg
|
exit 1
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c read.c
|
|
||||||
echo WinDebug\read.obj >>link.dbg
|
:FindRC
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c version.c
|
set HAVE_RC=Y
|
||||||
echo WinDebug\version.obj >>link.dbg
|
call where %RC% >nul 2>&1
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getopt.c
|
if not ERRORLEVEL 1 goto Build
|
||||||
echo WinDebug\getopt.obj >>link.dbg
|
echo.
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c arscan.c
|
echo %RC% was not found. Building without UTF-8 resource.
|
||||||
echo WinDebug\arscan.obj >>link.dbg
|
set HAVE_RC=N
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c hash.c
|
|
||||||
echo WinDebug\hash.obj >>link.dbg
|
:Build
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c strcache.c
|
echo.
|
||||||
echo WinDebug\strcache.obj >>link.dbg
|
:: Clean the directory if it exists
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c remake.c
|
if exist %OUTDIR%\nul rmdir /S /Q %OUTDIR%
|
||||||
echo WinDebug\remake.obj >>link.dbg
|
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c misc.c
|
:: Recreate it
|
||||||
echo WinDebug\misc.obj >>link.dbg
|
mkdir %OUTDIR%
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c ar.c
|
mkdir %OUTDIR%\src
|
||||||
echo WinDebug\ar.obj >>link.dbg
|
mkdir %OUTDIR%\src\w32
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c function.c
|
mkdir %OUTDIR%\src\w32\compat
|
||||||
echo WinDebug\function.obj >>link.dbg
|
mkdir %OUTDIR%\src\w32\subproc
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c vpath.c
|
mkdir %OUTDIR%\lib
|
||||||
echo WinDebug\vpath.obj >>link.dbg
|
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c implicit.c
|
if "%GUILE%" == "Y" call :ChkGuile
|
||||||
echo WinDebug\implicit.obj >>link.dbg
|
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c loadapi.c
|
if not exist src\config.h.W32 goto NotConfig
|
||||||
echo WinDebug\loadapi.obj >>link.dbg
|
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c load.c
|
echo.
|
||||||
echo WinDebug\load.obj >>link.dbg
|
echo Compiling %OUTDIR% version
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\w32\compat\dirent.c
|
|
||||||
echo WinDebug\dirent.obj >>link.dbg
|
copy src\config.h.W32 %OUTDIR%\src\config.h
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\w32\compat\posixfcn.c
|
|
||||||
echo WinDebug\posixfcn.obj >>link.dbg
|
copy lib\glob.in.h %OUTDIR%\lib\glob.h
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\glob\glob.c
|
copy lib\fnmatch.in.h %OUTDIR%\lib\fnmatch.h
|
||||||
echo WinDebug\glob.obj >>link.dbg
|
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\glob\fnmatch.c
|
if exist %OUTDIR%\link.sc del %OUTDIR%\link.sc
|
||||||
echo WinDebug\fnmatch.obj >>link.dbg
|
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\w32\pathstuff.c
|
call :Compile src/ar
|
||||||
echo WinDebug\pathstuff.obj >>link.dbg
|
call :Compile src/arscan
|
||||||
if "%GUILESRC%" == "" GoTo LinkDbg
|
call :Compile src/commands
|
||||||
cl.exe /nologo /MT /W4 /GX /Zi /YX /Od %GUILECFLAGS%% /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c guile.c
|
call :Compile src/default
|
||||||
echo WinDebug\guile.obj >>link.dbg
|
call :Compile src/dir
|
||||||
:LinkDbg
|
call :Compile src/expand
|
||||||
echo off
|
call :Compile src/file
|
||||||
echo "Linking WinDebug/%make%.exe"
|
call :Compile src/function
|
||||||
rem link.exe %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\windebug\subproc.lib /NOLOGO /SUBSYSTEM:console /INCREMENTAL:yes /PDB:.\WinDebug/%make%.pdb /DEBUG /OUT:.\WinDebug/%make%.exe .\WinDebug/variable.obj .\WinDebug/rule.obj .\WinDebug/remote-stub.obj .\WinDebug/commands.obj .\WinDebug/file.obj .\WinDebug/getloadavg.obj .\WinDebug/default.obj .\WinDebug/signame.obj .\WinDebug/expand.obj .\WinDebug/dir.obj .\WinDebug/main.obj .\WinDebug/getopt1.obj .\WinDebug/job.obj .\WinDebug/output.obj .\WinDebug/read.obj .\WinDebug/version.obj .\WinDebug/getopt.obj .\WinDebug/arscan.obj .\WinDebug/remake.obj .\WinDebug/hash.obj .\WinDebug/strcache.obj .\WinDebug/misc.obj .\WinDebug/ar.obj .\WinDebug/function.obj .\WinDebug/vpath.obj .\WinDebug/implicit.obj .\WinDebug/dirent.obj .\WinDebug/glob.obj .\WinDebug/fnmatch.obj .\WinDebug/pathstuff.obj
|
call :Compile src/getopt
|
||||||
echo %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\windebug\subproc.lib >>link.dbg
|
call :Compile src/getopt1
|
||||||
link.exe /NOLOGO /SUBSYSTEM:console /INCREMENTAL:yes /PDB:.\WinDebug/%make%.pdb /DEBUG /OUT:.\WinDebug/%make%.exe @link.dbg
|
call :Compile src/guile GUILE
|
||||||
if not exist .\WinDebug/%make%.exe echo "WinDebug build failed"
|
call :Compile src/hash
|
||||||
if exist .\WinDebug/%make%.exe echo "WinDebug build succeeded!"
|
call :Compile src/implicit
|
||||||
if not exist .\WinRel\nul mkdir .\WinRel
|
call :Compile src/job
|
||||||
echo on
|
call :Compile src/load
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /D TIVOLI /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c variable.c
|
call :Compile src/loadapi
|
||||||
echo WinRel\variable.obj >>link.rel
|
call :Compile src/main GUILE
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c rule.c
|
call :Compile src/misc
|
||||||
echo WinRel\rule.obj >>link.rel
|
call :Compile src/output
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c remote-stub.c
|
call :Compile src/read
|
||||||
echo WinRel\remote-stub.obj >>link.rel
|
call :Compile src/remake
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c commands.c
|
call :Compile src/remote-stub
|
||||||
echo WinRel\commands.obj >>link.rel
|
call :Compile src/rule
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c file.c
|
call :Compile src/shuffle
|
||||||
echo WinRel\file.obj >>link.rel
|
call :Compile src/signame
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getloadavg.c
|
call :Compile src/strcache
|
||||||
echo WinRel\getloadavg.obj >>link.rel
|
call :Compile src/variable
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c default.c
|
call :Compile src/version
|
||||||
echo WinRel\default.obj >>link.rel
|
call :Compile src/vpath
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c signame.c
|
call :Compile src/warning
|
||||||
echo WinRel\signame.obj >>link.rel
|
call :Compile src/w32/pathstuff
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c expand.c
|
call :Compile src/w32/w32os
|
||||||
echo WinRel\expand.obj >>link.rel
|
call :Compile src/w32/compat/posixfcn
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c dir.c
|
call :Compile src/w32/subproc/misc
|
||||||
echo WinRel\dir.obj >>link.rel
|
call :Compile src/w32/subproc/sub_proc
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 %GUILECFLAGS% /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c main.c
|
call :Compile src/w32/subproc/w32err
|
||||||
echo WinRel\main.obj >>link.rel
|
call :Compile lib/fnmatch
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getopt1.c
|
call :Compile lib/glob
|
||||||
echo WinRel\getopt1.obj >>link.rel
|
call :Compile lib/getloadavg
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c job.c
|
|
||||||
echo WinRel\job.obj >>link.rel
|
:: Compile dirent unless it is supported by compiler library (like with gcc).
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c output.c
|
if "%DIRENT%" == "Y" call :Compile src\w32\compat\dirent
|
||||||
echo WinRel\output.obj >>link.rel
|
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c read.c
|
:: Compile UTF-8 resource if a resource compiler is available.
|
||||||
echo WinRel\read.obj >>link.rel
|
if "%HAVE_RC%" == "Y" call :ResourceCompile src/w32/utf8
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c version.c
|
|
||||||
echo WinRel\version.obj >>link.rel
|
call :Link
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getopt.c
|
|
||||||
echo WinRel\getopt.obj >>link.rel
|
echo.
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c arscan.c
|
if exist %OUTDIR%\%MAKE%.exe goto Success
|
||||||
echo WinRel\arscan.obj >>link.rel
|
echo %OUTDIR% build FAILED!
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c remake.c
|
exit 1
|
||||||
echo WinRel\remake.obj >>link.rel
|
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c hash.c
|
:Success
|
||||||
echo WinRel\hash.obj >>link.rel
|
echo %OUTDIR% build succeeded.
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c strcache.c
|
if exist Basic.mk copy /Y Basic.mk Makefile
|
||||||
echo WinRel\strcache.obj >>link.rel
|
if not exist tests\config-flags.pm copy /Y tests\config-flags.pm.W32 tests\config-flags.pm
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c misc.c
|
call :Reset
|
||||||
echo WinRel\misc.obj >>link.rel
|
goto :EOF
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c ar.c
|
|
||||||
echo WinRel\ar.obj >>link.rel
|
::
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c function.c
|
:: Subroutines
|
||||||
echo WinRel\function.obj >>link.rel
|
::
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c vpath.c
|
|
||||||
echo WinRel\vpath.obj >>link.rel
|
:Compile
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c implicit.c
|
if "%VERBOSE%" == "N" echo - Compiling %1.c
|
||||||
echo WinRel\implicit.obj >>link.rel
|
echo %LNKOUT%/%1.%O% >>%OUTDIR%\link.sc
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c loadapi.c
|
set EXTRAS=
|
||||||
echo WinRel\loadapi.obj >>link.rel
|
if "%2" == "GUILE" set "EXTRAS=%GUILECFLAGS%"
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c load.c
|
if exist "%OUTDIR%\%1.%O%" del "%OUTDIR%\%1.%O%"
|
||||||
echo WinRel\load.obj >>link.rel
|
if "%COMPILER%" == "gcc" goto GccCompile
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\w32\compat\dirent.c
|
if "%COMPILER%" == "tcc" goto TccCompile
|
||||||
echo WinRel\dirent.obj >>link.rel
|
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\w32\compat\posixfcn.c
|
:: MSVC Compile
|
||||||
echo WinRel\posixfcn.obj >>link.rel
|
if "%VERBOSE%" == "Y" echo on
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\glob\glob.c
|
call %COMPILER% /nologo /MT /W4 /EHsc %OPTS% /I %OUTDIR%/src /I src /I %OUTDIR%/lib /I lib /I src/w32/include /D _CONSOLE /D HAVE_CONFIG_H /FR%OUTDIR% /Fp%OUTDIR%\%MAKE%.pch /Fo%OUTDIR%\%1.%O% /Fd%OUTDIR%\%MAKE%.pdb %EXTRAS% /c %1.c
|
||||||
echo WinRel\glob.obj >>link.rel
|
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\glob\fnmatch.c
|
|
||||||
echo WinRel\fnmatch.obj >>link.rel
|
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\w32\pathstuff.c
|
|
||||||
echo WinRel\pathstuff.obj >>link.rel
|
|
||||||
if "%GUILESRC%" == "" GoTo LinkRel
|
|
||||||
cl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c guile.c
|
|
||||||
echo WinRel\guile.obj >>link.rel
|
|
||||||
:LinkRel
|
|
||||||
echo off
|
|
||||||
echo "Linking WinRel/%make%.exe"
|
|
||||||
rem link.exe %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\winrel\subproc.lib /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:.\WinRel/%make%.pdb /OUT:.\WinRel/%make%.exe .\WinRel/variable.obj .\WinRel/rule.obj .\WinRel/remote-stub.obj .\WinRel/commands.obj .\WinRel/file.obj .\WinRel/getloadavg.obj .\WinRel/default.obj .\WinRel/signame.obj .\WinRel/expand.obj .\WinRel/dir.obj .\WinRel/main.obj .\WinRel/getopt1.obj .\WinRel/job.obj .\WinRel/output.obj .\WinRel/read.obj .\WinRel/version.obj .\WinRel/getopt.obj .\WinRel/arscan.obj .\WinRel/remake.obj .\WinRel/misc.obj .\WinRel/hash.obj .\WinRel/strcache.obj .\WinRel/ar.obj .\WinRel/function.obj .\WinRel/vpath.obj .\WinRel/implicit.obj .\WinRel/dirent.obj .\WinRel/glob.obj .\WinRel/fnmatch.obj .\WinRel/pathstuff.obj
|
|
||||||
echo %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\winrel\subproc.lib >>link.rel
|
|
||||||
link.exe /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:.\WinRel/%make%.pdb /OUT:.\WinRel/%make%.exe @link.rel
|
|
||||||
if not exist .\WinRel/%make%.exe echo "WinRel build failed"
|
|
||||||
if exist .\WinRel/%make%.exe echo "WinRel build succeeded!"
|
|
||||||
set make=
|
|
||||||
GoTo BuildEnd
|
|
||||||
:GCCBuild
|
|
||||||
echo on
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c variable.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c rule.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c remote-stub.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c commands.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c file.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getloadavg.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c default.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c signame.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c expand.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c dir.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H %GUILECFLAGS% -c main.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getopt1.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c job.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c output.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c read.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c version.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getopt.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c arscan.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c remake.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c hash.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c strcache.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c misc.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ar.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c function.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c vpath.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c implicit.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c loadapi.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c load.c
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./glob/glob.c -o glob.o
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./glob/fnmatch.c -o fnmatch.o
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./w32/pathstuff.c -o pathstuff.o
|
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./w32/compat/posixfcn.c -o posixfcn.o
|
|
||||||
@echo off
|
@echo off
|
||||||
set GUILEOBJ=
|
goto CompileDone
|
||||||
if "%GUILESRC%" == "" GoTo LinkGCC
|
|
||||||
set GUILEOBJ=guile.o
|
:GccCompile
|
||||||
echo on
|
:: GCC Compile
|
||||||
gcc -mthreads -Wall -gdwarf-2 -g3 %OPT% %GUILECFLAGS% -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c guile.c
|
if "%VERBOSE%" == "Y" echo on
|
||||||
:LinkGCC
|
call %COMPILER% -mthreads -Wall -std=gnu99 -gdwarf-2 -g3 %OPTS% -I%OUTDIR%/src -I./src -I%OUTDIR%/lib -I./lib -I./src/w32/include -DHAVE_CONFIG_H %EXTRAS% -o %OUTDIR%/%1.%O% -c %1.c
|
||||||
@echo off
|
@echo off
|
||||||
Rem The version NN of libgnumake-NN.dll.a should be bumped whenever
|
goto CompileDone
|
||||||
Rem the API changes in binary-incompatible manner.
|
|
||||||
@echo on
|
:TccCompile
|
||||||
gcc -mthreads -gdwarf-2 -g3 -o gnumake.exe variable.o rule.o remote-stub.o commands.o file.o getloadavg.o default.o signame.o expand.o dir.o main.o getopt1.o %GUILEOBJ% job.o output.o read.o version.o getopt.o arscan.o remake.o misc.o hash.o strcache.o ar.o function.o vpath.o implicit.o loadapi.o load.o glob.o fnmatch.o pathstuff.o posixfcn.o w32_misc.o sub_proc.o w32err.o %GUILELIBS% -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -Wl,--out-implib=libgnumake-1.dll.a
|
:: TCC Compile
|
||||||
@GoTo BuildEnd
|
if "%VERBOSE%" == "Y" echo on
|
||||||
:Usage
|
call %COMPILER% -mthreads -Wall -std=c11 %OPTS% -I%OUTDIR%/src -I./src -I%OUTDIR%/lib -I./lib -I./src/w32/include -D_cdecl= -D_MSC_VER -DHAVE_CONFIG_H %EXTRAS% -o %OUTDIR%/%1.%O% -c %1.c
|
||||||
echo Usage: %0 [options] [gcc]
|
|
||||||
echo Options:
|
|
||||||
echo. --debug For GCC only, make a debug build
|
|
||||||
echo. (MSVC build always makes both debug and release)
|
|
||||||
echo. --without-guile Do not compile Guile support even if found
|
|
||||||
echo. --help Display these instructions and exit
|
|
||||||
:BuildEnd
|
|
||||||
@echo off
|
@echo off
|
||||||
set GUILEOBJ=
|
goto CompileDone
|
||||||
set GUILESRC=
|
|
||||||
set GUILELIBS=
|
:ResourceCompile
|
||||||
set GUILECFLAGS=
|
if "%VERBOSE%" == "N" echo - Compiling %1.rc
|
||||||
|
echo %LNKOUT%/%1.%O% >>%OUTDIR%\link.sc
|
||||||
|
if exist "%OUTDIR%\%1.%O%" del "%OUTDIR%\%1.%O%"
|
||||||
|
if "%COMPILER%" == "gcc" goto GccResourceCompile
|
||||||
|
if "%COMPILER%" == "tcc" goto TccResourceCompile
|
||||||
|
|
||||||
|
:: MSVC Resource Compile
|
||||||
|
if "%VERBOSE%" == "Y" echo on
|
||||||
|
call %RC% /fo %OUTDIR%\%1.%O% %1.rc
|
||||||
|
@echo off
|
||||||
|
goto CompileDone
|
||||||
|
|
||||||
|
:GccResourceCompile
|
||||||
|
:: GCC Resource Compile
|
||||||
|
if "%VERBOSE%" == "Y" echo on
|
||||||
|
call %RC% -o %OUTDIR%/%1.%O% -i %1.rc
|
||||||
|
@echo off
|
||||||
|
goto CompileDone
|
||||||
|
|
||||||
|
:TccResourceCompile
|
||||||
|
:: TCC Resource Compile
|
||||||
|
goto GccResourceCompile
|
||||||
|
|
||||||
|
:CompileDone
|
||||||
|
if not exist "%OUTDIR%\%1.%O%" exit 1
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:Link
|
||||||
|
echo.
|
||||||
|
echo - Linking %LNKOUT%/%MAKE%.exe
|
||||||
|
if "%COMPILER%" == "gcc" goto GccLink
|
||||||
|
if "%COMPILER%" == "tcc" goto TccLink
|
||||||
|
|
||||||
|
:: MSVC Link
|
||||||
|
echo %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib >>%OUTDIR%\link.sc
|
||||||
|
if "%VERBOSE%" == "Y" echo on
|
||||||
|
call link.exe /NOLOGO /SUBSYSTEM:console /PDB:%LNKOUT%\%MAKE%.pdb %LINKOPTS% /OUT:%LNKOUT%\%MAKE%.exe @%LNKOUT%\link.sc
|
||||||
|
@echo off
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:GccLink
|
||||||
|
:: GCC Link
|
||||||
|
if "%VERBOSE%" == "Y" echo on
|
||||||
|
echo %GUILELIBS% -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 >>%OUTDIR%\link.sc
|
||||||
|
call %COMPILER% -mthreads -gdwarf-2 -g3 %OPTS% -o %LNKOUT%/%MAKE%.exe @%LNKOUT%/link.sc -Wl,--out-implib=%LNKOUT%/libgnumake-1.dll.a
|
||||||
|
@echo off
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:TccLink
|
||||||
|
:: TCC Link
|
||||||
|
if "%VERBOSE%" == "Y" echo on
|
||||||
|
echo %GUILELIBS% -lkernel32 -luser32 -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lodbc32 -lodbccp32 >>%OUTDIR%\link.sc
|
||||||
|
call %COMPILER% -mthreads %OPTS% -o %LNKOUT%/%MAKE%.exe @%LNKOUT%/link.sc
|
||||||
|
@echo off
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:ChkGuile
|
||||||
|
:: Build with Guile is supported only on NT and later versions
|
||||||
|
if not "%OS%" == "Windows_NT" goto NoGuile
|
||||||
|
call pkg-config --help > %OUTDIR%\guile.tmp 2> NUL
|
||||||
|
if ERRORLEVEL 1 goto NoPkgCfg
|
||||||
|
|
||||||
set PKGMSC=
|
set PKGMSC=
|
||||||
set OPT=
|
if not "%COMPILER%" == "gcc" set PKGMSC=--msvc-syntax
|
||||||
|
|
||||||
|
echo Checking for Guile 2.0
|
||||||
|
call pkg-config --cflags --short-errors "guile-2.0" > %OUTDIR%\gl-c2.tmp 2> NUL
|
||||||
|
if not ERRORLEVEL 1 set /P GUILECFLAGS= < %OUTDIR%\gl-c2.tmp
|
||||||
|
|
||||||
|
call pkg-config --libs --static --short-errors %PKGMSC% "guile-2.0" > %OUTDIR%\gl-l2.tmp 2> NUL
|
||||||
|
if not ERRORLEVEL 1 set /P GUILELIBS= < %OUTDIR%\gl-l2.tmp
|
||||||
|
|
||||||
|
if not "%GUILECFLAGS%" == "" goto GuileDone
|
||||||
|
|
||||||
|
echo Checking for Guile 1.8
|
||||||
|
call pkg-config --cflags --short-errors "guile-1.8" > %OUTDIR%\gl-c18.tmp 2> NUL
|
||||||
|
if not ERRORLEVEL 1 set /P GUILECFLAGS= < %OUTDIR%\gl-c18.tmp
|
||||||
|
|
||||||
|
call pkg-config --libs --static --short-errors %PKGMSC% "guile-1.8" > %OUTDIR%\gl-l18.tmp 2> NUL
|
||||||
|
if not ERRORLEVEL 1 set /P GUILELIBS= < %OUTDIR%\gl-l18.tmp
|
||||||
|
|
||||||
|
if not "%GUILECFLAGS%" == "" goto GuileDone
|
||||||
|
|
||||||
|
echo - No Guile found, building without Guile
|
||||||
|
goto GuileDone
|
||||||
|
|
||||||
|
:NoPkgCfg
|
||||||
|
echo - pkg-config not found, building without Guile
|
||||||
|
|
||||||
|
:GuileDone
|
||||||
|
if "%GUILECFLAGS%" == "" goto :EOF
|
||||||
|
|
||||||
|
echo - Guile found: building with Guile
|
||||||
|
set "GUILECFLAGS=%GUILECFLAGS% -DHAVE_GUILE"
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:FindVswhere
|
||||||
|
set VSWHERE=vswhere
|
||||||
|
call "%VSWHERE%" -help >nul 2>&1
|
||||||
|
if not ERRORLEVEL 1 exit /b 0
|
||||||
|
set "VSWHERE=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere"
|
||||||
|
call "%VSWHERE%" -help >nul 2>&1
|
||||||
|
if ERRORLEVEL 1 exit /b 1
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:CheckMSVC
|
||||||
|
if not exist "%VSVARS%" exit /b 1
|
||||||
|
call "%VSVARS%" %ARCH%
|
||||||
|
if ERRORLEVEL 1 exit /b 1
|
||||||
|
call %COMPILER% >nul 2>&1
|
||||||
|
if ERRORLEVEL 1 exit /b 1
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:NotConfig
|
||||||
|
echo.
|
||||||
|
echo *** This workspace is not configured.
|
||||||
|
echo Either retrieve the configured source in the release tarball
|
||||||
|
echo or, if building from Git, run the .\bootstrap.bat script first.
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:Usage
|
||||||
|
echo Usage: %0 [options] [gcc] OR [tcc]
|
||||||
|
echo Options:
|
||||||
|
echo. --without-guile Do not compile Guile support even if found
|
||||||
|
echo. --debug Make a Debug build--default is Release
|
||||||
|
echo. --x86 Make a 32bit binary--default is 64bit
|
||||||
|
echo. --help Display these instructions and exit
|
||||||
|
echo.
|
||||||
|
echo. "gcc" means compile with GCC, "tcc" means compile with Tiny C's TCC
|
||||||
|
goto :EOF
|
||||||
|
|
||||||
|
:Reset
|
||||||
|
set ARCH=
|
||||||
set COMPILER=
|
set COMPILER=
|
||||||
|
set DEBUG=
|
||||||
|
set GUILE=
|
||||||
|
set GUILECFLAGS=
|
||||||
|
set GUILELIBS=
|
||||||
|
set LINKOPTS=
|
||||||
|
set MAKE=
|
||||||
set NOGUILE=
|
set NOGUILE=
|
||||||
echo on
|
set O=
|
||||||
|
set OPTS=
|
||||||
|
set OUTDIR=
|
||||||
|
set LNKOUT=
|
||||||
|
set PKGMSC=
|
||||||
|
set VSVARS=
|
||||||
|
goto :EOF
|
||||||
|
98
builddos.bat
Normal file
98
builddos.bat
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
@echo off
|
||||||
|
rem Copyright (C) 1998-2024 Free Software Foundation, Inc.
|
||||||
|
rem This file is part of GNU Make.
|
||||||
|
rem
|
||||||
|
rem GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
|
rem the terms of the GNU General Public License as published by the Free
|
||||||
|
rem Software Foundation; either version 3 of the License, or (at your option)
|
||||||
|
rem any later version.
|
||||||
|
rem
|
||||||
|
rem GNU Make is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
rem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
rem FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for.
|
||||||
|
rem more details.
|
||||||
|
rem
|
||||||
|
rem You should have received a copy of the GNU General Public License along
|
||||||
|
rem with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
echo Building Make for MSDOS with DJGPP
|
||||||
|
|
||||||
|
rem The SmallEnv trick protects against too small environment block,
|
||||||
|
rem in which case the values will be truncated and the whole thing
|
||||||
|
rem goes awry. COMMAND.COM will say "Out of environment space", but
|
||||||
|
rem many people don't care, so we force them to care by refusing to go.
|
||||||
|
|
||||||
|
rem Where is the srcdir?
|
||||||
|
set XSRC=.
|
||||||
|
if not "%XSRC%"=="." goto SmallEnv
|
||||||
|
if "%1%"=="" goto SrcDone
|
||||||
|
if "%1%"=="." goto SrcDone
|
||||||
|
set XSRC=%1
|
||||||
|
|
||||||
|
if not "%XSRC%"=="%1" goto SmallEnv
|
||||||
|
|
||||||
|
:SrcDone
|
||||||
|
|
||||||
|
if not exist src mkdir src
|
||||||
|
if not exist lib mkdir lib
|
||||||
|
|
||||||
|
copy /Y %XSRC%\src\configh.dos .\src\config.h
|
||||||
|
|
||||||
|
copy /Y %XSRC%\lib\glob.in.h .\lib\glob.h
|
||||||
|
copy /Y %XSRC%\lib\fnmatch.in.h .\lib\fnmatch.h
|
||||||
|
|
||||||
|
rem Echo ON so they will see what is going on.
|
||||||
|
@echo on
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/commands.c -o commands.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/output.c -o output.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/job.c -o job.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/dir.c -o dir.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/file.c -o file.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/misc.c -o misc.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -DLOCALEDIR=\"/dev/env/DJDIR/share/locale\" -O2 -g %XSRC%/src/main.c -o main.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -DINCLUDEDIR=\"/dev/env/DJDIR/include\" -O2 -g %XSRC%/src/read.c -o read.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -DLIBDIR=\"/dev/env/DJDIR/lib\" -O2 -g %XSRC%/src/remake.c -o remake.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/rule.c -o rule.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/implicit.c -o implicit.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/default.c -o default.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/variable.c -o variable.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/warning.c -o warning.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/expand.c -o expand.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/function.c -o function.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/vpath.c -o vpath.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/hash.c -o hash.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/strcache.c -o strcache.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/version.c -o version.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/ar.c -o ar.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/arscan.c -o arscan.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/signame.c -o signame.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/remote-stub.c -o remote-stub.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/getopt.c -o getopt.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/getopt1.c -o getopt1.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/shuffle.c -o shuffle.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/load.c -o load.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/lib/glob.c -o lib/glob.o
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/lib/fnmatch.c -o lib/fnmatch.o
|
||||||
|
@echo off
|
||||||
|
echo commands.o > respf.$$$
|
||||||
|
for %%f in (job output dir file misc main read remake rule implicit default variable warning load) do echo %%f.o >> respf.$$$
|
||||||
|
for %%f in (expand function vpath hash strcache version ar arscan signame remote-stub getopt getopt1 shuffle) do echo %%f.o >> respf.$$$
|
||||||
|
for %%f in (lib\glob lib\fnmatch) do echo %%f.o >> respf.$$$
|
||||||
|
gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/guile.c -o guile.o
|
||||||
|
echo guile.o >> respf.$$$
|
||||||
|
@echo Linking...
|
||||||
|
@echo on
|
||||||
|
gcc -o make.exe @respf.$$$
|
||||||
|
@echo off
|
||||||
|
if not exist make.exe echo Make.exe build failed...
|
||||||
|
if exist make.exe echo make.exe is now built!
|
||||||
|
if exist make.exe del respf.$$$
|
||||||
|
if exist make.exe copy /Y %XSRC%\Basic.mk Makefile
|
||||||
|
goto End
|
||||||
|
|
||||||
|
:SmallEnv
|
||||||
|
echo Your environment is too small. Please enlarge it and run me again.
|
||||||
|
|
||||||
|
:End
|
||||||
|
set XRSC=
|
||||||
|
@echo on
|
@ -1,328 +0,0 @@
|
|||||||
/* config.h -- hand-massaged for Amiga -*-C-*-
|
|
||||||
Copyright (C) 1995-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
/* Define if on AIX 3.
|
|
||||||
System headers sometimes define this.
|
|
||||||
We just want to avoid a redefinition error message. */
|
|
||||||
#ifndef _ALL_SOURCE
|
|
||||||
/* #undef _ALL_SOURCE */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define if using alloca.c. */
|
|
||||||
#define C_ALLOCA
|
|
||||||
|
|
||||||
/* Define if the closedir function returns void instead of int. */
|
|
||||||
/* #undef CLOSEDIR_VOID */
|
|
||||||
|
|
||||||
/* Define to empty if the keyword does not work. */
|
|
||||||
/* #undef const */
|
|
||||||
|
|
||||||
/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
|
|
||||||
This function is required for alloca.c support on those systems. */
|
|
||||||
/* #undef CRAY_STACKSEG_END */
|
|
||||||
|
|
||||||
/* Define for DGUX with <sys/dg_sys_info.h>. */
|
|
||||||
/* #undef DGUX */
|
|
||||||
|
|
||||||
/* Define if the 'getloadavg' function needs to be run setuid or setgid. */
|
|
||||||
/* #undef GETLOADAVG_PRIVILEGED */
|
|
||||||
|
|
||||||
/* Define to 'unsigned long' or 'unsigned long long'
|
|
||||||
if <inttypes.h> doesn't define. */
|
|
||||||
#define uintmax_t unsigned long
|
|
||||||
|
|
||||||
/* Define to 'int' if <sys/types.h> doesn't define. */
|
|
||||||
#define gid_t int
|
|
||||||
|
|
||||||
/* Define if you have alloca, as a function or macro. */
|
|
||||||
/* #undef HAVE_ALLOCA */
|
|
||||||
|
|
||||||
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
|
|
||||||
/* #undef HAVE_ALLOCA_H */
|
|
||||||
|
|
||||||
/* Define if your system has a working fnmatch function. */
|
|
||||||
/* #undef HAVE_FNMATCH */
|
|
||||||
|
|
||||||
/* Define if your system has its own 'getloadavg' function. */
|
|
||||||
/* #undef HAVE_GETLOADAVG */
|
|
||||||
|
|
||||||
/* Define if you have the getmntent function. */
|
|
||||||
/* #undef HAVE_GETMNTENT */
|
|
||||||
|
|
||||||
/* Embed GNU Guile support */
|
|
||||||
/* #undef HAVE_GUILE */
|
|
||||||
|
|
||||||
/* Define if the 'long double' type works. */
|
|
||||||
/* #undef HAVE_LONG_DOUBLE */
|
|
||||||
|
|
||||||
/* Define if you support file names longer than 14 characters. */
|
|
||||||
#define HAVE_LONG_FILE_NAMES 1
|
|
||||||
|
|
||||||
/* Define if you have a working 'mmap' system call. */
|
|
||||||
/* #undef HAVE_MMAP */
|
|
||||||
|
|
||||||
/* Define if system calls automatically restart after interruption
|
|
||||||
by a signal. */
|
|
||||||
/* #undef HAVE_RESTARTABLE_SYSCALLS */
|
|
||||||
|
|
||||||
/* Define if your struct stat has st_blksize. */
|
|
||||||
/* #undef HAVE_ST_BLKSIZE */
|
|
||||||
|
|
||||||
/* Define if your struct stat has st_blocks. */
|
|
||||||
/* #undef HAVE_ST_BLOCKS */
|
|
||||||
|
|
||||||
/* Define if you have the strcoll function and it is properly defined. */
|
|
||||||
#define HAVE_STRCOLL 1
|
|
||||||
|
|
||||||
/* Define if your struct stat has st_rdev. */
|
|
||||||
#define HAVE_ST_RDEV 1
|
|
||||||
|
|
||||||
/* Define if you have the strftime function. */
|
|
||||||
#define HAVE_STRFTIME 1
|
|
||||||
|
|
||||||
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
|
|
||||||
/* #undef HAVE_SYS_WAIT_H */
|
|
||||||
|
|
||||||
/* Define if your struct tm has tm_zone. */
|
|
||||||
/* #undef HAVE_TM_ZONE */
|
|
||||||
|
|
||||||
/* Define if you don't have tm_zone but do have the external array
|
|
||||||
tzname. */
|
|
||||||
#define HAVE_TZNAME 1
|
|
||||||
|
|
||||||
/* Define if you have <unistd.h>. */
|
|
||||||
#define HAVE_UNISTD_H 1
|
|
||||||
|
|
||||||
/* Define if utime(file, NULL) sets file's timestamp to the present. */
|
|
||||||
/* #undef HAVE_UTIME_NULL */
|
|
||||||
|
|
||||||
/* Define if you have the wait3 system call. */
|
|
||||||
/* #undef HAVE_WAIT3 */
|
|
||||||
|
|
||||||
/* Define if on MINIX. */
|
|
||||||
/* #undef _MINIX */
|
|
||||||
|
|
||||||
/* Define if your struct nlist has an n_un member. */
|
|
||||||
/* #undef NLIST_NAME_UNION */
|
|
||||||
|
|
||||||
/* Define if you have <nlist.h>. */
|
|
||||||
/* #undef NLIST_STRUCT */
|
|
||||||
|
|
||||||
/* Define if your C compiler doesn't accept -c and -o together. */
|
|
||||||
/* #undef NO_MINUS_C_MINUS_O */
|
|
||||||
|
|
||||||
/* Define to 'int' if <sys/types.h> doesn't define. */
|
|
||||||
#define pid_t int
|
|
||||||
|
|
||||||
/* Define if the system does not provide POSIX.1 features except
|
|
||||||
with this defined. */
|
|
||||||
/* #undef _POSIX_1_SOURCE */
|
|
||||||
|
|
||||||
/* Define if you need to in order for stat and other things to work. */
|
|
||||||
/* #undef _POSIX_SOURCE */
|
|
||||||
|
|
||||||
/* Define as the return type of signal handlers (int or void). */
|
|
||||||
#define RETSIGTYPE void
|
|
||||||
|
|
||||||
/* Define if the setvbuf function takes the buffering type as its second
|
|
||||||
argument and the buffer pointer as the third, as on System V
|
|
||||||
before release 3. */
|
|
||||||
/* #undef SETVBUF_REVERSED */
|
|
||||||
|
|
||||||
/* If using the C implementation of alloca, define if you know the
|
|
||||||
direction of stack growth for your system; otherwise it will be
|
|
||||||
automatically deduced at run-time.
|
|
||||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
|
||||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
|
||||||
STACK_DIRECTION = 0 => direction of growth unknown
|
|
||||||
*/
|
|
||||||
#define STACK_DIRECTION -1
|
|
||||||
|
|
||||||
/* Define if the 'S_IS*' macros in <sys/stat.h> do not work properly. */
|
|
||||||
/* #undef STAT_MACROS_BROKEN */
|
|
||||||
|
|
||||||
/* Define if you have the ANSI C header files. */
|
|
||||||
#define STDC_HEADERS
|
|
||||||
|
|
||||||
/* Define on System V Release 4. */
|
|
||||||
/* #undef SVR4 */
|
|
||||||
|
|
||||||
/* Define if 'sys_siglist' is declared by <signal.h>. */
|
|
||||||
/* #undef SYS_SIGLIST_DECLARED */
|
|
||||||
|
|
||||||
/* Define to 'int' if <sys/types.h> doesn't define. */
|
|
||||||
#define uid_t int
|
|
||||||
|
|
||||||
/* Define for Encore UMAX. */
|
|
||||||
/* #undef UMAX */
|
|
||||||
|
|
||||||
/* Define for Encore UMAX 4.3 that has <inq_status/cpustats.h>
|
|
||||||
instead of <sys/cpustats.h>. */
|
|
||||||
/* #undef UMAX4_3 */
|
|
||||||
|
|
||||||
/* Name of this package (needed by automake) */
|
|
||||||
#define PACKAGE "%PACKAGE%"
|
|
||||||
|
|
||||||
/* Version of this package (needed by automake) */
|
|
||||||
#define VERSION "%VERSION%"
|
|
||||||
|
|
||||||
/* Define to the name of the SCCS 'get' command. */
|
|
||||||
#define SCCS_GET "get"
|
|
||||||
|
|
||||||
/* Define this if the SCCS 'get' command understands the '-G<file>' option. */
|
|
||||||
/* #undef SCCS_GET_MINUS_G */
|
|
||||||
|
|
||||||
/* Define this to enable job server support in GNU make. */
|
|
||||||
/* #undef MAKE_JOBSERVER */
|
|
||||||
|
|
||||||
/* Define to be the nanoseconds member of struct stat's st_mtim,
|
|
||||||
if it exists. */
|
|
||||||
/* #undef ST_MTIM_NSEC */
|
|
||||||
|
|
||||||
/* Define this if the C library defines the variable 'sys_siglist'. */
|
|
||||||
/* #undef HAVE_SYS_SIGLIST */
|
|
||||||
|
|
||||||
/* Define this if the C library defines the variable '_sys_siglist'. */
|
|
||||||
/* #undef HAVE__SYS_SIGLIST */
|
|
||||||
|
|
||||||
/* Define this if you have the 'union wait' type in <sys/wait.h>. */
|
|
||||||
/* #undef HAVE_UNION_WAIT */
|
|
||||||
|
|
||||||
/* Define if you have the dup2 function. */
|
|
||||||
/* #undef HAVE_DUP2 */
|
|
||||||
|
|
||||||
/* Define if you have the getcwd function. */
|
|
||||||
#define HAVE_GETCWD 1
|
|
||||||
|
|
||||||
/* Define if you have the getgroups function. */
|
|
||||||
/* #undef HAVE_GETGROUPS */
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname function. */
|
|
||||||
/* #undef HAVE_GETHOSTBYNAME */
|
|
||||||
|
|
||||||
/* Define if you have the gethostname function. */
|
|
||||||
/* #undef HAVE_GETHOSTNAME */
|
|
||||||
|
|
||||||
/* Define if you have the memmove function. */
|
|
||||||
#define HAVE_MEMMOVE 1
|
|
||||||
|
|
||||||
/* Define if you have the mktemp function. */
|
|
||||||
#define HAVE_MKTEMP 1
|
|
||||||
|
|
||||||
/* Define if you have the psignal function. */
|
|
||||||
/* #undef HAVE_PSIGNAL */
|
|
||||||
|
|
||||||
/* Define if you have the pstat_getdynamic function. */
|
|
||||||
/* #undef HAVE_PSTAT_GETDYNAMIC */
|
|
||||||
|
|
||||||
/* Define if you have the setegid function. */
|
|
||||||
/* #undef HAVE_SETEGID */
|
|
||||||
|
|
||||||
/* Define if you have the seteuid function. */
|
|
||||||
/* #undef HAVE_SETEUID */
|
|
||||||
|
|
||||||
/* Define if you have the setlinebuf function. */
|
|
||||||
/* #undef HAVE_SETLINEBUF */
|
|
||||||
|
|
||||||
/* Define if you have the setregid function. */
|
|
||||||
/* #undef HAVE_SETREGID */
|
|
||||||
|
|
||||||
/* Define if you have the setreuid function. */
|
|
||||||
/* #undef HAVE_SETREUID */
|
|
||||||
|
|
||||||
/* Define if you have the sigsetmask function. */
|
|
||||||
/* #undef HAVE_SIGSETMASK */
|
|
||||||
|
|
||||||
/* Define if you have the socket function. */
|
|
||||||
/* #undef HAVE_SOCKET */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the strcasecmp function. */
|
|
||||||
/* #undef HAVE_STRCASECMP */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the strcmpi function. */
|
|
||||||
/* #undef HAVE_STRCMPI */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the stricmp function. */
|
|
||||||
/* #undef HAVE_STRICMP */
|
|
||||||
|
|
||||||
/* Define if you have the strerror function. */
|
|
||||||
#define HAVE_STRERROR 1
|
|
||||||
|
|
||||||
/* Define if you have the strsignal function. */
|
|
||||||
/* #undef HAVE_STRSIGNAL */
|
|
||||||
|
|
||||||
/* Define if you have the wait3 function. */
|
|
||||||
/* #undef HAVE_WAIT3 */
|
|
||||||
|
|
||||||
/* Define if you have the waitpid function. */
|
|
||||||
/* #undef HAVE_WAITPID */
|
|
||||||
|
|
||||||
/* Define if you have the <dirent.h> header file. */
|
|
||||||
#define HAVE_DIRENT_H 1
|
|
||||||
|
|
||||||
/* Define if you have the <fcntl.h> header file. */
|
|
||||||
#define HAVE_FCNTL_H 1
|
|
||||||
|
|
||||||
/* Define if you have the <limits.h> header file. */
|
|
||||||
#define HAVE_LIMITS_H 1
|
|
||||||
|
|
||||||
/* Define if you have the <mach/mach.h> header file. */
|
|
||||||
/* #undef HAVE_MACH_MACH_H */
|
|
||||||
|
|
||||||
/* Define if you have the <memory.h> header file. */
|
|
||||||
/* #undef HAVE_MEMORY_H */
|
|
||||||
|
|
||||||
/* Define if you have the <ndir.h> header file. */
|
|
||||||
/* #undef HAVE_NDIR_H */
|
|
||||||
|
|
||||||
/* Define if you have the <stdlib.h> header file. */
|
|
||||||
/* #undef HAVE_STDLIB_H */
|
|
||||||
|
|
||||||
/* Define if you have the <string.h> header file. */
|
|
||||||
#define HAVE_STRING_H 1
|
|
||||||
|
|
||||||
/* Define if you have the <sys/dir.h> header file. */
|
|
||||||
#define HAVE_SYS_DIR_H 1
|
|
||||||
|
|
||||||
/* Define if you have the <sys/ndir.h> header file. */
|
|
||||||
/* #undef HAVE_SYS_NDIR_H */
|
|
||||||
|
|
||||||
/* Define if you have the <sys/param.h> header file. */
|
|
||||||
/* #undef HAVE_SYS_PARAM_H */
|
|
||||||
|
|
||||||
/* Define if you have the <sys/timeb.h> header file. */
|
|
||||||
/* #undef HAVE_SYS_TIMEB_H */
|
|
||||||
|
|
||||||
/* Define if you have the <sys/wait.h> header file. */
|
|
||||||
/* #undef HAVE_SYS_WAIT_H */
|
|
||||||
|
|
||||||
/* Define if you have the <unistd.h> header file. */
|
|
||||||
#define HAVE_UNISTD_H 1
|
|
||||||
|
|
||||||
/* Define if you have the dgc library (-ldgc). */
|
|
||||||
/* #undef HAVE_LIBDGC */
|
|
||||||
|
|
||||||
/* Define if you have the kstat library (-lkstat). */
|
|
||||||
/* #undef HAVE_LIBKSTAT */
|
|
||||||
|
|
||||||
/* Define if you have the sun library (-lsun). */
|
|
||||||
/* #undef HAVE_LIBSUN */
|
|
||||||
|
|
||||||
/* Define for Case Insensitve behavior */
|
|
||||||
#define HAVE_CASE_INSENSITIVE_FS
|
|
||||||
|
|
||||||
/* Build host information. */
|
|
||||||
#define MAKE_HOST "Amiga"
|
|
11
config/.gitignore
vendored
11
config/.gitignore
vendored
@ -1,11 +0,0 @@
|
|||||||
compile
|
|
||||||
config.guess
|
|
||||||
config.rpath
|
|
||||||
config.sub
|
|
||||||
depcomp
|
|
||||||
install-sh
|
|
||||||
mdate-sh
|
|
||||||
missing
|
|
||||||
texinfo.tex
|
|
||||||
*.m4
|
|
||||||
!dospaths.m4
|
|
@ -1,49 +0,0 @@
|
|||||||
2012-01-15 Paul Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* dospaths.m4: Use AC_LANG_PROGRAM to encapsulate the test code.
|
|
||||||
Fixes Savannah bug #35256. Patch from Sebastian Pipping.
|
|
||||||
|
|
||||||
2006-03-09 Paul Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* dospaths.m4: Add MSYS to the list of targets allowing DOS-style
|
|
||||||
pathnames. Reported by David Ergo <david.ergo@alterface.com>.
|
|
||||||
|
|
||||||
2005-07-01 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* Makefile.am (EXTRA_DIST): Added more M4 files to EXTRA_DIST, so
|
|
||||||
users can re-run aclocal.
|
|
||||||
|
|
||||||
2003-04-30 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* dospaths.m4: New macro to test for DOS-style pathnames, based on
|
|
||||||
coreutils 5.0 "dos.m4" by Jim Meyering.
|
|
||||||
|
|
||||||
2002-04-21 gettextize <bug-gnu-gettext@gnu.org>
|
|
||||||
|
|
||||||
* codeset.m4: New file, from gettext-0.11.1.
|
|
||||||
* gettext.m4: New file, from gettext-0.11.1.
|
|
||||||
* glibc21.m4: New file, from gettext-0.11.1.
|
|
||||||
* iconv.m4: New file, from gettext-0.11.1.
|
|
||||||
* isc-posix.m4: New file, from gettext-0.11.1.
|
|
||||||
* lcmessage.m4: New file, from gettext-0.11.1.
|
|
||||||
* lib-ld.m4: New file, from gettext-0.11.1.
|
|
||||||
* lib-link.m4: New file, from gettext-0.11.1.
|
|
||||||
* lib-prefix.m4: New file, from gettext-0.11.1.
|
|
||||||
* progtest.m4: New file, from gettext-0.11.1.
|
|
||||||
* Makefile.am: New file.
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (C) 2002-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
@ -1,18 +0,0 @@
|
|||||||
# -*-Makefile-*-, or close enough
|
|
||||||
# Copyright (C) 2002-2013 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free
|
|
||||||
# Software Foundation; either version 3 of the License, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# Autoconf / automake know how to handle this directory.
|
|
307
configure.ac
307
configure.ac
@ -1,6 +1,6 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
#
|
#
|
||||||
# Copyright (C) 1993-2013 Free Software Foundation, Inc.
|
# Copyright (C) 1993-2024 Free Software Foundation, Inc.
|
||||||
# This file is part of GNU Make.
|
# This file is part of GNU Make.
|
||||||
#
|
#
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -14,22 +14,36 @@
|
|||||||
# details.
|
# details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
AC_INIT([GNU make],[3.99.91],[bug-make@gnu.org])
|
AC_INIT([GNU Make],[4.4.90],[bug-make@gnu.org])
|
||||||
|
|
||||||
AC_PREREQ([2.62])
|
AC_PREREQ([2.69])
|
||||||
|
|
||||||
# Autoconf setup
|
# Autoconf setup
|
||||||
AC_CONFIG_AUX_DIR([config])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
AC_CONFIG_SRCDIR([vpath.c])
|
AC_CONFIG_SRCDIR([src/vpath.c])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([src/config.h])
|
||||||
|
|
||||||
|
AC_CONFIG_LIBOBJ_DIR([lib])
|
||||||
|
|
||||||
# Automake setup
|
# Automake setup
|
||||||
AM_INIT_AUTOMAKE([1.11.1 silent-rules])
|
# We have to enable "foreign" because ChangeLog is auto-generated
|
||||||
|
# Automake 1.15 and gnulib don't get along: gnulib has some strange error
|
||||||
|
# in the way it handles getloadavg.c which causes make distcheck to fail.
|
||||||
|
# https://lists.gnu.org/archive/html/bug-gnulib/2018-06/msg00024.html
|
||||||
|
AM_INIT_AUTOMAKE([1.16.1 foreign -Werror -Wall])
|
||||||
|
|
||||||
# Checks for programs.
|
# Checks for programs.
|
||||||
|
AC_USE_SYSTEM_EXTENSIONS
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
AC_PROG_CXX
|
||||||
|
AC_DEFINE_UNQUOTED(MAKE_CXX, ["$CXX"], [Default C++ compiler.])
|
||||||
|
|
||||||
|
# Configure gnulib
|
||||||
|
gl_EARLY
|
||||||
|
gl_INIT
|
||||||
|
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
AC_PROG_RANLIB
|
AC_PROG_RANLIB
|
||||||
AC_PROG_CPP
|
AC_PROG_CPP
|
||||||
@ -39,45 +53,35 @@ AC_CHECK_PROG([PERL], [perl], [perl], [perl])
|
|||||||
|
|
||||||
# Specialized system macros
|
# Specialized system macros
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
AC_AIX
|
AC_C_BIGENDIAN
|
||||||
AC_ISC_POSIX
|
|
||||||
AC_MINIX
|
|
||||||
|
|
||||||
# Enable gettext, in "external" mode.
|
# Enable gettext, in "external" mode.
|
||||||
|
AM_GNU_GETTEXT_VERSION([0.19.4])
|
||||||
AM_GNU_GETTEXT_VERSION([0.18.1])
|
|
||||||
AM_GNU_GETTEXT([external])
|
AM_GNU_GETTEXT([external])
|
||||||
|
|
||||||
# This test must come as early as possible after the compiler configuration
|
|
||||||
# tests, because the choice of the file model can (in principle) affect
|
|
||||||
# whether functions and headers are available, whether they work, etc.
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
|
AC_SEARCH_LIBS([strerror],[cposix])
|
||||||
AC_SEARCH_LIBS([getpwnam], [sun])
|
AC_SEARCH_LIBS([getpwnam], [sun])
|
||||||
|
|
||||||
# Checks for header files.
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_HEADER_DIRENT
|
AC_HEADER_DIRENT
|
||||||
AC_HEADER_STAT
|
AC_HEADER_STAT
|
||||||
AC_HEADER_TIME
|
|
||||||
AC_CHECK_HEADERS([stdlib.h locale.h unistd.h limits.h fcntl.h string.h \
|
AC_CHECK_HEADERS([stdlib.h string.h strings.h locale.h unistd.h limits.h \
|
||||||
memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h])
|
memory.h sys/param.h sys/resource.h sys/time.h sys/select.h \
|
||||||
|
sys/file.h fcntl.h spawn.h])
|
||||||
|
|
||||||
AM_PROG_CC_C_O
|
AM_PROG_CC_C_O
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
AC_TYPE_SIGNAL
|
|
||||||
AC_TYPE_UID_T
|
AC_TYPE_UID_T
|
||||||
AC_TYPE_PID_T
|
AC_TYPE_PID_T
|
||||||
|
AC_TYPE_OFF_T
|
||||||
|
AC_TYPE_SIZE_T
|
||||||
|
AC_TYPE_SSIZE_T
|
||||||
|
AC_TYPE_INTMAX_T
|
||||||
|
AC_TYPE_UINTMAX_T
|
||||||
|
|
||||||
# Find some definition for uintmax_t
|
# Check for sig_atomic_t
|
||||||
|
gt_TYPE_SIG_ATOMIC_T
|
||||||
AC_CHECK_TYPE([uintmax_t],[],
|
|
||||||
[ uintmax_t="unsigned long"
|
|
||||||
AC_CHECK_TYPE([unsigned long long],[uintmax_t="unsigned long long"])
|
|
||||||
AC_DEFINE_UNQUOTED([uintmax_t], [$uintmax_t],
|
|
||||||
[Define uintmax_t if not defined in <stdint.h> or <inttypes.h>.])
|
|
||||||
])
|
|
||||||
|
|
||||||
# Find out whether our struct stat returns nanosecond resolution timestamps.
|
# Find out whether our struct stat returns nanosecond resolution timestamps.
|
||||||
|
|
||||||
@ -107,9 +111,6 @@ AS_IF([test "$make_cv_file_timestamp_hi_res" = yes],
|
|||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
# Check for DOS-style pathnames.
|
|
||||||
pds_AC_DOS_PATHS
|
|
||||||
|
|
||||||
# See if we have a standard version of gettimeofday(). Since actual
|
# See if we have a standard version of gettimeofday(). Since actual
|
||||||
# implementations can differ, just make sure we have the most common
|
# implementations can differ, just make sure we have the most common
|
||||||
# one.
|
# one.
|
||||||
@ -119,8 +120,8 @@ AC_CACHE_CHECK([for standard gettimeofday], [ac_cv_func_gettimeofday],
|
|||||||
int main ()
|
int main ()
|
||||||
{
|
{
|
||||||
struct timeval t; t.tv_sec = -1; t.tv_usec = -1;
|
struct timeval t; t.tv_sec = -1; t.tv_usec = -1;
|
||||||
exit (gettimeofday (&t, 0) != 0
|
return gettimeofday (&t, 0) != 0
|
||||||
|| t.tv_sec < 0 || t.tv_usec < 0);
|
|| t.tv_sec < 0 || t.tv_usec < 0;
|
||||||
}]])],
|
}]])],
|
||||||
[ac_cv_func_gettimeofday=yes],
|
[ac_cv_func_gettimeofday=yes],
|
||||||
[ac_cv_func_gettimeofday=no],
|
[ac_cv_func_gettimeofday=no],
|
||||||
@ -130,11 +131,12 @@ AS_IF([test "$ac_cv_func_gettimeofday" = yes],
|
|||||||
[Define to 1 if you have a standard gettimeofday function])
|
[Define to 1 if you have a standard gettimeofday function])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_CHECK_FUNCS([strdup strndup mkstemp mktemp fdopen fileno \
|
AC_CHECK_FUNCS([strtoll strdup strndup stpcpy memrchr mempcpy umask mkstemp \
|
||||||
dup dup2 getcwd realpath sigsetmask sigaction \
|
mktemp fdopen dup dup2 getcwd realpath sigsetmask sigaction \
|
||||||
getgroups seteuid setegid setlinebuf setreuid setregid \
|
getgroups seteuid setegid setlinebuf setreuid setregid \
|
||||||
getrlimit setrlimit setvbuf pipe strerror strsignal \
|
mkfifo getrlimit setrlimit setvbuf pipe strerror strsignal \
|
||||||
lstat readlink atexit])
|
lstat readlink atexit isatty ttyname pselect posix_spawn \
|
||||||
|
posix_spawnattr_setsigmask])
|
||||||
|
|
||||||
# We need to check declarations, not just existence, because on Tru64 this
|
# We need to check declarations, not just existence, because on Tru64 this
|
||||||
# function is not declared without special flags, which themselves cause
|
# function is not declared without special flags, which themselves cause
|
||||||
@ -142,7 +144,7 @@ AC_CHECK_FUNCS([strdup strndup mkstemp mktemp fdopen fileno \
|
|||||||
AC_CHECK_DECLS([bsd_signal], [], [], [[#define _GNU_SOURCE 1
|
AC_CHECK_DECLS([bsd_signal], [], [], [[#define _GNU_SOURCE 1
|
||||||
#include <signal.h>]])
|
#include <signal.h>]])
|
||||||
|
|
||||||
AC_FUNC_SETVBUF_REVERSED
|
AC_FUNC_FORK
|
||||||
|
|
||||||
# Rumor has it that strcasecmp lives in -lresolv on some odd systems.
|
# Rumor has it that strcasecmp lives in -lresolv on some odd systems.
|
||||||
# It doesn't hurt much to use our own if we can't find it so I don't
|
# It doesn't hurt much to use our own if we can't find it so I don't
|
||||||
@ -151,46 +153,65 @@ AC_CHECK_FUNCS([strcasecmp strncasecmp strcmpi strncmpi stricmp strnicmp])
|
|||||||
|
|
||||||
# strcoll() is used by the GNU glob library
|
# strcoll() is used by the GNU glob library
|
||||||
AC_FUNC_STRCOLL
|
AC_FUNC_STRCOLL
|
||||||
|
|
||||||
AC_FUNC_ALLOCA
|
|
||||||
AC_FUNC_CLOSEDIR_VOID
|
AC_FUNC_CLOSEDIR_VOID
|
||||||
|
|
||||||
|
# dir.c and our glob.c use dirent.d_type if available
|
||||||
|
AC_STRUCT_DIRENT_D_TYPE
|
||||||
|
|
||||||
# See if the user wants to add (or not) GNU Guile support
|
# See if the user wants to add (or not) GNU Guile support
|
||||||
PKG_PROG_PKG_CONFIG
|
|
||||||
AC_ARG_WITH([guile], [AS_HELP_STRING([--with-guile],
|
AC_ARG_WITH([guile], [AS_HELP_STRING([--with-guile],
|
||||||
[Support GNU Guile for embedded scripting])])
|
[Support GNU Guile for embedded scripting])])
|
||||||
|
|
||||||
# For some strange reason, at least on Ubuntu, each version of Guile
|
# Annoyingly, each version of Guile comes with it's own PC file so we have to
|
||||||
# comes with it's own PC file so we have to specify them as individual
|
# specify them as individual packages. Ugh.
|
||||||
# packages. Ugh.
|
PKG_PROG_PKG_CONFIG
|
||||||
|
|
||||||
AS_IF([test "x$with_guile" != xno],
|
AS_IF([test "x$with_guile" != xno],
|
||||||
[ PKG_CHECK_MODULES([GUILE], [guile-2.0], [have_guile=yes],
|
[ guile_versions="3.0 2.2 2.0 1.8"
|
||||||
[PKG_CHECK_MODULES([GUILE], [guile-1.8], [have_guile=yes],
|
guile_version=no
|
||||||
[have_guile=no])])
|
have_guile=no
|
||||||
|
AC_MSG_CHECKING([for GNU Guile])
|
||||||
|
for v in $guile_versions; do
|
||||||
|
PKG_CHECK_EXISTS([guile-$v], [guile_version=$v; have_guile=yes; break], [])
|
||||||
|
done
|
||||||
|
AC_MSG_RESULT([$guile_version])
|
||||||
|
AS_IF([test "$have_guile" = yes],
|
||||||
|
[ PKG_CHECK_MODULES(GUILE, [guile-$guile_version])
|
||||||
|
# Unfortunately pkg doesn't help in multi-arch environments where the
|
||||||
|
# package is installed for some architectures but not others; we need
|
||||||
|
# to try to link.
|
||||||
|
keep_CPPFLAGS="$CPPFLAGS"
|
||||||
|
keep_LIBS="$LIBS"
|
||||||
|
CPPFLAGS="$CPPFLAGS $GUILE_CFLAGS"
|
||||||
|
LIBS="$LIBS $GUILE_LIBS"
|
||||||
|
AC_CHECK_HEADER([libguile.h],
|
||||||
|
[have_guile=yes],
|
||||||
|
[have_guile=no],
|
||||||
|
[/* Avoid configuration error warnings. */])
|
||||||
|
AS_IF([test "$have_guile" = yes],
|
||||||
|
[ AC_MSG_CHECKING([whether we can link GNU Guile])
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
|
#include <libguile.h>
|
||||||
|
static void *
|
||||||
|
guile_init (void *arg)
|
||||||
|
{
|
||||||
|
(void) arg;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
]], [[
|
||||||
|
scm_with_guile (guile_init, 0);
|
||||||
|
]])],
|
||||||
|
[have_guile=yes],
|
||||||
|
[have_guile=no])
|
||||||
|
AC_MSG_RESULT([$have_guile])])
|
||||||
|
CPPFLAGS="$keep_CPPFLAGS"
|
||||||
|
LIBS="$keep_LIBS"
|
||||||
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
AS_IF([test "$have_guile" = yes],
|
AS_IF([test "$have_guile" = yes],
|
||||||
[AC_DEFINE([HAVE_GUILE], [1], [Embed GNU Guile support])])
|
[AC_DEFINE([HAVE_GUILE], [1], [Embed GNU Guile support])])
|
||||||
|
AM_CONDITIONAL([HAVE_GUILE], [test "$have_guile" = "yes"])
|
||||||
AM_CONDITIONAL([HAVE_GUILE], [test "$have_guile" = yes])
|
|
||||||
|
|
||||||
AC_FUNC_GETLOADAVG
|
|
||||||
|
|
||||||
# AC_FUNC_GETLOADAVG is documented to set the NLIST_STRUCT value, but it
|
|
||||||
# doesn't. So, we will.
|
|
||||||
|
|
||||||
AS_IF([test "$ac_cv_header_nlist_h" = yes],
|
|
||||||
[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <nlist.h>]],
|
|
||||||
[[struct nlist nl;
|
|
||||||
nl.n_name = "string";
|
|
||||||
return 0;]])],
|
|
||||||
[make_cv_nlist_struct=yes],
|
|
||||||
[make_cv_nlist_struct=no])
|
|
||||||
AS_IF([test "$make_cv_nlist_struct" = yes],
|
|
||||||
[ AC_DEFINE([NLIST_STRUCT], [1],
|
|
||||||
[Define to 1 if struct nlist.n_name is a pointer rather than an array.])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], , ,
|
AC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], , ,
|
||||||
[AC_INCLUDES_DEFAULT
|
[AC_INCLUDES_DEFAULT
|
||||||
@ -243,8 +264,7 @@ AS_IF([test "$PATH_SEPARATOR" = ';'],
|
|||||||
AC_SUBST([REMOTE]) REMOTE=stub
|
AC_SUBST([REMOTE]) REMOTE=stub
|
||||||
use_customs=false
|
use_customs=false
|
||||||
AC_ARG_WITH([customs],
|
AC_ARG_WITH([customs],
|
||||||
[ AC_HELP_STRING([--with-customs=DIR],
|
[AS_HELP_STRING([--with-customs=DIR],[enable remote jobs via Customs--see README.customs])],
|
||||||
[enable remote jobs via Customs--see README.customs])],
|
|
||||||
[ AS_CASE([$withval], [n|no], [:],
|
[ AS_CASE([$withval], [n|no], [:],
|
||||||
[make_cppflags="$CPPFLAGS"
|
[make_cppflags="$CPPFLAGS"
|
||||||
AS_CASE([$withval],
|
AS_CASE([$withval],
|
||||||
@ -267,14 +287,12 @@ AM_CONDITIONAL([USE_CUSTOMS], [test "$use_customs" = true])
|
|||||||
# See if the user asked to handle case insensitive file systems.
|
# See if the user asked to handle case insensitive file systems.
|
||||||
AH_TEMPLATE([HAVE_CASE_INSENSITIVE_FS], [Use case insensitive file names])
|
AH_TEMPLATE([HAVE_CASE_INSENSITIVE_FS], [Use case insensitive file names])
|
||||||
AC_ARG_ENABLE([case-insensitive-file-system],
|
AC_ARG_ENABLE([case-insensitive-file-system],
|
||||||
AC_HELP_STRING([--enable-case-insensitive-file-system],
|
AS_HELP_STRING([--enable-case-insensitive-file-system],[assume file systems are case insensitive]),
|
||||||
[assume file systems are case insensitive]),
|
|
||||||
[AS_IF([test "$enableval" = yes], [AC_DEFINE([HAVE_CASE_INSENSITIVE_FS])])])
|
[AS_IF([test "$enableval" = yes], [AC_DEFINE([HAVE_CASE_INSENSITIVE_FS])])])
|
||||||
|
|
||||||
# See if we can handle the job server feature, and if the user wants it.
|
# See if we can handle the job server feature, and if the user wants it.
|
||||||
AC_ARG_ENABLE([job-server],
|
AC_ARG_ENABLE([job-server],
|
||||||
AC_HELP_STRING([--disable-job-server],
|
AS_HELP_STRING([--disable-job-server],[disallow recursive make communication during -jN]),
|
||||||
[disallow recursive make communication during -jN]),
|
|
||||||
[make_cv_job_server="$enableval" user_job_server="$enableval"],
|
[make_cv_job_server="$enableval" user_job_server="$enableval"],
|
||||||
[make_cv_job_server="yes"])
|
[make_cv_job_server="yes"])
|
||||||
|
|
||||||
@ -304,7 +322,7 @@ AS_CASE([$host_os], [os2*|mingw*], [make_cv_job_server=yes])
|
|||||||
AS_CASE([/$make_cv_job_server/$user_job_server/],
|
AS_CASE([/$make_cv_job_server/$user_job_server/],
|
||||||
[*/no/*], [: no jobserver],
|
[*/no/*], [: no jobserver],
|
||||||
[AC_DEFINE(MAKE_JOBSERVER, 1,
|
[AC_DEFINE(MAKE_JOBSERVER, 1,
|
||||||
[Define to 1 to enable job server support in GNU make.])
|
[Define to 1 to enable job server support in GNU Make.])
|
||||||
])
|
])
|
||||||
|
|
||||||
# If dl*() functions are supported we can enable the load operation
|
# If dl*() functions are supported we can enable the load operation
|
||||||
@ -312,38 +330,37 @@ AC_CHECK_DECLS([dlopen, dlsym, dlerror], [], [],
|
|||||||
[[#include <dlfcn.h>]])
|
[[#include <dlfcn.h>]])
|
||||||
|
|
||||||
AC_ARG_ENABLE([load],
|
AC_ARG_ENABLE([load],
|
||||||
AC_HELP_STRING([--disable-load],
|
AS_HELP_STRING([--disable-load],[disable support for the 'load' operation]),
|
||||||
[disable support for the 'load' operation]),
|
|
||||||
[make_cv_load="$enableval" user_load="$enableval"],
|
[make_cv_load="$enableval" user_load="$enableval"],
|
||||||
[make_cv_load="yes"])
|
[make_cv_load="yes"])
|
||||||
|
|
||||||
AS_CASE([/$ac_cv_func_dlopen/$ac_cv_func_dlsym/$ac_cv_func_dlerror/],
|
AS_CASE([/$ac_cv_have_decl_dlopen/$ac_cv_have_decl_dlsym/$ac_cv_have_decl_dlerror/],
|
||||||
[*/no/*], [make_cv_load=no])
|
[*/no/*], [make_cv_load=no])
|
||||||
|
|
||||||
AS_CASE([/$make_cv_load/$user_load/],
|
|
||||||
[*/no/*], [make_cv_load=no],
|
|
||||||
[AC_DEFINE(MAKE_LOAD, 1,
|
|
||||||
[Define to 1 to enable 'load' support in GNU make.])
|
|
||||||
])
|
|
||||||
|
|
||||||
# We might need -ldl
|
# We might need -ldl
|
||||||
AS_IF([test "$make_cv_load" = yes], [
|
AS_IF([test "$make_cv_load" = yes], [
|
||||||
AC_SEARCH_LIBS([dlopen], [dl], [], [make_cv_load=])
|
AC_SEARCH_LIBS([dlopen], [dl], [], [make_cv_load=])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AS_CASE([/$make_cv_load/$user_load/],
|
||||||
|
[*/no/*], [make_cv_load=no],
|
||||||
|
[AC_DEFINE(MAKE_LOAD, 1,
|
||||||
|
[Define to 1 to enable 'load' support in GNU Make.])
|
||||||
|
])
|
||||||
|
|
||||||
# If we want load support, we might need to link with export-dynamic.
|
# If we want load support, we might need to link with export-dynamic.
|
||||||
# See if we can figure it out. Unfortunately this is very difficult.
|
# See if we can figure it out. Unfortunately this is very difficult.
|
||||||
# For example passing -rdynamic to the SunPRO linker gives a warning
|
# For example passing -rdynamic to the SunPRO linker gives a warning
|
||||||
# but succeeds and creates a shared object, not an executable!
|
# but succeeds and creates a shared object, not an executable!
|
||||||
AS_IF([test "$make_cv_load" = yes], [
|
AS_IF([test "$make_cv_load" = yes], [
|
||||||
AC_MSG_CHECKING([If the linker accepts -Wl,--export-dynamic])
|
AC_MSG_CHECKING([if the linker accepts -Wl,--export-dynamic])
|
||||||
old_LDFLAGS="$LDFLAGS"
|
old_LDFLAGS="$LDFLAGS"
|
||||||
LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
|
LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
|
||||||
AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){}])],
|
AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){}])],
|
||||||
[AC_MSG_RESULT([yes])
|
[AC_MSG_RESULT([yes])
|
||||||
AC_SUBST([AM_LDFLAGS], [-Wl,--export-dynamic])],
|
AC_SUBST([AM_LDFLAGS], [-Wl,--export-dynamic])],
|
||||||
[AC_MSG_RESULT([no])
|
[AC_MSG_RESULT([no])
|
||||||
AC_MSG_CHECKING([If the linker accepts -rdynamic])
|
AC_MSG_CHECKING([if the linker accepts -rdynamic])
|
||||||
LDFLAGS="$old_LDFLAGS -rdynamic"
|
LDFLAGS="$old_LDFLAGS -rdynamic"
|
||||||
AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){}])],
|
AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){}])],
|
||||||
[AC_MSG_RESULT([yes])
|
[AC_MSG_RESULT([yes])
|
||||||
@ -360,6 +377,38 @@ AS_IF([test "$ac_cv_func_lstat" = yes && test "$ac_cv_func_readlink" = yes],
|
|||||||
[Define to 1 to enable symbolic link timestamp checking.])
|
[Define to 1 to enable symbolic link timestamp checking.])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# Use posix_spawn if we have support and the user didn't disable it
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([posix-spawn],
|
||||||
|
AS_HELP_STRING([--disable-posix-spawn],[disable support for posix_spawn()]),
|
||||||
|
[make_cv_posix_spawn="$enableval" user_posix_spawn="$enableval"],
|
||||||
|
[make_cv_posix_spawn="yes"])
|
||||||
|
|
||||||
|
AS_CASE([/$ac_cv_header_spawn/$ac_cv_func_posix_spawn/],
|
||||||
|
[*/no/*], [make_cv_posix_spawn=no])
|
||||||
|
|
||||||
|
AS_IF([test "$make_cv_posix_spawn" = yes],
|
||||||
|
AC_CACHE_CHECK([for posix_spawn that fails synchronously],
|
||||||
|
[make_cv_synchronous_posix_spawn],
|
||||||
|
[make_cv_synchronous_posix_spawn=no
|
||||||
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
||||||
|
#include <errno.h>
|
||||||
|
#include <spawn.h>
|
||||||
|
extern char **environ;
|
||||||
|
int main () {
|
||||||
|
char path[[]] = "./xxx-non-existent";
|
||||||
|
char *argv[[]] = {path, 0};
|
||||||
|
return posix_spawn (0, path, 0, 0, argv, environ) == ENOENT ? 0 : 1;
|
||||||
|
}]])],
|
||||||
|
[make_cv_synchronous_posix_spawn=yes],
|
||||||
|
[make_cv_synchronous_posix_spawn=no],
|
||||||
|
[make_cv_synchronous_posix_spawn="no (cross-compiling)"])]))
|
||||||
|
|
||||||
|
AS_CASE([/$user_posix_spawn/$make_cv_posix_spawn/$make_cv_synchronous_posix_spawn/],
|
||||||
|
[*/no/*], [make_cv_posix_spawn=no],
|
||||||
|
[AC_DEFINE(USE_POSIX_SPAWN, 1, [Define to 1 to use posix_spawn().])
|
||||||
|
])
|
||||||
|
|
||||||
# Find the SCCS commands, so we can include them in our default rules.
|
# Find the SCCS commands, so we can include them in our default rules.
|
||||||
|
|
||||||
AC_CACHE_CHECK([for location of SCCS get command], [make_cv_path_sccs_get], [
|
AC_CACHE_CHECK([for location of SCCS get command], [make_cv_path_sccs_get], [
|
||||||
@ -387,33 +436,6 @@ AS_IF([(/usr/sccs/admin -n s.conftest || admin -n s.conftest) >/dev/null 2>&1 &&
|
|||||||
])
|
])
|
||||||
rm -f s.conftest conftoast
|
rm -f s.conftest conftoast
|
||||||
|
|
||||||
# Check the system to see if it provides GNU glob. If not, use our
|
|
||||||
# local version.
|
|
||||||
AC_CACHE_CHECK([if system libc has GNU glob], [make_cv_sys_gnu_glob],
|
|
||||||
[ AC_EGREP_CPP([gnu glob],[
|
|
||||||
#include <features.h>
|
|
||||||
#include <glob.h>
|
|
||||||
#include <fnmatch.h>
|
|
||||||
|
|
||||||
#define GLOB_INTERFACE_VERSION 1
|
|
||||||
#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
|
|
||||||
# include <gnu-versions.h>
|
|
||||||
# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION
|
|
||||||
gnu glob
|
|
||||||
# endif
|
|
||||||
#endif],
|
|
||||||
[make_cv_sys_gnu_glob=yes],
|
|
||||||
[make_cv_sys_gnu_glob=no])])
|
|
||||||
AS_IF([test "$make_cv_sys_gnu_glob" = no],
|
|
||||||
[ GLOBINC='-I$(srcdir)/glob'
|
|
||||||
GLOBLIB=glob/libglob.a
|
|
||||||
])
|
|
||||||
AC_SUBST([GLOBINC])
|
|
||||||
AC_SUBST([GLOBLIB])
|
|
||||||
|
|
||||||
# Tell automake about this, so it can build the right .c files.
|
|
||||||
AM_CONDITIONAL([USE_LOCAL_GLOB], [test "$make_cv_sys_gnu_glob" = no])
|
|
||||||
|
|
||||||
# Let the makefile know what our build host is
|
# Let the makefile know what our build host is
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED([MAKE_HOST],["$host"],[Build host information.])
|
AC_DEFINE_UNQUOTED([MAKE_HOST],["$host"],[Build host information.])
|
||||||
@ -422,19 +444,31 @@ AC_SUBST([MAKE_HOST])
|
|||||||
|
|
||||||
w32_target_env=no
|
w32_target_env=no
|
||||||
AM_CONDITIONAL([WINDOWSENV], [false])
|
AM_CONDITIONAL([WINDOWSENV], [false])
|
||||||
|
AM_CONDITIONAL([HAVE_WINDRES], [false])
|
||||||
|
|
||||||
AS_CASE([$host],
|
AS_CASE([$host],
|
||||||
[*-*-mingw32],
|
[*-*-mingw32],
|
||||||
[AM_CONDITIONAL([WINDOWSENV], [true])
|
[AM_CONDITIONAL([WINDOWSENV], [true])
|
||||||
w32_target_env=yes
|
w32_target_env=yes
|
||||||
AC_DEFINE([WINDOWS32], [1], [Use platform specific coding])
|
AC_DEFINE([MK_OS_W32], [1], [Build for the Windows32 API.])
|
||||||
AC_DEFINE([OUTPUT_SYNC], [1], [Support synchronized output])
|
AC_DEFINE([HAVE_DOS_PATHS], [1], [Support DOS-style pathnames.])
|
||||||
AC_DEFINE([HAVE_DOS_PATHS], [1], [Use platform specific coding])
|
# Windows host tools.
|
||||||
|
# If windres is available, make will use UTF-8.
|
||||||
|
AC_CHECK_TOOL([WINDRES], [windres], [:])
|
||||||
|
AM_CONDITIONAL([HAVE_WINDRES], [test "$WINDRES" != ':'])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED([PATH_SEPARATOR_CHAR],['$PATH_SEPARATOR'],
|
AC_DEFINE_UNQUOTED([PATH_SEPARATOR_CHAR],['$PATH_SEPARATOR'],
|
||||||
[Define to the character that separates directories in PATH.])
|
[Define to the character that separates directories in PATH.])
|
||||||
|
|
||||||
|
AC_DEFINE_UNQUOTED([HAVE_DECL_GETLOADAVG],[$HAVE_DECL_GETLOADAVG],
|
||||||
|
[Define to 1 if you have the declaration of 'getloadavg'.])
|
||||||
|
|
||||||
|
# Remember that we ran configure to generate config.h
|
||||||
|
|
||||||
|
AC_DEFINE([MK_CONFIGURE], [1],
|
||||||
|
[Define to 1 if config.h is generated by running the configure script.])
|
||||||
|
|
||||||
# Include the Maintainer's Makefile section, if it's here.
|
# Include the Maintainer's Makefile section, if it's here.
|
||||||
|
|
||||||
MAINT_MAKEFILE=/dev/null
|
MAINT_MAKEFILE=/dev/null
|
||||||
@ -446,6 +480,10 @@ AC_SUBST_FILE([MAINT_MAKEFILE])
|
|||||||
# Allow building with dmalloc
|
# Allow building with dmalloc
|
||||||
AM_WITH_DMALLOC
|
AM_WITH_DMALLOC
|
||||||
|
|
||||||
|
# Add custom header to config.h
|
||||||
|
AH_BOTTOM([/* Include customized declarations. */
|
||||||
|
#include "../src/mkcustom.h"])
|
||||||
|
|
||||||
# Forcibly disable SET_MAKE. If it's set it breaks things like the test
|
# Forcibly disable SET_MAKE. If it's set it breaks things like the test
|
||||||
# scripts, etc.
|
# scripts, etc.
|
||||||
SET_MAKE=
|
SET_MAKE=
|
||||||
@ -465,7 +503,7 @@ AS_CASE([$with_customs],
|
|||||||
[ echo
|
[ echo
|
||||||
echo "WARNING: '$with_customs/lib' does not appear to contain the"
|
echo "WARNING: '$with_customs/lib' does not appear to contain the"
|
||||||
echo " Customs library. You must build and install Customs"
|
echo " Customs library. You must build and install Customs"
|
||||||
echo " before compiling GNU make."
|
echo " before compiling GNU Make."
|
||||||
echo
|
echo
|
||||||
])])
|
])])
|
||||||
|
|
||||||
@ -473,7 +511,7 @@ AS_IF([test "x$has_wait_nohang" = xno],
|
|||||||
[ echo
|
[ echo
|
||||||
echo "WARNING: Your system has neither waitpid() nor wait3()."
|
echo "WARNING: Your system has neither waitpid() nor wait3()."
|
||||||
echo " Without one of these, signal handling is unreliable."
|
echo " Without one of these, signal handling is unreliable."
|
||||||
echo " You should be aware that running GNU make with -j"
|
echo " You should be aware that running GNU Make with -j"
|
||||||
echo " could result in erratic behavior."
|
echo " could result in erratic behavior."
|
||||||
echo
|
echo
|
||||||
])
|
])
|
||||||
@ -497,21 +535,30 @@ AS_IF([test "x$make_cv_load" = xno && test "x$user_load" = xyes],
|
|||||||
echo
|
echo
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AS_IF([test "x$make_cv_posix_spawn" = xno && test "x$user_posix_spawn" = xyes],
|
||||||
|
[ echo
|
||||||
|
echo "WARNING: posix_spawn() is not supported on this system."
|
||||||
|
echo
|
||||||
|
])
|
||||||
|
|
||||||
|
# autoconf initializes $prefix to NONE.
|
||||||
|
AM_CONDITIONAL([KNOWN_PREFIX],
|
||||||
|
[test "x$prefix" = xNONE -o "x$prefix" = x/usr/local \
|
||||||
|
-o "x$prefix" = x/usr/gnu -o "x$prefix" = x/usr])
|
||||||
|
|
||||||
# Specify what files are to be created.
|
# Specify what files are to be created.
|
||||||
AC_CONFIG_FILES([Makefile glob/Makefile po/Makefile.in config/Makefile \
|
AC_CONFIG_FILES([build.cfg tests/config-flags.pm \
|
||||||
doc/Makefile w32/Makefile])
|
Makefile lib/Makefile doc/Makefile po/Makefile.in])
|
||||||
|
# We don't need this: the standard automake output suffices for POSIX systems.
|
||||||
|
#mk/Posix.mk
|
||||||
|
|
||||||
|
# Put build.sh in the build directory so it's easy to find
|
||||||
|
AC_CONFIG_LINKS([build.sh:build.sh])
|
||||||
|
|
||||||
# OK, do it!
|
# OK, do it!
|
||||||
|
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
# We only generate the build.sh if we have a build.sh.in; we won't have
|
|
||||||
# one before we've created a distribution.
|
|
||||||
AS_IF([test -f "$srcdir/build.sh.in"],
|
|
||||||
[ ./config.status --file build.sh
|
|
||||||
chmod +x build.sh
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl Local Variables:
|
dnl Local Variables:
|
||||||
dnl comment-start: "dnl "
|
dnl comment-start: "dnl "
|
||||||
dnl comment-end: ""
|
dnl comment-end: ""
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
@echo off
|
|
||||||
rem Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
|
||||||
rem This file is part of GNU Make.
|
|
||||||
rem
|
|
||||||
rem GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
rem the terms of the GNU General Public License as published by the Free
|
|
||||||
rem Software Foundation; either version 3 of the License, or (at your option)
|
|
||||||
rem any later version.
|
|
||||||
rem
|
|
||||||
rem GNU Make is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
rem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
rem FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for.
|
|
||||||
rem more details.
|
|
||||||
rem
|
|
||||||
rem You should have received a copy of the GNU General Public License along
|
|
||||||
rem with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
echo Configuring MAKE for DJGPP
|
|
||||||
|
|
||||||
rem The SmallEnv trick protects against too small environment block,
|
|
||||||
rem in which case the values will be truncated and the whole thing
|
|
||||||
rem goes awry. COMMAND.COM will say "Out of environment space", but
|
|
||||||
rem many people don't care, so we force them to care by refusing to go.
|
|
||||||
|
|
||||||
rem Where is the srcdir?
|
|
||||||
set XSRC=.
|
|
||||||
if not "%XSRC%"=="." goto SmallEnv
|
|
||||||
if "%1%"=="" goto SrcDone
|
|
||||||
set XSRC=%1
|
|
||||||
if not "%XSRC%"=="%1" goto SmallEnv
|
|
||||||
|
|
||||||
:SrcDone
|
|
||||||
|
|
||||||
update %XSRC%/configh.dos ./config.h
|
|
||||||
|
|
||||||
rem Do they have Make?
|
|
||||||
redir -o junk.$$$ -eo make -n -f NUL
|
|
||||||
rem REDIR will return 1 if it cannot run Make.
|
|
||||||
rem If it can run Make, it will usually return 2,
|
|
||||||
rem but 0 is also OK with us.
|
|
||||||
if errorlevel 2 goto MakeOk
|
|
||||||
if not errorlevel 1 goto MakeOk
|
|
||||||
if exist junk.$$$ del junk.$$$
|
|
||||||
echo No Make program found--use DOSBUILD.BAT to build Make.
|
|
||||||
goto End
|
|
||||||
|
|
||||||
rem They do have Make. Generate the Makefile.
|
|
||||||
|
|
||||||
:MakeOk
|
|
||||||
del junk.$$$
|
|
||||||
update %XSRC%/Makefile.DOS ./Makefile
|
|
||||||
echo Done.
|
|
||||||
if not "%XSRC%"=="." echo Invoke Make thus: "make srcdir=%XSRC%"
|
|
||||||
goto End
|
|
||||||
|
|
||||||
:SmallEnv
|
|
||||||
echo Your environment is too small. Please enlarge it and run me again.
|
|
||||||
|
|
||||||
:End
|
|
||||||
set XRSC=
|
|
92
dep.h
92
dep.h
@ -1,92 +0,0 @@
|
|||||||
/* Definitions of dependency data structures for GNU Make.
|
|
||||||
Copyright (C) 1988-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
/* Flag bits for the second argument to 'read_makefile'.
|
|
||||||
These flags are saved in the 'changed' field of each
|
|
||||||
'struct dep' in the chain returned by 'read_all_makefiles'. */
|
|
||||||
|
|
||||||
#define RM_NO_DEFAULT_GOAL (1 << 0) /* Do not set default goal. */
|
|
||||||
#define RM_INCLUDED (1 << 1) /* Search makefile search path. */
|
|
||||||
#define RM_DONTCARE (1 << 2) /* No error if it doesn't exist. */
|
|
||||||
#define RM_NO_TILDE (1 << 3) /* Don't expand ~ in file name. */
|
|
||||||
#define RM_NOFLAG 0
|
|
||||||
|
|
||||||
/* Structure representing one dependency of a file.
|
|
||||||
Each struct file's 'deps' points to a chain of these,
|
|
||||||
chained through the 'next'. 'stem' is the stem for this
|
|
||||||
dep line of static pattern rule or NULL.
|
|
||||||
|
|
||||||
Note that the first two words of this match a struct nameseq. */
|
|
||||||
|
|
||||||
struct dep
|
|
||||||
{
|
|
||||||
struct dep *next;
|
|
||||||
const char *name;
|
|
||||||
const char *stem;
|
|
||||||
struct file *file;
|
|
||||||
unsigned int changed : 8;
|
|
||||||
unsigned int ignore_mtime : 1;
|
|
||||||
unsigned int staticpattern : 1;
|
|
||||||
unsigned int need_2nd_expansion : 1;
|
|
||||||
unsigned int dontcare : 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* Structure used in chains of names, for parsing and globbing. */
|
|
||||||
|
|
||||||
struct nameseq
|
|
||||||
{
|
|
||||||
struct nameseq *next;
|
|
||||||
const char *name;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define PARSEFS_NONE 0x0000
|
|
||||||
#define PARSEFS_NOSTRIP 0x0001
|
|
||||||
#define PARSEFS_NOAR 0x0002
|
|
||||||
#define PARSEFS_NOGLOB 0x0004
|
|
||||||
#define PARSEFS_EXISTS 0x0008
|
|
||||||
#define PARSEFS_NOCACHE 0x0010
|
|
||||||
|
|
||||||
#define PARSE_FILE_SEQ(_s,_t,_c,_p,_f) \
|
|
||||||
(_t *)parse_file_seq ((_s),sizeof (_t),(_c),(_p),(_f))
|
|
||||||
#define PARSE_SIMPLE_SEQ(_s,_t) \
|
|
||||||
(_t *)parse_file_seq ((_s),sizeof (_t),MAP_NUL,NULL,PARSEFS_NONE)
|
|
||||||
|
|
||||||
#ifdef VMS
|
|
||||||
void *parse_file_seq ();
|
|
||||||
#else
|
|
||||||
void *parse_file_seq (char **stringp, unsigned int size,
|
|
||||||
int stopmap, const char *prefix, int flags);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
char *tilde_expand (const char *name);
|
|
||||||
|
|
||||||
#ifndef NO_ARCHIVES
|
|
||||||
struct nameseq *ar_glob (const char *arname, const char *member_pattern, unsigned int size);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define dep_name(d) ((d)->name == 0 ? (d)->file->name : (d)->name)
|
|
||||||
|
|
||||||
#define alloc_dep() (xcalloc (sizeof (struct dep)))
|
|
||||||
#define free_ns(_n) free (_n)
|
|
||||||
#define free_dep(_d) free_ns (_d)
|
|
||||||
|
|
||||||
struct dep *copy_dep_chain (const struct dep *d);
|
|
||||||
void free_dep_chain (struct dep *d);
|
|
||||||
void free_ns_chain (struct nameseq *n);
|
|
||||||
struct dep *read_all_makefiles (const char **makefiles);
|
|
||||||
void eval_buffer (char *buffer, const gmk_floc *floc);
|
|
||||||
enum update_status update_goal_chain (struct dep *goals);
|
|
4
doc/.gitignore
vendored
4
doc/.gitignore
vendored
@ -1,3 +1,7 @@
|
|||||||
|
manual/
|
||||||
|
make.t2d/
|
||||||
|
make.t2p/
|
||||||
|
gendocs_template
|
||||||
fdl.texi
|
fdl.texi
|
||||||
make-stds.texi
|
make-stds.texi
|
||||||
stamp-vti
|
stamp-vti
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# -*-Makefile-*-, or close enough
|
# -*-Makefile-*-, or close enough
|
||||||
# Copyright (C) 2000-2013 Free Software Foundation, Inc.
|
# Copyright (C) 2000-2024 Free Software Foundation, Inc.
|
||||||
# This file is part of GNU Make.
|
# This file is part of GNU Make.
|
||||||
#
|
#
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -13,7 +13,7 @@
|
|||||||
# details.
|
# details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
TEXI2HTML = texi2html
|
TEXI2HTML = texi2html
|
||||||
TEXI2HTML_FLAGS = -split_chapter
|
TEXI2HTML_FLAGS = -split_chapter
|
||||||
@ -22,14 +22,3 @@ info_TEXINFOS = make.texi
|
|||||||
make_TEXINFOS = fdl.texi make-stds.texi
|
make_TEXINFOS = fdl.texi make-stds.texi
|
||||||
|
|
||||||
CLEANFILES = make*.html
|
CLEANFILES = make*.html
|
||||||
|
|
||||||
## ----------------------------- ##
|
|
||||||
## Other documentation formats. ##
|
|
||||||
## ----------------------------- ##
|
|
||||||
|
|
||||||
html: make_1.html
|
|
||||||
|
|
||||||
make_1.html: $(info_TEXINFOS) $(make_TEXINFOS)
|
|
||||||
$(TEXI2HTML) $(TEXI2HTML_FLAGS) $(srcdir)/make.texi
|
|
||||||
|
|
||||||
.PHONY: html
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.TH MAKE 1 "03 March 2012" "GNU" "User Commands"
|
.TH MAKE 1 "26 May 2023" "GNU" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
make \- GNU make utility to maintain groups of programs
|
make \- GNU Make utility to maintain groups of programs
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B make
|
.B make
|
||||||
[\fIOPTION\fR]... [\fITARGET\fR]...
|
[\fIOPTION\fR]... [\fITARGET\fR]...
|
||||||
@ -26,9 +26,9 @@ To prepare to use
|
|||||||
.BR make ,
|
.BR make ,
|
||||||
you must write a file called the
|
you must write a file called the
|
||||||
.I makefile
|
.I makefile
|
||||||
that describes the relationships among files in your program, and the states
|
that describes the relationships among files in your program, and provides
|
||||||
the commands for updating each file. In a program, typically the executable
|
commands for updating each file. In a program, typically the executable file
|
||||||
file is updated from object files, which are in turn made by compiling source
|
is updated from object files, which are in turn made by compiling source
|
||||||
files.
|
files.
|
||||||
.LP
|
.LP
|
||||||
Once a suitable makefile exists, each time you change some source files,
|
Once a suitable makefile exists, each time you change some source files,
|
||||||
@ -48,10 +48,10 @@ files, it issues the commands recorded in the makefile.
|
|||||||
.B make
|
.B make
|
||||||
executes commands in the
|
executes commands in the
|
||||||
.I makefile
|
.I makefile
|
||||||
to update one or more target
|
to update one or more
|
||||||
.IR names ,
|
.IR targets ,
|
||||||
where
|
where
|
||||||
.I name
|
.I target
|
||||||
is typically a program.
|
is typically a program.
|
||||||
If no
|
If no
|
||||||
.B \-f
|
.B \-f
|
||||||
@ -76,9 +76,8 @@ listing, right near other important files such as
|
|||||||
The first name checked,
|
The first name checked,
|
||||||
.IR GNUmakefile ,
|
.IR GNUmakefile ,
|
||||||
is not recommended for most makefiles. You should use this name if you have a
|
is not recommended for most makefiles. You should use this name if you have a
|
||||||
makefile that is specific to GNU
|
makefile that is specific to GNU Make, and will not be understood by other
|
||||||
.BR make ,
|
versions of
|
||||||
and will not be understood by other versions of
|
|
||||||
.BR make .
|
.BR make .
|
||||||
If
|
If
|
||||||
.I makefile
|
.I makefile
|
||||||
@ -130,26 +129,37 @@ are omitted, then the behavior is the same as if
|
|||||||
.B \-d
|
.B \-d
|
||||||
was specified.
|
was specified.
|
||||||
.I FLAGS
|
.I FLAGS
|
||||||
may be
|
may be any or all of the following names, comma- or space-separated. Only the
|
||||||
.I a
|
first character is significant: the rest may be omitted:
|
||||||
|
.I all
|
||||||
for all debugging output (same as using
|
for all debugging output (same as using
|
||||||
.BR \-d ),
|
.BR \-d ),
|
||||||
.I b
|
.I basic
|
||||||
for basic debugging,
|
for basic debugging,
|
||||||
.I v
|
.I verbose
|
||||||
for more verbose basic debugging,
|
for more verbose basic debugging,
|
||||||
.I i
|
.I implicit
|
||||||
for showing implicit rules,
|
for showing implicit rule search operations,
|
||||||
.I j
|
.I jobs
|
||||||
for details on invocation of commands, and
|
for details on invocation of commands,
|
||||||
.I m
|
.I makefile
|
||||||
for debugging while remaking makefiles. Use
|
for debugging while remaking makefiles,
|
||||||
.I n
|
.I print
|
||||||
|
shows all recipes that are run even if they are silent, and
|
||||||
|
.I why
|
||||||
|
shows the reason
|
||||||
|
.BR make
|
||||||
|
decided to rebuild each target. Use
|
||||||
|
.I none
|
||||||
to disable all previous debugging flags.
|
to disable all previous debugging flags.
|
||||||
.TP 0.5i
|
.TP 0.5i
|
||||||
\fB\-e\fR, \fB\-\-environment\-overrides\fR
|
\fB\-e\fR, \fB\-\-environment\-overrides\fR
|
||||||
Give variables taken from the environment precedence
|
Give variables taken from the environment precedence over variables
|
||||||
over variables from makefiles.
|
from makefiles.
|
||||||
|
.TP 0.5i
|
||||||
|
\fB\-E\fR \fIstring\fR, \fB\-\-eval\fR \fIstring\fR
|
||||||
|
Interpret \fIstring\fR using the \fBeval\fR function, before parsing any
|
||||||
|
makefiles.
|
||||||
.TP 0.5i
|
.TP 0.5i
|
||||||
\fB\-f\fR \fIfile\fR, \fB\-\-file\fR=\fIfile\fR, \fB\-\-makefile\fR=\fIFILE\fR
|
\fB\-f\fR \fIfile\fR, \fB\-\-file\fR=\fIfile\fR, \fB\-\-makefile\fR=\fIFILE\fR
|
||||||
Use
|
Use
|
||||||
@ -194,6 +204,16 @@ option is given without an argument,
|
|||||||
.BR make
|
.BR make
|
||||||
will not limit the number of jobs that can run simultaneously.
|
will not limit the number of jobs that can run simultaneously.
|
||||||
.TP 0.5i
|
.TP 0.5i
|
||||||
|
\fB\--jobserver-style=\fR\fIstyle\fR
|
||||||
|
The style of jobserver to use. The
|
||||||
|
.I style
|
||||||
|
may be one of
|
||||||
|
.BR fifo ,
|
||||||
|
.BR pipe ,
|
||||||
|
or
|
||||||
|
.B sem
|
||||||
|
(Windows only).
|
||||||
|
.TP 0.5i
|
||||||
\fB\-k\fR, \fB\-\-keep\-going\fR
|
\fB\-k\fR, \fB\-\-keep\-going\fR
|
||||||
Continue as much as possible after an error.
|
Continue as much as possible after an error.
|
||||||
While the target that failed, and those that depend on it, cannot
|
While the target that failed, and those that depend on it, cannot
|
||||||
@ -250,10 +270,15 @@ reading the makefiles; then execute as usual or as otherwise
|
|||||||
specified.
|
specified.
|
||||||
This also prints the version information given by the
|
This also prints the version information given by the
|
||||||
.B \-v
|
.B \-v
|
||||||
switch (see below).
|
switch (see below). To print the built-in data base only, use
|
||||||
To print the data base without trying to remake any files, use
|
|
||||||
.IR "make \-p \-f/dev/null" .
|
.IR "make \-p \-f/dev/null" .
|
||||||
.TP 0.5i
|
.TP 0.5i
|
||||||
|
\fB\-\-print\-targets\fR
|
||||||
|
Print each target defined as a result of reading the makefiles, one target per
|
||||||
|
line, then exit with success. Implicit rule targets are not printed, nor are
|
||||||
|
special targets (target names that consist of "." followed by all upper-case
|
||||||
|
letters). No recipe commands are invoked and no makefiles are rebuilt.
|
||||||
|
.TP 0.5i
|
||||||
\fB\-q\fR, \fB\-\-question\fR
|
\fB\-q\fR, \fB\-\-question\fR
|
||||||
``Question mode''.
|
``Question mode''.
|
||||||
Do not run any commands, or print anything; just return an exit status
|
Do not run any commands, or print anything; just return an exit status
|
||||||
@ -270,19 +295,13 @@ Don't define any built\-in variables.
|
|||||||
\fB\-s\fR, \fB\-\-silent\fR, \fB\-\-quiet\fR
|
\fB\-s\fR, \fB\-\-silent\fR, \fB\-\-quiet\fR
|
||||||
Silent operation; do not print the commands as they are executed.
|
Silent operation; do not print the commands as they are executed.
|
||||||
.TP 0.5i
|
.TP 0.5i
|
||||||
|
.B \-\-no\-silent
|
||||||
|
Cancel the effect of the \fB\-s\fR option.
|
||||||
|
.TP 0.5i
|
||||||
\fB\-S\fR, \fB\-\-no\-keep\-going\fR, \fB\-\-stop\fR
|
\fB\-S\fR, \fB\-\-no\-keep\-going\fR, \fB\-\-stop\fR
|
||||||
Cancel the effect of the
|
Cancel the effect of the
|
||||||
.B \-k
|
.B \-k
|
||||||
option.
|
option.
|
||||||
This is never necessary except in a recursive
|
|
||||||
.B make
|
|
||||||
where
|
|
||||||
.B \-k
|
|
||||||
might be inherited from the top-level
|
|
||||||
.B make
|
|
||||||
via MAKEFLAGS or if you set
|
|
||||||
.B \-k
|
|
||||||
in MAKEFLAGS in your environment.
|
|
||||||
.TP 0.5i
|
.TP 0.5i
|
||||||
\fB\-t\fR, \fB\-\-touch\fR
|
\fB\-t\fR, \fB\-\-touch\fR
|
||||||
Touch files (mark them up to date without really changing them)
|
Touch files (mark them up to date without really changing them)
|
||||||
@ -314,6 +333,26 @@ Turn off
|
|||||||
.BR \-w ,
|
.BR \-w ,
|
||||||
even if it was turned on implicitly.
|
even if it was turned on implicitly.
|
||||||
.TP 0.5i
|
.TP 0.5i
|
||||||
|
.BI \-\-shuffle "[=MODE]"
|
||||||
|
Enable shuffling of goal and prerequisite ordering.
|
||||||
|
.I MODE
|
||||||
|
is one of
|
||||||
|
.I none
|
||||||
|
to disable shuffle mode,
|
||||||
|
.I random
|
||||||
|
to shuffle prerequisites in random order,
|
||||||
|
.I reverse
|
||||||
|
to consider prerequisites in reverse order, or an integer
|
||||||
|
.I <seed>
|
||||||
|
which enables
|
||||||
|
.I random
|
||||||
|
mode with a specific
|
||||||
|
.I seed
|
||||||
|
value. If
|
||||||
|
.I MODE
|
||||||
|
is omitted the default is
|
||||||
|
.IR random .
|
||||||
|
.TP 0.5i
|
||||||
\fB\-W\fR \fIfile\fR, \fB\-\-what\-if\fR=\fIfile\fR, \fB\-\-new\-file\fR=\fIfile\fR, \fB\-\-assume\-new\fR=\fIfile\fR
|
\fB\-W\fR \fIfile\fR, \fB\-\-what\-if\fR=\fIfile\fR, \fB\-\-new\-file\fR=\fIfile\fR, \fB\-\-assume\-new\fR=\fIfile\fR
|
||||||
Pretend that the target
|
Pretend that the target
|
||||||
.I file
|
.I file
|
||||||
@ -330,12 +369,59 @@ command on the given file before running
|
|||||||
except that the modification time is changed only in the imagination of
|
except that the modification time is changed only in the imagination of
|
||||||
.BR make .
|
.BR make .
|
||||||
.TP 0.5i
|
.TP 0.5i
|
||||||
|
\fB\-\-warn\fR[=\fIARG[\fR,\fIARG\fR]]
|
||||||
|
Control warning reporting for makefiles. This option can appear multiple times.
|
||||||
|
In case of conflicts, later settings override earlier settings.
|
||||||
|
.I ARG
|
||||||
|
can be an action; one of
|
||||||
|
.IR ignore ,
|
||||||
|
.IR warn ,
|
||||||
|
or
|
||||||
|
.I error
|
||||||
|
to set the default action for all warnings, or it can be a specific warning:
|
||||||
|
.I circular-dep
|
||||||
|
(finding a circular dependency),
|
||||||
|
.I invalid-ref
|
||||||
|
(referencing an invalid variable name),
|
||||||
|
.I invalid-var
|
||||||
|
(assigning to an invalid variable name),
|
||||||
|
or
|
||||||
|
.I undefined-var
|
||||||
|
(referencing an undefined variable). The behavior of each warning can be set
|
||||||
|
by adding
|
||||||
|
.BI : action
|
||||||
|
after the warning name. If an action is not specified the default is
|
||||||
|
.IR warn .
|
||||||
|
If no
|
||||||
|
.I ARG
|
||||||
|
is provided the action for all warnings is
|
||||||
|
.IR warn .
|
||||||
|
If no
|
||||||
|
.B \-\-warn
|
||||||
|
option is provided the default action for
|
||||||
|
.I invalid-var
|
||||||
|
and
|
||||||
|
.I invalid-ref
|
||||||
|
is
|
||||||
|
.I warn
|
||||||
|
and the default action for
|
||||||
|
.I undefined-var
|
||||||
|
is
|
||||||
|
.IR ignore .
|
||||||
|
.TP 0.5i
|
||||||
.B \-\-warn\-undefined\-variables
|
.B \-\-warn\-undefined\-variables
|
||||||
Warn when an undefined variable is referenced.
|
A deprecated alternative for
|
||||||
|
.BR \-\-warn=undefined-var .
|
||||||
|
.TP 0.5i
|
||||||
|
.B \-
|
||||||
|
This option alone (not as an argument to the
|
||||||
|
.B \-f
|
||||||
|
option) is ignored, unless a target named
|
||||||
|
.B \-
|
||||||
|
is defined in the makefile, in which case that target is added to the makefile
|
||||||
|
goals.
|
||||||
.SH "EXIT STATUS"
|
.SH "EXIT STATUS"
|
||||||
GNU
|
GNU Make exits with a status of zero if all makefiles were successfully parsed
|
||||||
.B make
|
|
||||||
exits with a status of zero if all makefiles were successfully parsed
|
|
||||||
and no targets that were built failed. A status of one will be returned
|
and no targets that were built failed. A status of one will be returned
|
||||||
if the
|
if the
|
||||||
.B \-q
|
.B \-q
|
||||||
@ -363,9 +449,9 @@ This manual page contributed by Dennis Morse of Stanford University.
|
|||||||
Further updates contributed by Mike Frysinger. It has been reworked by Roland
|
Further updates contributed by Mike Frysinger. It has been reworked by Roland
|
||||||
McGrath. Maintained by Paul Smith.
|
McGrath. Maintained by Paul Smith.
|
||||||
.SH "COPYRIGHT"
|
.SH "COPYRIGHT"
|
||||||
Copyright \(co 1992-1993, 1996-2013 Free Software Foundation, Inc.
|
Copyright \(co 1992\(en1993, 1996\(en2024 Free Software Foundation, Inc.
|
||||||
This file is part of
|
This file is part of
|
||||||
.IR "GNU make" .
|
.IR "GNU Make" .
|
||||||
.LP
|
.LP
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
GNU Make is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -378,4 +464,4 @@ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|||||||
.LP
|
.LP
|
||||||
You should have received a copy of the GNU General Public License along with
|
You should have received a copy of the GNU General Public License along with
|
||||||
this program. If not, see
|
this program. If not, see
|
||||||
.IR http://www.gnu.org/licenses/ .
|
.IR https://www.gnu.org/licenses/ .
|
5764
doc/make.texi
5764
doc/make.texi
File diff suppressed because it is too large
Load Diff
65
dosbuild.bat
65
dosbuild.bat
@ -1,65 +0,0 @@
|
|||||||
@echo off
|
|
||||||
rem Copyright (C) 1998-2013 Free Software Foundation, Inc.
|
|
||||||
rem This file is part of GNU Make.
|
|
||||||
rem
|
|
||||||
rem GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
rem the terms of the GNU General Public License as published by the Free
|
|
||||||
rem Software Foundation; either version 3 of the License, or (at your option)
|
|
||||||
rem any later version.
|
|
||||||
rem
|
|
||||||
rem GNU Make is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
rem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
rem FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for.
|
|
||||||
rem more details.
|
|
||||||
rem
|
|
||||||
rem You should have received a copy of the GNU General Public License along
|
|
||||||
rem with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
echo Building Make for MSDOS
|
|
||||||
|
|
||||||
rem Echo ON so they will see what is going on.
|
|
||||||
@echo on
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g commands.c -o commands.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g output.c -o output.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g job.c -o job.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g dir.c -o dir.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g file.c -o file.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g misc.c -o misc.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g main.c -o main.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -DINCLUDEDIR=\"c:/djgpp/include\" -O2 -g read.c -o read.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -DLIBDIR=\"c:/djgpp/lib\" -O2 -g remake.c -o remake.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g rule.c -o rule.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g implicit.c -o implicit.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g default.c -o default.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g variable.c -o variable.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g expand.c -o expand.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g function.c -o function.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g vpath.c -o vpath.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g hash.c -o hash.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g strcache.c -o strcache.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g version.c -o version.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g ar.c -o ar.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g arscan.c -o arscan.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g signame.c -o signame.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g remote-stub.c -o remote-stub.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g getopt.c -o getopt.o
|
|
||||||
gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g getopt1.c -o getopt1.o
|
|
||||||
@cd glob
|
|
||||||
@if exist libglob.a del libglob.a
|
|
||||||
gcc -I. -c -DHAVE_CONFIG_H -I.. -O2 -g glob.c -o glob.o
|
|
||||||
gcc -I. -c -DHAVE_CONFIG_H -I.. -O2 -g fnmatch.c -o fnmatch.o
|
|
||||||
ar rv libglob.a glob.o fnmatch.o
|
|
||||||
@echo off
|
|
||||||
cd ..
|
|
||||||
echo commands.o > respf.$$$
|
|
||||||
for %%f in (job output dir file misc main read remake rule implicit default variable) do echo %%f.o >> respf.$$$
|
|
||||||
for %%f in (expand function vpath hash strcache version ar arscan signame remote-stub getopt getopt1) do echo %%f.o >> respf.$$$
|
|
||||||
echo glob/libglob.a >> respf.$$$
|
|
||||||
rem gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g guile.c -o guile.o
|
|
||||||
rem echo guile.o >> respf.$$$
|
|
||||||
@echo Linking...
|
|
||||||
@echo on
|
|
||||||
gcc -o make.new @respf.$$$
|
|
||||||
@if exist make.exe echo Make.exe is now built!
|
|
||||||
@if not exist make.exe echo Make.exe build failed...
|
|
||||||
@if exist make.exe del respf.$$$
|
|
1026
getloadavg.c
1026
getloadavg.c
File diff suppressed because it is too large
Load Diff
10
gl/.gitignore
vendored
Normal file
10
gl/.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
*~
|
||||||
|
#*
|
||||||
|
.#*
|
||||||
|
.*cache
|
||||||
|
*.diff
|
||||||
|
*.patch
|
||||||
|
*.orig
|
||||||
|
*.rej
|
||||||
|
*.out
|
||||||
|
*.log
|
65
gl/README
Normal file
65
gl/README
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
04 July 2022 -*-text-*-
|
||||||
|
|
||||||
|
The gnulib project provides a fantastic array of modules that can support both
|
||||||
|
POSIX and also extended features for GNU software.
|
||||||
|
|
||||||
|
Unfortunately using it in GNU make is problematic: GNU make is a foundational
|
||||||
|
utility (if you don't have a "make" program you pretty much can't build any
|
||||||
|
software), one of our goals in GNU make is to provide scripts (e.g.,
|
||||||
|
"build.sh") that will build GNU make without needing an instance of make.
|
||||||
|
|
||||||
|
Instead of running "./configure && make", you should be able to run
|
||||||
|
"./configure && ./build.sh" and get a build of GNU make as a result.
|
||||||
|
|
||||||
|
However, more and more gnulib modules are relying not on M4 macros and
|
||||||
|
the configure script to manage their configuration, but in addition special
|
||||||
|
makefile recipes that perform various post-configure operations. Since we
|
||||||
|
don't have an instance of "make", we cannot use these modules as-is.
|
||||||
|
|
||||||
|
There are various options we could choose for solving this:
|
||||||
|
|
||||||
|
- Avoid gnulib modules and write our own portability interfaces.
|
||||||
|
I really am not too excited about this.
|
||||||
|
|
||||||
|
- Give up on "build.sh" and require users to already have "make".
|
||||||
|
The argument here is that you must already have a compiler, and it couldn't
|
||||||
|
have been built without "make", and/or if you build it with a cross-compiler
|
||||||
|
then you should be able to use that cross-development environment to build
|
||||||
|
GNU make as well.
|
||||||
|
|
||||||
|
- Provide a "mini-make" with just enough functionality to support the gnulib
|
||||||
|
makefiles but no extra features, that didn't need any complex gnulib
|
||||||
|
modules. As with the first option, I'm not too excited about this.
|
||||||
|
|
||||||
|
Although arguably the second option is the sane one, I'm not really excited
|
||||||
|
about any of them for the time being. So I elected to try something between
|
||||||
|
the first and second options:
|
||||||
|
|
||||||
|
The gnulib-port Git branch will contain unmodified copies of gnulib modules
|
||||||
|
that we want to use with GNU make. From there, we merge them into the main
|
||||||
|
Git branch then modify / simplify them to avoid unnecessary extra modules and
|
||||||
|
allow "build.sh" to be used.
|
||||||
|
|
||||||
|
By keeping the unmodified versions on the gnulib-port branch, we enable Git
|
||||||
|
merge facilities to merge in new versions as follows:
|
||||||
|
|
||||||
|
* Check out the gnulib-port branch
|
||||||
|
|
||||||
|
* Update its content with any updates to gnulib modules. Something like:
|
||||||
|
(
|
||||||
|
cd gl \
|
||||||
|
&& find */. -type f \
|
||||||
|
| while read fn; do
|
||||||
|
test -f "$GNULIB_SRCDIR/$fn" && cp "$GNULIB_SRCDIR/$fn" "$fn"
|
||||||
|
done
|
||||||
|
)
|
||||||
|
|
||||||
|
* Commit the changes _without modification_
|
||||||
|
|
||||||
|
* Check out the main branch
|
||||||
|
|
||||||
|
* Run "git merge --no-ff gnulib-port" to merge in the changes
|
||||||
|
|
||||||
|
* Resolve any conflicts and commit the merge.
|
||||||
|
|
||||||
|
-- pds
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999 Free Software
|
/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2023 Free Software
|
||||||
Foundation, Inc.
|
Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
@ -13,9 +13,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public License
|
You should have received a copy of the GNU Library General Public License
|
||||||
along with this library; see the file COPYING.LIB. If not, write to the Free
|
along with this library; see the file COPYING.LIB.
|
||||||
Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
If not, see <https://www.gnu.org/licenses/>. */
|
||||||
USA. */
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
@ -128,48 +127,20 @@ extern char *getenv ();
|
|||||||
extern int errno;
|
extern int errno;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* This function doesn't exist on most systems. */
|
|
||||||
|
|
||||||
# if !defined HAVE___STRCHRNUL && !defined _LIBC
|
|
||||||
static char *
|
|
||||||
__strchrnul (s, c)
|
|
||||||
const char *s;
|
|
||||||
int c;
|
|
||||||
{
|
|
||||||
char *result = strchr (s, c);
|
|
||||||
if (result == NULL)
|
|
||||||
result = strchr (s, '\0');
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef internal_function
|
|
||||||
/* Inside GNU libc we mark some function in a special way. In other
|
|
||||||
environments simply ignore the marking. */
|
|
||||||
# define internal_function
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/* Match STRING against the filename pattern PATTERN, returning zero if
|
/* Match STRING against the filename pattern PATTERN, returning zero if
|
||||||
it matches, nonzero if not. */
|
it matches, nonzero if not. */
|
||||||
static int internal_fnmatch __P ((const char *pattern, const char *string,
|
|
||||||
int no_leading_period, int flags))
|
|
||||||
internal_function;
|
|
||||||
static int
|
static int
|
||||||
internal_function
|
internal_fnmatch (const char *pattern, const char *string,
|
||||||
internal_fnmatch (pattern, string, no_leading_period, flags)
|
int no_leading_period, int flags)
|
||||||
const char *pattern;
|
|
||||||
const char *string;
|
|
||||||
int no_leading_period;
|
|
||||||
int flags;
|
|
||||||
{
|
{
|
||||||
register const char *p = pattern, *n = string;
|
const char *p = pattern, *n = string;
|
||||||
register unsigned char c;
|
unsigned char c;
|
||||||
|
|
||||||
/* Note that this evaluates C many times. */
|
/* Note that this evaluates C many times. */
|
||||||
# ifdef _LIBC
|
# ifdef _LIBC
|
||||||
# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
|
# define FOLD(c) (unsigned char)((flags & FNM_CASEFOLD) ? tolower (c) : (c))
|
||||||
# else
|
# else
|
||||||
# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
|
# define FOLD(c) (unsigned char)((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
while ((c = *p++) != '\0')
|
while ((c = *p++) != '\0')
|
||||||
@ -237,7 +208,9 @@ internal_fnmatch (pattern, string, no_leading_period, flags)
|
|||||||
{
|
{
|
||||||
const char *endp;
|
const char *endp;
|
||||||
|
|
||||||
endp = __strchrnul (n, (flags & FNM_FILE_NAME) ? '/' : '\0');
|
endp = strchr (n, (flags & FNM_FILE_NAME) ? '/' : '\0');
|
||||||
|
if (endp == NULL)
|
||||||
|
endp = n + strlen (n);
|
||||||
|
|
||||||
if (c == '[')
|
if (c == '[')
|
||||||
{
|
{
|
||||||
@ -292,7 +265,7 @@ internal_fnmatch (pattern, string, no_leading_period, flags)
|
|||||||
{
|
{
|
||||||
/* Nonzero if the sense of the character class is inverted. */
|
/* Nonzero if the sense of the character class is inverted. */
|
||||||
static int posixly_correct;
|
static int posixly_correct;
|
||||||
register int not;
|
int not;
|
||||||
char cold;
|
char cold;
|
||||||
|
|
||||||
if (posixly_correct == 0)
|
if (posixly_correct == 0)
|
||||||
@ -478,10 +451,7 @@ internal_fnmatch (pattern, string, no_leading_period, flags)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
fnmatch (pattern, string, flags)
|
fnmatch (const char *pattern, const char *string, int flags)
|
||||||
const char *pattern;
|
|
||||||
const char *string;
|
|
||||||
int flags;
|
|
||||||
{
|
{
|
||||||
return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags);
|
return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags);
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999 Free Software
|
/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2023 Free Software
|
||||||
Foundation, Inc.
|
Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
@ -13,9 +13,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public License
|
You should have received a copy of the GNU Library General Public License
|
||||||
along with this library; see the file COPYING.LIB. If not, write to the Free
|
along with this library; see the file COPYING.LIB.
|
||||||
Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
If not, see <https://www.gnu.org/licenses/>. */
|
||||||
USA. */
|
|
||||||
|
|
||||||
#ifndef _FNMATCH_H
|
#ifndef _FNMATCH_H
|
||||||
#define _FNMATCH_H 1
|
#define _FNMATCH_H 1
|
||||||
@ -24,27 +23,6 @@ USA. */
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32
|
|
||||||
# if !defined __GLIBC__
|
|
||||||
# undef __P
|
|
||||||
# define __P(protos) protos
|
|
||||||
# endif
|
|
||||||
#else /* Not C++ or ANSI C. */
|
|
||||||
# undef __P
|
|
||||||
# define __P(protos) ()
|
|
||||||
/* We can get away without defining `const' here only because in this file
|
|
||||||
it is used only inside the prototype for `fnmatch', which is elided in
|
|
||||||
non-ANSI C where `const' is problematical. */
|
|
||||||
#endif /* C++ or ANSI C. */
|
|
||||||
|
|
||||||
#ifndef const
|
|
||||||
# if (defined __STDC__ && __STDC__) || defined __cplusplus || defined WINDOWS32
|
|
||||||
# define __const const
|
|
||||||
# else
|
|
||||||
# define __const
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We #undef these before defining them because some losing systems
|
/* We #undef these before defining them because some losing systems
|
||||||
(HP-UX A.08.07 for example) define these in <unistd.h>. */
|
(HP-UX A.08.07 for example) define these in <unistd.h>. */
|
||||||
#undef FNM_PATHNAME
|
#undef FNM_PATHNAME
|
||||||
@ -75,8 +53,7 @@ extern "C" {
|
|||||||
|
|
||||||
/* Match NAME against the filename pattern PATTERN,
|
/* Match NAME against the filename pattern PATTERN,
|
||||||
returning zero if it matches, FNM_NOMATCH if not. */
|
returning zero if it matches, FNM_NOMATCH if not. */
|
||||||
extern int fnmatch __P ((__const char *__pattern, __const char *__name,
|
extern int fnmatch (const char *pattern, const char *name, int flags);
|
||||||
int __flags));
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 Free
|
/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
Software Foundation, Inc.
|
2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
This library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Library General Public License as
|
modify it under the terms of the GNU Library General Public License as
|
||||||
@ -12,9 +12,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public License
|
You should have received a copy of the GNU Library General Public License
|
||||||
along with this library; see the file COPYING.LIB. If not, write to the Free
|
along with this library; see the file COPYING.LIB.
|
||||||
Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
If not, see <https://www.gnu.org/licenses/>. */
|
||||||
USA. */
|
|
||||||
|
|
||||||
/* AIX requires this to be the first thing in the file. */
|
/* AIX requires this to be the first thing in the file. */
|
||||||
#if defined _AIX && !defined __GNUC__
|
#if defined _AIX && !defined __GNUC__
|
||||||
@ -38,9 +37,6 @@ USA. */
|
|||||||
/* #define NDEBUG 1 */
|
/* #define NDEBUG 1 */
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include <stdio.h> /* Needed on stupid SunOS for assert. */
|
|
||||||
|
|
||||||
|
|
||||||
/* Comment out all this code if we are using the GNU C Library, and are not
|
/* Comment out all this code if we are using the GNU C Library, and are not
|
||||||
actually compiling the library itself. This code is part of the GNU C
|
actually compiling the library itself. This code is part of the GNU C
|
||||||
Library, but also included in many other GNU distributions. Compiling
|
Library, but also included in many other GNU distributions. Compiling
|
||||||
@ -50,7 +46,9 @@ USA. */
|
|||||||
it is simpler to just do this in the source for each such file. */
|
it is simpler to just do this in the source for each such file. */
|
||||||
|
|
||||||
#define GLOB_INTERFACE_VERSION 1
|
#define GLOB_INTERFACE_VERSION 1
|
||||||
#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
|
#if defined _LIBC
|
||||||
|
# define ELIDE_CODE
|
||||||
|
#elif defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
|
||||||
# include <gnu-versions.h>
|
# include <gnu-versions.h>
|
||||||
# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION
|
# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION
|
||||||
# define ELIDE_CODE
|
# define ELIDE_CODE
|
||||||
@ -63,7 +61,7 @@ USA. */
|
|||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
#if defined HAVE_UNISTD_H
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
# ifndef POSIX
|
# ifndef POSIX
|
||||||
# ifdef _POSIX_VERSION
|
# ifdef _POSIX_VERSION
|
||||||
@ -72,7 +70,7 @@ USA. */
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined _AMIGA && !defined VMS && !defined WINDOWS32
|
#if !defined _AMIGA && !MK_OS_VMS && !MK_OS_W32
|
||||||
# include <pwd.h>
|
# include <pwd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -83,11 +81,6 @@ extern int errno;
|
|||||||
# define __set_errno(val) errno = (val)
|
# define __set_errno(val) errno = (val)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
# define NULL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__
|
#if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__
|
||||||
# include <dirent.h>
|
# include <dirent.h>
|
||||||
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
||||||
@ -108,7 +101,6 @@ extern int errno;
|
|||||||
# endif /* HAVE_VMSDIR_H */
|
# endif /* HAVE_VMSDIR_H */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* In GNU systems, <dirent.h> defines this macro for us. */
|
/* In GNU systems, <dirent.h> defines this macro for us. */
|
||||||
#ifdef _D_NAMLEN
|
#ifdef _D_NAMLEN
|
||||||
# undef NAMLEN
|
# undef NAMLEN
|
||||||
@ -117,12 +109,12 @@ extern int errno;
|
|||||||
|
|
||||||
/* When used in the GNU libc the symbol _DIRENT_HAVE_D_TYPE is available
|
/* When used in the GNU libc the symbol _DIRENT_HAVE_D_TYPE is available
|
||||||
if the `d_type' member for `struct dirent' is available. */
|
if the `d_type' member for `struct dirent' is available. */
|
||||||
#ifdef _DIRENT_HAVE_D_TYPE
|
#if defined(_DIRENT_HAVE_D_TYPE) || defined(HAVE_STRUCT_DIRENT_D_TYPE)
|
||||||
# define HAVE_D_TYPE 1
|
# define HAVE_D_TYPE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__
|
#if (defined POSIX || MK_OS_W32) && !defined __GNU_LIBRARY__
|
||||||
/* Posix does not require that the d_ino field be present, and some
|
/* Posix does not require that the d_ino field be present, and some
|
||||||
systems do not provide it. */
|
systems do not provide it. */
|
||||||
# define REAL_DIR_ENTRY(dp) 1
|
# define REAL_DIR_ENTRY(dp) 1
|
||||||
@ -130,49 +122,10 @@ extern int errno;
|
|||||||
# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
|
# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
|
||||||
#endif /* POSIX */
|
#endif /* POSIX */
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined __GNU_LIBRARY__
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
# define ANSI_STRING
|
|
||||||
#else /* No standard headers. */
|
|
||||||
|
|
||||||
extern char *getenv ();
|
#if !defined HAVE_STRCOLL
|
||||||
|
|
||||||
# ifdef HAVE_STRING_H
|
|
||||||
# include <string.h>
|
|
||||||
# define ANSI_STRING
|
|
||||||
# else
|
|
||||||
# include <strings.h>
|
|
||||||
# endif
|
|
||||||
# ifdef HAVE_MEMORY_H
|
|
||||||
# include <memory.h>
|
|
||||||
# endif
|
|
||||||
|
|
||||||
extern char *malloc (), *realloc ();
|
|
||||||
extern void free ();
|
|
||||||
|
|
||||||
extern void qsort ();
|
|
||||||
extern void abort (), exit ();
|
|
||||||
|
|
||||||
#endif /* Standard headers. */
|
|
||||||
|
|
||||||
#ifndef ANSI_STRING
|
|
||||||
|
|
||||||
# ifndef bzero
|
|
||||||
extern void bzero ();
|
|
||||||
# endif
|
|
||||||
# ifndef bcopy
|
|
||||||
extern void bcopy ();
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# define memcpy(d, s, n) bcopy ((s), (d), (n))
|
|
||||||
# define strrchr rindex
|
|
||||||
/* memset is only used for zero here, but let's be paranoid. */
|
|
||||||
# define memset(s, better_be_zero, n) \
|
|
||||||
((void) ((better_be_zero) == 0 ? (bzero((s), (n)), 0) : (abort(), 0)))
|
|
||||||
#endif /* Not ANSI_STRING. */
|
|
||||||
|
|
||||||
#if !defined HAVE_STRCOLL && !defined _LIBC
|
|
||||||
# define strcoll strcmp
|
# define strcoll strcmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -182,32 +135,6 @@ extern void bcopy ();
|
|||||||
# define mempcpy(Dest, Src, Len) __mempcpy (Dest, Src, Len)
|
# define mempcpy(Dest, Src, Len) __mempcpy (Dest, Src, Len)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined __GNU_LIBRARY__ && !defined __DJGPP__
|
|
||||||
# ifdef __GNUC__
|
|
||||||
__inline
|
|
||||||
# endif
|
|
||||||
# ifndef __SASC
|
|
||||||
# ifdef WINDOWS32
|
|
||||||
static void *
|
|
||||||
my_realloc (void *p, unsigned int n)
|
|
||||||
# else
|
|
||||||
static char *
|
|
||||||
my_realloc (p, n)
|
|
||||||
char *p;
|
|
||||||
unsigned int n;
|
|
||||||
# endif
|
|
||||||
{
|
|
||||||
/* These casts are the for sake of the broken Ultrix compiler,
|
|
||||||
which warns of illegal pointer combinations otherwise. */
|
|
||||||
if (p == NULL)
|
|
||||||
return (char *) malloc (n);
|
|
||||||
return (char *) realloc (p, n);
|
|
||||||
}
|
|
||||||
# define realloc my_realloc
|
|
||||||
# endif /* __SASC */
|
|
||||||
#endif /* __GNU_LIBRARY__ || __DJGPP__ */
|
|
||||||
|
|
||||||
|
|
||||||
#if !defined __alloca && !defined __GNU_LIBRARY__
|
#if !defined __alloca && !defined __GNU_LIBRARY__
|
||||||
|
|
||||||
# ifdef __GNUC__
|
# ifdef __GNUC__
|
||||||
@ -218,21 +145,17 @@ my_realloc (p, n)
|
|||||||
# include <alloca.h>
|
# include <alloca.h>
|
||||||
# else /* Not HAVE_ALLOCA_H. */
|
# else /* Not HAVE_ALLOCA_H. */
|
||||||
# ifndef _AIX
|
# ifndef _AIX
|
||||||
# ifdef WINDOWS32
|
# if MK_OS_W32
|
||||||
# include <malloc.h>
|
# include <malloc.h>
|
||||||
# else
|
# else
|
||||||
extern char *alloca ();
|
extern char *alloca ();
|
||||||
# endif /* WINDOWS32 */
|
# endif /* MK_OS_W32 */
|
||||||
# endif /* Not _AIX. */
|
# endif /* Not _AIX. */
|
||||||
# endif /* sparc or HAVE_ALLOCA_H. */
|
# endif /* sparc or HAVE_ALLOCA_H. */
|
||||||
# endif /* GCC. */
|
# endif /* GCC. */
|
||||||
|
|
||||||
# define __alloca alloca
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __GNU_LIBRARY__
|
#ifndef __GNU_LIBRARY__
|
||||||
# define __stat stat
|
|
||||||
# ifdef STAT_MACROS_BROKEN
|
# ifdef STAT_MACROS_BROKEN
|
||||||
# undef S_ISDIR
|
# undef S_ISDIR
|
||||||
# endif
|
# endif
|
||||||
@ -241,25 +164,6 @@ extern char *alloca ();
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
# undef strdup
|
|
||||||
# define strdup(str) __strdup (str)
|
|
||||||
# define sysconf(id) __sysconf (id)
|
|
||||||
# define closedir(dir) __closedir (dir)
|
|
||||||
# define opendir(name) __opendir (name)
|
|
||||||
# define readdir(str) __readdir (str)
|
|
||||||
# define getpwnam_r(name, bufp, buf, len, res) \
|
|
||||||
__getpwnam_r (name, bufp, buf, len, res)
|
|
||||||
# ifndef __stat
|
|
||||||
# define __stat(fname, buf) __xstat (_STAT_VER, fname, buf)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !(defined STDC_HEADERS || defined __GNU_LIBRARY__)
|
|
||||||
# undef size_t
|
|
||||||
# define size_t unsigned int
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Some system header files erroneously define these.
|
/* Some system header files erroneously define these.
|
||||||
We want our own definitions from <fnmatch.h> to take precedence. */
|
We want our own definitions from <fnmatch.h> to take precedence. */
|
||||||
#ifndef __GNU_LIBRARY__
|
#ifndef __GNU_LIBRARY__
|
||||||
@ -283,26 +187,30 @@ extern char *alloca ();
|
|||||||
#endif
|
#endif
|
||||||
#include <glob.h>
|
#include <glob.h>
|
||||||
|
|
||||||
|
#if !defined __alloca
|
||||||
|
# define __alloca alloca
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_GETLOGIN_R
|
#ifdef HAVE_GETLOGIN_R
|
||||||
extern int getlogin_r __P ((char *, size_t));
|
extern int getlogin_r (char *, size_t);
|
||||||
#else
|
#else
|
||||||
extern char *getlogin __P ((void));
|
extern char *getlogin (void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static
|
static
|
||||||
#if __GNUC__ - 0 >= 2
|
#if __GNUC__ - 0 >= 2
|
||||||
inline
|
inline
|
||||||
#endif
|
#endif
|
||||||
const char *next_brace_sub __P ((const char *begin));
|
const char *next_brace_sub (const char *begin);
|
||||||
static int glob_in_dir __P ((const char *pattern, const char *directory,
|
static int glob_in_dir (const char *pattern, const char *directory,
|
||||||
int flags,
|
int flags,
|
||||||
int (*errfunc) (const char *, int),
|
int (*errfunc) (const char *, int),
|
||||||
glob_t *pglob));
|
glob_t *pglob);
|
||||||
static int prefix_array __P ((const char *prefix, char **array, size_t n));
|
static int prefix_array (const char *prefix, char **array, size_t n);
|
||||||
static int collated_compare __P ((const __ptr_t, const __ptr_t));
|
static int collated_compare (const void *, const void *);
|
||||||
|
|
||||||
#if !defined _LIBC || !defined NO_GLOB_PATTERN_P
|
#if !defined NO_GLOB_PATTERN_P
|
||||||
int __glob_pattern_p __P ((const char *pattern, int quote));
|
int __glob_pattern_p (const char *pattern, int quote);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Find the end of the sub-pattern in a brace expression. We define
|
/* Find the end of the sub-pattern in a brace expression. We define
|
||||||
@ -312,8 +220,7 @@ static
|
|||||||
inline
|
inline
|
||||||
#endif
|
#endif
|
||||||
const char *
|
const char *
|
||||||
next_brace_sub (begin)
|
next_brace_sub (const char *begin)
|
||||||
const char *begin;
|
|
||||||
{
|
{
|
||||||
unsigned int depth = 0;
|
unsigned int depth = 0;
|
||||||
const char *cp = begin;
|
const char *cp = begin;
|
||||||
@ -359,17 +266,14 @@ next_brace_sub (begin)
|
|||||||
If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
|
If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
|
||||||
Otherwise, `glob' returns zero. */
|
Otherwise, `glob' returns zero. */
|
||||||
int
|
int
|
||||||
glob (pattern, flags, errfunc, pglob)
|
glob (const char *pattern, int flags,
|
||||||
const char *pattern;
|
int (*errfunc) (const char *, int), glob_t *pglob)
|
||||||
int flags;
|
|
||||||
int (*errfunc) __P ((const char *, int));
|
|
||||||
glob_t *pglob;
|
|
||||||
{
|
{
|
||||||
const char *filename;
|
const char *filename;
|
||||||
const char *dirname;
|
const char *dirname;
|
||||||
size_t dirlen;
|
size_t dirlen;
|
||||||
int status;
|
int status;
|
||||||
int oldcount;
|
size_t oldcount;
|
||||||
|
|
||||||
if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0)
|
if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0)
|
||||||
{
|
{
|
||||||
@ -377,6 +281,11 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* POSIX requires all slashes to be matched. This means that with
|
||||||
|
a trailing slash we must match only directories. */
|
||||||
|
if (pattern[0] && pattern[strlen (pattern) - 1] == '/')
|
||||||
|
flags |= GLOB_ONLYDIR;
|
||||||
|
|
||||||
if (flags & GLOB_BRACE)
|
if (flags & GLOB_BRACE)
|
||||||
{
|
{
|
||||||
const char *begin = strchr (pattern, '{');
|
const char *begin = strchr (pattern, '{');
|
||||||
@ -384,7 +293,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
{
|
{
|
||||||
/* Allocate working buffer large enough for our work. Note that
|
/* Allocate working buffer large enough for our work. Note that
|
||||||
we have at least an opening and closing brace. */
|
we have at least an opening and closing brace. */
|
||||||
int firstc;
|
size_t firstc;
|
||||||
char *alt_start;
|
char *alt_start;
|
||||||
const char *p;
|
const char *p;
|
||||||
const char *next;
|
const char *next;
|
||||||
@ -506,14 +415,14 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
|
|
||||||
/* Find the filename. */
|
/* Find the filename. */
|
||||||
filename = strrchr (pattern, '/');
|
filename = strrchr (pattern, '/');
|
||||||
#if defined __MSDOS__ || defined WINDOWS32
|
#if MK_OS_DOS || MK_OS_W32
|
||||||
/* The case of "d:pattern". Since `:' is not allowed in
|
/* The case of "d:pattern". Since `:' is not allowed in
|
||||||
file names, we can safely assume that wherever it
|
file names, we can safely assume that wherever it
|
||||||
happens in pattern, it signals the filename part. This
|
happens in pattern, it signals the filename part. This
|
||||||
is so we could some day support patterns like "[a-z]:foo". */
|
is so we could some day support patterns like "[a-z]:foo". */
|
||||||
if (filename == NULL)
|
if (filename == NULL)
|
||||||
filename = strchr (pattern, ':');
|
filename = strchr (pattern, ':');
|
||||||
#endif /* __MSDOS__ || WINDOWS32 */
|
#endif /* MK_OS_DOS || MK_OS_W32 */
|
||||||
if (filename == NULL)
|
if (filename == NULL)
|
||||||
{
|
{
|
||||||
/* This can mean two things: a simple name or "~name". The later
|
/* This can mean two things: a simple name or "~name". The later
|
||||||
@ -550,7 +459,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
{
|
{
|
||||||
char *newp;
|
char *newp;
|
||||||
dirlen = filename - pattern;
|
dirlen = filename - pattern;
|
||||||
#if defined __MSDOS__ || defined WINDOWS32
|
#if MK_OS_DOS || MK_OS_W32
|
||||||
if (*filename == ':'
|
if (*filename == ':'
|
||||||
|| (filename > pattern + 1 && filename[-1] == ':'))
|
|| (filename > pattern + 1 && filename[-1] == ':'))
|
||||||
{
|
{
|
||||||
@ -584,7 +493,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
++filename;
|
++filename;
|
||||||
|
|
||||||
if (filename[0] == '\0'
|
if (filename[0] == '\0'
|
||||||
#if defined __MSDOS__ || defined WINDOWS32
|
#if MK_OS_DOS || MK_OS_W32
|
||||||
&& dirname[dirlen - 1] != ':'
|
&& dirname[dirlen - 1] != ':'
|
||||||
&& (dirlen < 3 || dirname[dirlen - 2] != ':'
|
&& (dirlen < 3 || dirname[dirlen - 2] != ':'
|
||||||
|| dirname[dirlen - 1] != '/')
|
|| dirname[dirlen - 1] != '/')
|
||||||
@ -608,13 +517,13 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
|
|
||||||
oldcount = pglob->gl_pathc;
|
oldcount = pglob->gl_pathc;
|
||||||
|
|
||||||
#ifndef VMS
|
#if !MK_OS_VMS
|
||||||
if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~')
|
if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~')
|
||||||
{
|
{
|
||||||
if (dirname[1] == '\0' || dirname[1] == '/')
|
if (dirname[1] == '\0' || dirname[1] == '/')
|
||||||
{
|
{
|
||||||
/* Look up home directory. */
|
/* Look up home directory. */
|
||||||
#ifdef VMS
|
#if MK_OS_VMS
|
||||||
/* This isn't obvious, RTLs of DECC and VAXC know about "HOME" */
|
/* This isn't obvious, RTLs of DECC and VAXC know about "HOME" */
|
||||||
const char *home_dir = getenv ("SYS$LOGIN");
|
const char *home_dir = getenv ("SYS$LOGIN");
|
||||||
#else
|
#else
|
||||||
@ -624,11 +533,11 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
if (home_dir == NULL || home_dir[0] == '\0')
|
if (home_dir == NULL || home_dir[0] == '\0')
|
||||||
home_dir = "SYS:";
|
home_dir = "SYS:";
|
||||||
# else
|
# else
|
||||||
# ifdef WINDOWS32
|
# if MK_OS_W32
|
||||||
if (home_dir == NULL || home_dir[0] == '\0')
|
if (home_dir == NULL || home_dir[0] == '\0')
|
||||||
home_dir = "c:/users/default"; /* poor default */
|
home_dir = "c:/users/default"; /* poor default */
|
||||||
# else
|
# else
|
||||||
# ifdef VMS
|
# if MK_OS_VMS
|
||||||
/* Again, this isn't obvious, if "HOME" isn't known "SYS$LOGIN" should be set */
|
/* Again, this isn't obvious, if "HOME" isn't known "SYS$LOGIN" should be set */
|
||||||
if (home_dir == NULL || home_dir[0] == '\0')
|
if (home_dir == NULL || home_dir[0] == '\0')
|
||||||
home_dir = "SYS$DISK:[]";
|
home_dir = "SYS$DISK:[]";
|
||||||
@ -637,7 +546,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
{
|
{
|
||||||
int success;
|
int success;
|
||||||
char *name;
|
char *name;
|
||||||
# if defined HAVE_GETLOGIN_R || defined _LIBC
|
# if defined HAVE_GETLOGIN_R
|
||||||
size_t buflen = sysconf (_SC_LOGIN_NAME_MAX) + 1;
|
size_t buflen = sysconf (_SC_LOGIN_NAME_MAX) + 1;
|
||||||
|
|
||||||
if (buflen == 0)
|
if (buflen == 0)
|
||||||
@ -653,7 +562,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
struct passwd *p;
|
struct passwd *p;
|
||||||
# if defined HAVE_GETPWNAM_R || defined _LIBC
|
# if defined HAVE_GETPWNAM_R
|
||||||
size_t pwbuflen = sysconf (_SC_GETPW_R_SIZE_MAX);
|
size_t pwbuflen = sysconf (_SC_GETPW_R_SIZE_MAX);
|
||||||
char *pwtmpbuf;
|
char *pwtmpbuf;
|
||||||
struct passwd pwbuf;
|
struct passwd pwbuf;
|
||||||
@ -691,8 +600,8 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
else
|
else
|
||||||
home_dir = "~"; /* No luck. */
|
home_dir = "~"; /* No luck. */
|
||||||
}
|
}
|
||||||
# endif /* VMS */
|
# endif /* MK_OS_VMS */
|
||||||
# endif /* WINDOWS32 */
|
# endif /* MK_OS_W32 */
|
||||||
# endif
|
# endif
|
||||||
/* Now construct the full directory. */
|
/* Now construct the full directory. */
|
||||||
if (dirname[1] == '\0')
|
if (dirname[1] == '\0')
|
||||||
@ -712,7 +621,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
dirname = newp;
|
dirname = newp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# if !defined _AMIGA && !defined WINDOWS32 && !defined VMS
|
# if !defined _AMIGA && !MK_OS_W32 && !MK_OS_VMS
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *end_name = strchr (dirname, '/');
|
char *end_name = strchr (dirname, '/');
|
||||||
@ -738,7 +647,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
/* Look up specific user's home directory. */
|
/* Look up specific user's home directory. */
|
||||||
{
|
{
|
||||||
struct passwd *p;
|
struct passwd *p;
|
||||||
# if defined HAVE_GETPWNAM_R || defined _LIBC
|
# if defined HAVE_GETPWNAM_R
|
||||||
size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX);
|
size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX);
|
||||||
char *pwtmpbuf;
|
char *pwtmpbuf;
|
||||||
struct passwd pwbuf;
|
struct passwd pwbuf;
|
||||||
@ -792,9 +701,9 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
home directory. */
|
home directory. */
|
||||||
return GLOB_NOMATCH;
|
return GLOB_NOMATCH;
|
||||||
}
|
}
|
||||||
# endif /* Not Amiga && not WINDOWS32 && not VMS. */
|
# endif /* Not Amiga && not MK_OS_W32 && not MK_OS_VMS. */
|
||||||
}
|
}
|
||||||
#endif /* Not VMS. */
|
#endif /* Not MK_OS_VMS. */
|
||||||
|
|
||||||
/* Now test whether we looked for "~" or "~NAME". In this case we
|
/* Now test whether we looked for "~" or "~NAME". In this case we
|
||||||
can give the answer now. */
|
can give the answer now. */
|
||||||
@ -806,7 +715,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
if ((flags & GLOB_NOCHECK)
|
if ((flags & GLOB_NOCHECK)
|
||||||
|| (((flags & GLOB_ALTDIRFUNC)
|
|| (((flags & GLOB_ALTDIRFUNC)
|
||||||
? (*pglob->gl_stat) (dirname, &st)
|
? (*pglob->gl_stat) (dirname, &st)
|
||||||
: __stat (dirname, &st)) == 0
|
: stat (dirname, &st)) == 0
|
||||||
&& S_ISDIR (st.st_mode)))
|
&& S_ISDIR (st.st_mode)))
|
||||||
{
|
{
|
||||||
pglob->gl_pathv
|
pglob->gl_pathv
|
||||||
@ -823,7 +732,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
while (pglob->gl_pathc < pglob->gl_offs)
|
while (pglob->gl_pathc < pglob->gl_offs)
|
||||||
pglob->gl_pathv[pglob->gl_pathc++] = NULL;
|
pglob->gl_pathv[pglob->gl_pathc++] = NULL;
|
||||||
|
|
||||||
#if defined HAVE_STRDUP || defined _LIBC
|
#if defined HAVE_STRDUP
|
||||||
pglob->gl_pathv[pglob->gl_pathc] = strdup (dirname);
|
pglob->gl_pathv[pglob->gl_pathc] = strdup (dirname);
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
@ -855,7 +764,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
have to glob for the directory, and then glob for
|
have to glob for the directory, and then glob for
|
||||||
the pattern in each directory found. */
|
the pattern in each directory found. */
|
||||||
glob_t dirs;
|
glob_t dirs;
|
||||||
register int i;
|
size_t i;
|
||||||
|
|
||||||
status = glob (dirname,
|
status = glob (dirname,
|
||||||
((flags & (GLOB_ERR | GLOB_NOCHECK | GLOB_NOESCAPE))
|
((flags & (GLOB_ERR | GLOB_NOCHECK | GLOB_NOESCAPE))
|
||||||
@ -869,7 +778,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
appending the results to PGLOB. */
|
appending the results to PGLOB. */
|
||||||
for (i = 0; i < dirs.gl_pathc; ++i)
|
for (i = 0; i < dirs.gl_pathc; ++i)
|
||||||
{
|
{
|
||||||
int old_pathc;
|
size_t old_pathc;
|
||||||
|
|
||||||
#ifdef SHELL
|
#ifdef SHELL
|
||||||
{
|
{
|
||||||
@ -952,7 +861,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
|
|
||||||
/* First check whether this really is a directory. */
|
/* First check whether this really is a directory. */
|
||||||
if (((flags & GLOB_ALTDIRFUNC)
|
if (((flags & GLOB_ALTDIRFUNC)
|
||||||
? (*pglob->gl_stat) (dir, &st) : __stat (dir, &st)) != 0
|
? (*pglob->gl_stat) (dir, &st) : stat (dir, &st)) != 0
|
||||||
|| !S_ISDIR (st.st_mode))
|
|| !S_ISDIR (st.st_mode))
|
||||||
/* No directory, ignore this entry. */
|
/* No directory, ignore this entry. */
|
||||||
continue;
|
continue;
|
||||||
@ -1005,7 +914,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
if (dirlen > 0)
|
if (dirlen > 0)
|
||||||
{
|
{
|
||||||
/* Stick the directory on the front of each name. */
|
/* Stick the directory on the front of each name. */
|
||||||
int ignore = oldcount;
|
size_t ignore = oldcount;
|
||||||
|
|
||||||
if ((flags & GLOB_DOOFFS) && ignore < pglob->gl_offs)
|
if ((flags & GLOB_DOOFFS) && ignore < pglob->gl_offs)
|
||||||
ignore = pglob->gl_offs;
|
ignore = pglob->gl_offs;
|
||||||
@ -1023,12 +932,12 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
if (flags & GLOB_MARK)
|
if (flags & GLOB_MARK)
|
||||||
{
|
{
|
||||||
/* Append slashes to directory names. */
|
/* Append slashes to directory names. */
|
||||||
int i;
|
size_t i;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
for (i = oldcount; i < pglob->gl_pathc; ++i)
|
for (i = oldcount; i < pglob->gl_pathc; ++i)
|
||||||
if (((flags & GLOB_ALTDIRFUNC)
|
if (((flags & GLOB_ALTDIRFUNC)
|
||||||
? (*pglob->gl_stat) (pglob->gl_pathv[i], &st)
|
? (*pglob->gl_stat) (pglob->gl_pathv[i], &st)
|
||||||
: __stat (pglob->gl_pathv[i], &st)) == 0
|
: stat (pglob->gl_pathv[i], &st)) == 0
|
||||||
&& S_ISDIR (st.st_mode))
|
&& S_ISDIR (st.st_mode))
|
||||||
{
|
{
|
||||||
size_t len = strlen (pglob->gl_pathv[i]) + 2;
|
size_t len = strlen (pglob->gl_pathv[i]) + 2;
|
||||||
@ -1046,12 +955,12 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
if (!(flags & GLOB_NOSORT))
|
if (!(flags & GLOB_NOSORT))
|
||||||
{
|
{
|
||||||
/* Sort the vector. */
|
/* Sort the vector. */
|
||||||
int non_sort = oldcount;
|
size_t non_sort = oldcount;
|
||||||
|
|
||||||
if ((flags & GLOB_DOOFFS) && pglob->gl_offs > oldcount)
|
if ((flags & GLOB_DOOFFS) && pglob->gl_offs > oldcount)
|
||||||
non_sort = pglob->gl_offs;
|
non_sort = pglob->gl_offs;
|
||||||
|
|
||||||
qsort ((__ptr_t) &pglob->gl_pathv[non_sort],
|
qsort ((void *) &pglob->gl_pathv[non_sort],
|
||||||
pglob->gl_pathc - non_sort,
|
pglob->gl_pathc - non_sort,
|
||||||
sizeof (char *), collated_compare);
|
sizeof (char *), collated_compare);
|
||||||
}
|
}
|
||||||
@ -1062,25 +971,22 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
|
|
||||||
/* Free storage allocated in PGLOB by a previous `glob' call. */
|
/* Free storage allocated in PGLOB by a previous `glob' call. */
|
||||||
void
|
void
|
||||||
globfree (pglob)
|
globfree (glob_t *pglob)
|
||||||
register glob_t *pglob;
|
|
||||||
{
|
{
|
||||||
if (pglob->gl_pathv != NULL)
|
if (pglob->gl_pathv != NULL)
|
||||||
{
|
{
|
||||||
register int i;
|
size_t i;
|
||||||
for (i = 0; i < pglob->gl_pathc; ++i)
|
for (i = 0; i < pglob->gl_pathc; ++i)
|
||||||
if (pglob->gl_pathv[i] != NULL)
|
if (pglob->gl_pathv[i] != NULL)
|
||||||
free ((__ptr_t) pglob->gl_pathv[i]);
|
free (pglob->gl_pathv[i]);
|
||||||
free ((__ptr_t) pglob->gl_pathv);
|
free (pglob->gl_pathv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Do a collated comparison of A and B. */
|
/* Do a collated comparison of A and B. */
|
||||||
static int
|
static int
|
||||||
collated_compare (a, b)
|
collated_compare (const void *a, const void *b)
|
||||||
const __ptr_t a;
|
|
||||||
const __ptr_t b;
|
|
||||||
{
|
{
|
||||||
const char *const s1 = *(const char *const * const) a;
|
const char *const s1 = *(const char *const * const) a;
|
||||||
const char *const s2 = *(const char *const * const) b;
|
const char *const s2 = *(const char *const * const) b;
|
||||||
@ -1100,15 +1006,12 @@ collated_compare (a, b)
|
|||||||
A slash is inserted between DIRNAME and each elt of ARRAY,
|
A slash is inserted between DIRNAME and each elt of ARRAY,
|
||||||
unless DIRNAME is just "/". Each old element of ARRAY is freed. */
|
unless DIRNAME is just "/". Each old element of ARRAY is freed. */
|
||||||
static int
|
static int
|
||||||
prefix_array (dirname, array, n)
|
prefix_array (const char *dirname, char **array, size_t n)
|
||||||
const char *dirname;
|
|
||||||
char **array;
|
|
||||||
size_t n;
|
|
||||||
{
|
{
|
||||||
register size_t i;
|
size_t i;
|
||||||
size_t dirlen = strlen (dirname);
|
size_t dirlen = strlen (dirname);
|
||||||
#if defined __MSDOS__ || defined WINDOWS32
|
#if MK_OS_DOS || MK_OS_W32
|
||||||
int sep_char = '/';
|
char sep_char = '/';
|
||||||
# define DIRSEP_CHAR sep_char
|
# define DIRSEP_CHAR sep_char
|
||||||
#else
|
#else
|
||||||
# define DIRSEP_CHAR '/'
|
# define DIRSEP_CHAR '/'
|
||||||
@ -1118,7 +1021,7 @@ prefix_array (dirname, array, n)
|
|||||||
/* DIRNAME is just "/", so normal prepending would get us "//foo".
|
/* DIRNAME is just "/", so normal prepending would get us "//foo".
|
||||||
We want "/foo" instead, so don't prepend any chars from DIRNAME. */
|
We want "/foo" instead, so don't prepend any chars from DIRNAME. */
|
||||||
dirlen = 0;
|
dirlen = 0;
|
||||||
#if defined __MSDOS__ || defined WINDOWS32
|
#if MK_OS_DOS || MK_OS_W32
|
||||||
else if (dirlen > 1)
|
else if (dirlen > 1)
|
||||||
{
|
{
|
||||||
if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':')
|
if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':')
|
||||||
@ -1140,7 +1043,7 @@ prefix_array (dirname, array, n)
|
|||||||
if (new == NULL)
|
if (new == NULL)
|
||||||
{
|
{
|
||||||
while (i > 0)
|
while (i > 0)
|
||||||
free ((__ptr_t) array[--i]);
|
free (array[--i]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1155,7 +1058,7 @@ prefix_array (dirname, array, n)
|
|||||||
new[dirlen] = DIRSEP_CHAR;
|
new[dirlen] = DIRSEP_CHAR;
|
||||||
memcpy (&new[dirlen + 1], array[i], eltlen);
|
memcpy (&new[dirlen + 1], array[i], eltlen);
|
||||||
#endif
|
#endif
|
||||||
free ((__ptr_t) array[i]);
|
free (array[i]);
|
||||||
array[i] = new;
|
array[i] = new;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1164,15 +1067,13 @@ prefix_array (dirname, array, n)
|
|||||||
|
|
||||||
|
|
||||||
/* We must not compile this function twice. */
|
/* We must not compile this function twice. */
|
||||||
#if !defined _LIBC || !defined NO_GLOB_PATTERN_P
|
#if !defined NO_GLOB_PATTERN_P
|
||||||
/* Return nonzero if PATTERN contains any metacharacters.
|
/* Return nonzero if PATTERN contains any metacharacters.
|
||||||
Metacharacters can be quoted with backslashes if QUOTE is nonzero. */
|
Metacharacters can be quoted with backslashes if QUOTE is nonzero. */
|
||||||
int
|
int
|
||||||
__glob_pattern_p (pattern, quote)
|
__glob_pattern_p (const char *pattern, int quote)
|
||||||
const char *pattern;
|
|
||||||
int quote;
|
|
||||||
{
|
{
|
||||||
register const char *p;
|
const char *p;
|
||||||
int open = 0;
|
int open = 0;
|
||||||
|
|
||||||
for (p = pattern; *p != '\0'; ++p)
|
for (p = pattern; *p != '\0'; ++p)
|
||||||
@ -1199,9 +1100,6 @@ __glob_pattern_p (pattern, quote)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
# ifdef _LIBC
|
|
||||||
weak_alias (__glob_pattern_p, glob_pattern_p)
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -1210,14 +1108,10 @@ weak_alias (__glob_pattern_p, glob_pattern_p)
|
|||||||
The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done.
|
The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done.
|
||||||
The GLOB_APPEND flag is assumed to be set (always appends). */
|
The GLOB_APPEND flag is assumed to be set (always appends). */
|
||||||
static int
|
static int
|
||||||
glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
glob_in_dir (const char *pattern, const char *directory, int flags,
|
||||||
const char *pattern;
|
int (*errfunc) (const char *, int), glob_t *pglob)
|
||||||
const char *directory;
|
|
||||||
int flags;
|
|
||||||
int (*errfunc) __P ((const char *, int));
|
|
||||||
glob_t *pglob;
|
|
||||||
{
|
{
|
||||||
__ptr_t stream = NULL;
|
void *stream = NULL;
|
||||||
|
|
||||||
struct globlink
|
struct globlink
|
||||||
{
|
{
|
||||||
@ -1229,7 +1123,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
|||||||
int meta;
|
int meta;
|
||||||
int save;
|
int save;
|
||||||
|
|
||||||
#ifdef VMS
|
#if MK_OS_VMS
|
||||||
if (*directory == 0)
|
if (*directory == 0)
|
||||||
directory = "[]";
|
directory = "[]";
|
||||||
#endif
|
#endif
|
||||||
@ -1261,7 +1155,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
|||||||
# endif
|
# endif
|
||||||
if (((flags & GLOB_ALTDIRFUNC)
|
if (((flags & GLOB_ALTDIRFUNC)
|
||||||
? (*pglob->gl_stat) (fullname, &st)
|
? (*pglob->gl_stat) (fullname, &st)
|
||||||
: __stat (fullname, &st)) == 0)
|
: stat (fullname, &st)) == 0)
|
||||||
/* We found this file to be existing. Now tell the rest
|
/* We found this file to be existing. Now tell the rest
|
||||||
of the function to copy this name into the result. */
|
of the function to copy this name into the result. */
|
||||||
flags |= GLOB_NOCHECK;
|
flags |= GLOB_NOCHECK;
|
||||||
@ -1288,7 +1182,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
|||||||
{
|
{
|
||||||
stream = ((flags & GLOB_ALTDIRFUNC)
|
stream = ((flags & GLOB_ALTDIRFUNC)
|
||||||
? (*pglob->gl_opendir) (directory)
|
? (*pglob->gl_opendir) (directory)
|
||||||
: (__ptr_t) opendir (directory));
|
: (void *) opendir (directory));
|
||||||
if (stream == NULL)
|
if (stream == NULL)
|
||||||
{
|
{
|
||||||
if (errno != ENOTDIR
|
if (errno != ENOTDIR
|
||||||
@ -1325,7 +1219,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
|||||||
/* If we shall match only directories use the information
|
/* If we shall match only directories use the information
|
||||||
provided by the dirent call if possible. */
|
provided by the dirent call if possible. */
|
||||||
if ((flags & GLOB_ONLYDIR)
|
if ((flags & GLOB_ONLYDIR)
|
||||||
&& d->d_type != DT_UNKNOWN && d->d_type != DT_DIR)
|
&& d->d_type != DT_UNKNOWN && d->d_type != DT_DIR && d->d_type != DT_LNK)
|
||||||
continue;
|
continue;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1340,10 +1234,9 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
|||||||
if (new->name == NULL)
|
if (new->name == NULL)
|
||||||
goto memory_error;
|
goto memory_error;
|
||||||
#ifdef HAVE_MEMPCPY
|
#ifdef HAVE_MEMPCPY
|
||||||
*((char *) mempcpy ((__ptr_t) new->name, name, len))
|
*((char *) mempcpy (new->name, name, len)) = '\0';
|
||||||
= '\0';
|
|
||||||
#else
|
#else
|
||||||
memcpy ((__ptr_t) new->name, name, len);
|
memcpy (new->name, name, len);
|
||||||
new->name[len] = '\0';
|
new->name[len] = '\0';
|
||||||
#endif
|
#endif
|
||||||
new->next = names;
|
new->next = names;
|
||||||
@ -1408,7 +1301,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
|||||||
|
|
||||||
memory_error:
|
memory_error:
|
||||||
{
|
{
|
||||||
int save = errno;
|
save = errno;
|
||||||
if (flags & GLOB_ALTDIRFUNC)
|
if (flags & GLOB_ALTDIRFUNC)
|
||||||
(*pglob->gl_closedir) (stream);
|
(*pglob->gl_closedir) (stream);
|
||||||
else
|
else
|
||||||
@ -1418,7 +1311,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
|||||||
while (names != NULL)
|
while (names != NULL)
|
||||||
{
|
{
|
||||||
if (names->name != NULL)
|
if (names->name != NULL)
|
||||||
free ((__ptr_t) names->name);
|
free (names->name);
|
||||||
names = names->next;
|
names = names->next;
|
||||||
}
|
}
|
||||||
return GLOB_NOSPACE;
|
return GLOB_NOSPACE;
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (C) 1991, 1992, 1995, 1996, 1997, 1998 Free Software Foundation,
|
/* Copyright (C) 1991, 1992, 1995, 1996, 1997, 1998, 2023 Free Software
|
||||||
Inc.
|
Foundation, Inc.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Library General Public License as
|
modify it under the terms of the GNU Library General Public License as
|
||||||
@ -12,67 +12,18 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public License
|
You should have received a copy of the GNU Library General Public License
|
||||||
along with this library; see the file COPYING.LIB. If not, write to the Free
|
along with this library; see the file COPYING.LIB.
|
||||||
Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
If not, see <https://www.gnu.org/licenses/>. */
|
||||||
USA. */
|
|
||||||
|
|
||||||
#ifndef _GLOB_H
|
#ifndef _GLOB_H
|
||||||
#define _GLOB_H 1
|
#define _GLOB_H 1
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef __ptr_t
|
|
||||||
#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32
|
|
||||||
# if !defined __GLIBC__
|
|
||||||
# undef __P
|
|
||||||
# undef __PMT
|
|
||||||
# define __P(protos) protos
|
|
||||||
# define __PMT(protos) protos
|
|
||||||
# if !defined __GNUC__ || __GNUC__ < 2
|
|
||||||
# undef __const
|
|
||||||
# define __const const
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# define __ptr_t void *
|
|
||||||
#else /* Not C++ or ANSI C. */
|
|
||||||
# undef __P
|
|
||||||
# undef __PMT
|
|
||||||
# define __P(protos) ()
|
|
||||||
# define __PMT(protos) ()
|
|
||||||
# undef __const
|
|
||||||
# define __const
|
|
||||||
# define __ptr_t char *
|
|
||||||
#endif /* C++ or ANSI C. */
|
|
||||||
|
|
||||||
/* We need `size_t' for the following definitions. */
|
|
||||||
#ifndef __size_t
|
|
||||||
# if defined __FreeBSD__
|
|
||||||
# define __size_t size_t
|
|
||||||
# else
|
|
||||||
# if defined __GNUC__ && __GNUC__ >= 2
|
|
||||||
typedef __SIZE_TYPE__ __size_t;
|
|
||||||
# else
|
|
||||||
/* This is a guess. */
|
|
||||||
/*hb
|
|
||||||
* Conflicts with DECCs already defined type __size_t.
|
|
||||||
* Defining an own type with a name beginning with '__' is no good.
|
|
||||||
* Anyway if DECC is used and __SIZE_T is defined then __size_t is
|
|
||||||
* already defined (and I hope it's exactly the one we need here).
|
|
||||||
*/
|
|
||||||
# if !(defined __DECC && defined __SIZE_T)
|
|
||||||
typedef unsigned long int __size_t;
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
/* The GNU CC stddef.h version defines __size_t as empty. We need a real
|
|
||||||
definition. */
|
|
||||||
# undef __size_t
|
|
||||||
# define __size_t size_t
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Bits set in the FLAGS argument to `glob'. */
|
/* Bits set in the FLAGS argument to `glob'. */
|
||||||
#define GLOB_ERR (1 << 0)/* Return on read errors. */
|
#define GLOB_ERR (1 << 0)/* Return on read errors. */
|
||||||
#define GLOB_MARK (1 << 1)/* Append a slash to each name. */
|
#define GLOB_MARK (1 << 1)/* Append a slash to each name. */
|
||||||
@ -115,26 +66,26 @@ typedef unsigned long int __size_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Structure describing a globbing run. */
|
/* Structure describing a globbing run. */
|
||||||
#if !defined _AMIGA && !defined VMS /* Buggy compiler. */
|
#if !defined _AMIGA && !MK_OS_VMS /* Buggy compiler. */
|
||||||
struct stat;
|
struct stat;
|
||||||
#endif
|
#endif
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
__size_t gl_pathc; /* Count of paths matched by the pattern. */
|
size_t gl_pathc; /* Count of paths matched by the pattern. */
|
||||||
char **gl_pathv; /* List of matched pathnames. */
|
char **gl_pathv; /* List of matched pathnames. */
|
||||||
__size_t gl_offs; /* Slots to reserve in `gl_pathv'. */
|
size_t gl_offs; /* Slots to reserve in `gl_pathv'. */
|
||||||
int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */
|
int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */
|
||||||
|
|
||||||
/* If the GLOB_ALTDIRFUNC flag is set, the following functions
|
/* If the GLOB_ALTDIRFUNC flag is set, the following functions
|
||||||
are used instead of the normal file access functions. */
|
are used instead of the normal file access functions. */
|
||||||
void (*gl_closedir) __PMT ((void *));
|
void (*gl_closedir) (void *);
|
||||||
struct dirent *(*gl_readdir) __PMT ((void *));
|
struct dirent *(*gl_readdir) (void *);
|
||||||
__ptr_t (*gl_opendir) __PMT ((__const char *));
|
void * (*gl_opendir) (const char *);
|
||||||
int (*gl_lstat) __PMT ((__const char *, struct stat *));
|
int (*gl_lstat) (const char *, struct stat *);
|
||||||
#if defined(VMS) && defined(__DECC) && !defined(_POSIX_C_SOURCE)
|
#if MK_OS_VMS && defined(__DECC) && !defined(_POSIX_C_SOURCE)
|
||||||
int (*gl_stat) __PMT ((__const char *, struct stat *, ...));
|
int (*gl_stat) (const char *, struct stat *, ...);
|
||||||
#else
|
#else
|
||||||
int (*gl_stat) __PMT ((__const char *, struct stat *));
|
int (*gl_stat) (const char *, struct stat *);
|
||||||
#endif
|
#endif
|
||||||
} glob_t;
|
} glob_t;
|
||||||
|
|
||||||
@ -142,18 +93,18 @@ typedef struct
|
|||||||
struct stat64;
|
struct stat64;
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
__size_t gl_pathc;
|
size_t gl_pathc;
|
||||||
char **gl_pathv;
|
char **gl_pathv;
|
||||||
__size_t gl_offs;
|
size_t gl_offs;
|
||||||
int gl_flags;
|
int gl_flags;
|
||||||
|
|
||||||
/* If the GLOB_ALTDIRFUNC flag is set, the following functions
|
/* If the GLOB_ALTDIRFUNC flag is set, the following functions
|
||||||
are used instead of the normal file access functions. */
|
are used instead of the normal file access functions. */
|
||||||
void (*gl_closedir) __PMT ((void *));
|
void (*gl_closedir) (void *);
|
||||||
struct dirent64 *(*gl_readdir) __PMT ((void *));
|
struct dirent64 *(*gl_readdir) (void *);
|
||||||
__ptr_t (*gl_opendir) __PMT ((__const char *));
|
void * (*gl_opendir) (const char *);
|
||||||
int (*gl_lstat) __PMT ((__const char *, struct stat64 *));
|
int (*gl_lstat) (const char *, struct stat64 *);
|
||||||
int (*gl_stat) __PMT ((__const char *, struct stat64 *));
|
int (*gl_stat) (const char *, struct stat64 *);
|
||||||
} glob64_t;
|
} glob64_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -162,11 +113,11 @@ typedef struct
|
|||||||
# define globfree globfree64
|
# define globfree globfree64
|
||||||
#else
|
#else
|
||||||
# ifdef _LARGEFILE64_SOURCE
|
# ifdef _LARGEFILE64_SOURCE
|
||||||
extern int glob64 __P ((__const char *__pattern, int __flags,
|
extern int glob64 (const char *pattern, int flags,
|
||||||
int (*__errfunc) (__const char *, int),
|
int (*errfunc) (const char *, int),
|
||||||
glob64_t *__pglob));
|
glob64_t *pglob);
|
||||||
|
|
||||||
extern void globfree64 __P ((glob64_t *__pglob));
|
extern void globfree64 (glob64_t *pglob);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -179,18 +130,18 @@ extern void globfree64 __P ((glob64_t *__pglob));
|
|||||||
If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
|
If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
|
||||||
Otherwise, `glob' returns zero. */
|
Otherwise, `glob' returns zero. */
|
||||||
#if _FILE_OFFSET_BITS != 64 || __GNUC__ < 2
|
#if _FILE_OFFSET_BITS != 64 || __GNUC__ < 2
|
||||||
extern int glob __P ((__const char *__pattern, int __flags,
|
extern int glob (const char *pattern, int flags,
|
||||||
int (*__errfunc) (__const char *, int),
|
int (*errfunc) (const char *, int),
|
||||||
glob_t *__pglob));
|
glob_t *pglob);
|
||||||
|
|
||||||
/* Free storage allocated in PGLOB by a previous `glob' call. */
|
/* Free storage allocated in PGLOB by a previous `glob' call. */
|
||||||
extern void globfree __P ((glob_t *__pglob));
|
extern void globfree (glob_t *pglob);
|
||||||
#else
|
#else
|
||||||
extern int glob __P ((__const char *__pattern, int __flags,
|
extern int glob (const char *pattern, int flags,
|
||||||
int (*__errfunc) (__const char *, int),
|
int (*errfunc) (const char *, int),
|
||||||
glob_t *__pglob)) __asm__ ("glob64");
|
glob_t *pglob) __asm__ ("glob64");
|
||||||
|
|
||||||
extern void globfree __P ((glob_t *__pglob)) __asm__ ("globfree64");
|
extern void globfree (glob_t *pglob) __asm__ ("globfree64");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -200,7 +151,7 @@ extern void globfree __P ((glob_t *__pglob)) __asm__ ("globfree64");
|
|||||||
|
|
||||||
This function is not part of the interface specified by POSIX.2
|
This function is not part of the interface specified by POSIX.2
|
||||||
but several programs want to use it. */
|
but several programs want to use it. */
|
||||||
extern int glob_pattern_p __P ((__const char *__pattern, int __quote));
|
extern int glob_pattern_p (const char *pattern, int quote);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
@ -1,7 +1,7 @@
|
|||||||
dnl acinclude.m4 -- Extra macros needed for GNU make.
|
dnl acinclude.m4 -- Extra macros needed for GNU Make.
|
||||||
dnl
|
dnl
|
||||||
dnl Automake will incorporate this into its generated aclocal.m4.
|
dnl Automake will incorporate this into its generated aclocal.m4.
|
||||||
dnl Copyright (C) 1998-2013 Free Software Foundation, Inc.
|
dnl Copyright (C) 1998-2024 Free Software Foundation, Inc.
|
||||||
dnl This file is part of GNU Make.
|
dnl This file is part of GNU Make.
|
||||||
dnl
|
dnl
|
||||||
dnl GNU Make is free software; you can redistribute it and/or modify it under
|
dnl GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -15,7 +15,7 @@ dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for.
|
|||||||
dnl more details.
|
dnl more details.
|
||||||
dnl
|
dnl
|
||||||
dnl You should have received a copy of the GNU General Public License along
|
dnl You should have received a copy of the GNU General Public License along
|
||||||
dnl with this program. If not, see <http://www.gnu.org/licenses/>.
|
dnl with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
dnl ---------------------------------------------------------------------------
|
dnl ---------------------------------------------------------------------------
|
||||||
dnl Got this from the lynx 2.8 distribution.
|
dnl Got this from the lynx 2.8 distribution.
|
@ -1,7 +1,7 @@
|
|||||||
# Test if the system uses DOS-style pathnames (drive specs and backslashes)
|
# Test if the system uses DOS-style pathnames (drive specs and backslashes)
|
||||||
# By Paul Smith <psmith@gnu.org>. Based on dos.m4 by Jim Meyering.
|
# By Paul Smith <psmith@gnu.org>. Based on dos.m4 by Jim Meyering.
|
||||||
#
|
#
|
||||||
# Copyright (C) 1993-2013 Free Software Foundation, Inc.
|
# Copyright (C) 1993-2024 Free Software Foundation, Inc.
|
||||||
# This file is part of GNU Make.
|
# This file is part of GNU Make.
|
||||||
#
|
#
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -15,7 +15,7 @@
|
|||||||
# details.
|
# details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
AC_DEFUN([pds_AC_DOS_PATHS], [
|
AC_DEFUN([pds_AC_DOS_PATHS], [
|
||||||
AC_CACHE_CHECK([whether system uses MSDOS-style paths], [ac_cv_dos_paths], [
|
AC_CACHE_CHECK([whether system uses MSDOS-style paths], [ac_cv_dos_paths], [
|
216
gl/m4/getloadavg.m4
Normal file
216
gl/m4/getloadavg.m4
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
# Check for getloadavg.
|
||||||
|
|
||||||
|
# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2024 Free
|
||||||
|
# Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
#serial 10
|
||||||
|
|
||||||
|
# Autoconf defines AC_FUNC_GETLOADAVG, but that is obsolescent.
|
||||||
|
# New applications should use gl_GETLOADAVG instead.
|
||||||
|
|
||||||
|
# gl_GETLOADAVG
|
||||||
|
# -------------
|
||||||
|
AC_DEFUN([gl_GETLOADAVG],
|
||||||
|
[AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
|
||||||
|
|
||||||
|
# Persuade glibc <stdlib.h> to declare getloadavg().
|
||||||
|
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
|
||||||
|
|
||||||
|
gl_save_LIBS=$LIBS
|
||||||
|
|
||||||
|
# getloadavg is present in libc on glibc >= 2.2, Mac OS X, FreeBSD >= 2.0,
|
||||||
|
# NetBSD >= 0.9, OpenBSD >= 2.0, Solaris >= 7.
|
||||||
|
HAVE_GETLOADAVG=1
|
||||||
|
AC_CHECK_FUNC([getloadavg], [],
|
||||||
|
[gl_func_getloadavg_done=no
|
||||||
|
|
||||||
|
# Some systems with -lutil have (and need) -lkvm as well, some do not.
|
||||||
|
# On Solaris, -lkvm requires nlist from -lelf, so check that first
|
||||||
|
# to get the right answer into the cache.
|
||||||
|
# For kstat on solaris, we need to test for libelf and libkvm to force the
|
||||||
|
# definition of SVR4 below.
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
AC_CHECK_LIB([elf], [elf_begin], [LIBS="-lelf $LIBS"])
|
||||||
|
AC_CHECK_LIB([kvm], [kvm_open], [LIBS="-lkvm $LIBS"])
|
||||||
|
# Check for the 4.4BSD definition of getloadavg.
|
||||||
|
AC_CHECK_LIB([util], [getloadavg],
|
||||||
|
[LIBS="-lutil $LIBS" gl_func_getloadavg_done=yes])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
# There is a commonly available library for RS/6000 AIX.
|
||||||
|
# Since it is not a standard part of AIX, it might be installed locally.
|
||||||
|
gl_getloadavg_LIBS=$LIBS
|
||||||
|
if test $cross_compiling != yes; then
|
||||||
|
LIBS="-L/usr/local/lib $LIBS"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB([getloadavg], [getloadavg],
|
||||||
|
[LIBS="-lgetloadavg $LIBS" gl_func_getloadavg_done=yes],
|
||||||
|
[LIBS=$gl_getloadavg_LIBS])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set up the replacement function if necessary.
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
HAVE_GETLOADAVG=0
|
||||||
|
|
||||||
|
# Solaris has libkstat which does not require root.
|
||||||
|
AC_CHECK_LIB([kstat], [kstat_open])
|
||||||
|
test $ac_cv_lib_kstat_kstat_open = yes && gl_func_getloadavg_done=yes
|
||||||
|
|
||||||
|
# AIX has libperfstat which does not require root
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
AC_CHECK_LIB([perfstat], [perfstat_cpu_total])
|
||||||
|
test $ac_cv_lib_perfstat_perfstat_cpu_total = yes && gl_func_getloadavg_done=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
AC_CHECK_HEADER([sys/dg_sys_info.h],
|
||||||
|
[gl_func_getloadavg_done=yes
|
||||||
|
AC_DEFINE([DGUX], [1], [Define to 1 for DGUX with <sys/dg_sys_info.h>.])
|
||||||
|
AC_CHECK_LIB([dgc], [dg_sys_info])])
|
||||||
|
fi
|
||||||
|
fi])
|
||||||
|
|
||||||
|
if test "x$gl_save_LIBS" = x; then
|
||||||
|
GETLOADAVG_LIBS=$LIBS
|
||||||
|
else
|
||||||
|
GETLOADAVG_LIBS=`echo "$LIBS" | sed "s!$gl_save_LIBS!!"`
|
||||||
|
fi
|
||||||
|
LIBS=$gl_save_LIBS
|
||||||
|
|
||||||
|
AC_SUBST([GETLOADAVG_LIBS])dnl
|
||||||
|
|
||||||
|
# Test whether the system declares getloadavg. Solaris has the function
|
||||||
|
# but declares it in <sys/loadavg.h>, not <stdlib.h>.
|
||||||
|
AC_CHECK_HEADERS([sys/loadavg.h])
|
||||||
|
if test $ac_cv_header_sys_loadavg_h = yes; then
|
||||||
|
HAVE_SYS_LOADAVG_H=1
|
||||||
|
else
|
||||||
|
HAVE_SYS_LOADAVG_H=0
|
||||||
|
fi
|
||||||
|
AC_CHECK_DECL([getloadavg], [], [HAVE_DECL_GETLOADAVG=0],
|
||||||
|
[[#if HAVE_SYS_LOADAVG_H
|
||||||
|
/* OpenIndiana has a bug: <sys/time.h> must be included before
|
||||||
|
<sys/loadavg.h>. */
|
||||||
|
# include <sys/time.h>
|
||||||
|
# include <sys/loadavg.h>
|
||||||
|
#endif
|
||||||
|
#include <stdlib.h>]])
|
||||||
|
])# gl_GETLOADAVG
|
||||||
|
|
||||||
|
|
||||||
|
# gl_PREREQ_GETLOADAVG
|
||||||
|
# --------------------
|
||||||
|
# Set up the AC_LIBOBJ replacement of 'getloadavg'.
|
||||||
|
AC_DEFUN([gl_PREREQ_GETLOADAVG],
|
||||||
|
[
|
||||||
|
# Figure out what our getloadavg.c needs.
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS_ONCE([sys/param.h unistd.h])
|
||||||
|
|
||||||
|
# On HPUX9, an unprivileged user can get load averages this way.
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
AC_CHECK_FUNCS([pstat_getdynamic], [gl_func_getloadavg_done=yes])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it
|
||||||
|
# uses stabs), but it is still SVR4. We cannot check for <elf.h> because
|
||||||
|
# Irix 4.0.5F has the header but not the library.
|
||||||
|
if test $gl_func_getloadavg_done = no && test "$ac_cv_lib_elf_elf_begin" = yes \
|
||||||
|
&& test "$ac_cv_lib_kvm_kvm_open" = yes; then
|
||||||
|
gl_func_getloadavg_done=yes
|
||||||
|
AC_DEFINE([SVR4], [1], [Define to 1 on System V Release 4.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
AC_CHECK_HEADER([inq_stats/cpustats.h],
|
||||||
|
[gl_func_getloadavg_done=yes
|
||||||
|
AC_DEFINE([UMAX], [1], [Define to 1 for Encore UMAX.])
|
||||||
|
AC_DEFINE([UMAX4_3], [1],
|
||||||
|
[Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h>
|
||||||
|
instead of <sys/cpustats.h>.])])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
AC_CHECK_HEADER([sys/cpustats.h],
|
||||||
|
[gl_func_getloadavg_done=yes; AC_DEFINE([UMAX])])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $gl_func_getloadavg_done = no; then
|
||||||
|
AC_CHECK_HEADERS([mach/mach.h])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS([nlist.h],
|
||||||
|
[AC_CHECK_MEMBERS([struct nlist.n_un.n_name],
|
||||||
|
[], [],
|
||||||
|
[#include <nlist.h>])
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <nlist.h>]],
|
||||||
|
[[struct nlist x;
|
||||||
|
#ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME
|
||||||
|
x.n_un.n_name = "";
|
||||||
|
#else
|
||||||
|
x.n_name = "";
|
||||||
|
#endif]])],
|
||||||
|
[AC_DEFINE([N_NAME_POINTER], [1],
|
||||||
|
[Define to 1 if the nlist n_name member is a pointer])])
|
||||||
|
])dnl
|
||||||
|
])# gl_PREREQ_GETLOADAVG
|
||||||
|
|
||||||
|
# ---- GNU Make
|
||||||
|
# These macros are imported from stdlib which we don't want to include
|
||||||
|
# Only the getloadavg content is imported.
|
||||||
|
|
||||||
|
AC_DEFUN_ONCE([gl_STDLIB_H],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
|
||||||
|
|
||||||
|
dnl Check for declarations of anything we want to poison if the
|
||||||
|
dnl corresponding gnulib module is not in use, and which is not
|
||||||
|
dnl guaranteed by C89.
|
||||||
|
gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
|
||||||
|
#if HAVE_SYS_LOADAVG_H
|
||||||
|
/* OpenIndiana has a bug: <sys/time.h> must be included before
|
||||||
|
<sys/loadavg.h>. */
|
||||||
|
# include <sys/time.h>
|
||||||
|
# include <sys/loadavg.h>
|
||||||
|
#endif
|
||||||
|
#if HAVE_RANDOM_H
|
||||||
|
# include <random.h>
|
||||||
|
#endif
|
||||||
|
]], [getloadavg])
|
||||||
|
])
|
||||||
|
|
||||||
|
# gl_STDLIB_MODULE_INDICATOR([modulename])
|
||||||
|
# sets the shell variable that indicates the presence of the given module
|
||||||
|
# to a C preprocessor expression that will evaluate to 1.
|
||||||
|
# This macro invocation must not occur in macros that are AC_REQUIREd.
|
||||||
|
AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
|
||||||
|
[
|
||||||
|
dnl Ensure to expand the default settings once only.
|
||||||
|
gl_STDLIB_H_REQUIRE_DEFAULTS
|
||||||
|
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
|
||||||
|
dnl Define it also as a C macro, for the benefit of the unit tests.
|
||||||
|
gl_MODULE_INDICATOR_FOR_TESTS([$1])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Initializes the default values for AC_SUBSTed shell variables.
|
||||||
|
# This macro must not be AC_REQUIREd. It must only be invoked, and only
|
||||||
|
# outside of macros or in macros that are not AC_REQUIREd.
|
||||||
|
AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS],
|
||||||
|
[
|
||||||
|
m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS], [
|
||||||
|
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG])
|
||||||
|
])
|
||||||
|
m4_require(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS])
|
||||||
|
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STDLIB_H_DEFAULTS],
|
||||||
|
[
|
||||||
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
|
HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
|
||||||
|
])
|
24
gl/modules/concat-filename
Normal file
24
gl/modules/concat-filename
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
Description:
|
||||||
|
Construct a full filename by concatenating a directory name, a relative
|
||||||
|
filename, and a suffix.
|
||||||
|
|
||||||
|
Files:
|
||||||
|
lib/concat-filename.h
|
||||||
|
lib/concat-filename.c
|
||||||
|
|
||||||
|
Depends-on:
|
||||||
|
filename
|
||||||
|
|
||||||
|
configure.ac:
|
||||||
|
|
||||||
|
Makefile.am:
|
||||||
|
lib_SOURCES += concat-filename.c
|
||||||
|
|
||||||
|
Include:
|
||||||
|
"concat-filename.h"
|
||||||
|
|
||||||
|
License:
|
||||||
|
LGPLv2+
|
||||||
|
|
||||||
|
Maintainer:
|
||||||
|
all
|
28
gl/modules/findprog-in
Normal file
28
gl/modules/findprog-in
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
Description:
|
||||||
|
Locating a program in a given path.
|
||||||
|
|
||||||
|
Files:
|
||||||
|
lib/findprog.h
|
||||||
|
lib/findprog-in.c
|
||||||
|
m4/findprog-in.m4
|
||||||
|
m4/eaccess.m4
|
||||||
|
|
||||||
|
Depends-on:
|
||||||
|
stdbool
|
||||||
|
filename
|
||||||
|
concat-filename
|
||||||
|
|
||||||
|
configure.ac:
|
||||||
|
gl_FINDPROG_IN
|
||||||
|
|
||||||
|
Makefile.am:
|
||||||
|
lib_SOURCES += findprog.h findprog-in.c
|
||||||
|
|
||||||
|
Include:
|
||||||
|
"findprog.h"
|
||||||
|
|
||||||
|
License:
|
||||||
|
LGPLv2+
|
||||||
|
|
||||||
|
Maintainer:
|
||||||
|
all
|
40
gl/modules/getloadavg
Normal file
40
gl/modules/getloadavg
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
Description:
|
||||||
|
Return the current system load averages.
|
||||||
|
|
||||||
|
Files:
|
||||||
|
lib/getloadavg.c
|
||||||
|
m4/getloadavg.m4
|
||||||
|
|
||||||
|
Depends-on:
|
||||||
|
snippet/warn-on-use
|
||||||
|
extensions
|
||||||
|
intprops [test $HAVE_GETLOADAVG = 0]
|
||||||
|
stdbool [test $HAVE_GETLOADAVG = 0]
|
||||||
|
|
||||||
|
configure.ac:
|
||||||
|
gl_STDLIB_H
|
||||||
|
gl_STDLIB_H_REQUIRE_DEFAULTS
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
gl_GETLOADAVG
|
||||||
|
gl_CONDITIONAL([GL_COND_OBJ_GETLOADAVG], [test $HAVE_GETLOADAVG = 0])
|
||||||
|
AM_COND_IF([GL_COND_OBJ_GETLOADAVG], [
|
||||||
|
gl_PREREQ_GETLOADAVG
|
||||||
|
])
|
||||||
|
gl_STDLIB_MODULE_INDICATOR([getloadavg])
|
||||||
|
|
||||||
|
Makefile.am:
|
||||||
|
if GL_COND_OBJ_GETLOADAVG
|
||||||
|
lib_SOURCES += getloadavg.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
Include:
|
||||||
|
<stdlib.h>
|
||||||
|
|
||||||
|
Link:
|
||||||
|
$(GETLOADAVG_LIBS)
|
||||||
|
|
||||||
|
License:
|
||||||
|
GPL
|
||||||
|
|
||||||
|
Maintainer:
|
||||||
|
Jim Meyering
|
112
gl/modules/make-glob
Normal file
112
gl/modules/make-glob
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
Description:
|
||||||
|
GNU Make version of fnmatch()/glob() functions. This is a holdover from
|
||||||
|
a very old version of the globbing library.
|
||||||
|
|
||||||
|
Files:
|
||||||
|
lib/fnmatch.c
|
||||||
|
lib/fnmatch.in.h
|
||||||
|
lib/glob.c
|
||||||
|
lib/glob.in.h
|
||||||
|
|
||||||
|
configure.ac:
|
||||||
|
# Check the system to see if it provides GNU glob. If not, use our
|
||||||
|
# local version. Also avoid versions of glibc which have symlink bug
|
||||||
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=866 (test from gnulib)
|
||||||
|
AC_CACHE_CHECK([if system libc has working GNU glob], [make_cv_sys_gnu_glob],[
|
||||||
|
if ln -s conf-doesntexist conf$$-globtest 2>/dev/null; then
|
||||||
|
make_check_symlink=yes
|
||||||
|
else
|
||||||
|
make_check_symlink=no
|
||||||
|
fi
|
||||||
|
if test $cross_compiling = yes || test $make_check_symlink = no; then
|
||||||
|
# When cross-compiling or without symlink support, check the version
|
||||||
|
AC_COMPILE_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[#include <features.h>
|
||||||
|
#include <gnu-versions.h>
|
||||||
|
#include <glob.h>
|
||||||
|
#include <fnmatch.h>
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
#if _GNU_GLOB_INTERFACE_VERSION == 0
|
||||||
|
GNU glob not available in libc
|
||||||
|
#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 27)
|
||||||
|
GNU glob in libc has dangling symlink bug
|
||||||
|
#endif
|
||||||
|
]])],
|
||||||
|
[make_cv_sys_gnu_glob=yes],
|
||||||
|
[make_cv_sys_gnu_glob=no])
|
||||||
|
else
|
||||||
|
# Check for GNU glob, and that it handles dangling symlinks properly
|
||||||
|
AC_RUN_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[#include <features.h>
|
||||||
|
#include <gnu-versions.h>
|
||||||
|
#include <glob.h>
|
||||||
|
#include <fnmatch.h>
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
#if _GNU_GLOB_INTERFACE_VERSION == 0
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
|
glob_t found;
|
||||||
|
if (glob ("conf*-globtest", 0, 0, &found) == GLOB_NOMATCH)
|
||||||
|
return 1;
|
||||||
|
globfree (&found);
|
||||||
|
#endif
|
||||||
|
]])],
|
||||||
|
[make_cv_sys_gnu_glob=yes],
|
||||||
|
[make_cv_sys_gnu_glob=no],
|
||||||
|
[dnl We don't get here.
|
||||||
|
:
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
test $make_check_symlink = no || rm -f conf$$-globtest
|
||||||
|
])
|
||||||
|
|
||||||
|
# Tell automake about this, so it can build the right .c files.
|
||||||
|
AM_CONDITIONAL([USE_SYSTEM_GLOB], [test "$make_cv_sys_gnu_glob" = yes])
|
||||||
|
|
||||||
|
# Tell build.sh which to use
|
||||||
|
USE_SYSTEM_GLOB="$make_cv_sys_gnu_glob"
|
||||||
|
AC_SUBST([USE_SYSTEM_GLOB])
|
||||||
|
|
||||||
|
Makefile.am:
|
||||||
|
if !USE_SYSTEM_GLOB
|
||||||
|
libgnu_a_SOURCES += fnmatch.c
|
||||||
|
|
||||||
|
BUILT_SOURCES += fnmatch.h
|
||||||
|
|
||||||
|
fnmatch.h: fnmatch.in.h $(top_builddir)/config.status
|
||||||
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
cat $(srcdir)/fnmatch.in.h; \
|
||||||
|
} > $@-t && \
|
||||||
|
mv -f $@-t $@
|
||||||
|
|
||||||
|
MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
|
||||||
|
|
||||||
|
libgnu_a_SOURCES += glob.c
|
||||||
|
|
||||||
|
BUILT_SOURCES += glob.h
|
||||||
|
|
||||||
|
glob.h: glob.in.h $(top_builddir)/config.status
|
||||||
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
cat $(srcdir)/glob.in.h; \
|
||||||
|
} > $@-t && \
|
||||||
|
mv -f $@-t $@
|
||||||
|
|
||||||
|
MOSTLYCLEANFILES += glob.h glob.h-t
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST += fnmatch.in.h glob.in.h
|
||||||
|
|
||||||
|
Include:
|
||||||
|
<glob.h>
|
||||||
|
|
||||||
|
License:
|
||||||
|
LGPLv2+
|
||||||
|
|
||||||
|
Maintainer:
|
||||||
|
all, glibc
|
16
gl/modules/make-macros
Normal file
16
gl/modules/make-macros
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Description:
|
||||||
|
Install m4 macros for GNU Make.
|
||||||
|
|
||||||
|
Files:
|
||||||
|
m4/acinclude.m4
|
||||||
|
m4/dospaths.m4
|
||||||
|
|
||||||
|
configure.ac:
|
||||||
|
# Check for DOS-style pathnames.
|
||||||
|
pds_AC_DOS_PATHS
|
||||||
|
|
||||||
|
License:
|
||||||
|
GPLv3+
|
||||||
|
|
||||||
|
Maintainer:
|
||||||
|
gnumake
|
481
glob/COPYING.LIB
481
glob/COPYING.LIB
@ -1,481 +0,0 @@
|
|||||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
[This is the first released version of the library GPL. It is
|
|
||||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Library General Public License, applies to some
|
|
||||||
specially designated Free Software Foundation software, and to any
|
|
||||||
other libraries whose authors decide to use it. You can use it for
|
|
||||||
your libraries, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it
|
|
||||||
in new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if
|
|
||||||
you distribute copies of the library, or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
|
||||||
you. You must make sure that they, too, receive or can get the source
|
|
||||||
code. If you link a program with the library, you must provide
|
|
||||||
complete object files to the recipients so that they can relink them
|
|
||||||
with the library, after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
Our method of protecting your rights has two steps: (1) copyright
|
|
||||||
the library, and (2) offer you this license which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
Also, for each distributor's protection, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
library. If the library is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original
|
|
||||||
version, so that any problems introduced by others will not reflect on
|
|
||||||
the original authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that companies distributing free
|
|
||||||
software will individually obtain patent licenses, thus in effect
|
|
||||||
transforming the program into proprietary software. To prevent this,
|
|
||||||
we have made it clear that any patent must be licensed for everyone's
|
|
||||||
free use or not licensed at all.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the ordinary
|
|
||||||
GNU General Public License, which was designed for utility programs. This
|
|
||||||
license, the GNU Library General Public License, applies to certain
|
|
||||||
designated libraries. This license is quite different from the ordinary
|
|
||||||
one; be sure to read it in full, and don't assume that anything in it is
|
|
||||||
the same as in the ordinary license.
|
|
||||||
|
|
||||||
The reason we have a separate public license for some libraries is that
|
|
||||||
they blur the distinction we usually make between modifying or adding to a
|
|
||||||
program and simply using it. Linking a program with a library, without
|
|
||||||
changing the library, is in some sense simply using the library, and is
|
|
||||||
analogous to running a utility program or application program. However, in
|
|
||||||
a textual and legal sense, the linked executable is a combined work, a
|
|
||||||
derivative of the original library, and the ordinary General Public License
|
|
||||||
treats it as such.
|
|
||||||
|
|
||||||
Because of this blurred distinction, using the ordinary General
|
|
||||||
Public License for libraries did not effectively promote software
|
|
||||||
sharing, because most developers did not use the libraries. We
|
|
||||||
concluded that weaker conditions might promote sharing better.
|
|
||||||
|
|
||||||
However, unrestricted linking of non-free programs would deprive the
|
|
||||||
users of those programs of all benefit from the free status of the
|
|
||||||
libraries themselves. This Library General Public License is intended to
|
|
||||||
permit developers of non-free programs to use free libraries, while
|
|
||||||
preserving your freedom as a user of such programs to change the free
|
|
||||||
libraries that are incorporated in them. (We have not seen how to achieve
|
|
||||||
this as regards changes in header files, but we have achieved it as regards
|
|
||||||
changes in the actual functions of the Library.) The hope is that this
|
|
||||||
will lead to faster development of free libraries.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, while the latter only
|
|
||||||
works together with the library.
|
|
||||||
|
|
||||||
Note that it is possible for a library to be covered by the ordinary
|
|
||||||
General Public License rather than by this special one.
|
|
||||||
|
|
||||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library which
|
|
||||||
contains a notice placed by the copyright holder or other authorized
|
|
||||||
party saying it may be distributed under the terms of this Library
|
|
||||||
General Public License (also called "this License"). Each licensee is
|
|
||||||
addressed as "you".
|
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
|
||||||
prepared so as to be conveniently linked with application programs
|
|
||||||
(which use some of those functions and data) to form executables.
|
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
|
||||||
which has been distributed under these terms. A "work based on the
|
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or translated
|
|
||||||
straightforwardly into another language. (Hereinafter, translation is
|
|
||||||
included without limitation in the term "modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For a library, complete source code means
|
|
||||||
all the source code for all modules it contains, plus any associated
|
|
||||||
interface definition files, plus the scripts used to control compilation
|
|
||||||
and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running a program using the Library is not restricted, and output from
|
|
||||||
such a program is covered only if its contents constitute a work based
|
|
||||||
on the Library (independent of the use of the Library in a tool for
|
|
||||||
writing it). Whether that is true depends on what the Library does
|
|
||||||
and what the program that uses the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
|
||||||
complete source code as you receive it, in any medium, provided that
|
|
||||||
you conspicuously and appropriately publish on each copy an
|
|
||||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
|
||||||
all the notices that refer to this License and to the absence of any
|
|
||||||
warranty; and distribute a copy of this License along with the
|
|
||||||
Library.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange for a
|
|
||||||
fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b) You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c) You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d) If a facility in the modified Library refers to a function or a
|
|
||||||
table of data to be supplied by an application program that uses
|
|
||||||
the facility, other than as an argument passed when the facility
|
|
||||||
is invoked, then you must make a good faith effort to ensure that,
|
|
||||||
in the event an application does not supply such function or
|
|
||||||
table, the facility still operates, and performs whatever part of
|
|
||||||
its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots has
|
|
||||||
a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function must
|
|
||||||
be optional: if the application does not supply it, the square
|
|
||||||
root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Library,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Library, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote
|
|
||||||
it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Library
|
|
||||||
with the Library (or with a work based on the Library) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library. To do
|
|
||||||
this, you must alter all the notices that refer to this License, so
|
|
||||||
that they refer to the ordinary GNU General Public License, version 2,
|
|
||||||
instead of to this License. (If a newer version than version 2 of the
|
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
|
||||||
that version instead if you wish.) Do not make any other change in
|
|
||||||
these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
|
||||||
subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable form
|
|
||||||
under the terms of Sections 1 and 2 above provided that you accompany
|
|
||||||
it with the complete corresponding machine-readable source code, which
|
|
||||||
must be distributed under the terms of Sections 1 and 2 above on a
|
|
||||||
medium customarily used for software interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy the
|
|
||||||
source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being compiled or
|
|
||||||
linked with it, is called a "work that uses the Library". Such a
|
|
||||||
work, in isolation, is not a derivative work of the Library, and
|
|
||||||
therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because it
|
|
||||||
contains portions of the Library), rather than a "work that uses the
|
|
||||||
library". The executable is therefore covered by this License.
|
|
||||||
Section 6 states terms for distribution of such executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header file
|
|
||||||
that is part of the Library, the object code for the work may be a
|
|
||||||
derivative work of the Library even though the source code is not.
|
|
||||||
Whether this is true is especially significant if the work can be
|
|
||||||
linked without the Library, or if the work is itself a library. The
|
|
||||||
threshold for this to be true is not precisely defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a derivative
|
|
||||||
work. (Executables containing this object code plus portions of the
|
|
||||||
Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section 6.
|
|
||||||
Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also compile or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered by
|
|
||||||
this License. You must supply a copy of this License. If the work
|
|
||||||
during execution displays copyright notices, you must include the
|
|
||||||
copyright notice for the Library among them, as well as a reference
|
|
||||||
directing the user to the copy of this License. Also, you must do one
|
|
||||||
of these things:
|
|
||||||
|
|
||||||
a) Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including whatever
|
|
||||||
changes were used in the work (which must be distributed under
|
|
||||||
Sections 1 and 2 above); and, if the work is an executable linked
|
|
||||||
with the Library, with the complete machine-readable "work that
|
|
||||||
uses the Library", as object code and/or source code, so that the
|
|
||||||
user can modify the Library and then relink to produce a modified
|
|
||||||
executable containing the modified Library. (It is understood
|
|
||||||
that the user who changes the contents of definitions files in the
|
|
||||||
Library will not necessarily be able to recompile the application
|
|
||||||
to use the modified definitions.)
|
|
||||||
|
|
||||||
b) Accompany the work with a written offer, valid for at
|
|
||||||
least three years, to give the same user the materials
|
|
||||||
specified in Subsection 6a, above, for a charge no more
|
|
||||||
than the cost of performing this distribution.
|
|
||||||
|
|
||||||
c) If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the above
|
|
||||||
specified materials from the same place.
|
|
||||||
|
|
||||||
d) Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special exception,
|
|
||||||
the source code distributed need not include anything that is normally
|
|
||||||
distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
|
||||||
use both them and the Library together in an executable that you
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other library
|
|
||||||
facilities not covered by this License, and distribute such a combined
|
|
||||||
library, provided that the separate distribution of the work based on
|
|
||||||
the Library and of the other library facilities is otherwise
|
|
||||||
permitted, and provided that you do these two things:
|
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b) Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute
|
|
||||||
the Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate your
|
|
||||||
rights under this License. However, parties who have received copies,
|
|
||||||
or rights, from you under this License will not have their licenses
|
|
||||||
terminated so long as such parties remain in full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Library or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Library (or any work based on the
|
|
||||||
Library), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the Library
|
|
||||||
subject to these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties to
|
|
||||||
this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Library at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Library by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under any
|
|
||||||
particular circumstance, the balance of the section is intended to apply,
|
|
||||||
and the section as a whole is intended to apply in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Library under this License may add
|
|
||||||
an explicit geographical distribution limitation excluding those countries,
|
|
||||||
so that distribution is permitted only in or among countries not thus
|
|
||||||
excluded. In such case, this License incorporates the limitation as if
|
|
||||||
written in the body of this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Library General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Library
|
|
||||||
specifies a version number of this License which applies to it and
|
|
||||||
"any later version", you have the option of following the terms and
|
|
||||||
conditions either of that version or of any later version published by
|
|
||||||
the Free Software Foundation. If the Library does not specify a
|
|
||||||
license version number, you may choose any version ever published by
|
|
||||||
the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free status
|
|
||||||
of all derivatives of our free software and of promoting the sharing
|
|
||||||
and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
||||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
|
||||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
|
||||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
|
||||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
|
||||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
|
||||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
|
||||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
||||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
||||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
||||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
||||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
||||||
DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
Appendix: How to Apply These Terms to Your New Libraries
|
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
|
||||||
possible use to the public, we recommend making it free software that
|
|
||||||
everyone can redistribute and change. You can do so by permitting
|
|
||||||
redistribution under these terms (or, alternatively, under the terms of the
|
|
||||||
ordinary General Public License).
|
|
||||||
|
|
||||||
To apply these terms, attach the following notices to the library. It is
|
|
||||||
safest to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least the
|
|
||||||
"copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the library's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this library; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
|
||||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1990
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
That's all there is to it!
|
|
185
glob/ChangeLog
185
glob/ChangeLog
@ -1,185 +0,0 @@
|
|||||||
2008-09-28 Juan Manuel Guerrero <juan.guerrero@gmx.de>
|
|
||||||
|
|
||||||
* glob.c (my_realloc) [__DJGPP__]: Don't define, and don't
|
|
||||||
redefine realloc to call it, since the DJGPP's realloc handles
|
|
||||||
NULL pointers correctly.
|
|
||||||
|
|
||||||
2007-12-22 Juan Manuel Guerrero <juan.guerrero@gmx.de> (tiny change)
|
|
||||||
|
|
||||||
* glob.c [__GNU_LIBRARY__ && __DJGPP__]: Add a realloc
|
|
||||||
declaration that matches the one in the DJGPP libc.
|
|
||||||
|
|
||||||
2006-02-24 Eli Zaretskii <eliz@gnu.org>
|
|
||||||
|
|
||||||
* glob.c (my_malloc) [WINDOWS32]: Provide a full ISO C prototype,
|
|
||||||
to avoid compiler warnings.
|
|
||||||
|
|
||||||
2005-06-25 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* fnmatch.h, glob.h [WINDOWS32]: Fix ifdefs in headers.
|
|
||||||
Fixes Savannah bug #13477.
|
|
||||||
|
|
||||||
2005-03-11 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* glob.c (glob_in_dir): Change FNM_CASEFOLD to be enabled if
|
|
||||||
HAVE_CASE_INSENSITIVE_FS is defined.
|
|
||||||
|
|
||||||
2003-01-30 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* glob.h: Patch for FreeBSD by Mike Barcroft <mike@freebsd.org>
|
|
||||||
Reported by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>. On
|
|
||||||
FreeBSD, declare __size_t to simply size_t.
|
|
||||||
|
|
||||||
2002-04-22 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* Makefile.am: Use automake 1.6.
|
|
||||||
Use new automake condition USE_LOCAL_GLOB to decide whether or not
|
|
||||||
to build the local GNU glob library or use the system one.
|
|
||||||
|
|
||||||
1999-09-12 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* fnmatch.c: Last GLIBC version wouldn't compile outside of GLIBC
|
|
||||||
(undefined reference to internal_function). Update to the latest
|
|
||||||
version
|
|
||||||
|
|
||||||
1999-09-11 Paul Eggert <eggert@twinsun.com>
|
|
||||||
|
|
||||||
* glob.h (glob): If #defining to glob64, do this before
|
|
||||||
declaring it, so that all declarations and uses match, and
|
|
||||||
do not declare glob64, to avoid a declaration clash.
|
|
||||||
(globfree): Likewise with globfree64.
|
|
||||||
|
|
||||||
1999-09-08 Eli Zaretskii <eliz@is.elta.co.il>
|
|
||||||
|
|
||||||
* glob.c (prefix_array) [__MSDOS__,WINDOWS32]: Keep the trailing
|
|
||||||
slash unless DIRNAME is just "x:/".
|
|
||||||
|
|
||||||
1999-09-06 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* fnmatch.c: Update to latest version from GLIBC.
|
|
||||||
|
|
||||||
1999-07-21 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* glob.c, glob.h, fnmatch.c, fnmatch.h: Update to latest version
|
|
||||||
from GLIBC.
|
|
||||||
|
|
||||||
* fnmatch.c (internal_fnmatch): Use K&R definition syntax, not ANSI.
|
|
||||||
(__strchrnul): This won't exist outside GLIBC, so create one.
|
|
||||||
|
|
||||||
* glob.c: Move getlogin{,_r} prototypes below glob.h to get __P()
|
|
||||||
macro.
|
|
||||||
|
|
||||||
1998-08-05 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* configure.in: Remove; configuration for glob is handled by the
|
|
||||||
make configure.in.
|
|
||||||
|
|
||||||
1998-07-29 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* glob.c, fnmatch.c: New versions from the GLIBC folks (Ulrich
|
|
||||||
Drepper). Fixes a bug reported by Eli Zaretski. Integrates
|
|
||||||
DOS/Windows32 support.
|
|
||||||
|
|
||||||
1998-07-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
|
||||||
|
|
||||||
* glob.c (glob): Cast away const on assignment of pattern to dirname.
|
|
||||||
Cast the return type of __alloca() for traditional C compilers.
|
|
||||||
|
|
||||||
1998-07-23 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* glob.c, fnmatch.c: New versions of these files from the GLIBC
|
|
||||||
folks (Ulrich Drepper). Had to re-integrate some DOS/Windows
|
|
||||||
code.
|
|
||||||
|
|
||||||
1998-07-10 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* glob.c (glob_in_dir): If no meta chars exist in PATTERN and
|
|
||||||
GLOB_NOCHECK is present, don't look for the file--whether it's
|
|
||||||
found or not, we'll always return it, so why bother searching?
|
|
||||||
|
|
||||||
Also, if we are searching and there are no meta chars, don't
|
|
||||||
bother trying fnmatch() if the strcmp() fails.
|
|
||||||
|
|
||||||
1998-05-30 Eli Zaretskii <eliz@is.elta.co.il>
|
|
||||||
|
|
||||||
* glob.c (glob) [__MSDOS__, WINDOWS32]: Compute the directory and
|
|
||||||
filename parts of the pattern correctly when it includes a drive
|
|
||||||
spec. Disallow wildcards in the drive spec. Prevent recursion
|
|
||||||
when dirname is of the form "d:/" or "d:".
|
|
||||||
(prefix_array) [__MSDOS__, WINDOWS32]: Don't append a slash to
|
|
||||||
"d:/" and "d:".
|
|
||||||
|
|
||||||
1998-05-13 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* SMakefile, Makefile.ami, glob.c, glob.h, fnmatch.c: Updated from
|
|
||||||
the latest glibc version.
|
|
||||||
|
|
||||||
1998-04-17 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* configure.in: Create a config.h file instead of setting things
|
|
||||||
on the compile line. This is because when build.sh runs it merely
|
|
||||||
passes -DHAVE_CONFIG_H to the glob files, just as it does to the
|
|
||||||
make files.
|
|
||||||
* config.h.in: Created by autoheader.
|
|
||||||
|
|
||||||
Tue Aug 12 10:52:34 1997 Paul D. Smith <psmith@baynetworks.com>
|
|
||||||
|
|
||||||
* configure.in: Require autoconf 2.12.
|
|
||||||
|
|
||||||
* glob: Updates from latest GNU libc glob code.
|
|
||||||
|
|
||||||
* glob.c,glob.h,fnmatch.h: Change all WIN32 references to WINDOWS32.
|
|
||||||
|
|
||||||
* glob.h: OSF4 defines macros in such a way that GLOB_ALTDIRFUNC
|
|
||||||
is not defined. Added a test to the #if which defines it if
|
|
||||||
_GNU_SOURCE is defined; that's set by both glob.c and GNU make.
|
|
||||||
|
|
||||||
* glob.c: SunOS4 w/ cc needs #include <stdio.h>, since assert.h
|
|
||||||
requires stderr but doesn't include stdio.h :-/.
|
|
||||||
(next_brace_sub): De-protoize function definition.
|
|
||||||
(glob): Cast __alloca(); on SunOS4 it uses the default return type
|
|
||||||
of int.
|
|
||||||
(glob): Irix defines getlogin_r() to return a char*; move the
|
|
||||||
extern for that into the _LIBC area since it isn't used except in
|
|
||||||
LIBC anyway. Likewise, move extern getlogin() into the "else".
|
|
||||||
|
|
||||||
Sat Jul 20 21:55:31 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
|
||||||
|
|
||||||
Win32 hacks from <Rob_Tulloh@tivoli.com>.
|
|
||||||
* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
|
|
||||||
use void * for my_realloc; include <malloc.h> for alloca.
|
|
||||||
(glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
|
|
||||||
* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
|
|
||||||
* posix/glob.h: Likewise.
|
|
||||||
|
|
||||||
Fri Jul 19 16:56:41 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
|
||||||
|
|
||||||
* posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA]
|
|
||||||
for `struct stat;' forward decl.
|
|
||||||
|
|
||||||
Sat Jun 22 10:44:09 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
|
||||||
|
|
||||||
* posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc].
|
|
||||||
|
|
||||||
Fri Jun 21 00:27:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
|
||||||
|
|
||||||
* posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr
|
|
||||||
only for ?s, not for *s. Fix from Chet Ramey.
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
|
||||||
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
|
|
||||||
Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
@ -1,30 +0,0 @@
|
|||||||
# -*-Makefile-*-, or close enough
|
|
||||||
# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
||||||
# 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign
|
|
||||||
|
|
||||||
# Only build the library when the system doesn't already have GNU glob.
|
|
||||||
if USE_LOCAL_GLOB
|
|
||||||
noinst_LIBRARIES = libglob.a
|
|
||||||
endif
|
|
||||||
|
|
||||||
libglob_a_SOURCES = glob.c glob.h fnmatch.c fnmatch.h
|
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST = COPYING.LIB Makefile.ami SCOPTIONS SMakefile \
|
|
||||||
configure.bat
|
|
@ -1,67 +0,0 @@
|
|||||||
# Makefile for standalone libglob.a (fnmatch, glob). -*-Makefile-*-
|
|
||||||
# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
|
||||||
# 2005, 2006, 2007 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# Ultrix 2.2 make doesn't expand the value of VPATH.
|
|
||||||
VPATH = /glob/
|
|
||||||
# This must repeat the value, because configure will remove `VPATH = .'.
|
|
||||||
srcdir = /glob/
|
|
||||||
|
|
||||||
CC = sc
|
|
||||||
RM = delete
|
|
||||||
CPPFLAGS =
|
|
||||||
CFLAGS =
|
|
||||||
|
|
||||||
# Information determined by configure.
|
|
||||||
DEFS = Define HAVE_HEADER_STDC Define HAVE_UNISTD_H Define HAVE_STRING_H \
|
|
||||||
Define HAVE_DIRENT_H
|
|
||||||
|
|
||||||
# How to invoke ar.
|
|
||||||
AR = join
|
|
||||||
ARFLAGS = as
|
|
||||||
|
|
||||||
# How to invoke ranlib.
|
|
||||||
RANLIB = ;
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all: glob.lib
|
|
||||||
|
|
||||||
glob.lib : glob.o fnmatch.o
|
|
||||||
$(AR) $(ARFLAGS) $@ glob.o fnmatch.o
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
# For some reason, Unix make wants the dependencies on the source files.
|
|
||||||
# Otherwise it refuses to use an implicit rule!
|
|
||||||
# And, get this: it doesn't work to use $(srcdir)foo.c!!
|
|
||||||
glob.o: $(srcdir)glob.h $(srcdir)fnmatch.h glob.c
|
|
||||||
fnmatch.o: $(srcdir)fnmatch.h fnmatch.c
|
|
||||||
|
|
||||||
OUTPUT_OPTION =
|
|
||||||
.c.o:
|
|
||||||
$(CC) IDir "" \
|
|
||||||
$(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)
|
|
||||||
|
|
||||||
.PHONY: clean realclean glob-clean glob-realclean distclean
|
|
||||||
clean glob-clean:
|
|
||||||
-$(RM) glob.lib "#?.o" core
|
|
||||||
distclean glob-realclean: clean
|
|
||||||
-$(RM) TAGS tags Makefile config.status config.h config.log
|
|
||||||
realcean: distclean
|
|
||||||
|
|
||||||
# For inside the C library.
|
|
||||||
glob.tar glob.tar.Z:
|
|
||||||
$(MAKE) -C .. $@
|
|
@ -1,13 +0,0 @@
|
|||||||
ERRORREXX
|
|
||||||
OPTIMIZE
|
|
||||||
NOVERSION
|
|
||||||
OPTIMIZERTIME
|
|
||||||
OPTIMIZERALIAS
|
|
||||||
DEFINE INCLUDEDIR="include:"
|
|
||||||
DEFINE LIBDIR="lib:"
|
|
||||||
DEFINE NO_ALLOCA
|
|
||||||
DEFINE NO_FLOAT
|
|
||||||
DEFINE NO_ARCHIVES
|
|
||||||
IGNORE=161
|
|
||||||
IGNORE=100
|
|
||||||
STARTUP=cres
|
|
@ -1,67 +0,0 @@
|
|||||||
# Makefile for standalone distribution of libglob.a (fnmatch, glob).
|
|
||||||
# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
|
||||||
# 2005, 2006, 2007 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# Ultrix 2.2 make doesn't expand the value of VPATH.
|
|
||||||
VPATH = /glob/
|
|
||||||
# This must repeat the value, because configure will remove `VPATH = .'.
|
|
||||||
srcdir = /glob/
|
|
||||||
|
|
||||||
CC = sc
|
|
||||||
CPPFLAGS =
|
|
||||||
CFLAGS =
|
|
||||||
MAKE = smake
|
|
||||||
RM = delete
|
|
||||||
|
|
||||||
# Information determined by configure.
|
|
||||||
DEFS = Define HAVE_HEADER_STDC Define HAVE_UNISTD_H Define HAVE_STRING_H \
|
|
||||||
Define HAVE_DIRENT_H
|
|
||||||
|
|
||||||
# How to invoke ar.
|
|
||||||
AR = join
|
|
||||||
ARFLAGS = as
|
|
||||||
|
|
||||||
# How to invoke ranlib.
|
|
||||||
RANLIB = ;
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all: glob.lib
|
|
||||||
|
|
||||||
glob.lib : glob.o fnmatch.o
|
|
||||||
$(AR) $(ARFLAGS) $@ glob.o fnmatch.o
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
# For some reason, Unix make wants the dependencies on the source files.
|
|
||||||
# Otherwise it refuses to use an implicit rule!
|
|
||||||
# And, get this: it doesn't work to use $(srcdir)foo.c!!
|
|
||||||
glob.o: $(srcdir)glob.h $(srcdir)fnmatch.h glob.c
|
|
||||||
fnmatch.o: $(srcdir)fnmatch.h fnmatch.c
|
|
||||||
|
|
||||||
.c.o:
|
|
||||||
$(CC) IDir "" \
|
|
||||||
$(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)
|
|
||||||
|
|
||||||
.PHONY: clean realclean glob-clean glob-realclean distclean
|
|
||||||
clean glob-clean:
|
|
||||||
-$(RM) -f glob.lib *.o core
|
|
||||||
distclean glob-realclean: clean
|
|
||||||
-$(RM) -f TAGS tags Makefile config.status config.h config.log
|
|
||||||
realcean: distclean
|
|
||||||
|
|
||||||
# For inside the C library.
|
|
||||||
glob.tar glob.tar.Z:
|
|
||||||
$(MAKE) -C .. $@
|
|
@ -1,43 +0,0 @@
|
|||||||
@echo off
|
|
||||||
rem Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
|
|
||||||
rem 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
|
||||||
rem This file is part of GNU Make.
|
|
||||||
rem
|
|
||||||
rem GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
rem the terms of the GNU General Public License as published by the Free
|
|
||||||
rem Software Foundation; either version 3 of the License, or (at your option)
|
|
||||||
rem any later version.
|
|
||||||
rem
|
|
||||||
rem GNU Make is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
rem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
rem FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for.
|
|
||||||
rem more details.
|
|
||||||
rem
|
|
||||||
rem You should have received a copy of the GNU General Public License along
|
|
||||||
rem with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
echo Configuring glob for DJGPP
|
|
||||||
rem This batch file assumes a unix-type "sed" program
|
|
||||||
|
|
||||||
echo # Makefile generated by "configure.bat"> Makefile
|
|
||||||
|
|
||||||
if exist config.sed del config.sed
|
|
||||||
|
|
||||||
echo "s/@srcdir@/./ ">> config.sed
|
|
||||||
echo "s/@CC@/gcc/ ">> config.sed
|
|
||||||
echo "s/@CFLAGS@/-O2 -g/ ">> config.sed
|
|
||||||
echo "s/@CPPFLAGS@/-DHAVE_CONFIG_H -I../ ">> config.sed
|
|
||||||
echo "s/@AR@/ar/ ">> config.sed
|
|
||||||
echo "s/@RANLIB@/ranlib/ ">> config.sed
|
|
||||||
echo "s/@LDFLAGS@// ">> config.sed
|
|
||||||
echo "s/@DEFS@// ">> config.sed
|
|
||||||
echo "s/@ALLOCA@// ">> config.sed
|
|
||||||
echo "s/@LIBS@// ">> config.sed
|
|
||||||
echo "s/@LIBOBJS@// ">> config.sed
|
|
||||||
echo "s/^Makefile *:/_Makefile:/ ">> config.sed
|
|
||||||
echo "s/^config.h *:/_config.h:/ ">> config.sed
|
|
||||||
|
|
||||||
sed -e "s/^\"//" -e "s/\"$//" -e "s/[ ]*$//" config.sed > config2.sed
|
|
||||||
sed -f config2.sed Makefile.in >> Makefile
|
|
||||||
del config.sed
|
|
||||||
del config2.sed
|
|
73
gnumake.h
73
gnumake.h
@ -1,73 +0,0 @@
|
|||||||
/* External interfaces usable by dynamic objects loaded into GNU Make.
|
|
||||||
--THIS API IS A "TECHNOLOGY PREVIEW" ONLY. IT IS NOT A STABLE INTERFACE--
|
|
||||||
|
|
||||||
Copyright (C) 2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#ifndef _GNUMAKE_H_
|
|
||||||
#define _GNUMAKE_H_
|
|
||||||
|
|
||||||
/* Specify the location of elements read from makefiles. */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
const char *filenm;
|
|
||||||
unsigned long lineno;
|
|
||||||
} gmk_floc;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
# ifdef GMK_BUILDING_MAKE
|
|
||||||
# define GMK_EXPORT __declspec(dllexport)
|
|
||||||
# else
|
|
||||||
# define GMK_EXPORT __declspec(dllimport)
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# define GMK_EXPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Free memory returned by the gmk_expand() function. */
|
|
||||||
void GMK_EXPORT gmk_free (char *str);
|
|
||||||
|
|
||||||
/* Allocate memory in GNU make's context. */
|
|
||||||
char * GMK_EXPORT gmk_alloc (unsigned int len);
|
|
||||||
|
|
||||||
/* Run $(eval ...) on the provided string BUFFER. */
|
|
||||||
void GMK_EXPORT gmk_eval (const char *buffer, const gmk_floc *floc);
|
|
||||||
|
|
||||||
/* Run GNU make expansion on the provided string STR.
|
|
||||||
Returns an allocated buffer that the caller must free with gmk_free(). */
|
|
||||||
char * GMK_EXPORT gmk_expand (const char *str);
|
|
||||||
|
|
||||||
/* Register a new GNU make function NAME (maximum of 255 chars long).
|
|
||||||
When the function is expanded in the makefile, FUNC will be invoked with
|
|
||||||
the appropriate arguments.
|
|
||||||
|
|
||||||
The return value of FUNC must be either NULL, in which case it expands to
|
|
||||||
the empty string, or a pointer to the result of the expansion in a string
|
|
||||||
created by gmk_alloc(). GNU make will free the memory when it's done.
|
|
||||||
|
|
||||||
MIN_ARGS is the minimum number of arguments the function requires.
|
|
||||||
MAX_ARGS is the maximum number of arguments (or 0 if there's no maximum).
|
|
||||||
MIN_ARGS and MAX_ARGS must be >= 0 and <= 255.
|
|
||||||
|
|
||||||
If EXPAND_ARGS is 0, the arguments to the function will not be expanded
|
|
||||||
before FUNC is called. If EXPAND_ARGS is non-0, they will be expanded.
|
|
||||||
*/
|
|
||||||
void GMK_EXPORT gmk_add_function (const char *name,
|
|
||||||
char *(*func)(const char *nm,
|
|
||||||
int argc, char **argv),
|
|
||||||
int min_args, int max_args, int expand_args);
|
|
||||||
|
|
||||||
#endif /* _GNUMAKE_H_ */
|
|
153
job.h
153
job.h
@ -1,153 +0,0 @@
|
|||||||
/* Definitions for managing subprocesses in GNU Make.
|
|
||||||
Copyright (C) 1992-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include "output.h"
|
|
||||||
|
|
||||||
#ifdef HAVE_FCNTL_H
|
|
||||||
# include <fcntl.h>
|
|
||||||
#else
|
|
||||||
# include <sys/file.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* How to set close-on-exec for a file descriptor. */
|
|
||||||
|
|
||||||
#if !defined F_SETFD
|
|
||||||
# ifdef WINDOWS32
|
|
||||||
# define CLOSE_ON_EXEC(_d) process_noinherit(_d)
|
|
||||||
# else
|
|
||||||
# define CLOSE_ON_EXEC(_d)
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# ifndef FD_CLOEXEC
|
|
||||||
# define FD_CLOEXEC 1
|
|
||||||
# endif
|
|
||||||
# define CLOSE_ON_EXEC(_d) (void) fcntl ((_d), F_SETFD, FD_CLOEXEC)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef OUTPUT_SYNC
|
|
||||||
# ifdef WINDOWS32
|
|
||||||
/* For emulations in w32/compat/posixfcn.c. */
|
|
||||||
# define F_GETFD 1
|
|
||||||
# define F_SETLKW 2
|
|
||||||
/* Implementation note: None of the values of l_type below can be zero
|
|
||||||
-- they are compared with a static instance of the struct, so zero
|
|
||||||
means unknown/invalid, see w32/compat/posixfcn.c. */
|
|
||||||
# define F_WRLCK 1
|
|
||||||
# define F_UNLCK 2
|
|
||||||
|
|
||||||
struct flock
|
|
||||||
{
|
|
||||||
short l_type;
|
|
||||||
short l_whence;
|
|
||||||
off_t l_start;
|
|
||||||
off_t l_len;
|
|
||||||
pid_t l_pid;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This type is actually a HANDLE, but we want to avoid including
|
|
||||||
windows.h as much as possible. */
|
|
||||||
typedef intptr_t sync_handle_t;
|
|
||||||
|
|
||||||
/* Public functions emulated/provided in posixfcn.c. */
|
|
||||||
int fcntl (intptr_t fd, int cmd, ...);
|
|
||||||
intptr_t create_mutex (void);
|
|
||||||
int same_stream (FILE *f1, FILE *f2);
|
|
||||||
|
|
||||||
# define RECORD_SYNC_MUTEX(m) record_sync_mutex(m)
|
|
||||||
void record_sync_mutex (const char *str);
|
|
||||||
void prepare_mutex_handle_string (intptr_t hdl);
|
|
||||||
|
|
||||||
# else /* !WINDOWS32 */
|
|
||||||
|
|
||||||
typedef int sync_handle_t; /* file descriptor */
|
|
||||||
|
|
||||||
# define RECORD_SYNC_MUTEX(m) (void)(m)
|
|
||||||
|
|
||||||
# endif
|
|
||||||
#else /* !OUTPUT_SYNC */
|
|
||||||
#define RECORD_SYNC_MUTEX(m) \
|
|
||||||
error (NILF, \
|
|
||||||
_("-O[TYPE] (--output-sync[=TYPE]) is not configured for this build."));
|
|
||||||
#endif /* OUTPUT_SYNC */
|
|
||||||
|
|
||||||
/* Structure describing a running or dead child process. */
|
|
||||||
|
|
||||||
struct child
|
|
||||||
{
|
|
||||||
struct child *next; /* Link in the chain. */
|
|
||||||
|
|
||||||
struct file *file; /* File being remade. */
|
|
||||||
|
|
||||||
char **environment; /* Environment for commands. */
|
|
||||||
char *sh_batch_file; /* Script file for shell commands */
|
|
||||||
char **command_lines; /* Array of variable-expanded cmd lines. */
|
|
||||||
char *command_ptr; /* Ptr into command_lines[command_line]. */
|
|
||||||
|
|
||||||
#ifdef VMS
|
|
||||||
char *comname; /* Temporary command file name */
|
|
||||||
int efn; /* Completion event flag number */
|
|
||||||
int cstatus; /* Completion status */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned int command_line; /* Index into command_lines. */
|
|
||||||
struct output output; /* Output for this child. */
|
|
||||||
pid_t pid; /* Child process's ID number. */
|
|
||||||
unsigned int remote:1; /* Nonzero if executing remotely. */
|
|
||||||
unsigned int noerror:1; /* Nonzero if commands contained a '-'. */
|
|
||||||
unsigned int good_stdin:1; /* Nonzero if this child has a good stdin. */
|
|
||||||
unsigned int deleted:1; /* Nonzero if targets have been deleted. */
|
|
||||||
unsigned int dontcare:1; /* Saved dontcare flag. */
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct child *children;
|
|
||||||
|
|
||||||
int is_bourne_compatible_shell(const char *path);
|
|
||||||
void new_job (struct file *file);
|
|
||||||
void reap_children (int block, int err);
|
|
||||||
void start_waiting_jobs (void);
|
|
||||||
|
|
||||||
char **construct_command_argv (char *line, char **restp, struct file *file,
|
|
||||||
int cmd_flags, char** batch_file);
|
|
||||||
#ifdef VMS
|
|
||||||
int child_execute_job (char *argv, struct child *child);
|
|
||||||
#elif defined(__EMX__)
|
|
||||||
int child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp);
|
|
||||||
#else
|
|
||||||
void child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp);
|
|
||||||
#endif
|
|
||||||
#ifdef _AMIGA
|
|
||||||
void exec_command (char **argv) __attribute__ ((noreturn));
|
|
||||||
#elif defined(__EMX__)
|
|
||||||
int exec_command (char **argv, char **envp);
|
|
||||||
#else
|
|
||||||
void exec_command (char **argv, char **envp) __attribute__ ((noreturn));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern unsigned int job_slots_used;
|
|
||||||
|
|
||||||
void block_sigs (void);
|
|
||||||
#ifdef POSIX
|
|
||||||
void unblock_sigs (void);
|
|
||||||
#else
|
|
||||||
#ifdef HAVE_SIGSETMASK
|
|
||||||
extern int fatal_signal_mask;
|
|
||||||
#define unblock_sigs() sigsetmask (0)
|
|
||||||
#else
|
|
||||||
#define unblock_sigs()
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern unsigned int jobserver_tokens;
|
|
240
load.c
240
load.c
@ -1,240 +0,0 @@
|
|||||||
/* Loading dynamic objects for GNU Make.
|
|
||||||
Copyright (C) 2012-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include "makeint.h"
|
|
||||||
|
|
||||||
#if MAKE_LOAD
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#define SYMBOL_EXTENSION "_gmk_setup"
|
|
||||||
|
|
||||||
#include "debug.h"
|
|
||||||
#include "filedef.h"
|
|
||||||
#include "variable.h"
|
|
||||||
|
|
||||||
struct load_list
|
|
||||||
{
|
|
||||||
struct load_list *next;
|
|
||||||
const char *name;
|
|
||||||
void *dlp;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct load_list *loaded_syms = NULL;
|
|
||||||
|
|
||||||
static load_func_t
|
|
||||||
load_object (const gmk_floc *flocp, int noerror,
|
|
||||||
const char *ldname, const char *symname)
|
|
||||||
{
|
|
||||||
static void *global_dl = NULL;
|
|
||||||
load_func_t symp;
|
|
||||||
|
|
||||||
if (! global_dl)
|
|
||||||
{
|
|
||||||
global_dl = dlopen (NULL, RTLD_NOW|RTLD_GLOBAL);
|
|
||||||
if (! global_dl)
|
|
||||||
fatal (flocp, _("Failed to open global symbol table: %s"), dlerror ());
|
|
||||||
}
|
|
||||||
|
|
||||||
symp = (load_func_t) dlsym (global_dl, symname);
|
|
||||||
if (! symp)
|
|
||||||
{
|
|
||||||
struct load_list *new;
|
|
||||||
void *dlp = NULL;
|
|
||||||
|
|
||||||
/* If the path has no "/", try the current directory first. */
|
|
||||||
if (! strchr (ldname, '/')
|
|
||||||
#ifdef HAVE_DOS_PATHS
|
|
||||||
&& ! strchr (ldname, '\\')
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
dlp = dlopen (concat (2, "./", ldname), RTLD_LAZY|RTLD_GLOBAL);
|
|
||||||
|
|
||||||
/* If we haven't opened it yet, try the default search path. */
|
|
||||||
if (! dlp)
|
|
||||||
dlp = dlopen (ldname, RTLD_LAZY|RTLD_GLOBAL);
|
|
||||||
|
|
||||||
/* Still no? Then fail. */
|
|
||||||
if (! dlp)
|
|
||||||
{
|
|
||||||
if (noerror)
|
|
||||||
DB (DB_BASIC, ("%s", dlerror ()));
|
|
||||||
else
|
|
||||||
error (flocp, "%s", dlerror ());
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Assert that the GPL license symbol is defined. */
|
|
||||||
symp = dlsym (dlp, "plugin_is_GPL_compatible");
|
|
||||||
if (! symp)
|
|
||||||
fatal (flocp, _("Loaded object %s is not declared to be GPL compatible"),
|
|
||||||
ldname);
|
|
||||||
|
|
||||||
symp = dlsym (dlp, symname);
|
|
||||||
if (! symp)
|
|
||||||
fatal (flocp, _("Failed to load symbol %s from %s: %s"),
|
|
||||||
symname, ldname, dlerror ());
|
|
||||||
|
|
||||||
/* Add this symbol to a trivial lookup table. This is not efficient but
|
|
||||||
it's highly unlikely we'll be loading lots of objects, and we only
|
|
||||||
need it to look them up on unload, if we rebuild them. */
|
|
||||||
new = xmalloc (sizeof (struct load_list));
|
|
||||||
new->name = xstrdup (ldname);
|
|
||||||
new->dlp = dlp;
|
|
||||||
new->next = loaded_syms;
|
|
||||||
loaded_syms = new;
|
|
||||||
}
|
|
||||||
|
|
||||||
return symp;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
load_file (const gmk_floc *flocp, const char **ldname, int noerror)
|
|
||||||
{
|
|
||||||
int nmlen = strlen (*ldname);
|
|
||||||
char *new = alloca (nmlen + CSTRLEN (SYMBOL_EXTENSION) + 1);
|
|
||||||
char *symname = NULL;
|
|
||||||
char *loaded;
|
|
||||||
const char *fp;
|
|
||||||
int r;
|
|
||||||
load_func_t symp;
|
|
||||||
|
|
||||||
/* Break the input into an object file name and a symbol name. If no symbol
|
|
||||||
name was provided, compute one from the object file name. */
|
|
||||||
fp = strchr (*ldname, '(');
|
|
||||||
if (fp)
|
|
||||||
{
|
|
||||||
const char *ep;
|
|
||||||
|
|
||||||
/* There's an open paren, so see if there's a close paren: if so use
|
|
||||||
that as the symbol name. We can't have whitespace: it would have
|
|
||||||
been chopped up before this function is called. */
|
|
||||||
ep = strchr (fp+1, ')');
|
|
||||||
if (ep && ep[1] == '\0')
|
|
||||||
{
|
|
||||||
int l = fp - *ldname;;
|
|
||||||
|
|
||||||
++fp;
|
|
||||||
if (fp == ep)
|
|
||||||
fatal (flocp, _("Empty symbol name for load: %s"), *ldname);
|
|
||||||
|
|
||||||
/* Make a copy of the ldname part. */
|
|
||||||
memcpy (new, *ldname, l);
|
|
||||||
new[l] = '\0';
|
|
||||||
*ldname = new;
|
|
||||||
|
|
||||||
/* Make a copy of the symbol name part. */
|
|
||||||
symname = new + l + 1;
|
|
||||||
memcpy (symname, fp, ep - fp);
|
|
||||||
symname[ep - fp] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add this name to the string cache so it can be reused later. */
|
|
||||||
*ldname = strcache_add (*ldname);
|
|
||||||
|
|
||||||
/* If this object has been loaded, we're done. */
|
|
||||||
loaded = allocated_variable_expand ("$(.LOADED)");
|
|
||||||
fp = strstr (loaded, *ldname);
|
|
||||||
r = fp && (fp==loaded || fp[-1]==' ') && (fp[nmlen]=='\0' || fp[nmlen]==' ');
|
|
||||||
free (loaded);
|
|
||||||
if (r)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* If we didn't find a symbol name yet, construct it from the ldname. */
|
|
||||||
if (! symname)
|
|
||||||
{
|
|
||||||
char *p = new;
|
|
||||||
|
|
||||||
fp = strrchr (*ldname, '/');
|
|
||||||
#ifdef HAVE_DOS_PATHS
|
|
||||||
if (fp)
|
|
||||||
{
|
|
||||||
const char *fp2 = strchr (fp, '\\');
|
|
||||||
|
|
||||||
if (fp2 > fp)
|
|
||||||
fp = fp2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
fp = strrchr (*ldname, '\\');
|
|
||||||
/* The (improbable) case of d:foo. */
|
|
||||||
if (fp && *fp && fp[1] == ':')
|
|
||||||
fp++;
|
|
||||||
#endif
|
|
||||||
if (!fp)
|
|
||||||
fp = *ldname;
|
|
||||||
else
|
|
||||||
++fp;
|
|
||||||
while (isalnum (*fp) || *fp == '_')
|
|
||||||
*(p++) = *(fp++);
|
|
||||||
strcpy (p, SYMBOL_EXTENSION);
|
|
||||||
symname = new;
|
|
||||||
}
|
|
||||||
|
|
||||||
DB (DB_VERBOSE, (_("Loading symbol %s from %s\n"), symname, *ldname));
|
|
||||||
|
|
||||||
/* Load it! */
|
|
||||||
symp = load_object (flocp, noerror, *ldname, symname);
|
|
||||||
if (! symp)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Invoke the symbol. */
|
|
||||||
r = (*symp) (flocp);
|
|
||||||
|
|
||||||
/* If it succeeded, add the load file to the loaded variable. */
|
|
||||||
if (r > 0)
|
|
||||||
do_variable_definition (flocp, ".LOADED", *ldname, o_default, f_append, 0);
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
unload_file (const char *name)
|
|
||||||
{
|
|
||||||
struct load_list *d;
|
|
||||||
|
|
||||||
for (d = loaded_syms; d != NULL; d = d->next)
|
|
||||||
if (streq (d->name, name) && d->dlp)
|
|
||||||
{
|
|
||||||
if (dlclose (d->dlp))
|
|
||||||
perror_with_name ("dlclose", d->name);
|
|
||||||
d->dlp = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
int
|
|
||||||
load_file (const gmk_floc *flocp, const char **ldname, int noerror)
|
|
||||||
{
|
|
||||||
if (! noerror)
|
|
||||||
fatal (flocp, _("The 'load' operation is not supported on this platform."));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
unload_file (const char *name)
|
|
||||||
{
|
|
||||||
fatal (NILF, "INTERNAL: Cannot unload when load is not supported!");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* MAKE_LOAD */
|
|
509
maintMakefile
509
maintMakefile
@ -1,78 +1,99 @@
|
|||||||
# Maintainer-only makefile segment. This contains things that are relevant
|
# Maintainer-only makefile segment. This contains things that are relevant
|
||||||
# only if you have the full copy of the GNU make sources from the Git
|
# only if you have the full copy of the GNU Make sources from the Git
|
||||||
# tree, not a dist copy.
|
# tree, not a dist copy.
|
||||||
|
|
||||||
|
# --------------------- #
|
||||||
|
# Updating everything. #
|
||||||
|
# --------------------- #
|
||||||
|
|
||||||
|
.PHONY: update
|
||||||
|
update:
|
||||||
|
|
||||||
|
BUGLIST := bug-make@gnu.org
|
||||||
|
|
||||||
|
# These are related to my personal setup.
|
||||||
|
GPG_KEYID := 80CB727A20C79BB2
|
||||||
|
|
||||||
|
# SRCROOTDIR is just a handy location to keep source files in
|
||||||
|
SRCROOTDIR ?= $(HOME)/src
|
||||||
|
|
||||||
|
# Where to put the CVS checkout of the GNU web repository
|
||||||
|
GNUWEBDIR ?= $(SRCROOTDIR)/gnu-www
|
||||||
|
|
||||||
|
# Where to put the CVS checkout of the GNU Make web repository
|
||||||
|
MAKEWEBDIR ?= $(SRCROOTDIR)/make/make-web
|
||||||
|
|
||||||
|
# Enable Perl warnings for the test suite
|
||||||
|
PERLFLAGS := -w
|
||||||
|
|
||||||
# We like mondo-warnings!
|
# We like mondo-warnings!
|
||||||
AM_CFLAGS += -Wall -Wextra -Wdeclaration-after-statement -Wshadow -Wpointer-arith -Wbad-function-cast
|
# Also force comments to be preserved. This helps when using ccache, in
|
||||||
|
# combination with GCC 7's implicit-fallthrough warning.
|
||||||
|
MAKE_CFLAGS := -C -Wall -Wextra -Werror -Wwrite-strings -Wshadow \
|
||||||
|
-Wdeclaration-after-statement -Wbad-function-cast -Wformat-security \
|
||||||
|
-Wtype-limits -Wunused-but-set-parameter -Wlogical-op -Wpointer-arith \
|
||||||
|
-Wignored-qualifiers -Wformat-signedness -Wduplicated-cond
|
||||||
|
|
||||||
|
# Allow extra options without overriding MAKE_CFLAGS
|
||||||
|
EXTRA_CFLAGS :=
|
||||||
|
|
||||||
|
AM_CFLAGS += $(MAKE_CFLAGS) $(EXTRA_CFLAGS)
|
||||||
|
|
||||||
|
# Unfortunately the Guile headers are sometimes broken. Convince GCC
|
||||||
|
# to treat them as system headers so warnings are ignored.
|
||||||
|
GUILE_CFLAGS := $(patsubst -I%,-isystem %,$(GUILE_CFLAGS))
|
||||||
|
|
||||||
MAKE_MAINTAINER_MODE := -DMAKE_MAINTAINER_MODE
|
MAKE_MAINTAINER_MODE := -DMAKE_MAINTAINER_MODE
|
||||||
AM_CPPFLAGS += $(MAKE_MAINTAINER_MODE)
|
AM_CPPFLAGS += $(MAKE_MAINTAINER_MODE)
|
||||||
|
|
||||||
# I want this one but I have to wait for the const cleanup!
|
# Create preprocessor output files--GCC specific!
|
||||||
# -Wwrite-strings
|
%.i : %.c
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) -E -dD -o $@ $<
|
||||||
|
|
||||||
# Find the glob source files... this might be dangerous, but we're maintainers!
|
# Create the mkconfig.h file for non-POSIX config headers
|
||||||
globsrc := $(wildcard glob/*.c)
|
|
||||||
globhdr := $(wildcard glob/*.h)
|
|
||||||
|
|
||||||
TEMPLATES = README README.DOS README.W32 README.OS2 \
|
all: src/mkconfig.h
|
||||||
config.ami configh.dos config.h.W32 config.h-vms
|
src/mkconfig.h: src/mkconfig.h.in config.status
|
||||||
MTEMPLATES = Makefile.DOS SMakefile
|
./config.status --header=$@
|
||||||
|
|
||||||
# These are built as a side-effect of the dist rule
|
# Build the README
|
||||||
#all-am: $(TEMPLATES) $(MTEMPLATES) build.sh.in
|
|
||||||
|
|
||||||
# General rule for turning a .template into a regular file.
|
all: README
|
||||||
#
|
README : README.in config.status
|
||||||
$(TEMPLATES) : % : %.template Makefile
|
./config.status --file=$@
|
||||||
rm -f $@
|
|
||||||
sed -e 's@%VERSION%@$(VERSION)@g' \
|
|
||||||
-e 's@%PACKAGE%@$(PACKAGE)@g' \
|
|
||||||
$< > $@
|
|
||||||
chmod a-w $@
|
|
||||||
|
|
||||||
# Construct Makefiles by adding on dependencies, etc.
|
# Construct Makefiles by adding on dependencies, etc.
|
||||||
#
|
#
|
||||||
$(MTEMPLATES) : % : %.template .dep_segment Makefile
|
cvt = $(patsubst $1/%,$$($1)%,$(filter %.c,$2))
|
||||||
|
Basic.mk: Basic.mk.template .dep_segment Makefile
|
||||||
rm -f $@
|
rm -f $@
|
||||||
sed -e 's@%VERSION%@$(VERSION)@g' \
|
sed -e 's@%make_SOURCES%@$(call cvt,src,$(make_SRCS))@g' \
|
||||||
-e 's@%PROGRAMS%@$(bin_PROGRAMS)@g' \
|
-e 's@%w32_SOURCES%@$(call cvt,src,$(w32_SRCS))@g' \
|
||||||
-e 's@%SOURCES%@$(filter-out remote-%,$(make_SOURCES)) remote-$$(REMOTE).c@g' \
|
-e 's@%vms_SOURCES%@$(call cvt,src,$(vms_SRCS))@g' \
|
||||||
-e 's@%OBJECTS%@$(filter-out remote-%,$(make_OBJECTS)) remote-$$(REMOTE).o@g' \
|
-e 's@%loadavg_SOURCES%@$(call cvt,lib,$(loadavg_SRCS))@g' \
|
||||||
-e 's@%GLOB_SOURCES%@$(globsrc) $(globhdr)@g' \
|
-e 's@%alloca_SOURCES%@$(call cvt,lib,$(alloca_SRCS))@g' \
|
||||||
-e 's@%GLOB_OBJECTS%@$(globsrc:glob/%.c=%.o)@g' \
|
-e 's@%glob_SOURCES%@$(call cvt,lib,$(glob_SRCS))@g' \
|
||||||
$< > $@
|
$< > $@
|
||||||
echo >>$@; echo '# --------------- DEPENDENCIES' >>$@; echo '#' >>$@; \
|
echo >>$@; echo '# --------------- DEPENDENCIES' >>$@; echo '#' >>$@; \
|
||||||
cat $(word 2,$^) >>$@
|
echo >>$@; echo '$$(OBJECTS): $$(SRCDIR)/src/mkconfig.h' >>$@; \
|
||||||
|
sed -e 's@^\([^ ]*\)\.o:@$$(OUTDIR)\1.$$(OBJEXT):@' \
|
||||||
|
-e 's@\([^ ]*\.[ch]\)@$$(SRCDIR)/\1@g' \
|
||||||
|
-e 's@$$(SRCDIR)/src/config.h@$$(OUTDIR)src/config.h@g' \
|
||||||
|
-e 's@$$(SRCDIR)/lib/alloca.h@@g' \
|
||||||
|
-e 's@$$(SRCDIR)/lib/stdbool.h@@g' \
|
||||||
|
$(word 2,$^) >>$@
|
||||||
chmod a-w $@
|
chmod a-w $@
|
||||||
|
|
||||||
NMakefile: NMakefile.template .dep_segment Makefile
|
|
||||||
rm -f $@
|
|
||||||
cp $< $@
|
|
||||||
echo >>$@; echo '# --------------- DEPENDENCIES' >>$@; echo '#' >>$@; \
|
|
||||||
sed 's/^\([^ ]*\)\.o:/$$(OUTDIR)\/\1.obj:/' $(word 2,$^) >>$@
|
|
||||||
chmod a-w $@
|
|
||||||
|
|
||||||
# Construct build.sh.in
|
# Use automake to build a dependency list file, for Makebase.mk.
|
||||||
#
|
#
|
||||||
build.sh.in: build.template Makefile
|
# Automake used to have a --generate-deps flag but it's gone now, so we have
|
||||||
rm -f $@
|
|
||||||
sed -e 's@%objs%@$(patsubst %.o,%.$${OBJEXT},$(filter-out remote-%,$(make_OBJECTS)))@g' \
|
|
||||||
-e 's@%globobjs%@$(patsubst %.c,%.$${OBJEXT},$(globsrc))@g' \
|
|
||||||
$< > $@
|
|
||||||
chmod a-w+x $@
|
|
||||||
|
|
||||||
|
|
||||||
# Use automake to build a dependency list file, for "foreign" makefiles like
|
|
||||||
# Makefile.DOS.
|
|
||||||
#
|
|
||||||
# Automake used to have a --generate-deps flag, but it's gone now, so we have
|
|
||||||
# to do it ourselves.
|
# to do it ourselves.
|
||||||
#
|
#
|
||||||
DEP_FILES := $(wildcard $(DEPDIR)/*.Po)
|
DEP_FILES := $(wildcard src/$(DEPDIR)/*.Po)
|
||||||
.dep_segment: Makefile.am maintMakefile $(DEP_FILES)
|
.dep_segment: Makefile.am maintMakefile $(DEP_FILES)
|
||||||
rm -f $@
|
rm -f $@
|
||||||
(for f in $(DEPDIR)/*.Po; do \
|
(for f in src/$(DEPDIR)/*.Po; do \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
echo "# $$f"; \
|
echo "# $$f"; \
|
||||||
sed -e '/^[^:]*\.[ch] *:/d' \
|
sed -e '/^[^:]*\.[ch] *:/d' \
|
||||||
@ -94,100 +115,262 @@ GIT := git
|
|||||||
git-clean:
|
git-clean:
|
||||||
-$(GIT) clean -fdX
|
-$(GIT) clean -fdX
|
||||||
git-very-clean: git-clean
|
git-very-clean: git-clean
|
||||||
-$(GIT) clean -fd
|
-$(GIT) clean -fdx
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
## ---------------------- ##
|
||||||
#
|
## Generating ChangeLog. ##
|
||||||
# The sections below were stolen from the Makefile.maint used by fileutils,
|
## ---------------------- ##
|
||||||
# sh-utils, textutils, CPPI, Bison, and Autoconf.
|
|
||||||
|
|
||||||
|
# Where the gnulib project has been locally cloned
|
||||||
|
GNULIBDIR ?= $(or $(wildcard $(GNULIB_SRCDIR)),./gnulib)
|
||||||
|
|
||||||
|
gl2cl-date := 2013-10-10
|
||||||
|
gl2cl := $(GNULIBDIR)/build-aux/gitlog-to-changelog
|
||||||
|
|
||||||
|
# Rebuild the changelog whenever a new commit is added
|
||||||
|
ChangeLog: .check-git-HEAD
|
||||||
|
if test -f '$(gl2cl)'; then \
|
||||||
|
'$(gl2cl)' --since='$(gl2cl-date)' > '$@'; \
|
||||||
|
else \
|
||||||
|
echo "WARNING: $(gl2cl) is not available. No $@ generated."; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
.check-git-HEAD: FORCE
|
||||||
|
sha="`git rev-parse HEAD`"; \
|
||||||
|
test -f '$@' && [ "`cat '$@' 2>/dev/null`" = "$$sha" ] \
|
||||||
|
|| echo "$$sha" > '$@'
|
||||||
|
|
||||||
|
.PHONY: FORCE
|
||||||
|
FORCE:;@:
|
||||||
|
|
||||||
## ---------------- ##
|
## ---------------- ##
|
||||||
## Updating files. ##
|
## Updating files. ##
|
||||||
## ---------------- ##
|
## ---------------- ##
|
||||||
|
RSYNC = rsync -Lrtvz
|
||||||
WGET = wget --passive-ftp -nv
|
WGET = wget --passive-ftp -np -nv
|
||||||
ftp-gnu = ftp://ftp.gnu.org/gnu
|
ftp-gnu = ftp://ftp.gnu.org/gnu
|
||||||
|
|
||||||
move_if_change = if test -r $(target) && cmp -s $(target).t $(target); then \
|
move_if_change = if test -r $(target) && cmp -s $(target).t $(target); then \
|
||||||
echo $(target) is unchanged; rm -f $(target).t; \
|
echo $(target) is unchanged; rm -f $(target).t; \
|
||||||
else \
|
else \
|
||||||
mv $(target).t $(target); \
|
mv -f $(target).t $(target); \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ------------------- #
|
# ------------------- #
|
||||||
# Updating PO files. #
|
# Updating PO files. #
|
||||||
# ------------------- #
|
# ------------------- #
|
||||||
|
|
||||||
|
# NOTE: This is handled by the bootstrap script now
|
||||||
|
|
||||||
|
#update: po-update
|
||||||
|
update: po-check
|
||||||
|
|
||||||
# PO archive mirrors --- Be careful; some might not be fully populated!
|
# PO archive mirrors --- Be careful; some might not be fully populated!
|
||||||
# ftp://ftp.unex.es/pub/gnu-i18n/po/maint/
|
# ftp://ftp.unex.es/pub/gnu-i18n/po/maint/
|
||||||
# http://translation.sf.net/maint/
|
|
||||||
# ftp://tiger.informatik.hu-berlin.de/pub/po/maint/
|
# ftp://tiger.informatik.hu-berlin.de/pub/po/maint/
|
||||||
|
|
||||||
po_wget_flags = --recursive --level=1 --no-directories --no-parent \
|
po_wget_flags = --recursive --level=1 --no-directories --no-check-certificate
|
||||||
--no-check-certificate
|
po_repo = https://translationproject.org/latest/$(PACKAGE)
|
||||||
po_repo = http://translationproject.org/latest/$(PACKAGE)
|
po_sync = translationproject.org::tp/latest/$(PACKAGE)/
|
||||||
|
|
||||||
.PHONY: do-po-update po-update
|
.PHONY: do-po-update po-update
|
||||||
do-po-update:
|
do-po-update:
|
||||||
tmppo="/tmp/po-$(PACKAGE)-$(VERSION).$$$$" \
|
tmppo="/tmp/po-$(PACKAGE)-$(PACKAGE_VERSION).$$$$" \
|
||||||
&& rm -rf "$$tmppo" \
|
&& rm -rf "$$tmppo" \
|
||||||
&& mkdir "$$tmppo" \
|
&& mkdir "$$tmppo" \
|
||||||
&& (cd "$$tmppo" \
|
&& $(RSYNC) $(po_sync) "$$tmppo" \
|
||||||
&& $(WGET) $(po_wget_flags) -A '*.po' $(po_repo)) \
|
&& cp "$$tmppo"/*.po $(top_srcdir)/po \
|
||||||
&& cp "$$tmppo"/*.po $(top_srcdir)/po && rm -rf "$$tmppo"
|
&& rm -rf "$$tmppo"
|
||||||
cd po && $(MAKE) update-po
|
cd po && $(MAKE) update-po
|
||||||
$(MAKE) po-check
|
$(MAKE) po-check
|
||||||
|
|
||||||
po-update:
|
po-update:
|
||||||
[ -d "po" ] && $(MAKE) do-po-update
|
test -d "po" && $(MAKE) do-po-update
|
||||||
|
|
||||||
# -------------------------- #
|
# -------------------------- #
|
||||||
# Updating GNU build files. #
|
# Updating GNU build files. #
|
||||||
# -------------------------- #
|
# -------------------------- #
|
||||||
|
|
||||||
|
# Note: this is handled by the bootstrap script now
|
||||||
|
#update: scm-update
|
||||||
|
|
||||||
|
.PHONY: scm-update
|
||||||
|
scm-update: get-build-aux/texinfo.tex get-build-aux/config.guess \
|
||||||
|
get-build-aux/config.sub get-doc/make-stds.texi get-doc/fdl.texi
|
||||||
|
|
||||||
# The following pseudo table associates a local directory and a URL
|
# The following pseudo table associates a local directory and a URL
|
||||||
# with each of the files that belongs to some other package and is
|
# with each of the files that belongs to some other package and is
|
||||||
# regularly updated from the specified URL.
|
# regularly updated from the specified URL.
|
||||||
|
|
||||||
cvs-url = http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~
|
cvs-url = https://savannah.gnu.org/cgi-bin/viewcvs/~checkout~
|
||||||
git-url = http://git.savannah.gnu.org/cgit
|
git-url = https://git.savannah.gnu.org/cgit
|
||||||
target = $(patsubst get-%,%,$@)
|
target = $(patsubst get-%,%,$@)
|
||||||
|
|
||||||
config-url = $(git-url)/config.git/plain/$(patsubst get-config/%,%,$@)
|
config-url = $(git-url)/config.git/plain/$(patsubst get-build-aux/%,%,$@)
|
||||||
get-config/config.guess get-config/config.sub:
|
get-build-aux/config.guess get-build-aux/config.sub:
|
||||||
@echo $(WGET) $(config-url) -O $(target) \
|
@echo Retrieving $(target) from $(config-url)
|
||||||
&& $(WGET) $(config-url) -O $(target).t \
|
$(WGET) $(config-url) -O $(target).t \
|
||||||
&& $(move_if_change)
|
&& $(move_if_change)
|
||||||
|
|
||||||
gnulib-url = $(git-url)/gnulib.git/plain/build-aux/$(patsubst get-config/%,%,$@)
|
gnulib-url = $(git-url)/gnulib.git/plain/build-aux/$(patsubst get-build-aux/%,%,$@)
|
||||||
get-config/texinfo.tex:
|
get-build-aux/texinfo.tex:
|
||||||
@echo $(WGET) $(gnulib-url) -O $(target) \
|
@echo Retrieving $(target) from $(gnulib-url)
|
||||||
&& $(WGET) $(gnulib-url) -O $(target).t \
|
$(WGET) $(gnulib-url) -O $(target).t \
|
||||||
&& $(move_if_change)
|
&& $(move_if_change)
|
||||||
|
|
||||||
gnustandards-url = $(cvs-url)/gnustandards/gnustandards/$(patsubst get-doc/%,%,$@)
|
gnustandards-url = $(cvs-url)/gnustandards/gnustandards/$(patsubst get-doc/%,%,$@)
|
||||||
get-doc/make-stds.texi get-doc/fdl.texi:
|
get-doc/make-stds.texi get-doc/fdl.texi:
|
||||||
@echo $(WGET) $(gnustandards-url) -O $(target) \
|
@echo Retrieving $(target) from $(gnustandards-url)
|
||||||
&& $(WGET) $(gnustandards-url) -O $(target).t \
|
$(WGET) $(gnustandards-url) -O $(target).t \
|
||||||
&& $(move_if_change)
|
&& $(move_if_change)
|
||||||
|
|
||||||
.PHONY: scm-update
|
|
||||||
scm-update: get-config/texinfo.tex get-config/config.guess get-config/config.sub get-doc/make-stds.texi get-doc/fdl.texi
|
|
||||||
|
|
||||||
|
# ---------------------------- #
|
||||||
|
# Extra configuration checks. #
|
||||||
|
# ---------------------------- #
|
||||||
|
|
||||||
# --------------------- #
|
# Make the dist file contents more regular, if we're using GNU tar.
|
||||||
# Updating everything. #
|
# Suggested by Tzvetelin Katchov <katchov@gnu.org>
|
||||||
# --------------------- #
|
|
||||||
|
|
||||||
.PHONY: update
|
export TAR_OPTIONS := --mode=u+w,go-w --owner=0 --group=0 --numeric-owner --sort=name
|
||||||
update: po-update scm-update
|
|
||||||
|
# When I released 4.3 somehow the INSTALL file was missing.
|
||||||
|
# When I tried to build it again, it was there. I have no idea what happened
|
||||||
|
# but add a new check to be sure it doesn't happen again.
|
||||||
|
mk_dist_files = AUTHORS ChangeLog COPYING INSTALL README src/mkconfig.h
|
||||||
|
|
||||||
|
dist: mk-dist mk-distcheck
|
||||||
|
|
||||||
|
.PHONY: mk-distcheck
|
||||||
|
mk-distcheck: distdir
|
||||||
|
@echo "Checking for extra installed files..."
|
||||||
|
@for fn in $(mk_dist_files); do \
|
||||||
|
test -f '$(distdir)'/"$$fn" \
|
||||||
|
|| { echo "Missing dist file: $$fn"; exit 1; }; \
|
||||||
|
done; true
|
||||||
|
|
||||||
|
# Make sure that the files in lib/ have been updated from the files in gl/lib/
|
||||||
|
|
||||||
|
GL_LIB_FILES := $(wildcard gl/lib/*)
|
||||||
|
|
||||||
|
mk-dist:
|
||||||
|
@echo "Checking gl/lib files..."
|
||||||
|
@for fn in $(GL_LIB_FILES); do \
|
||||||
|
cmp $$fn $${fn##gl/} \
|
||||||
|
|| { echo "Run ./bootstrap --gen ?"; exit 1; }; \
|
||||||
|
done; true
|
||||||
|
|
||||||
|
# ---------------------------------- #
|
||||||
|
# Alternative configuration checks. #
|
||||||
|
# ---------------------------------- #
|
||||||
|
|
||||||
|
CFGCHECK_CONFIGFLAGS =
|
||||||
|
CFGCHECK_BUILDFLAGS =
|
||||||
|
# We can't use our mondo warnings as these are used to compile gnulib modules
|
||||||
|
# as well, and that will fail.
|
||||||
|
CFGCHECK_MAKEFLAGS = # CFLAGS='$(AM_CFLAGS)'
|
||||||
|
|
||||||
|
# We don't support C90 anymore, strictly, but this test still works (with lots
|
||||||
|
# of warnings) and it helps us avoid egregious incompatibilities.
|
||||||
|
checkcfg.strict-c90: CFGCHECK_CONFIGFLAGS = CFLAGS='-std=c90 -pedantic'
|
||||||
|
checkcfg.strict-c90: CFGCHECK_MAKEFLAGS =
|
||||||
|
|
||||||
|
checkcfg.job-pipe: CFGCHECK_CONFIGFLAGS = CPPFLAGS=-DJOBSERVER_USE_FIFO=0
|
||||||
|
checkcfg.no-jobserver:CFGCHECK_CONFIGFLAGS = --disable-job-server
|
||||||
|
checkcfg.no-load: CFGCHECK_CONFIGFLAGS = --disable-load
|
||||||
|
checkcfg.no-guile: CFGCHECK_CONFIGFLAGS = --without-guile
|
||||||
|
checkcfg.no-spawn: CFGCHECK_CONFIGFLAGS = --disable-posix-spawn
|
||||||
|
checkcfg.no-sysglob: CFGCHECK_CONFIGFLAGS = make_cv_sys_gnu_glob=no
|
||||||
|
checkcfg.no-loadavg: CFGCHECK_CONFIGFLAGS = ac_cv_func_getloadavg=no \
|
||||||
|
ac_cv_have_decl_getloadavg=no \
|
||||||
|
gl_cv_have_raw_decl_getloadavg=no \
|
||||||
|
ac_cv_lib_util_getloadavg=no \
|
||||||
|
ac_cv_lib_getloadavg_getloadavg=no
|
||||||
|
checkcfg.no-sync: CFGCHECK_CONFIGFLAGS = CPPFLAGS=-DNO_OUTPUT_SYNC
|
||||||
|
checkcfg.no-archives: CFGCHECK_CONFIGFLAGS = CPPFLAGS=-DNO_ARCHIVES
|
||||||
|
|
||||||
|
CONFIG_CHECKS := \
|
||||||
|
checkcfg.strict-c90 \
|
||||||
|
checkcfg.job-pipe \
|
||||||
|
checkcfg.no-jobserver \
|
||||||
|
checkcfg.no-load \
|
||||||
|
checkcfg.no-guile \
|
||||||
|
checkcfg.no-spawn \
|
||||||
|
checkcfg.no-sysglob \
|
||||||
|
checkcfg.no-loadavg \
|
||||||
|
checkcfg.no-sync \
|
||||||
|
checkcfg.no-archives
|
||||||
|
|
||||||
|
.PHONY: check-alt-config
|
||||||
|
check-alt-config: $(CONFIG_CHECKS)
|
||||||
|
@echo --- $@ SUCCESS
|
||||||
|
|
||||||
|
# Trick GNU Make so it doesn't run the submake as a recursive make.
|
||||||
|
NR_MAKE = $(MAKE)
|
||||||
|
|
||||||
|
# Check builds both with build.sh and with make
|
||||||
|
build.sh_SCRIPT = exec >>'checkcfg.$*.log' 2>&1; set -x; \
|
||||||
|
cd $(distdir)/_build \
|
||||||
|
&& OUTDIR=_bld ../build.sh -k $(CFGCHECK_BUILD_FLAGS) \
|
||||||
|
&& _bld/make GMK_OUTDIR=../_bld $(AM_MAKEFLAGS) check-local \
|
||||||
|
&& _bld/make GMK_OUTDIR=../_bld $(AM_MAKEFLAGS) clean
|
||||||
|
|
||||||
|
nrmake_SCRIPT = exec >>'checkcfg.$*.log' 2>&1; set -x; \
|
||||||
|
cd $(distdir)/_build \
|
||||||
|
&& $(NR_MAKE) $(AM_MAKEFLAGS) $(CFGCHECK_MAKEFLAGS) \
|
||||||
|
&& ./make $(AM_MAKEFLAGS) check \
|
||||||
|
&& ./make $(AM_MAKEFLAGS) clean
|
||||||
|
|
||||||
|
$(CONFIG_CHECKS): checkcfg.%: distdir
|
||||||
|
@echo "Building $@ (output in checkcfg.$*.log)"
|
||||||
|
exec >'checkcfg.$*.log' 2>&1; \
|
||||||
|
echo "Testing configure with $(CFGCHECK_CONFIGFLAGS)"; set -x; \
|
||||||
|
rm -rf $(distdir)/_build \
|
||||||
|
&& mkdir $(distdir)/_build \
|
||||||
|
&& cd $(distdir)/_build \
|
||||||
|
&& ../configure --srcdir=.. $(CFGCHECK_CONFIGFLAGS) \
|
||||||
|
$(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS)
|
||||||
|
$(build.sh_SCRIPT)
|
||||||
|
$(nrmake_SCRIPT)
|
||||||
|
|
||||||
|
# Try using Basic.mk. I can't test this on POSIX systems because it is only
|
||||||
|
# used for non-POSIX systems; POSIX systems can just use normal
|
||||||
|
# configure/Makefile.in etc.
|
||||||
|
checkcfg.basicmk: checkcfg.% : distdir
|
||||||
|
@echo "Building $@ (output in checkcfg.$*.log)"
|
||||||
|
exec >'checkcfg.$*.log' 2>&1; \
|
||||||
|
echo "Testing Basic.mk SRCDIR=.."; set -x; \
|
||||||
|
rm -rf $(distdir)/_build \
|
||||||
|
&& mkdir $(distdir)/_build \
|
||||||
|
&& cd $(distdir)/_build \
|
||||||
|
&& ../configure --srcdir=.. \
|
||||||
|
$(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS)
|
||||||
|
exec >>'checkcfg.$*.log' 2>&1; set -x; \
|
||||||
|
cd $(distdir)/_build \
|
||||||
|
&& $(NR_MAKE) $(AM_MAKEFLAGS) -f ../Basic.mk SRCDIR=.. $(CFGCHECK_MAKEFLAGS)
|
||||||
|
&& ./make $(AM_MAKEFLAGS) -f ../Basic.mk SRCDIR=.. check \
|
||||||
|
&& ./make $(AM_MAKEFLAGS) -f ../Basic.mk SRCDIR=.. clean
|
||||||
|
exec >>'checkcfg.$*.log' 2>&1; \
|
||||||
|
echo "Testing Basic.mk SRCDIR=."; set -x; \
|
||||||
|
&& rm -rf $(distdir)/_build \
|
||||||
|
&& cd $(distdir) \
|
||||||
|
&& ./configure \
|
||||||
|
$(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
|
&& $(NR_MAKE) $(AM_MAKEFLAGS) -f Basic.mk '$(CFGCHECK_MAKEFLAGS)' \
|
||||||
|
&& ./make $(AM_MAKEFLAGS) -f Basic.mk check \
|
||||||
|
&& ./make $(AM_MAKEFLAGS) -f Basic.mk clean
|
||||||
|
|
||||||
|
|
||||||
## --------------- ##
|
## --------------- ##
|
||||||
## Sanity checks. ##
|
## Sanity checks. ##
|
||||||
## --------------- ##
|
## --------------- ##
|
||||||
|
|
||||||
|
# Before we build a distribution be sure we run our local checks
|
||||||
|
#distdir: local-check
|
||||||
|
|
||||||
|
.PHONY: local-check po-check changelog-check
|
||||||
|
|
||||||
# Checks that don't require Git. Run 'changelog-check' last as
|
# Checks that don't require Git. Run 'changelog-check' last as
|
||||||
# previous test may reveal problems requiring new ChangeLog entries.
|
# previous test may reveal problems requiring new ChangeLog entries.
|
||||||
local-check: po-check changelog-check
|
local-check: po-check changelog-check
|
||||||
@ -195,23 +378,128 @@ local-check: po-check changelog-check
|
|||||||
# copyright-check writable-files
|
# copyright-check writable-files
|
||||||
|
|
||||||
changelog-check:
|
changelog-check:
|
||||||
if head $(top_srcdir)/ChangeLog | grep 'Version $(VERSION)' >/dev/null; then \
|
if head $(top_srcdir)/ChangeLog | grep 'Version $(PACKAGE_VERSION)' >/dev/null; then \
|
||||||
:; \
|
:; \
|
||||||
else \
|
else \
|
||||||
echo "$(VERSION) not in ChangeLog" 1>&2; \
|
echo "$(PACKAGE_VERSION) not in ChangeLog" 1>&2; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verify that all source files using _() are listed in po/POTFILES.in.
|
# Verify that all source files using _() are listed in po/POTFILES.in.
|
||||||
# Ignore makeint.h; it defines _().
|
# Ignore src/makeint.h; it defines _().
|
||||||
po-check:
|
po-check:
|
||||||
if test -f po/POTFILES.in; then \
|
if test -f po/POTFILES.in; then \
|
||||||
grep '^[^#]' po/POTFILES.in | sort > $@-1; \
|
grep '^[^#]' po/POTFILES.in | sort > $@-1; \
|
||||||
$(PERL) -wn -e 'if (/\b_\(/) { $$ARGV eq "makeint.h" || print "$$ARGV\n" and close ARGV }' *.c *.h | sort > $@-2; \
|
find [a-z]* -name '*.[ch]' | xargs grep -l '\b_(' | grep -v src/makeint.h | sort > $@-2; \
|
||||||
diff -u $@-1 $@-2 || exit 1; \
|
diff -u $@-1 $@-2 || exit 1; \
|
||||||
rm -f $@-1 $@-2; \
|
rm -f $@-1 $@-2; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
## --------------- ##
|
||||||
|
## Generate docs. ##
|
||||||
|
## --------------- ##
|
||||||
|
|
||||||
|
.PHONY: update-makeweb gendocs
|
||||||
|
|
||||||
|
CVS = cvs
|
||||||
|
|
||||||
|
makeweb-repo = $(USER)@cvs.sv.gnu.org:/web/make
|
||||||
|
gnuweb-repo = :pserver:anonymous@cvs.sv.gnu.org:/web/www
|
||||||
|
gnuweb-dir = www/server/standards
|
||||||
|
|
||||||
|
# Get the GNU Make web page boilerplate etc.
|
||||||
|
update-makeweb:
|
||||||
|
test -d '$(MAKEWEBDIR)' || mkdir -p '$(MAKEWEBDIR)'
|
||||||
|
test -d '$(MAKEWEBDIR)'/CVS \
|
||||||
|
&& { cd '$(MAKEWEBDIR)' && $(CVS) update; } \
|
||||||
|
|| { mkdir -p '$(dir $(MAKEWEBDIR))' && cd '$(dir $(MAKEWEBDIR))' \
|
||||||
|
&& $(CVS) -d $(makeweb-repo) co -d '$(notdir $(MAKEWEBDIR))' make; }
|
||||||
|
|
||||||
|
# Get the GNU web page boilerplate etc.
|
||||||
|
update-gnuweb:
|
||||||
|
test -d '$(GNUWEBDIR)' || mkdir -p '$(GNUWEBDIR)'
|
||||||
|
test -d '$(GNUWEBDIR)/$(gnuweb-dir)'/CVS \
|
||||||
|
&& { cd '$(GNUWEBDIR)/$(gnuweb-dir)' && $(CVS) update; } \
|
||||||
|
|| { cd '$(GNUWEBDIR)' && $(CVS) -d $(gnuweb-repo) co '$(gnuweb-dir)'; }
|
||||||
|
|
||||||
|
gendocs: update-gnuweb update-makeweb
|
||||||
|
cp $(GNULIBDIR)/doc/gendocs_template doc
|
||||||
|
cd doc \
|
||||||
|
&& rm -rf doc/manual \
|
||||||
|
&& $(GNULIBDIR)/build-aux/gendocs.sh --email '$(BUGLIST)' \
|
||||||
|
make '$(PACKAGE_NAME) Manual'
|
||||||
|
find '$(MAKEWEBDIR)'/manual \( -name CVS -prune \) -o \( -name '[!.]*' -type f -exec rm -f '{}' \; \)
|
||||||
|
cp -r doc/manual '$(MAKEWEBDIR)'
|
||||||
|
@echo 'Status of $(MAKEWEBDIR) repo:' && cd '$(MAKEWEBDIR)' \
|
||||||
|
&& cvs -q -n update | grep -v '^M '
|
||||||
|
@echo '- cvs add <new files>' \
|
||||||
|
&& echo '- cvs remove <deleted files>' \
|
||||||
|
&& echo '- cvs commit' \
|
||||||
|
&& echo '- cvs tag make-$(subst .,-,$(PACKAGE_VERSION))'
|
||||||
|
|
||||||
|
|
||||||
|
## --------------------------------------------- ##
|
||||||
|
## Submitting Coverity cov-build results to Scan ##
|
||||||
|
## --------------------------------------------- ##
|
||||||
|
|
||||||
|
# Note you must have set COVERITY_TOKEN and COVERITY_EMAIL properly
|
||||||
|
# to submit results. COVERITY_PATH can be set to the root of the
|
||||||
|
# cov-build tools if it's not already on your PATH.
|
||||||
|
|
||||||
|
COV_BUILD_FILE := cov-build.tgz
|
||||||
|
|
||||||
|
.PHONY: cov-build cov-submit
|
||||||
|
|
||||||
|
cov-build: $(COV_BUILD_FILE)
|
||||||
|
|
||||||
|
$(COV_BUILD_FILE): $(filter %.c %.h,$(DISTFILES))
|
||||||
|
$(MAKE) distdir
|
||||||
|
@echo "Running Coverity cov-build"
|
||||||
|
rm -rf '$(distdir)'/_build
|
||||||
|
mkdir '$(distdir)'/_build
|
||||||
|
cd '$(distdir)'/_build \
|
||||||
|
&& ../configure --srcdir=.. \
|
||||||
|
$(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
|
$(CFGCHECK_MAKEFLAGS)
|
||||||
|
PATH="$${COVERITY_PATH:+$$COVERITY_PATH/bin:}$$PATH"; \
|
||||||
|
cd '$(distdir)'/_build \
|
||||||
|
&& cov-build --dir cov-int ../build.sh
|
||||||
|
rm -f '$@'
|
||||||
|
(cd '$(distdir)'/_build && tar czf - cov-int) > '$@'
|
||||||
|
|
||||||
|
cov-submit: $(COV_BUILD_FILE)-submitted
|
||||||
|
|
||||||
|
$(COV_BUILD_FILE)-submitted: $(COV_BUILD_FILE)
|
||||||
|
@test -n "$(COVERITY_TOKEN)" || { echo 'COVERITY_TOKEN not set'; exit 1; }
|
||||||
|
@test -n "$(COVERITY_EMAIL)" || { echo 'COVERITY_EMAIL not set'; exit 1; }
|
||||||
|
rm -f '$@'
|
||||||
|
case '$(PACKAGE_VERSION)' in \
|
||||||
|
(*.*.9*) type="daily build"; ext=".$$(date +%Y%m%d)" ;; \
|
||||||
|
(*) type="release"; ext= ;; \
|
||||||
|
esac; \
|
||||||
|
curl --form token='$(COVERITY_TOKEN)' \
|
||||||
|
--form email='$(COVERITY_EMAIL)' \
|
||||||
|
--form file='@$<' \
|
||||||
|
--form version="$(PACKAGE_VERSION)$$ext" \
|
||||||
|
--form description="$(PACKAGE_NAME) $$type" \
|
||||||
|
'https://scan.coverity.com/builds?project=gmake'
|
||||||
|
cp '$<' '$@'
|
||||||
|
|
||||||
|
|
||||||
|
## ------------------------- ##
|
||||||
|
## Make release targets. ##
|
||||||
|
## ------------------------- ##
|
||||||
|
|
||||||
|
.PHONY: tag-release
|
||||||
|
tag-release:
|
||||||
|
case '$(PACKAGE_VERSION)' in \
|
||||||
|
(*.*.9*) message=" candidate" ;; \
|
||||||
|
(*) message= ;; \
|
||||||
|
esac; \
|
||||||
|
$(GIT) tag -m "$(PACKAGE_NAME) release$$message $(PACKAGE_VERSION)" -u '$(GPG_KEYID)' '$(PACKAGE_VERSION)'
|
||||||
|
|
||||||
|
|
||||||
## ------------------------- ##
|
## ------------------------- ##
|
||||||
## GNU FTP upload artifacts. ##
|
## GNU FTP upload artifacts. ##
|
||||||
## ------------------------- ##
|
## ------------------------- ##
|
||||||
@ -220,45 +508,18 @@ po-check:
|
|||||||
# Sign it with my key. If you don't have my key/passphrase then sorry,
|
# Sign it with my key. If you don't have my key/passphrase then sorry,
|
||||||
# you're SOL! :)
|
# you're SOL! :)
|
||||||
|
|
||||||
GPG = gpg
|
GNUPLOAD := $(GNULIBDIR)/build-aux/gnupload
|
||||||
GPGFLAGS = -u 6338B6D4
|
|
||||||
|
|
||||||
DIST_ARCHIVES_SIG = $(addsuffix .sig,$(DIST_ARCHIVES))
|
|
||||||
DIST_ARCHIVES_DIRECTIVE = $(addsuffix .directive.asc,$(DIST_ARCHIVES))
|
|
||||||
|
|
||||||
# A simple rule to test signing, etc.
|
|
||||||
.PHONY: distsign
|
|
||||||
distsign: $(DIST_ARCHIVES_SIG) $(DIST_ARCHIVES_DIRECTIVE)
|
|
||||||
|
|
||||||
%.sig : %
|
|
||||||
@echo "Signing file '$<':"
|
|
||||||
$(GPG) $(GPGFLAGS) -o "$@" -b "$<"
|
|
||||||
|
|
||||||
%.directive.asc: %
|
|
||||||
@echo "Creating directive file '$@':"
|
|
||||||
@( \
|
|
||||||
echo 'version: 1.1'; \
|
|
||||||
echo 'directory: make'; \
|
|
||||||
echo 'filename: $*'; \
|
|
||||||
echo 'comment: Official upload of GNU make version $(VERSION)'; \
|
|
||||||
) > "$*.directive"
|
|
||||||
$(GPG) $(GPGFLAGS) -o "$@" --clearsign "$*.directive"
|
|
||||||
@rm -f "$*.directive"
|
|
||||||
|
|
||||||
# Upload the artifacts
|
|
||||||
|
|
||||||
FTPPUT = ncftpput
|
|
||||||
gnu-upload-host = ftp-upload.gnu.org
|
|
||||||
gnu-upload-dir = /incoming
|
|
||||||
|
|
||||||
|
|
||||||
UPLOADS = upload-alpha upload-ftp
|
UPLOADS = upload-alpha upload-ftp
|
||||||
.PHONY: $(UPLOADS)
|
.PHONY: $(UPLOADS)
|
||||||
$(UPLOADS): $(DIST_ARCHIVES) $(DIST_ARCHIVES_SIG) $(DIST_ARCHIVES_DIRECTIVE)
|
$(UPLOADS): upload-%: $(DIST_ARCHIVES)
|
||||||
$(FTPPUT) "$(gnu-upload-host)" "$(gnu-upload-dir)/$(@:upload-%=%)" $^
|
$(GNUPLOAD) --user "$(GPG_KEYID)" --to "$*.gnu.org:make" -- $^
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1997-2013 Free Software Foundation, Inc.
|
# Rebuild Makefile.in if this file is modified.
|
||||||
|
Makefile.in: maintMakefile
|
||||||
|
|
||||||
|
# Copyright (C) 1997-2024 Free Software Foundation, Inc.
|
||||||
# This file is part of GNU Make.
|
# This file is part of GNU Make.
|
||||||
#
|
#
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -272,4 +533,4 @@ $(UPLOADS): $(DIST_ARCHIVES) $(DIST_ARCHIVES_SIG) $(DIST_ARCHIVES_DIRECTIVE)
|
|||||||
# details.
|
# details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
281
make-gdb.py
Normal file
281
make-gdb.py
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
"""GDB pretty-printer macros for GNU Make."""
|
||||||
|
|
||||||
|
import gdb # pylint: disable=import-error
|
||||||
|
import gdb.printing # pylint: disable=import-error
|
||||||
|
|
||||||
|
|
||||||
|
# Memoize types we commonly use
|
||||||
|
_TYPES = {}
|
||||||
|
|
||||||
|
|
||||||
|
def getType(tname):
|
||||||
|
"""Given a type name return a GDB type."""
|
||||||
|
global _TYPES
|
||||||
|
if tname not in _TYPES:
|
||||||
|
tn = tname.rstrip('*')
|
||||||
|
if tn not in _TYPES:
|
||||||
|
_TYPES[tn] = gdb.lookup_type(tn)
|
||||||
|
while tn != tname:
|
||||||
|
# Want a pointer type
|
||||||
|
t = tn
|
||||||
|
tn += '*'
|
||||||
|
_TYPES[tn] = _TYPES[t].pointer()
|
||||||
|
return _TYPES[tname]
|
||||||
|
|
||||||
|
|
||||||
|
def isNullptr(val):
|
||||||
|
"""Return True if the value is a null pointer."""
|
||||||
|
return int(val.cast(getType('unsigned long long'))) == 0
|
||||||
|
|
||||||
|
|
||||||
|
class ShowArgv(gdb.Command):
|
||||||
|
"""Print a null-terminated array of strings.
|
||||||
|
|
||||||
|
Argument:
|
||||||
|
A char** where the last one is NULL (e.g., argv)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Create the showargv function."""
|
||||||
|
gdb.Command.__init__(self, "showargv", gdb.COMMAND_USER)
|
||||||
|
|
||||||
|
def invoke(self, arg, from_tty):
|
||||||
|
"""Show the argv."""
|
||||||
|
args = gdb.string_to_argv(arg)
|
||||||
|
if len(args) != 1:
|
||||||
|
raise gdb.GdbError(self._usage)
|
||||||
|
|
||||||
|
val = gdb.parse_and_eval(args[0])
|
||||||
|
if val is None:
|
||||||
|
raise gdb.GdbError('%s is not a valid expression' % (args[0]))
|
||||||
|
|
||||||
|
strs = []
|
||||||
|
while not isNullptr(val.dereference()):
|
||||||
|
strs.append('"'+val.dereference().string()+'"')
|
||||||
|
val += 1
|
||||||
|
|
||||||
|
gdb.write("[%d] = [%s]\n" % (len(strs), ', '.join(strs)))
|
||||||
|
gdb.flush()
|
||||||
|
|
||||||
|
|
||||||
|
ShowArgv()
|
||||||
|
|
||||||
|
|
||||||
|
class ShowNextList(gdb.Command):
|
||||||
|
"""Print a structure that has a "next" pointer.
|
||||||
|
|
||||||
|
Argument:
|
||||||
|
A pointer to a struct which contains a "next" member.
|
||||||
|
"""
|
||||||
|
|
||||||
|
_usage = 'usage: showlist <listptr>'
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Create a "showlist" function."""
|
||||||
|
gdb.Command.__init__(self, "showlist", gdb.COMMAND_USER)
|
||||||
|
|
||||||
|
def invoke(self, arg, from_tty):
|
||||||
|
"""Show the elements in the provided list."""
|
||||||
|
args = gdb.string_to_argv(arg)
|
||||||
|
if len(args) != 1:
|
||||||
|
raise gdb.GdbError(self._usage)
|
||||||
|
|
||||||
|
val = gdb.parse_and_eval(args[0])
|
||||||
|
if val is None:
|
||||||
|
raise gdb.GdbError('%s is not a valid expression' % (args[0]))
|
||||||
|
i = 0
|
||||||
|
while not isNullptr(val):
|
||||||
|
gdb.write("%s : %s\n" % (val, val.dereference()))
|
||||||
|
gdb.flush()
|
||||||
|
i += 1
|
||||||
|
val = val['next']
|
||||||
|
gdb.write("%s contains %d elements\n" % (args[0], i))
|
||||||
|
gdb.flush()
|
||||||
|
|
||||||
|
|
||||||
|
ShowNextList()
|
||||||
|
|
||||||
|
|
||||||
|
class FileLocation(object):
|
||||||
|
"""Print a file location."""
|
||||||
|
|
||||||
|
def __init__(self, val):
|
||||||
|
"""Create a FileLocation object."""
|
||||||
|
self.val = val
|
||||||
|
|
||||||
|
def to_string(self):
|
||||||
|
"""Convert a FileLocation to a string."""
|
||||||
|
if int(self.val['filenm']):
|
||||||
|
return "%s:%d" % (str(self.val['filenm']), self.val['lineno'])
|
||||||
|
return 'NILF'
|
||||||
|
|
||||||
|
|
||||||
|
class StringListPrinter(object):
|
||||||
|
"""Print a stringlist."""
|
||||||
|
|
||||||
|
def __init__(self, val):
|
||||||
|
"""Create a StringListPrinter object."""
|
||||||
|
self.val = val
|
||||||
|
|
||||||
|
def to_string(self):
|
||||||
|
"""Convert a HashTable into a string."""
|
||||||
|
return "size=%d, capacity=%d" % (self.val['idx'], self.val['max'])
|
||||||
|
|
||||||
|
def children(self):
|
||||||
|
"""Yield each string in the list."""
|
||||||
|
i = 0
|
||||||
|
elts = self.val['list']
|
||||||
|
while i < self.val['idx']:
|
||||||
|
nm = '[%d] ' % i
|
||||||
|
yield (nm, elts.dereference())
|
||||||
|
i += 1
|
||||||
|
elts += 1
|
||||||
|
|
||||||
|
def display_hint(self):
|
||||||
|
"""Show the display hint for the pretty-printer."""
|
||||||
|
return 'array'
|
||||||
|
|
||||||
|
|
||||||
|
class VariablePrinter(object):
|
||||||
|
"""Print a struct variable."""
|
||||||
|
|
||||||
|
def __init__(self, val):
|
||||||
|
"""Create a VariablePrinter object."""
|
||||||
|
self.val = val
|
||||||
|
|
||||||
|
def to_string(self):
|
||||||
|
"""Convert a VariablePrinter object into a string."""
|
||||||
|
if self.val['append']:
|
||||||
|
a = '+='
|
||||||
|
elif self.val['conditional']:
|
||||||
|
a = '?='
|
||||||
|
else:
|
||||||
|
a = '='
|
||||||
|
flags = []
|
||||||
|
s = str(self.val['flavor'])
|
||||||
|
if s != 'f_bogus':
|
||||||
|
flags.append(s)
|
||||||
|
s = str(self.val['origin'])
|
||||||
|
if s != 'o_default':
|
||||||
|
flags.append(s)
|
||||||
|
s = str(self.val['export'])
|
||||||
|
if s != 'v_default':
|
||||||
|
flags.append(s)
|
||||||
|
return '%s[%s]: "%s" %s "%s"' % (
|
||||||
|
self.val['fileinfo'], ','.join(flags),
|
||||||
|
self.val['name'].string(), a, self.val['value'].string())
|
||||||
|
|
||||||
|
|
||||||
|
class HashTablePrinter(object):
|
||||||
|
"""Pretty-print a hash table."""
|
||||||
|
|
||||||
|
DELITEM = None
|
||||||
|
|
||||||
|
def __init__(self, val):
|
||||||
|
"""Create a HashTablePrinter object."""
|
||||||
|
self.val = val
|
||||||
|
|
||||||
|
def to_string(self):
|
||||||
|
"""Convert a HashTable into a string."""
|
||||||
|
return "size=%d, capacity=%d, empty=%d, collisions=%d, rehashes=%d" % (
|
||||||
|
self.val['ht_size'], self.val['ht_capacity'],
|
||||||
|
self.val['ht_empty_slots'], self.val['ht_collisions'],
|
||||||
|
self.val['ht_rehashes'])
|
||||||
|
|
||||||
|
def children(self):
|
||||||
|
"""Yield each ID and value."""
|
||||||
|
for (i, v) in self.iterator():
|
||||||
|
nm = '[%d] ' % i
|
||||||
|
yield (nm, i)
|
||||||
|
yield (nm, v)
|
||||||
|
|
||||||
|
def iterator(self):
|
||||||
|
"""Provide an iterator for HashTable."""
|
||||||
|
if HashTablePrinter.DELITEM is None:
|
||||||
|
HashTablePrinter.DELITEM = gdb.lookup_global_symbol('hash_deleted_item').value()
|
||||||
|
lst = self.val['ht_vec']
|
||||||
|
for i in range(0, self.val['ht_size']):
|
||||||
|
v = lst[i]
|
||||||
|
if int(v) != 0 and v != HashTablePrinter.DELITEM:
|
||||||
|
yield (i, v)
|
||||||
|
|
||||||
|
def display_hint(self):
|
||||||
|
"""Show the display hint for the pretty-printer."""
|
||||||
|
return 'map'
|
||||||
|
|
||||||
|
|
||||||
|
class VariableSetPrinter(object):
|
||||||
|
"""Print a variable_set."""
|
||||||
|
|
||||||
|
def __init__(self, val):
|
||||||
|
"""Create a variable_set pretty-printer."""
|
||||||
|
self.tbl = HashTablePrinter(val['table'])
|
||||||
|
|
||||||
|
def to_string(self):
|
||||||
|
"""Convert a variable_set to string."""
|
||||||
|
return self.tbl.to_string()
|
||||||
|
|
||||||
|
def children(self):
|
||||||
|
"""Iterate through variables and values."""
|
||||||
|
for (i, v) in self.tbl.iterator():
|
||||||
|
ptr = v.cast(getType('struct variable*'))
|
||||||
|
nm = '[%d] ' % (i)
|
||||||
|
yield (nm, ptr)
|
||||||
|
yield (nm, str(ptr.dereference()))
|
||||||
|
|
||||||
|
def display_hint(self):
|
||||||
|
"""Show the display hint for the pretty-printer."""
|
||||||
|
return 'map'
|
||||||
|
|
||||||
|
|
||||||
|
class VariableSetListPrinter(object):
|
||||||
|
"""Print a variable_set_list."""
|
||||||
|
|
||||||
|
GLOBALSET = None
|
||||||
|
|
||||||
|
def __init__(self, val):
|
||||||
|
"""Create a variable_set_list pretty-printer."""
|
||||||
|
self.val = val
|
||||||
|
|
||||||
|
def to_string(self):
|
||||||
|
"""Convert a variable_set_list to string."""
|
||||||
|
return str(self.val.address)
|
||||||
|
|
||||||
|
def children(self):
|
||||||
|
"""Iterate through variables and values."""
|
||||||
|
if VariableSetListPrinter.GLOBALSET is None:
|
||||||
|
block = gdb.lookup_global_symbol('init_hash_global_variable_set').symtab.static_block()
|
||||||
|
VariableSetListPrinter.GLOBALSET = gdb.lookup_symbol(
|
||||||
|
'global_variable_set', block)[0].value().address
|
||||||
|
ptr = self.val.address
|
||||||
|
i = 0
|
||||||
|
while not isNullptr(ptr):
|
||||||
|
nm = '[%d] ' % (i)
|
||||||
|
yield (nm, ptr['set'])
|
||||||
|
if int(ptr['set']) == int(VariableSetListPrinter.GLOBALSET):
|
||||||
|
yield (nm, "global_variable_set")
|
||||||
|
else:
|
||||||
|
yield (nm, str(ptr['set'].dereference()))
|
||||||
|
i += 1
|
||||||
|
ptr = ptr['next']
|
||||||
|
|
||||||
|
def display_hint(self):
|
||||||
|
"""Show the display hint for the pretty-printer."""
|
||||||
|
return 'map'
|
||||||
|
|
||||||
|
|
||||||
|
def build_pretty_printer():
|
||||||
|
"""Install all the pretty-printers."""
|
||||||
|
pp = gdb.printing.RegexpCollectionPrettyPrinter("gnumake")
|
||||||
|
pp.add_printer('floc', r'^floc$', FileLocation)
|
||||||
|
pp.add_printer('stringlist', r'^stringlist$', StringListPrinter)
|
||||||
|
pp.add_printer('variable', r'^variable$', VariablePrinter)
|
||||||
|
pp.add_printer('hashtable', r'^hash_table$', HashTablePrinter)
|
||||||
|
pp.add_printer('variableset', r'^variable_set$', VariableSetPrinter)
|
||||||
|
pp.add_printer('variablesetlist', r'^variable_set_list$', VariableSetListPrinter)
|
||||||
|
return pp
|
||||||
|
|
||||||
|
|
||||||
|
# Use replace=True so we can re-source this file
|
||||||
|
gdb.printing.register_pretty_printer(gdb.current_objfile(),
|
||||||
|
build_pretty_printer(), replace=True)
|
5
make.lnk
5
make.lnk
@ -1,5 +0,0 @@
|
|||||||
FROM LIB:cres.o "commands.o"+"job.o"+"dir.o"+"file.o"+"misc.o"+"main.o"+"read.o"+"remake.o"+"rule.o"+"implicit.o"+"default.o"+"variable.o"+"expand.o"+"function.o"+"vpath.o"+"version.o"+"ar.o"+"arscan.o"+"signame.o"+"remote-stub.o"+"getopt.o"+"getopt1.o"+"alloca.o"+"amiga.o"+"hash.o"+"strcache.o"+"output.o"
|
|
||||||
TO "make.new"
|
|
||||||
LIB glob/glob.lib LIB:sc.lib LIB:amiga.lib
|
|
||||||
QUIET
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 8.00
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_msvc.net2003", "make_msvc_net2003.vcproj", "{E96B5060-3240-4723-91C9-E64F1C877A04}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfiguration) = preSolution
|
|
||||||
Debug = Debug
|
|
||||||
Release = Release
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfiguration) = postSolution
|
|
||||||
{E96B5060-3240-4723-91C9-E64F1C877A04}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{E96B5060-3240-4723-91C9-E64F1C877A04}.Debug.Build.0 = Debug|Win32
|
|
||||||
{E96B5060-3240-4723-91C9-E64F1C877A04}.Release.ActiveCfg = Release|Win32
|
|
||||||
{E96B5060-3240-4723-91C9-E64F1C877A04}.Release.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityAddIns) = postSolution
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
@ -1,331 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
|
||||||
<VisualStudioProject
|
|
||||||
ProjectType="Visual C++"
|
|
||||||
Version="7.10"
|
|
||||||
Name="make_msvc.net2003"
|
|
||||||
ProjectGUID="{E96B5060-3240-4723-91C9-E64F1C877A04}"
|
|
||||||
Keyword="Win32Proj">
|
|
||||||
<Platforms>
|
|
||||||
<Platform
|
|
||||||
Name="Win32"/>
|
|
||||||
</Platforms>
|
|
||||||
<Configurations>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug|Win32"
|
|
||||||
OutputDirectory="Debug"
|
|
||||||
IntermediateDirectory="Debug"
|
|
||||||
ConfigurationType="1"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories=".;w32/include;glob"
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;HAVE_CONFIG_H=1;WINDOWS32=1"
|
|
||||||
MinimalRebuild="TRUE"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
ForceConformanceInForLoopScope="TRUE"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
Detect64BitPortabilityProblems="FALSE"
|
|
||||||
DebugInformationFormat="4"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
OutputFile="$(OutDir)/make_msvc.net2003.exe"
|
|
||||||
LinkIncremental="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
ProgramDatabaseFile="$(OutDir)/make_msvc.net2003.pdb"
|
|
||||||
SubSystem="1"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
Description="Copying config.h.W32 to config.h"
|
|
||||||
CommandLine="if not exist config.h copy config.h.W32 config.h"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|Win32"
|
|
||||||
OutputDirectory="Release"
|
|
||||||
IntermediateDirectory="Release"
|
|
||||||
ConfigurationType="1"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AdditionalIncludeDirectories=".;w32/include;glob"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;HAVE_CONFIG_H=1;WINDOWS32=1"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
ForceConformanceInForLoopScope="TRUE"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="4"
|
|
||||||
Detect64BitPortabilityProblems="FALSE"
|
|
||||||
DebugInformationFormat="3"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
OutputFile="$(OutDir)/make_msvc.net2003.exe"
|
|
||||||
LinkIncremental="1"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
SubSystem="1"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
Description="Copying config.h.W32 to config.h"
|
|
||||||
CommandLine="if not exist config.h copy config.h.W32 config.h"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
|
||||||
<References>
|
|
||||||
</References>
|
|
||||||
<Files>
|
|
||||||
<Filter
|
|
||||||
Name="src"
|
|
||||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
|
||||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
|
||||||
<File
|
|
||||||
RelativePath=".\ar.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\arscan.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\commands.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\default.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\dir.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\expand.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\file.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\function.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\getloadavg.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\getopt.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\getopt1.c">
|
|
||||||
</File>
|
|
||||||
<!--
|
|
||||||
<File
|
|
||||||
RelativePath=".\guile.c">
|
|
||||||
</File>
|
|
||||||
-->
|
|
||||||
<File
|
|
||||||
RelativePath=".\hash.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\strcache.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\implicit.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\job.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\output.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\main.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\misc.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\read.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\remake.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\remote-stub.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\rule.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\signame.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\variable.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\version.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\vpath.c">
|
|
||||||
</File>
|
|
||||||
<Filter
|
|
||||||
Name="w32"
|
|
||||||
Filter="">
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\compat\dirent.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\subproc\misc.c">
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Debug|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\pathstuff.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\subproc\sub_proc.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\subproc\w32err.c">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="glob"
|
|
||||||
Filter="">
|
|
||||||
<File
|
|
||||||
RelativePath=".\glob\fnmatch.c">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\glob\glob.c">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="include"
|
|
||||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
|
||||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
|
||||||
<File
|
|
||||||
RelativePath=".\commands.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\config.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\debug.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\dep.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\filedef.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\getopt.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\gettext.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\gmk-default.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\hash.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\job.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\output.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\makeint.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\rule.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\variable.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\vmsdir.h">
|
|
||||||
</File>
|
|
||||||
<Filter
|
|
||||||
Name="w32"
|
|
||||||
Filter="">
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\include\dirent.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\include\pathstuff.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\subproc\proc.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\include\sub_proc.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\w32\include\w32err.h">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="glob"
|
|
||||||
Filter="">
|
|
||||||
<File
|
|
||||||
RelativePath=".\glob\fnmatch.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\glob\glob.h">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
</Filter>
|
|
||||||
</Files>
|
|
||||||
<Globals>
|
|
||||||
</Globals>
|
|
||||||
</VisualStudioProject>
|
|
54
makefile.com
54
makefile.com
@ -1,8 +1,7 @@
|
|||||||
$!
|
$!
|
||||||
$! Makefile.com - builds GNU Make for VMS
|
$! Makefile.com - builds GNU Make for VMS
|
||||||
$!
|
$!
|
||||||
$! P1 is non-empty if you want to link with the VAXCRTL library instead
|
$! P1 = LIST will provide compiler listings.
|
||||||
$! of the shareable executable
|
|
||||||
$! P2 = DEBUG will build an image with debug information
|
$! P2 = DEBUG will build an image with debug information
|
||||||
$! P3 = WALL will enable all warning messages (some are suppressed since
|
$! P3 = WALL will enable all warning messages (some are suppressed since
|
||||||
$! one macro intentionally causes an error condition)
|
$! one macro intentionally causes an error condition)
|
||||||
@ -50,6 +49,12 @@ $ endif
|
|||||||
$ endif
|
$ endif
|
||||||
$ endif
|
$ endif
|
||||||
$!
|
$!
|
||||||
|
$!
|
||||||
|
$ if (p1 .eqs. "LIST")
|
||||||
|
$ then
|
||||||
|
$ ccopt = ccopt + "/list/show=(expan,inclu)"
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
$! Should we build a debug image
|
$! Should we build a debug image
|
||||||
$!
|
$!
|
||||||
$ if (p2.eqs."DEBUG")
|
$ if (p2.eqs."DEBUG")
|
||||||
@ -66,29 +71,33 @@ $ if (p3.nes."WALL")
|
|||||||
$ then
|
$ then
|
||||||
$ gosub check_cc_qual
|
$ gosub check_cc_qual
|
||||||
$ endif
|
$ endif
|
||||||
$ filelist = "alloca ar arscan commands default dir expand file function " + -
|
$ filelist = "[.src]ar [.src]arscan [.src]commands [.src]default [.src]dir " + -
|
||||||
"hash implicit job load main misc read remake remote-stub rule " + -
|
"[.src]expand [.src]file [.src]function [.src]guile " + -
|
||||||
"signame variable version vmsfunctions vmsify vpath " + -
|
"[.src]hash [.src]implicit [.src]job [.src]load [.src]main " + -
|
||||||
"[.glob]glob [.glob]fnmatch getopt1 getopt strcache"
|
"[.src]misc [.src]read [.src]remake [.src]remote-stub " + -
|
||||||
$ copy config.h-vms config.h
|
"[.src]rule [.src]output [.src]signame [.src]variable " + -
|
||||||
|
"[.src]version [.src]shuffle [.src]strcache [.src]vpath " + -
|
||||||
|
"[.src]vmsfunctions [.src]vmsify [.src]vms_progname " + -
|
||||||
|
"[.src]vms_exit [.src]vms_export_symbol " + -
|
||||||
|
"[.lib]alloca [.lib]fnmatch [.lib]glob [.src]getopt1 [.src]getopt"
|
||||||
|
$!
|
||||||
|
$ copy [.src]config.h-vms [.src]config.h
|
||||||
|
$ copy [.lib]fnmatch.in.h [.lib]fnmatch.h
|
||||||
|
$ copy [.lib]glob.in.h [.lib]glob.h
|
||||||
$ n=0
|
$ n=0
|
||||||
$ open/write optf make.opt
|
$ open/write optf make.opt
|
||||||
$ loop:
|
$ loop:
|
||||||
$ cfile = f$elem(n," ",filelist)
|
$ cfile = f$elem(n," ",filelist)
|
||||||
$ if cfile .eqs. " " then goto linkit
|
$ if cfile .eqs. " " then goto linkit
|
||||||
$ write sys$output "Compiling ''cfile'..."
|
$ write sys$output "Compiling ''cfile'..."
|
||||||
$ call compileit 'cfile' 'p1'
|
$ call compileit 'cfile'
|
||||||
$ n = n + 1
|
$ n = n + 1
|
||||||
$ goto loop
|
$ goto loop
|
||||||
$ linkit:
|
$ linkit:
|
||||||
$ close optf
|
$ close optf
|
||||||
$ if p1 .nes. "" then goto link_using_library
|
|
||||||
$ link/exe=make make.opt/opt'lopt
|
$ link/exe=make make.opt/opt'lopt
|
||||||
$ goto cleanup
|
$ goto cleanup
|
||||||
$
|
$
|
||||||
$ link_using_library:
|
|
||||||
$ link/exe=make make.opt/opt,sys$library:vaxcrtl/lib'lopt
|
|
||||||
$
|
|
||||||
$ cleanup:
|
$ cleanup:
|
||||||
$ if f$trnlnm("SYS").nes."" then $ deassign sys
|
$ if f$trnlnm("SYS").nes."" then $ deassign sys
|
||||||
$ if f$trnlnm("OPTF").nes."" then $ close optf
|
$ if f$trnlnm("OPTF").nes."" then $ close optf
|
||||||
@ -128,17 +137,24 @@ $!-----------------------------------------------------------------------------
|
|||||||
$!
|
$!
|
||||||
$ compileit : subroutine
|
$ compileit : subroutine
|
||||||
$ ploc = f$locate("]",p1)
|
$ ploc = f$locate("]",p1)
|
||||||
$ filnam = p1
|
$! filnam = p1
|
||||||
$ if ploc .lt. f$length(p1) then filnam=f$extract(ploc+1,100,p1)
|
$ if ploc .lt. f$length(p1)
|
||||||
$ write optf "''filnam'"
|
$ then
|
||||||
$ cc'ccopt'/include=([],[.glob]) -
|
$ objdir = f$extract(0, ploc+1, p1)
|
||||||
/define=("allocated_variable_expand_for_file=alloc_var_expand_for_file","unlink=remove","HAVE_CONFIG_H","VMS") -
|
$ write optf p1
|
||||||
|
$ else
|
||||||
|
$ objdir := []
|
||||||
|
$ write optf objdir+p1
|
||||||
|
$ endif
|
||||||
|
$ cc'ccopt'/nested=none/include=([],[.src],[.lib])/obj='objdir' -
|
||||||
|
/define=("allocated_variable_expand_for_file=alloc_var_expand_for_file",-
|
||||||
|
"unlink=remove","HAVE_CONFIG_H","VMS") -
|
||||||
'p1'
|
'p1'
|
||||||
$ exit
|
$ exit
|
||||||
$ endsubroutine : compileit
|
$ endsubroutine : compileit
|
||||||
$!
|
$!
|
||||||
$!-----------------------------------------------------------------------------
|
$!-----------------------------------------------------------------------------
|
||||||
$!Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
$!Copyright (C) 1996-2024 Free Software Foundation, Inc.
|
||||||
$!This file is part of GNU Make.
|
$!This file is part of GNU Make.
|
||||||
$!
|
$!
|
||||||
$!GNU Make is free software; you can redistribute it and/or modify it under
|
$!GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -152,4 +168,4 @@ $!FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|||||||
$!details.
|
$!details.
|
||||||
$!
|
$!
|
||||||
$!You should have received a copy of the GNU General Public License along with
|
$!You should have received a copy of the GNU General Public License along with
|
||||||
$!this program. If not, see <http://www.gnu.org/licenses/>.
|
$!this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
157
makefile.vms
157
makefile.vms
@ -1,157 +0,0 @@
|
|||||||
# -*-Makefile-*- to build GNU make on VMS
|
|
||||||
#
|
|
||||||
# Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# VMS extensions from GNU Make 3.60 imported by
|
|
||||||
# Klaus Kämpf (kkaempf@rmi.de)
|
|
||||||
# Modified for version 3.78.1 by Hartmut.Becker@compaq.com.
|
|
||||||
# Modified for version 3.80 by zinser@decus.de
|
|
||||||
# Modified for versions 3.81, 3.99.90 by Hartmut Becker
|
|
||||||
|
|
||||||
CC = cc
|
|
||||||
CP = copy
|
|
||||||
|
|
||||||
%.obj: %.c
|
|
||||||
$(CC) $(CFLAGS)/obj=$@ $<
|
|
||||||
#
|
|
||||||
# Makefile for GNU Make
|
|
||||||
#
|
|
||||||
|
|
||||||
ifeq ($(CC),cc)
|
|
||||||
CFLAGS = $(defines) /include=([],[.glob])/prefix=(all,except=(glob,globfree))/standard=relaxed/warn=(disable=questcompare)
|
|
||||||
else
|
|
||||||
CFLAGS = $(defines) /include=([],[.glob])
|
|
||||||
endif
|
|
||||||
#LDFLAGS = /deb
|
|
||||||
LDFLAGS =
|
|
||||||
|
|
||||||
ifeq ($(CC),cc)
|
|
||||||
defines = /define=("unlink=remove","HAVE_CONFIG_H","VMS","allocated_variable_expand_for_file=alloc_var_expand_for_file")
|
|
||||||
else
|
|
||||||
ifeq ($(ARCH),VAX)
|
|
||||||
defines = /define=("HAVE_CONFIG_H","GCC_IS_NATIVE","VAX")
|
|
||||||
else
|
|
||||||
defines = /define=("HAVE_CONFIG_H","GCC_IS_NATIVE")
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
LOAD_AVG = /define="NO_LDAV"
|
|
||||||
|
|
||||||
# If you don't want archive support, comment these out.
|
|
||||||
ARCHIVES = ,ar.obj,arscan.obj
|
|
||||||
ARCHIVES_SRC = ar.c arscan.c
|
|
||||||
|
|
||||||
# If your system needs extra libraries loaded in, define them here.
|
|
||||||
# System V probably need -lPW for alloca.
|
|
||||||
# if on vax, uncomment the following line
|
|
||||||
#LOADLIBES = ,c.opt/opt
|
|
||||||
ifeq ($(CC),cc)
|
|
||||||
#LOADLIBES =,sys$$library:vaxcrtl.olb/lib
|
|
||||||
CRT0 =
|
|
||||||
else
|
|
||||||
LOADLIBES =,gnu_cc_library:libgcc.olb/lib
|
|
||||||
endif
|
|
||||||
|
|
||||||
# If your system doesn't have alloca, or the one provided is bad,
|
|
||||||
# get it from the Emacs distribution and define these.
|
|
||||||
#ALLOCA = ,alloca.obj
|
|
||||||
#ALLOCASRC = alloca.c
|
|
||||||
|
|
||||||
# If there are remote execution facilities defined,
|
|
||||||
# enable them with switches here (see remote-*.c).
|
|
||||||
REMOTE =
|
|
||||||
|
|
||||||
# Any extra object files your system needs.
|
|
||||||
extras = ,signame.obj,remote-stub.obj,vmsfunctions.obj,vmsify.obj
|
|
||||||
#,directory.obj
|
|
||||||
# as an alternative:
|
|
||||||
glob = ,[.glob]glob.obj,[.glob]fnmatch.obj
|
|
||||||
getopt = ,getopt.obj,getopt1.obj
|
|
||||||
# Directory to install 'make' in.
|
|
||||||
bindir = []
|
|
||||||
# Directory to install the man page in.
|
|
||||||
mandir = []
|
|
||||||
# Number to put on the man page filename.
|
|
||||||
manext = 1
|
|
||||||
|
|
||||||
#guile = ,guile.obj
|
|
||||||
|
|
||||||
objs = commands.obj,job.obj,output.obj,dir.obj,file.obj,misc.obj,hash.obj,\
|
|
||||||
load.obj,main.obj,read.obj,remake.obj,rule.obj,implicit.obj,\
|
|
||||||
default.obj,variable.obj,expand.obj,function.obj,strcache.obj,\
|
|
||||||
vpath.obj,version.obj\
|
|
||||||
$(ARCHIVES)$(ALLOCA)$(extras)$(getopt)$(glob)$(guile)
|
|
||||||
|
|
||||||
srcs = commands.c job.c output.c dir.c file.c misc.c guile.c hash.c \
|
|
||||||
load.c main.c read.c remake.c rule.c implicit.c \
|
|
||||||
default.c variable.c expand.c function.c strcache.c \
|
|
||||||
vpath.c version.c vmsfunctions.c vmsify.c $(ARCHIVES_SRC) $(ALLOCASRC) \
|
|
||||||
commands.h dep.h filedef.h job.h output.h makeint.h rule.h variable.h
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: all doc
|
|
||||||
all: config.h make.exe
|
|
||||||
|
|
||||||
doc: make.info make.dvi
|
|
||||||
|
|
||||||
|
|
||||||
make.exe: $(objs)
|
|
||||||
$(LD)$(LDFLAGS)/exe=$@ $^$(LOADLIBES)$(CRT0)
|
|
||||||
|
|
||||||
.PHONY: clean realclean
|
|
||||||
clean:
|
|
||||||
-purge [...]
|
|
||||||
-$(RM) make.exe;,*.obj;
|
|
||||||
-$(RM) [.glob]*.obj;
|
|
||||||
|
|
||||||
# Automatically generated dependencies.
|
|
||||||
# makeint.h: config.h gnumake.h gettext.h
|
|
||||||
# filedef.h: hash.h
|
|
||||||
ar.obj: ar.c makeint.h filedef.h dep.h [.glob]fnmatch.h
|
|
||||||
arscan.obj: arscan.c makeint.h
|
|
||||||
commands.obj: commands.c makeint.h dep.h commands.h filedef.h variable.h job.h
|
|
||||||
default.obj: default.c makeint.h rule.h dep.h job.h filedef.h commands.h variable.h
|
|
||||||
dir.obj: dir.c makeint.h hash.h [.glob]glob.h
|
|
||||||
expand.obj: expand.c makeint.h commands.h filedef.h job.h rule.h variable.h
|
|
||||||
file.obj: file.c makeint.h commands.h dep.h filedef.h variable.h job.h debug.h
|
|
||||||
function.obj: function.c makeint.h variable.h dep.h commands.h filedef.h debug.h job.h
|
|
||||||
getopt.obj: getopt.c getopt.h config.h gettext.h
|
|
||||||
getopt1.obj: getopt1.c getopt.h config.h
|
|
||||||
guile.obj: guile.c makeint.h debug.h dep.h gmk-default.h
|
|
||||||
hash.obj: hash.c makeint.h hash.h
|
|
||||||
implicit.obj: implicit.c makeint.h rule.h dep.h filedef.h debug.h variable.h job.h commands.h
|
|
||||||
job.obj: job.c vmsjobs.c makeint.h commands.h job.h filedef.h variable.h debug.h
|
|
||||||
output.obj: output.c vmsjobs.c makeint.h output.h filedef.h debug.h
|
|
||||||
load.obj: load.c makeint.h debug.h filedef.h variable.h
|
|
||||||
main.obj: main.c makeint.h commands.h dep.h filedef.h variable.h job.h rule.h debug.h getopt.h
|
|
||||||
misc.obj: misc.c makeint.h dep.h debug.h
|
|
||||||
read.obj: read.c makeint.h commands.h dep.h filedef.h variable.h [.glob]glob.h debug.h rule.h job.h
|
|
||||||
remake.obj: remake.c makeint.h commands.h job.h dep.h filedef.h variable.h debug.h
|
|
||||||
remote-stub.obj: remote-stub.c makeint.h filedef.h job.h commands.h
|
|
||||||
rule.obj: rule.c makeint.h commands.h dep.h filedef.h variable.h rule.h job.h
|
|
||||||
signame.obj: signame.c makeint.h
|
|
||||||
strcache.obj: strcache.c makeint.h hash.h
|
|
||||||
variable.obj: variable.c makeint.h commands.h variable.h dep.h filedef.h job.h rule.h
|
|
||||||
version.obj: version.c config.h
|
|
||||||
vmsfunctions.obj: vmsfunctions.c makeint.h vmsdir.h debug.h job.h
|
|
||||||
vmsify.obj: vmsify.c
|
|
||||||
vpath.obj: vpath.c makeint.h filedef.h variable.h
|
|
||||||
[.glob]fnmatch.obj: [.glob]fnmatch.c [.glob]fnmatch.h config.h
|
|
||||||
[.glob]glob.obj: [.glob]glob.c [.glob]glob.h [.glob]fnmatch.h config.h
|
|
||||||
|
|
||||||
config.h: config.h-vms
|
|
||||||
$(CP) $< $@
|
|
725
misc.c
725
misc.c
@ -1,725 +0,0 @@
|
|||||||
/* Miscellaneous generic support functions for GNU Make.
|
|
||||||
Copyright (C) 1988-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include "makeint.h"
|
|
||||||
#include "dep.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
/* GNU make no longer supports pre-ANSI89 environments. */
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_FCNTL_H
|
|
||||||
# include <fcntl.h>
|
|
||||||
#else
|
|
||||||
# include <sys/file.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Compare strings *S1 and *S2.
|
|
||||||
Return negative if the first is less, positive if it is greater,
|
|
||||||
zero if they are equal. */
|
|
||||||
|
|
||||||
int
|
|
||||||
alpha_compare (const void *v1, const void *v2)
|
|
||||||
{
|
|
||||||
const char *s1 = *((char **)v1);
|
|
||||||
const char *s2 = *((char **)v2);
|
|
||||||
|
|
||||||
if (*s1 != *s2)
|
|
||||||
return *s1 - *s2;
|
|
||||||
return strcmp (s1, s2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Discard each backslash-newline combination from LINE.
|
|
||||||
Backslash-backslash-newline combinations become backslash-newlines.
|
|
||||||
This is done by copying the text at LINE into itself. */
|
|
||||||
|
|
||||||
void
|
|
||||||
collapse_continuations (char *line)
|
|
||||||
{
|
|
||||||
char *in, *out, *p;
|
|
||||||
|
|
||||||
in = strchr (line, '\n');
|
|
||||||
if (in == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
out = in;
|
|
||||||
while (out > line && out[-1] == '\\')
|
|
||||||
--out;
|
|
||||||
|
|
||||||
while (*in != '\0')
|
|
||||||
{
|
|
||||||
/* BS_WRITE gets the number of quoted backslashes at
|
|
||||||
the end just before IN, and BACKSLASH gets nonzero
|
|
||||||
if the next character is quoted. */
|
|
||||||
unsigned int backslash = 0;
|
|
||||||
unsigned int bs_write = 0;
|
|
||||||
for (p = in - 1; p >= line && *p == '\\'; --p)
|
|
||||||
{
|
|
||||||
if (backslash)
|
|
||||||
++bs_write;
|
|
||||||
backslash = !backslash;
|
|
||||||
|
|
||||||
/* It should be impossible to go back this far without exiting,
|
|
||||||
but if we do, we can't get the right answer. */
|
|
||||||
if (in == out - 1)
|
|
||||||
abort ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Output the appropriate number of backslashes. */
|
|
||||||
while (bs_write-- > 0)
|
|
||||||
*out++ = '\\';
|
|
||||||
|
|
||||||
/* Skip the newline. */
|
|
||||||
++in;
|
|
||||||
|
|
||||||
if (backslash)
|
|
||||||
{
|
|
||||||
/* Backslash/newline handling:
|
|
||||||
In traditional GNU make all trailing whitespace, consecutive
|
|
||||||
backslash/newlines, and any leading whitespace on the next line
|
|
||||||
is reduced to a single space.
|
|
||||||
In POSIX, each backslash/newline and is replaced by a space. */
|
|
||||||
in = next_token (in);
|
|
||||||
if (! posix_pedantic)
|
|
||||||
while (out > line && isblank ((unsigned char)out[-1]))
|
|
||||||
--out;
|
|
||||||
*out++ = ' ';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
/* If the newline isn't quoted, put it in the output. */
|
|
||||||
*out++ = '\n';
|
|
||||||
|
|
||||||
/* Now copy the following line to the output.
|
|
||||||
Stop when we find backslashes followed by a newline. */
|
|
||||||
while (*in != '\0')
|
|
||||||
if (*in == '\\')
|
|
||||||
{
|
|
||||||
p = in + 1;
|
|
||||||
while (*p == '\\')
|
|
||||||
++p;
|
|
||||||
if (*p == '\n')
|
|
||||||
{
|
|
||||||
in = p;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
while (in < p)
|
|
||||||
*out++ = *in++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*out++ = *in++;
|
|
||||||
}
|
|
||||||
|
|
||||||
*out = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print N spaces (used in debug for target-depth). */
|
|
||||||
|
|
||||||
void
|
|
||||||
print_spaces (unsigned int n)
|
|
||||||
{
|
|
||||||
while (n-- > 0)
|
|
||||||
putchar (' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Return a string whose contents concatenate the NUM strings provided
|
|
||||||
This string lives in static, re-used memory. */
|
|
||||||
|
|
||||||
const char *
|
|
||||||
concat (unsigned int num, ...)
|
|
||||||
{
|
|
||||||
static unsigned int rlen = 0;
|
|
||||||
static char *result = NULL;
|
|
||||||
unsigned int ri = 0;
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
va_start (args, num);
|
|
||||||
|
|
||||||
while (num-- > 0)
|
|
||||||
{
|
|
||||||
const char *s = va_arg (args, const char *);
|
|
||||||
unsigned int l = xstrlen (s);
|
|
||||||
|
|
||||||
if (l == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (ri + l > rlen)
|
|
||||||
{
|
|
||||||
rlen = ((rlen ? rlen : 60) + l) * 2;
|
|
||||||
result = xrealloc (result, rlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy (result + ri, s, l);
|
|
||||||
ri += l;
|
|
||||||
}
|
|
||||||
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
/* Get some more memory if we don't have enough space for the
|
|
||||||
terminating '\0'. */
|
|
||||||
if (ri == rlen)
|
|
||||||
{
|
|
||||||
rlen = (rlen ? rlen : 60) * 2;
|
|
||||||
result = xrealloc (result, rlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
result[ri] = '\0';
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef HAVE_STRERROR
|
|
||||||
#undef strerror
|
|
||||||
char *
|
|
||||||
strerror (int errnum)
|
|
||||||
{
|
|
||||||
extern int errno, sys_nerr;
|
|
||||||
#ifndef __DECC
|
|
||||||
extern char *sys_errlist[];
|
|
||||||
#endif
|
|
||||||
static char buf[] = "Unknown error 12345678901234567890";
|
|
||||||
|
|
||||||
if (errno < sys_nerr)
|
|
||||||
return sys_errlist[errnum];
|
|
||||||
|
|
||||||
sprintf (buf, _("Unknown error %d"), errnum);
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Like malloc but get fatal error if memory is exhausted. */
|
|
||||||
/* Don't bother if we're using dmalloc; it provides these for us. */
|
|
||||||
|
|
||||||
#ifndef HAVE_DMALLOC_H
|
|
||||||
|
|
||||||
#undef xmalloc
|
|
||||||
#undef xcalloc
|
|
||||||
#undef xrealloc
|
|
||||||
#undef xstrdup
|
|
||||||
|
|
||||||
void *
|
|
||||||
xmalloc (unsigned int size)
|
|
||||||
{
|
|
||||||
/* Make sure we don't allocate 0, for pre-ISO implementations. */
|
|
||||||
void *result = malloc (size ? size : 1);
|
|
||||||
if (result == 0)
|
|
||||||
fatal (NILF, _("virtual memory exhausted"));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void *
|
|
||||||
xcalloc (unsigned int size)
|
|
||||||
{
|
|
||||||
/* Make sure we don't allocate 0, for pre-ISO implementations. */
|
|
||||||
void *result = calloc (size ? size : 1, 1);
|
|
||||||
if (result == 0)
|
|
||||||
fatal (NILF, _("virtual memory exhausted"));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void *
|
|
||||||
xrealloc (void *ptr, unsigned int size)
|
|
||||||
{
|
|
||||||
void *result;
|
|
||||||
|
|
||||||
/* Some older implementations of realloc() don't conform to ISO. */
|
|
||||||
if (! size)
|
|
||||||
size = 1;
|
|
||||||
result = ptr ? realloc (ptr, size) : malloc (size);
|
|
||||||
if (result == 0)
|
|
||||||
fatal (NILF, _("virtual memory exhausted"));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
xstrdup (const char *ptr)
|
|
||||||
{
|
|
||||||
char *result;
|
|
||||||
|
|
||||||
#ifdef HAVE_STRDUP
|
|
||||||
result = strdup (ptr);
|
|
||||||
#else
|
|
||||||
result = malloc (strlen (ptr) + 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (result == 0)
|
|
||||||
fatal (NILF, _("virtual memory exhausted"));
|
|
||||||
|
|
||||||
#ifdef HAVE_STRDUP
|
|
||||||
return result;
|
|
||||||
#else
|
|
||||||
return strcpy (result, ptr);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* HAVE_DMALLOC_H */
|
|
||||||
|
|
||||||
char *
|
|
||||||
xstrndup (const char *str, unsigned int length)
|
|
||||||
{
|
|
||||||
char *result;
|
|
||||||
|
|
||||||
#ifdef HAVE_STRNDUP
|
|
||||||
result = strndup (str, length);
|
|
||||||
if (result == 0)
|
|
||||||
fatal (NILF, _("virtual memory exhausted"));
|
|
||||||
#else
|
|
||||||
result = xmalloc (length + 1);
|
|
||||||
if (length > 0)
|
|
||||||
strncpy (result, str, length);
|
|
||||||
result[length] = '\0';
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Limited INDEX:
|
|
||||||
Search through the string STRING, which ends at LIMIT, for the character C.
|
|
||||||
Returns a pointer to the first occurrence, or nil if none is found.
|
|
||||||
Like INDEX except that the string searched ends where specified
|
|
||||||
instead of at the first null. */
|
|
||||||
|
|
||||||
char *
|
|
||||||
lindex (const char *s, const char *limit, int c)
|
|
||||||
{
|
|
||||||
while (s < limit)
|
|
||||||
if (*s++ == c)
|
|
||||||
return (char *)(s - 1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the address of the first whitespace or null in the string S. */
|
|
||||||
|
|
||||||
char *
|
|
||||||
end_of_token (const char *s)
|
|
||||||
{
|
|
||||||
while (! STOP_SET (*s, MAP_BLANK|MAP_NUL))
|
|
||||||
++s;
|
|
||||||
return (char *)s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the address of the first nonwhitespace or null in the string S. */
|
|
||||||
|
|
||||||
char *
|
|
||||||
next_token (const char *s)
|
|
||||||
{
|
|
||||||
while (isblank ((unsigned char)*s))
|
|
||||||
++s;
|
|
||||||
return (char *)s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Find the next token in PTR; return the address of it, and store the length
|
|
||||||
of the token into *LENGTHPTR if LENGTHPTR is not nil. Set *PTR to the end
|
|
||||||
of the token, so this function can be called repeatedly in a loop. */
|
|
||||||
|
|
||||||
char *
|
|
||||||
find_next_token (const char **ptr, unsigned int *lengthptr)
|
|
||||||
{
|
|
||||||
const char *p = next_token (*ptr);
|
|
||||||
|
|
||||||
if (*p == '\0')
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
*ptr = end_of_token (p);
|
|
||||||
if (lengthptr != 0)
|
|
||||||
*lengthptr = *ptr - p;
|
|
||||||
|
|
||||||
return (char *)p;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Copy a chain of 'struct dep'. For 2nd expansion deps, dup the name. */
|
|
||||||
|
|
||||||
struct dep *
|
|
||||||
copy_dep_chain (const struct dep *d)
|
|
||||||
{
|
|
||||||
struct dep *firstnew = 0;
|
|
||||||
struct dep *lastnew = 0;
|
|
||||||
|
|
||||||
while (d != 0)
|
|
||||||
{
|
|
||||||
struct dep *c = xmalloc (sizeof (struct dep));
|
|
||||||
memcpy (c, d, sizeof (struct dep));
|
|
||||||
|
|
||||||
if (c->need_2nd_expansion)
|
|
||||||
c->name = xstrdup (c->name);
|
|
||||||
|
|
||||||
c->next = 0;
|
|
||||||
if (firstnew == 0)
|
|
||||||
firstnew = lastnew = c;
|
|
||||||
else
|
|
||||||
lastnew = lastnew->next = c;
|
|
||||||
|
|
||||||
d = d->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
return firstnew;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free a chain of 'struct dep'. */
|
|
||||||
|
|
||||||
void
|
|
||||||
free_dep_chain (struct dep *d)
|
|
||||||
{
|
|
||||||
while (d != 0)
|
|
||||||
{
|
|
||||||
struct dep *df = d;
|
|
||||||
d = d->next;
|
|
||||||
free_dep (df);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free a chain of struct nameseq.
|
|
||||||
For struct dep chains use free_dep_chain. */
|
|
||||||
|
|
||||||
void
|
|
||||||
free_ns_chain (struct nameseq *ns)
|
|
||||||
{
|
|
||||||
while (ns != 0)
|
|
||||||
{
|
|
||||||
struct nameseq *t = ns;
|
|
||||||
ns = ns->next;
|
|
||||||
free (t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if !HAVE_STRCASECMP && !HAVE_STRICMP && !HAVE_STRCMPI
|
|
||||||
/* If we don't have strcasecmp() (from POSIX), or anything that can substitute
|
|
||||||
for it, define our own version. */
|
|
||||||
|
|
||||||
int
|
|
||||||
strcasecmp (const char *s1, const char *s2)
|
|
||||||
{
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
int c1 = (int) *(s1++);
|
|
||||||
int c2 = (int) *(s2++);
|
|
||||||
|
|
||||||
if (isalpha (c1))
|
|
||||||
c1 = tolower (c1);
|
|
||||||
if (isalpha (c2))
|
|
||||||
c2 = tolower (c2);
|
|
||||||
|
|
||||||
if (c1 != '\0' && c1 == c2)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
return (c1 - c2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !HAVE_STRNCASECMP && !HAVE_STRNICMP && !HAVE_STRNCMPI
|
|
||||||
/* If we don't have strncasecmp() (from POSIX), or anything that can
|
|
||||||
substitute for it, define our own version. */
|
|
||||||
|
|
||||||
int
|
|
||||||
strncasecmp (const char *s1, const char *s2, int n)
|
|
||||||
{
|
|
||||||
while (n-- > 0)
|
|
||||||
{
|
|
||||||
int c1 = (int) *(s1++);
|
|
||||||
int c2 = (int) *(s2++);
|
|
||||||
|
|
||||||
if (isalpha (c1))
|
|
||||||
c1 = tolower (c1);
|
|
||||||
if (isalpha (c2))
|
|
||||||
c2 = tolower (c2);
|
|
||||||
|
|
||||||
if (c1 != '\0' && c1 == c2)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
return (c1 - c2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GETLOADAVG_PRIVILEGED
|
|
||||||
|
|
||||||
#ifdef POSIX
|
|
||||||
|
|
||||||
/* Hopefully if a system says it's POSIX.1 and has the setuid and setgid
|
|
||||||
functions, they work as POSIX.1 says. Some systems (Alpha OSF/1 1.2,
|
|
||||||
for example) which claim to be POSIX.1 also have the BSD setreuid and
|
|
||||||
setregid functions, but they don't work as in BSD and only the POSIX.1
|
|
||||||
way works. */
|
|
||||||
|
|
||||||
#undef HAVE_SETREUID
|
|
||||||
#undef HAVE_SETREGID
|
|
||||||
|
|
||||||
#else /* Not POSIX. */
|
|
||||||
|
|
||||||
/* Some POSIX.1 systems have the seteuid and setegid functions. In a
|
|
||||||
POSIX-like system, they are the best thing to use. However, some
|
|
||||||
non-POSIX systems have them too but they do not work in the POSIX style
|
|
||||||
and we must use setreuid and setregid instead. */
|
|
||||||
|
|
||||||
#undef HAVE_SETEUID
|
|
||||||
#undef HAVE_SETEGID
|
|
||||||
|
|
||||||
#endif /* POSIX. */
|
|
||||||
|
|
||||||
#ifndef HAVE_UNISTD_H
|
|
||||||
extern int getuid (), getgid (), geteuid (), getegid ();
|
|
||||||
extern int setuid (), setgid ();
|
|
||||||
#ifdef HAVE_SETEUID
|
|
||||||
extern int seteuid ();
|
|
||||||
#else
|
|
||||||
#ifdef HAVE_SETREUID
|
|
||||||
extern int setreuid ();
|
|
||||||
#endif /* Have setreuid. */
|
|
||||||
#endif /* Have seteuid. */
|
|
||||||
#ifdef HAVE_SETEGID
|
|
||||||
extern int setegid ();
|
|
||||||
#else
|
|
||||||
#ifdef HAVE_SETREGID
|
|
||||||
extern int setregid ();
|
|
||||||
#endif /* Have setregid. */
|
|
||||||
#endif /* Have setegid. */
|
|
||||||
#endif /* No <unistd.h>. */
|
|
||||||
|
|
||||||
/* Keep track of the user and group IDs for user- and make- access. */
|
|
||||||
static int user_uid = -1, user_gid = -1, make_uid = -1, make_gid = -1;
|
|
||||||
#define access_inited (user_uid != -1)
|
|
||||||
static enum { make, user } current_access;
|
|
||||||
|
|
||||||
|
|
||||||
/* Under -d, write a message describing the current IDs. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
log_access (const char *flavor)
|
|
||||||
{
|
|
||||||
if (! ISDB (DB_JOBS))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* All the other debugging messages go to stdout,
|
|
||||||
but we write this one to stderr because it might be
|
|
||||||
run in a child fork whose stdout is piped. */
|
|
||||||
|
|
||||||
fprintf (stderr, _("%s: user %lu (real %lu), group %lu (real %lu)\n"),
|
|
||||||
flavor, (unsigned long) geteuid (), (unsigned long) getuid (),
|
|
||||||
(unsigned long) getegid (), (unsigned long) getgid ());
|
|
||||||
fflush (stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
init_access (void)
|
|
||||||
{
|
|
||||||
#ifndef VMS
|
|
||||||
user_uid = getuid ();
|
|
||||||
user_gid = getgid ();
|
|
||||||
|
|
||||||
make_uid = geteuid ();
|
|
||||||
make_gid = getegid ();
|
|
||||||
|
|
||||||
/* Do these ever fail? */
|
|
||||||
if (user_uid == -1 || user_gid == -1 || make_uid == -1 || make_gid == -1)
|
|
||||||
pfatal_with_name ("get{e}[gu]id");
|
|
||||||
|
|
||||||
log_access (_("Initialized access"));
|
|
||||||
|
|
||||||
current_access = make;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* GETLOADAVG_PRIVILEGED */
|
|
||||||
|
|
||||||
/* Give the process appropriate permissions for access to
|
|
||||||
user data (i.e., to stat files, or to spawn a child process). */
|
|
||||||
void
|
|
||||||
user_access (void)
|
|
||||||
{
|
|
||||||
#ifdef GETLOADAVG_PRIVILEGED
|
|
||||||
|
|
||||||
if (!access_inited)
|
|
||||||
init_access ();
|
|
||||||
|
|
||||||
if (current_access == user)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* We are in "make access" mode. This means that the effective user and
|
|
||||||
group IDs are those of make (if it was installed setuid or setgid).
|
|
||||||
We now want to set the effective user and group IDs to the real IDs,
|
|
||||||
which are the IDs of the process that exec'd make. */
|
|
||||||
|
|
||||||
#ifdef HAVE_SETEUID
|
|
||||||
|
|
||||||
/* Modern systems have the seteuid/setegid calls which set only the
|
|
||||||
effective IDs, which is ideal. */
|
|
||||||
|
|
||||||
if (seteuid (user_uid) < 0)
|
|
||||||
pfatal_with_name ("user_access: seteuid");
|
|
||||||
|
|
||||||
#else /* Not HAVE_SETEUID. */
|
|
||||||
|
|
||||||
#ifndef HAVE_SETREUID
|
|
||||||
|
|
||||||
/* System V has only the setuid/setgid calls to set user/group IDs.
|
|
||||||
There is an effective ID, which can be set by setuid/setgid.
|
|
||||||
It can be set (unless you are root) only to either what it already is
|
|
||||||
(returned by geteuid/getegid, now in make_uid/make_gid),
|
|
||||||
the real ID (return by getuid/getgid, now in user_uid/user_gid),
|
|
||||||
or the saved set ID (what the effective ID was before this set-ID
|
|
||||||
executable (make) was exec'd). */
|
|
||||||
|
|
||||||
if (setuid (user_uid) < 0)
|
|
||||||
pfatal_with_name ("user_access: setuid");
|
|
||||||
|
|
||||||
#else /* HAVE_SETREUID. */
|
|
||||||
|
|
||||||
/* In 4BSD, the setreuid/setregid calls set both the real and effective IDs.
|
|
||||||
They may be set to themselves or each other. So you have two alternatives
|
|
||||||
at any one time. If you use setuid/setgid, the effective will be set to
|
|
||||||
the real, leaving only one alternative. Using setreuid/setregid, however,
|
|
||||||
you can toggle between your two alternatives by swapping the values in a
|
|
||||||
single setreuid or setregid call. */
|
|
||||||
|
|
||||||
if (setreuid (make_uid, user_uid) < 0)
|
|
||||||
pfatal_with_name ("user_access: setreuid");
|
|
||||||
|
|
||||||
#endif /* Not HAVE_SETREUID. */
|
|
||||||
#endif /* HAVE_SETEUID. */
|
|
||||||
|
|
||||||
#ifdef HAVE_SETEGID
|
|
||||||
if (setegid (user_gid) < 0)
|
|
||||||
pfatal_with_name ("user_access: setegid");
|
|
||||||
#else
|
|
||||||
#ifndef HAVE_SETREGID
|
|
||||||
if (setgid (user_gid) < 0)
|
|
||||||
pfatal_with_name ("user_access: setgid");
|
|
||||||
#else
|
|
||||||
if (setregid (make_gid, user_gid) < 0)
|
|
||||||
pfatal_with_name ("user_access: setregid");
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
current_access = user;
|
|
||||||
|
|
||||||
log_access (_("User access"));
|
|
||||||
|
|
||||||
#endif /* GETLOADAVG_PRIVILEGED */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Give the process appropriate permissions for access to
|
|
||||||
make data (i.e., the load average). */
|
|
||||||
void
|
|
||||||
make_access (void)
|
|
||||||
{
|
|
||||||
#ifdef GETLOADAVG_PRIVILEGED
|
|
||||||
|
|
||||||
if (!access_inited)
|
|
||||||
init_access ();
|
|
||||||
|
|
||||||
if (current_access == make)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* See comments in user_access, above. */
|
|
||||||
|
|
||||||
#ifdef HAVE_SETEUID
|
|
||||||
if (seteuid (make_uid) < 0)
|
|
||||||
pfatal_with_name ("make_access: seteuid");
|
|
||||||
#else
|
|
||||||
#ifndef HAVE_SETREUID
|
|
||||||
if (setuid (make_uid) < 0)
|
|
||||||
pfatal_with_name ("make_access: setuid");
|
|
||||||
#else
|
|
||||||
if (setreuid (user_uid, make_uid) < 0)
|
|
||||||
pfatal_with_name ("make_access: setreuid");
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_SETEGID
|
|
||||||
if (setegid (make_gid) < 0)
|
|
||||||
pfatal_with_name ("make_access: setegid");
|
|
||||||
#else
|
|
||||||
#ifndef HAVE_SETREGID
|
|
||||||
if (setgid (make_gid) < 0)
|
|
||||||
pfatal_with_name ("make_access: setgid");
|
|
||||||
#else
|
|
||||||
if (setregid (user_gid, make_gid) < 0)
|
|
||||||
pfatal_with_name ("make_access: setregid");
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
current_access = make;
|
|
||||||
|
|
||||||
log_access (_("Make access"));
|
|
||||||
|
|
||||||
#endif /* GETLOADAVG_PRIVILEGED */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Give the process appropriate permissions for a child process.
|
|
||||||
This is like user_access, but you can't get back to make_access. */
|
|
||||||
void
|
|
||||||
child_access (void)
|
|
||||||
{
|
|
||||||
#ifdef GETLOADAVG_PRIVILEGED
|
|
||||||
|
|
||||||
if (!access_inited)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Set both the real and effective UID and GID to the user's.
|
|
||||||
They cannot be changed back to make's. */
|
|
||||||
|
|
||||||
#ifndef HAVE_SETREUID
|
|
||||||
if (setuid (user_uid) < 0)
|
|
||||||
pfatal_with_name ("child_access: setuid");
|
|
||||||
#else
|
|
||||||
if (setreuid (user_uid, user_uid) < 0)
|
|
||||||
pfatal_with_name ("child_access: setreuid");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAVE_SETREGID
|
|
||||||
if (setgid (user_gid) < 0)
|
|
||||||
pfatal_with_name ("child_access: setgid");
|
|
||||||
#else
|
|
||||||
if (setregid (user_gid, user_gid) < 0)
|
|
||||||
pfatal_with_name ("child_access: setregid");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
log_access (_("Child access"));
|
|
||||||
|
|
||||||
#endif /* GETLOADAVG_PRIVILEGED */
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef NEED_GET_PATH_MAX
|
|
||||||
unsigned int
|
|
||||||
get_path_max (void)
|
|
||||||
{
|
|
||||||
static unsigned int value;
|
|
||||||
|
|
||||||
if (value == 0)
|
|
||||||
{
|
|
||||||
long int x = pathconf ("/", _PC_PATH_MAX);
|
|
||||||
if (x > 0)
|
|
||||||
value = x;
|
|
||||||
else
|
|
||||||
return MAXPATHLEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,5 +1,8 @@
|
|||||||
# Makefile.am to create libw32.a for mingw32 host.
|
# GNU -*-Makefile-*- to build GNU Make on POSIX systems
|
||||||
# Copyright (C) 1997-2013 Free Software Foundation, Inc.
|
#
|
||||||
|
# POSIX overrides for use with Basic.mk.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2017-2024 Free Software Foundation, Inc.
|
||||||
# This file is part of GNU Make.
|
# This file is part of GNU Make.
|
||||||
#
|
#
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -13,11 +16,13 @@
|
|||||||
# details.
|
# details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
noinst_LIBRARIES = libw32.a
|
# Very little is needed here since the default Basic.mk assumes POSIX
|
||||||
|
|
||||||
libw32_a_SOURCES = subproc/misc.c subproc/sub_proc.c subproc/w32err.c \
|
prog_SOURCES += $(src)/posixos.c
|
||||||
compat/posixfcn.c pathstuff.c
|
|
||||||
|
|
||||||
libw32_a_CPPFLAGS = -I$(srcdir)/include -I$(srcdir)/subproc -I$(top_srcdir)
|
extra_CPPFLAGS += @GUILE_CFLAGS@
|
||||||
|
extra_LDFLAGS += @AM_LDFLAGS@
|
||||||
|
LDLIBS += @LIBOBJS@ @gl_LIBOBS@ @ALLOCA@
|
||||||
|
LDLIBS += @GUILE_LIBS@ @GETLOADAVG_LIBS@ @LIBINTL@ @LIBS@
|
97
mk/VMS.mk
Normal file
97
mk/VMS.mk
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
# GNU -*-Makefile-*- to build GNU Make on VMS
|
||||||
|
#
|
||||||
|
# VMS overrides for use with Basic.mk.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2017-2024 Free Software Foundation, Inc.
|
||||||
|
# This file is part of GNU Make.
|
||||||
|
#
|
||||||
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 3 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
src = [.src]
|
||||||
|
lib = [.lib]
|
||||||
|
SRCDIR = []
|
||||||
|
|
||||||
|
OBJEXT = .obj
|
||||||
|
EXEEXT = .exe
|
||||||
|
|
||||||
|
e =
|
||||||
|
s = $e $e
|
||||||
|
c = ,
|
||||||
|
|
||||||
|
defs = HAVE_CONFIG_H
|
||||||
|
|
||||||
|
ifeq ($(CC),cc)
|
||||||
|
defs += VMS unlink=remove allocated_variable_expand_for_file=alloc_var_expand_for_file
|
||||||
|
else
|
||||||
|
defs += GCC_IS_NATIVE
|
||||||
|
ifeq ($(ARCH),VAX)
|
||||||
|
defs += VAX
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
extra_CPPFLAGS = /define=($(subst $s,$c,$(patsubst %,"%",$(defs))))
|
||||||
|
|
||||||
|
cinclude = /nested=none/include=($(src),$(lib))
|
||||||
|
ifeq ($(CC),cc)
|
||||||
|
cprefix = /prefix=(all,except=(glob,globfree))
|
||||||
|
cwarn = /standard=relaxed/warn=(disable=questcompare)
|
||||||
|
endif
|
||||||
|
|
||||||
|
extra_CFLAGS = $(cinclude)$(cprefix)$(cwarn)
|
||||||
|
|
||||||
|
#extra_LDFLAGS = /deb
|
||||||
|
extra_LDFLAGS =
|
||||||
|
|
||||||
|
# If your system needs extra libraries loaded in, define them here.
|
||||||
|
# System V probably need -lPW for alloca.
|
||||||
|
# if on vax, uncomment the following line
|
||||||
|
#LDLIBS = ,c.opt/opt
|
||||||
|
ifeq ($(CC),cc)
|
||||||
|
#LDLIBS =,sys$$library:vaxcrtl.olb/lib
|
||||||
|
else
|
||||||
|
LDLIBS =,gnu_cc_library:libgcc.olb/lib
|
||||||
|
endif
|
||||||
|
|
||||||
|
# If your system doesn't have alloca, or the one provided is bad,
|
||||||
|
# uncomment this
|
||||||
|
#ALLOCA = $(alloca_SOURCES)
|
||||||
|
|
||||||
|
# If your system doesn't have alloca.h, or the one provided is bad,
|
||||||
|
# uncomment this
|
||||||
|
#BUILT_SOURCES += $(lib)alloca.h
|
||||||
|
|
||||||
|
prog_SOURCES += $(ALLOCA) $(glob_SOURCES) $(vms_SOURCES)
|
||||||
|
|
||||||
|
BUILT_SOURCES += $(lib)fnmatch.h $(lib)glob.h
|
||||||
|
|
||||||
|
COMPILE.cmd = $(CC) $(extra_CFLAGS)$(CFLAGS)/obj=$@ $(extra_CPPFLAGS)$(CPPFLAGS) $1
|
||||||
|
|
||||||
|
LINK.cmd = $(LD)$(extra_LDFLAGS)$(LDFLAGS)/exe=$@ $(subst $s,$c,$1)$(LDLIBS)
|
||||||
|
|
||||||
|
# Don't know how to do this
|
||||||
|
CHECK.cmd =
|
||||||
|
|
||||||
|
MKDIR.cmd = create/dir $1
|
||||||
|
RM.cmd = delete $1
|
||||||
|
CP.cmd = copy $1 $2
|
||||||
|
|
||||||
|
define CLEANSPACE
|
||||||
|
-purge [...]
|
||||||
|
-delete $(PROG);
|
||||||
|
-delete $(src)*.$(OBJEXT);
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
$(OUTDIR)$(src)config.h: $(SRCDIR)$(src)config.h-vms
|
||||||
|
$(call CP.cmd,$<,$@)
|
139
mk/Windows32.mk
Normal file
139
mk/Windows32.mk
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
# GNU -*-Makefile-*- to build GNU Make on Windows
|
||||||
|
#
|
||||||
|
# Windows overrides for use with Basic.mk.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2017-2024 Free Software Foundation, Inc.
|
||||||
|
# This file is part of GNU Make.
|
||||||
|
#
|
||||||
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 3 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# TARGET_TYPE can be either "release" or "debug"
|
||||||
|
TARGET_TYPE = release
|
||||||
|
|
||||||
|
# TOOLCHAIN can be either "msvc" or "gcc"
|
||||||
|
TOOLCHAIN = msvc
|
||||||
|
|
||||||
|
# Translate a POSIX path into a Windows path. Don't bother with drives.
|
||||||
|
# Used only inside recipes, with DOS/CMD tools that require it.
|
||||||
|
P2W = $(subst /,\,$1)
|
||||||
|
|
||||||
|
prog_SOURCES += $(loadavg_SOURCES) $(glob_SOURCES) $(w32_SOURCES)
|
||||||
|
|
||||||
|
utf8_SOURCES = $(src)w32/utf8.rc $(src)w32/utf8.manifest
|
||||||
|
|
||||||
|
BUILT_SOURCES += $(lib)alloca.h $(lib)fnmatch.h $(lib)glob.h
|
||||||
|
|
||||||
|
w32_LIBS = kernel32 user32 gdi32 winspool comdlg32 advapi32 shell32 ole32 \
|
||||||
|
oleaut32 uuid odbc32 odbccp32
|
||||||
|
|
||||||
|
CPPFLAGS =
|
||||||
|
CFLAGS =
|
||||||
|
LDFLAGS =
|
||||||
|
|
||||||
|
# --- Visual Studio
|
||||||
|
msvc_CC = cl.exe
|
||||||
|
msvc_RC = rc.exe
|
||||||
|
msvc_LD = link.exe
|
||||||
|
|
||||||
|
msvc_CPPFLAGS = /DHAVE_CONFIG_H /DMK_OS_W32=1 /DWIN32 /D_CONSOLE
|
||||||
|
msvc_CPPFLAGS += /I$(OUTDIR)src /I$(SRCDIR)/src /I$(SRCDIR)/src/w32/include /I$(OUTDIR)lib /I$(SRCDIR)/lib
|
||||||
|
|
||||||
|
msvc_CFLAGS = /nologo /MT /W4 /EHsc
|
||||||
|
msvc_CFLAGS += /FR$(OUTDIR) /Fp$(BASE_PROG).pch /Fd$(BASE_PROG).pdb
|
||||||
|
|
||||||
|
msvc_LDFLAGS = /nologo /SUBSYSTEM:console /PDB:$(BASE_PROG).pdb
|
||||||
|
|
||||||
|
msvc_LDLIBS = $(addsuffix .lib,$(w32_LIBS))
|
||||||
|
|
||||||
|
msvc_C_SOURCE = /c
|
||||||
|
msvc_RC_SOURCE =
|
||||||
|
msvc_OUTPUT_OPTION = /Fo$@
|
||||||
|
msvc_LINK_OUTPUT = /OUT:$@
|
||||||
|
|
||||||
|
release_msvc_OUTDIR = ./WinRel/
|
||||||
|
release_msvc_CPPFLAGS = /D NDEBUG
|
||||||
|
release_msvc_CFLAGS = /O2
|
||||||
|
|
||||||
|
debug_msvc_OUTDIR = ./WinDebug/
|
||||||
|
debug_msvc_CPPFLAGS = /D _DEBUG
|
||||||
|
debug_msvc_CFLAGS = /Zi /Od
|
||||||
|
debug_msvc_LDFLAGS = /DEBUG
|
||||||
|
|
||||||
|
# --- GCC
|
||||||
|
gcc_CC = gcc
|
||||||
|
gcc_RC = windres
|
||||||
|
gcc_LD = $(gcc_CC)
|
||||||
|
|
||||||
|
release_gcc_OUTDIR = ./GccRel/
|
||||||
|
debug_gcc_OUTDIR = ./GccDebug/
|
||||||
|
|
||||||
|
gcc_CPPFLAGS = -DHAVE_CONFIG_H -I$(OUTDIR)src -I$(SRCDIR)/src -I$(SRCDIR)/src/w32/include -I$(OUTDIR)lib -I$(SRCDIR)/lib
|
||||||
|
gcc_CFLAGS = -mthreads -Wall -std=gnu99 -gdwarf-2 -g3
|
||||||
|
gcc_LDFLAGS = -mthreads -gdwarf-2 -g3
|
||||||
|
gcc_LDLIBS = $(addprefix -l,$(w32_libs))
|
||||||
|
|
||||||
|
gcc_C_SOURCE = -c
|
||||||
|
gcc_RC_SOURCE = -i
|
||||||
|
gcc_OUTPUT_OPTION = -o $@
|
||||||
|
gcc_LINK_OUTPUT = -o $@
|
||||||
|
|
||||||
|
debug_gcc_CFLAGS = -O0
|
||||||
|
release_gcc_CFLAGS = -O2
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
RES_COMPILE.cmd = $(RC) $(OUTPUT_OPTION) $(RC_SOURCE) $1
|
||||||
|
LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $1 $(LDLIBS) $(LINK_OUTPUT)
|
||||||
|
|
||||||
|
CHECK.cmd = cmd /c cd tests \& .\run_make_tests.bat -make ../$(PROG)
|
||||||
|
|
||||||
|
MKDIR.cmd = cmd /c mkdir $(call P2W,$1)
|
||||||
|
RM.cmd = cmd /c del /F /Q $(call P2W,$1)
|
||||||
|
CP.cmd = cmd /c copy /Y $(call P2W,$1 $2)
|
||||||
|
|
||||||
|
CC = $($(TOOLCHAIN)_CC)
|
||||||
|
RC = $($(TOOLCHAIN)_RC)
|
||||||
|
LD = $($(TOOLCHAIN)_LD)
|
||||||
|
|
||||||
|
C_SOURCE = $($(TOOLCHAIN)_C_SOURCE)
|
||||||
|
RC_SOURCE = $($(TOOLCHAIN)_RC_SOURCE)
|
||||||
|
OUTPUT_OPTION = $($(TOOLCHAIN)_OUTPUT_OPTION)
|
||||||
|
LINK_OUTPUT = $($(TOOLCHAIN)_LINK_OUTPUT)
|
||||||
|
|
||||||
|
OUTDIR = $($(TARGET_TYPE)_$(TOOLCHAIN)_OUTDIR)
|
||||||
|
|
||||||
|
OBJEXT = obj
|
||||||
|
EXEEXT = .exe
|
||||||
|
|
||||||
|
_CUSTOM = $($(TOOLCHAIN)_$1) $($(TARGET_TYPE)_$1) $($(TARGET_TYPE)_$(TOOLCHAIN)_$1)
|
||||||
|
|
||||||
|
# I'm not sure why this builds gnumake rather than make...?
|
||||||
|
PROG = $(OUTDIR)gnumake$(EXEEXT)
|
||||||
|
BASE_PROG = $(basename $(PROG))
|
||||||
|
|
||||||
|
extra_CPPFLAGS = $(call _CUSTOM,CPPFLAGS)
|
||||||
|
extra_CFLAGS = $(call _CUSTOM,CFLAGS)
|
||||||
|
extra_LDFLAGS = $(call _CUSTOM,LDFLAGS)
|
||||||
|
LDLIBS = $(call _CUSTOM,LDLIBS)
|
||||||
|
|
||||||
|
$(OUTDIR)src/config.h: $(SRCDIR)/src/config.h.W32
|
||||||
|
$(call CP.cmd,$<,$@)
|
||||||
|
|
||||||
|
w32_UTF8OBJ = $(OUTDIR)src/w32/utf8.$(OBJEXT)
|
||||||
|
$(w32_UTF8OBJ): $(utf8_SOURCES)
|
||||||
|
$(call RES_COMPILE.cmd,$<)
|
||||||
|
|
||||||
|
ifneq (, $(shell where $(RC) 2>nul))
|
||||||
|
RESOURCE_OBJECTS = $(w32_UTF8OBJ)
|
||||||
|
endif
|
43
mk/msdosdjgpp.mk
Normal file
43
mk/msdosdjgpp.mk
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# GNU -*-Makefile-*- to build GNU Make on MS-DOS with DJGPP
|
||||||
|
#
|
||||||
|
# MS-DOS overrides for use with Basic.mk.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2017-2024 Free Software Foundation, Inc.
|
||||||
|
# This file is part of GNU Make.
|
||||||
|
#
|
||||||
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 3 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
OBJEXT = o
|
||||||
|
EXEEXT = .exe
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
# Translate a POSIX path into a Windows path. Don't bother with drives.
|
||||||
|
# Used only inside recipes, with DOS/CMD tools that require it.
|
||||||
|
P2W = $(subst /,\,$1)
|
||||||
|
|
||||||
|
prog_SOURCES += $(loadavg_SOURCES) $(glob_SOURCES)
|
||||||
|
|
||||||
|
BUILT_SOURCES += $(lib)alloca.h $(lib)fnmatch.h $(lib)glob.h
|
||||||
|
|
||||||
|
INCLUDEDIR = c:/djgpp/include
|
||||||
|
LIBDIR = c:/djgpp/lib
|
||||||
|
LOCALEDIR = c:/djgpp/share
|
||||||
|
|
||||||
|
MKDIR.cmd = command.com /c mkdir $(call P2W,$1)
|
||||||
|
RM.cmd = command.com /c del /F /Q $(call P2W,$1)
|
||||||
|
CP.cmd = command.com /c copy /Y $(call P2W,$1 $2)
|
||||||
|
|
||||||
|
$(OUTDIR)src/config.h: $(SRCDIR)/src/configh.dos
|
||||||
|
$(call CP.cmd,$<,$@)
|
747
output.c
747
output.c
@ -1,747 +0,0 @@
|
|||||||
/* Output to stdout / stderr for GNU make
|
|
||||||
Copyright (C) 2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include "makeint.h"
|
|
||||||
#include "job.h"
|
|
||||||
|
|
||||||
/* GNU make no longer supports pre-ANSI89 environments. */
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_FCNTL_H
|
|
||||||
# include <fcntl.h>
|
|
||||||
#else
|
|
||||||
# include <sys/file.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct output *output_context = NULL;
|
|
||||||
static unsigned int stdio_traced = 0;
|
|
||||||
|
|
||||||
#define OUTPUT_NONE (-1)
|
|
||||||
|
|
||||||
#define OUTPUT_ISSET(_out) ((_out)->out >= 0 || (_out)->err >= 0)
|
|
||||||
|
|
||||||
/* I really want to move to gnulib. However, this is a big undertaking
|
|
||||||
especially for non-UNIX platforms: how to get bootstrapping to work, etc.
|
|
||||||
I don't want to take the time to do it right now. Use a hack to get a
|
|
||||||
useful version of vsnprintf() for Windows. */
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#define va_copy(_d, _s) ((_d) = (_s))
|
|
||||||
#define snprintf msc_vsnprintf
|
|
||||||
static int
|
|
||||||
msc_vsnprintf (char *str, size_t size, const char *format, va_list ap)
|
|
||||||
{
|
|
||||||
int len = -1;
|
|
||||||
|
|
||||||
if (size > 0)
|
|
||||||
len = _vsnprintf_s (str, size, _TRUNCATE, format, ap);
|
|
||||||
if (len == -1)
|
|
||||||
len = _vscprintf (format, ap);
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Write a string to the current STDOUT or STDERR. */
|
|
||||||
static void
|
|
||||||
_outputs (struct output *out, int is_err, const char *msg)
|
|
||||||
{
|
|
||||||
if (! out || ! out->syncout)
|
|
||||||
{
|
|
||||||
FILE *f = is_err ? stderr : stdout;
|
|
||||||
fputs (msg, f);
|
|
||||||
fflush (f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int fd = is_err ? out->err : out->out;
|
|
||||||
int len = strlen (msg);
|
|
||||||
int r;
|
|
||||||
|
|
||||||
EINTRLOOP (r, lseek (fd, 0, SEEK_END));
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
EINTRLOOP (r, write (fd, msg, len));
|
|
||||||
if (r == len)
|
|
||||||
break;
|
|
||||||
if (r <= 0)
|
|
||||||
return;
|
|
||||||
len -= r;
|
|
||||||
msg += r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write a message indicating that we've just entered or
|
|
||||||
left (according to ENTERING) the current directory. */
|
|
||||||
|
|
||||||
static int
|
|
||||||
log_working_directory (struct output *out, int entering)
|
|
||||||
{
|
|
||||||
static char *buf = NULL;
|
|
||||||
static unsigned int len = 0;
|
|
||||||
unsigned int need;
|
|
||||||
const char *fmt;
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
/* Get enough space for the longest possible output. */
|
|
||||||
need = strlen (program) + INTEGER_LENGTH + 2 + 1;
|
|
||||||
if (starting_directory)
|
|
||||||
need += strlen (starting_directory);
|
|
||||||
|
|
||||||
/* Use entire sentences to give the translators a fighting chance. */
|
|
||||||
if (makelevel == 0)
|
|
||||||
if (starting_directory == 0)
|
|
||||||
if (entering)
|
|
||||||
fmt = _("%s: Entering an unknown directory\n");
|
|
||||||
else
|
|
||||||
fmt = _("%s: Leaving an unknown directory\n");
|
|
||||||
else
|
|
||||||
if (entering)
|
|
||||||
fmt = _("%s: Entering directory '%s'\n");
|
|
||||||
else
|
|
||||||
fmt = _("%s: Leaving directory '%s'\n");
|
|
||||||
else
|
|
||||||
if (starting_directory == 0)
|
|
||||||
if (entering)
|
|
||||||
fmt = _("%s[%u]: Entering an unknown directory\n");
|
|
||||||
else
|
|
||||||
fmt = _("%s[%u]: Leaving an unknown directory\n");
|
|
||||||
else
|
|
||||||
if (entering)
|
|
||||||
fmt = _("%s[%u]: Entering directory '%s'\n");
|
|
||||||
else
|
|
||||||
fmt = _("%s[%u]: Leaving directory '%s'\n");
|
|
||||||
|
|
||||||
need += strlen (fmt);
|
|
||||||
|
|
||||||
if (need > len)
|
|
||||||
{
|
|
||||||
buf = xrealloc (buf, need);
|
|
||||||
len = need;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = buf;
|
|
||||||
if (print_data_base_flag)
|
|
||||||
{
|
|
||||||
*(p++) = '#';
|
|
||||||
*(p++) = ' ';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (makelevel == 0)
|
|
||||||
if (starting_directory == 0)
|
|
||||||
sprintf (p, fmt , program);
|
|
||||||
else
|
|
||||||
sprintf (p, fmt, program, starting_directory);
|
|
||||||
else if (starting_directory == 0)
|
|
||||||
sprintf (p, fmt, program, makelevel);
|
|
||||||
else
|
|
||||||
sprintf (p, fmt, program, makelevel, starting_directory);
|
|
||||||
|
|
||||||
_outputs (out, 0, buf);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set a file descriptor to be in O_APPEND mode.
|
|
||||||
If it fails, just ignore it. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_append_mode (int fd)
|
|
||||||
{
|
|
||||||
#if defined(F_GETFL) && defined(F_SETFL) && defined(O_APPEND)
|
|
||||||
int flags = fcntl (fd, F_GETFL, 0);
|
|
||||||
if (flags >= 0)
|
|
||||||
fcntl (fd, F_SETFL, flags | O_APPEND);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef OUTPUT_SYNC
|
|
||||||
|
|
||||||
/* Semaphore for use in -j mode with output_sync. */
|
|
||||||
static sync_handle_t sync_handle = -1;
|
|
||||||
|
|
||||||
#define STREAM_OK(_s) ((fcntl (fileno (_s), F_GETFD) != -1) || (errno != EBADF))
|
|
||||||
|
|
||||||
#define FD_NOT_EMPTY(_f) ((_f) != OUTPUT_NONE && lseek ((_f), 0, SEEK_END) > 0)
|
|
||||||
|
|
||||||
/* Set up the sync handle. Disables output_sync on error. */
|
|
||||||
static int
|
|
||||||
sync_init ()
|
|
||||||
{
|
|
||||||
int combined_output = 0;
|
|
||||||
|
|
||||||
#ifdef WINDOWS32
|
|
||||||
if ((!STREAM_OK (stdout) && !STREAM_OK (stderr))
|
|
||||||
|| (sync_handle = create_mutex ()) == -1)
|
|
||||||
{
|
|
||||||
perror_with_name ("output-sync suppressed: ", "stderr");
|
|
||||||
output_sync = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
combined_output = same_stream (stdout, stderr);
|
|
||||||
prepare_mutex_handle_string (sync_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
if (STREAM_OK (stdout))
|
|
||||||
{
|
|
||||||
struct stat stbuf_o, stbuf_e;
|
|
||||||
|
|
||||||
sync_handle = fileno (stdout);
|
|
||||||
combined_output = (fstat (fileno (stdout), &stbuf_o) == 0
|
|
||||||
&& fstat (fileno (stderr), &stbuf_e) == 0
|
|
||||||
&& stbuf_o.st_dev == stbuf_e.st_dev
|
|
||||||
&& stbuf_o.st_ino == stbuf_e.st_ino);
|
|
||||||
}
|
|
||||||
else if (STREAM_OK (stderr))
|
|
||||||
sync_handle = fileno (stderr);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
perror_with_name ("output-sync suppressed: ", "stderr");
|
|
||||||
output_sync = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return combined_output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Support routine for output_sync() */
|
|
||||||
static void
|
|
||||||
pump_from_tmp (int from, FILE *to)
|
|
||||||
{
|
|
||||||
static char buffer[8192];
|
|
||||||
|
|
||||||
#ifdef WINDOWS32
|
|
||||||
int prev_mode;
|
|
||||||
|
|
||||||
/* "from" is opened by open_tmpfd, which does it in binary mode, so
|
|
||||||
we need the mode of "to" to match that. */
|
|
||||||
prev_mode = _setmode (fileno (to), _O_BINARY);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (lseek (from, 0, SEEK_SET) == -1)
|
|
||||||
perror ("lseek()");
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
EINTRLOOP (len, read (from, buffer, sizeof (buffer)));
|
|
||||||
if (len < 0)
|
|
||||||
perror ("read()");
|
|
||||||
if (len <= 0)
|
|
||||||
break;
|
|
||||||
if (fwrite (buffer, len, 1, to) < 1)
|
|
||||||
perror ("fwrite()");
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WINDOWS32
|
|
||||||
/* Switch "to" back to its original mode, so that log messages by
|
|
||||||
Make have the same EOL format as without --output-sync. */
|
|
||||||
_setmode (fileno (to), prev_mode);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Obtain the lock for writing output. */
|
|
||||||
static void *
|
|
||||||
acquire_semaphore (void)
|
|
||||||
{
|
|
||||||
static struct flock fl;
|
|
||||||
|
|
||||||
fl.l_type = F_WRLCK;
|
|
||||||
fl.l_whence = SEEK_SET;
|
|
||||||
fl.l_start = 0;
|
|
||||||
fl.l_len = 1;
|
|
||||||
if (fcntl (sync_handle, F_SETLKW, &fl) != -1)
|
|
||||||
return &fl;
|
|
||||||
perror ("fcntl()");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Release the lock for writing output. */
|
|
||||||
static void
|
|
||||||
release_semaphore (void *sem)
|
|
||||||
{
|
|
||||||
struct flock *flp = (struct flock *)sem;
|
|
||||||
flp->l_type = F_UNLCK;
|
|
||||||
if (fcntl (sync_handle, F_SETLKW, flp) == -1)
|
|
||||||
perror ("fcntl()");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns a file descriptor to a temporary file. The file is automatically
|
|
||||||
closed/deleted on exit. Don't use a FILE* stream. */
|
|
||||||
int
|
|
||||||
output_tmpfd ()
|
|
||||||
{
|
|
||||||
int fd = -1;
|
|
||||||
FILE *tfile = tmpfile ();
|
|
||||||
|
|
||||||
if (! tfile)
|
|
||||||
pfatal_with_name ("tmpfile");
|
|
||||||
|
|
||||||
/* Create a duplicate so we can close the stream. */
|
|
||||||
fd = dup (fileno (tfile));
|
|
||||||
if (fd < 0)
|
|
||||||
pfatal_with_name ("dup");
|
|
||||||
|
|
||||||
fclose (tfile);
|
|
||||||
|
|
||||||
set_append_mode (fd);
|
|
||||||
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Adds file descriptors to the child structure to support output_sync; one
|
|
||||||
for stdout and one for stderr as long as they are open. If stdout and
|
|
||||||
stderr share a device they can share a temp file too.
|
|
||||||
Will reset output_sync on error. */
|
|
||||||
static void
|
|
||||||
setup_tmpfile (struct output *out)
|
|
||||||
{
|
|
||||||
/* Is make's stdout going to the same place as stderr? */
|
|
||||||
static int combined_output = -1;
|
|
||||||
|
|
||||||
if (combined_output < 0)
|
|
||||||
combined_output = sync_init ();
|
|
||||||
|
|
||||||
if (STREAM_OK (stdout))
|
|
||||||
{
|
|
||||||
int fd = output_tmpfd ();
|
|
||||||
if (fd < 0)
|
|
||||||
goto error;
|
|
||||||
CLOSE_ON_EXEC (fd);
|
|
||||||
out->out = fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STREAM_OK (stderr))
|
|
||||||
{
|
|
||||||
if (out->out != OUTPUT_NONE && combined_output)
|
|
||||||
out->err = out->out;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int fd = output_tmpfd ();
|
|
||||||
if (fd < 0)
|
|
||||||
goto error;
|
|
||||||
CLOSE_ON_EXEC (fd);
|
|
||||||
out->err = fd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* If we failed to create a temp file, disable output sync going forward. */
|
|
||||||
error:
|
|
||||||
output_close (out);
|
|
||||||
output_sync = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Synchronize the output of jobs in -j mode to keep the results of
|
|
||||||
each job together. This is done by holding the results in temp files,
|
|
||||||
one for stdout and potentially another for stderr, and only releasing
|
|
||||||
them to "real" stdout/stderr when a semaphore can be obtained. */
|
|
||||||
|
|
||||||
void
|
|
||||||
output_dump (struct output *out)
|
|
||||||
{
|
|
||||||
int outfd_not_empty = FD_NOT_EMPTY (out->out);
|
|
||||||
int errfd_not_empty = FD_NOT_EMPTY (out->err);
|
|
||||||
|
|
||||||
if (outfd_not_empty || errfd_not_empty)
|
|
||||||
{
|
|
||||||
int traced = 0;
|
|
||||||
|
|
||||||
/* Try to acquire the semaphore. If it fails, dump the output
|
|
||||||
unsynchronized; still better than silently discarding it. */
|
|
||||||
void *sem = acquire_semaphore ();
|
|
||||||
|
|
||||||
/* Log the working directory for this dump. */
|
|
||||||
if (print_directory_flag && output_sync != OUTPUT_SYNC_RECURSE)
|
|
||||||
traced = log_working_directory (output_context, 1);
|
|
||||||
|
|
||||||
/* We've entered the "critical section" during which a lock is held. We
|
|
||||||
want to keep it as short as possible. */
|
|
||||||
if (outfd_not_empty)
|
|
||||||
pump_from_tmp (out->out, stdout);
|
|
||||||
if (errfd_not_empty && out->err != out->out)
|
|
||||||
pump_from_tmp (out->err, stderr);
|
|
||||||
|
|
||||||
if (traced)
|
|
||||||
log_working_directory (output_context, 0);
|
|
||||||
|
|
||||||
/* Exit the critical section. */
|
|
||||||
if (sem)
|
|
||||||
release_semaphore (sem);
|
|
||||||
|
|
||||||
/* Truncate and reset the output, in case we use it again. */
|
|
||||||
if (out->out != OUTPUT_NONE)
|
|
||||||
{
|
|
||||||
int e;
|
|
||||||
lseek (out->out, 0, SEEK_SET);
|
|
||||||
EINTRLOOP (e, ftruncate (out->out, 0));
|
|
||||||
}
|
|
||||||
if (out->err != OUTPUT_NONE && out->err != out->out)
|
|
||||||
{
|
|
||||||
int e;
|
|
||||||
lseek (out->err, 0, SEEK_SET);
|
|
||||||
EINTRLOOP (e, ftruncate (out->err, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* OUTPUT_SYNC */
|
|
||||||
|
|
||||||
|
|
||||||
/* Provide support for temporary files. */
|
|
||||||
|
|
||||||
#ifndef HAVE_STDLIB_H
|
|
||||||
# ifdef HAVE_MKSTEMP
|
|
||||||
int mkstemp (char *template);
|
|
||||||
# else
|
|
||||||
char *mktemp (char *template);
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
FILE *
|
|
||||||
output_tmpfile (char **name, const char *template)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_FDOPEN
|
|
||||||
int fd;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_MKSTEMP || defined HAVE_MKTEMP
|
|
||||||
# define TEMPLATE_LEN strlen (template)
|
|
||||||
#else
|
|
||||||
# define TEMPLATE_LEN L_tmpnam
|
|
||||||
#endif
|
|
||||||
*name = xmalloc (TEMPLATE_LEN + 1);
|
|
||||||
strcpy (*name, template);
|
|
||||||
|
|
||||||
#if defined HAVE_MKSTEMP && defined HAVE_FDOPEN
|
|
||||||
/* It's safest to use mkstemp(), if we can. */
|
|
||||||
fd = mkstemp (*name);
|
|
||||||
if (fd == -1)
|
|
||||||
return 0;
|
|
||||||
return fdopen (fd, "w");
|
|
||||||
#else
|
|
||||||
# ifdef HAVE_MKTEMP
|
|
||||||
(void) mktemp (*name);
|
|
||||||
# else
|
|
||||||
(void) tmpnam (*name);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef HAVE_FDOPEN
|
|
||||||
/* Can't use mkstemp(), but guard against a race condition. */
|
|
||||||
fd = open (*name, O_CREAT|O_EXCL|O_WRONLY, 0600);
|
|
||||||
if (fd == -1)
|
|
||||||
return 0;
|
|
||||||
return fdopen (fd, "w");
|
|
||||||
# else
|
|
||||||
/* Not secure, but what can we do? */
|
|
||||||
return fopen (*name, "w");
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* This code is stolen from gnulib.
|
|
||||||
If/when we abandon the requirement to work with K&R compilers, we can
|
|
||||||
remove this (and perhaps other parts of GNU make!) and migrate to using
|
|
||||||
gnulib directly.
|
|
||||||
|
|
||||||
This is called only through atexit(), which means die() has already been
|
|
||||||
invoked. So, call exit() here directly. Apparently that works...?
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Close standard output, exiting with status 'exit_failure' on failure.
|
|
||||||
If a program writes *anything* to stdout, that program should close
|
|
||||||
stdout and make sure that it succeeds before exiting. Otherwise,
|
|
||||||
suppose that you go to the extreme of checking the return status
|
|
||||||
of every function that does an explicit write to stdout. The last
|
|
||||||
printf can succeed in writing to the internal stream buffer, and yet
|
|
||||||
the fclose(stdout) could still fail (due e.g., to a disk full error)
|
|
||||||
when it tries to write out that buffered data. Thus, you would be
|
|
||||||
left with an incomplete output file and the offending program would
|
|
||||||
exit successfully. Even calling fflush is not always sufficient,
|
|
||||||
since some file systems (NFS and CODA) buffer written/flushed data
|
|
||||||
until an actual close call.
|
|
||||||
|
|
||||||
Besides, it's wasteful to check the return value from every call
|
|
||||||
that writes to stdout -- just let the internal stream state record
|
|
||||||
the failure. That's what the ferror test is checking below.
|
|
||||||
|
|
||||||
It's important to detect such failures and exit nonzero because many
|
|
||||||
tools (most notably 'make' and other build-management systems) depend
|
|
||||||
on being able to detect failure in other tools via their exit status. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
close_stdout (void)
|
|
||||||
{
|
|
||||||
int prev_fail = ferror (stdout);
|
|
||||||
int fclose_fail = fclose (stdout);
|
|
||||||
|
|
||||||
if (prev_fail || fclose_fail)
|
|
||||||
{
|
|
||||||
if (fclose_fail)
|
|
||||||
error (NILF, _("write error: %s"), strerror (errno));
|
|
||||||
else
|
|
||||||
error (NILF, _("write error"));
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
output_init (struct output *out)
|
|
||||||
{
|
|
||||||
if (out)
|
|
||||||
{
|
|
||||||
out->out = out->err = OUTPUT_NONE;
|
|
||||||
out->syncout = !!output_sync;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Configure this instance of make. Be sure stdout is line-buffered. */
|
|
||||||
|
|
||||||
#ifdef HAVE_SETVBUF
|
|
||||||
# ifdef SETVBUF_REVERSED
|
|
||||||
setvbuf (stdout, _IOLBF, xmalloc (BUFSIZ), BUFSIZ);
|
|
||||||
# else /* setvbuf not reversed. */
|
|
||||||
/* Some buggy systems lose if we pass 0 instead of allocating ourselves. */
|
|
||||||
setvbuf (stdout, 0, _IOLBF, BUFSIZ);
|
|
||||||
# endif /* setvbuf reversed. */
|
|
||||||
#elif HAVE_SETLINEBUF
|
|
||||||
setlinebuf (stdout);
|
|
||||||
#endif /* setlinebuf missing. */
|
|
||||||
|
|
||||||
/* Force stdout/stderr into append mode. This ensures parallel jobs won't
|
|
||||||
lose output due to overlapping writes. */
|
|
||||||
set_append_mode (fileno (stdout));
|
|
||||||
set_append_mode (fileno (stderr));
|
|
||||||
|
|
||||||
#ifdef HAVE_ATEXIT
|
|
||||||
if (STREAM_OK (stdout))
|
|
||||||
atexit (close_stdout);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
output_close (struct output *out)
|
|
||||||
{
|
|
||||||
if (! out)
|
|
||||||
{
|
|
||||||
if (stdio_traced)
|
|
||||||
log_working_directory (NULL, 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OUTPUT_SYNC
|
|
||||||
output_dump (out);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (out->out >= 0)
|
|
||||||
close (out->out);
|
|
||||||
if (out->err >= 0 && out->err != out->out)
|
|
||||||
close (out->err);
|
|
||||||
|
|
||||||
output_init (out);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We're about to generate output: be sure it's set up. */
|
|
||||||
void
|
|
||||||
output_start ()
|
|
||||||
{
|
|
||||||
#ifdef OUTPUT_SYNC
|
|
||||||
if (output_context && output_context->syncout && ! OUTPUT_ISSET(output_context))
|
|
||||||
setup_tmpfile (output_context);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (! output_context || output_sync == OUTPUT_SYNC_RECURSE)
|
|
||||||
{
|
|
||||||
if (! stdio_traced && print_directory_flag)
|
|
||||||
stdio_traced = log_working_directory (NULL, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
outputs (int is_err, const char *msg)
|
|
||||||
{
|
|
||||||
if (! msg || *msg == '\0')
|
|
||||||
return;
|
|
||||||
|
|
||||||
output_start ();
|
|
||||||
|
|
||||||
_outputs (output_context, is_err, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Return formatted string buffers.
|
|
||||||
If we move to gnulib we can use vasnprintf() etc. to make this simpler.
|
|
||||||
Note these functions use a static buffer, so each call overwrites the
|
|
||||||
results of the previous call. */
|
|
||||||
|
|
||||||
static struct fmtstring
|
|
||||||
{
|
|
||||||
char *buffer;
|
|
||||||
unsigned int size;
|
|
||||||
unsigned int len;
|
|
||||||
} fmtbuf = { NULL, 0, 0 };
|
|
||||||
|
|
||||||
/* Concatenate a formatted string onto the format buffer. */
|
|
||||||
static const char *
|
|
||||||
vfmtconcat (const char *fmt, va_list args)
|
|
||||||
{
|
|
||||||
va_list vcopy;
|
|
||||||
int tot;
|
|
||||||
int unused = fmtbuf.size - fmtbuf.len;
|
|
||||||
|
|
||||||
va_copy (vcopy, args);
|
|
||||||
|
|
||||||
tot = vsnprintf (&fmtbuf.buffer[fmtbuf.len], unused, fmt, args);
|
|
||||||
assert (tot >= 0);
|
|
||||||
|
|
||||||
if (tot >= unused)
|
|
||||||
{
|
|
||||||
fmtbuf.size += tot * 2;
|
|
||||||
fmtbuf.buffer = xrealloc (fmtbuf.buffer, fmtbuf.size);
|
|
||||||
|
|
||||||
unused = fmtbuf.size - fmtbuf.len;
|
|
||||||
tot = vsnprintf (&fmtbuf.buffer[fmtbuf.len], unused, fmt, vcopy);
|
|
||||||
}
|
|
||||||
|
|
||||||
va_end (vcopy);
|
|
||||||
|
|
||||||
fmtbuf.len += tot;
|
|
||||||
|
|
||||||
return fmtbuf.buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *
|
|
||||||
fmtconcat (const char *fmt, ...)
|
|
||||||
{
|
|
||||||
const char *p;
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
va_start (args, fmt);
|
|
||||||
p = vfmtconcat (fmt, args);
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print a message on stdout. */
|
|
||||||
|
|
||||||
void
|
|
||||||
message (int prefix, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
assert (fmt != NULL);
|
|
||||||
|
|
||||||
fmtbuf.len = 0;
|
|
||||||
|
|
||||||
if (prefix)
|
|
||||||
{
|
|
||||||
if (makelevel == 0)
|
|
||||||
fmtconcat ("%s: ", program);
|
|
||||||
else
|
|
||||||
fmtconcat ("%s[%u]: ", program, makelevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
va_start (args, fmt);
|
|
||||||
vfmtconcat (fmt, args);
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
fmtconcat ("\n");
|
|
||||||
|
|
||||||
outputs (0, fmtbuf.buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print an error message. */
|
|
||||||
|
|
||||||
void
|
|
||||||
error (const gmk_floc *flocp, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
assert (fmt != NULL);
|
|
||||||
|
|
||||||
fmtbuf.len = 0;
|
|
||||||
|
|
||||||
if (flocp && flocp->filenm)
|
|
||||||
fmtconcat ("%s:%lu: ", flocp->filenm, flocp->lineno);
|
|
||||||
else if (makelevel == 0)
|
|
||||||
fmtconcat ("%s: ", program);
|
|
||||||
else
|
|
||||||
fmtconcat ("%s[%u]: ", program, makelevel);
|
|
||||||
|
|
||||||
va_start (args, fmt);
|
|
||||||
vfmtconcat (fmt, args);
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
fmtconcat ("\n");
|
|
||||||
|
|
||||||
outputs (1, fmtbuf.buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print an error message and exit. */
|
|
||||||
|
|
||||||
void
|
|
||||||
fatal (const gmk_floc *flocp, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
assert (fmt != NULL);
|
|
||||||
|
|
||||||
fmtbuf.len = 0;
|
|
||||||
|
|
||||||
if (flocp && flocp->filenm)
|
|
||||||
fmtconcat ("%s:%lu: *** ", flocp->filenm, flocp->lineno);
|
|
||||||
else if (makelevel == 0)
|
|
||||||
fmtconcat ("%s: *** ", program);
|
|
||||||
else
|
|
||||||
fmtconcat ("%s[%u]: *** ", program, makelevel);
|
|
||||||
|
|
||||||
va_start (args, fmt);
|
|
||||||
vfmtconcat (fmt, args);
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
fmtconcat (_(". Stop.\n"));
|
|
||||||
outputs (1, fmtbuf.buffer);
|
|
||||||
|
|
||||||
die (2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print an error message from errno. */
|
|
||||||
|
|
||||||
void
|
|
||||||
perror_with_name (const char *str, const char *name)
|
|
||||||
{
|
|
||||||
error (NILF, _("%s%s: %s"), str, name, strerror (errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print an error message from errno and exit. */
|
|
||||||
|
|
||||||
void
|
|
||||||
pfatal_with_name (const char *name)
|
|
||||||
{
|
|
||||||
fatal (NILF, _("%s: %s"), name, strerror (errno));
|
|
||||||
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
|
19
po/.gitignore
vendored
19
po/.gitignore
vendored
@ -1,15 +1,4 @@
|
|||||||
Makefile.in.in
|
*
|
||||||
Makevars.template
|
!.gitignore
|
||||||
POTFILES
|
!LINGUAS
|
||||||
Rules-quot
|
!POTFILES.in
|
||||||
boldquot.sed
|
|
||||||
en@boldquot.header
|
|
||||||
en@quot.header
|
|
||||||
insert-header.sin
|
|
||||||
make.pot
|
|
||||||
quot.sed
|
|
||||||
remove-potcdate.sin
|
|
||||||
remove-potcdate.sed
|
|
||||||
stamp-po
|
|
||||||
*.gmo
|
|
||||||
*.po
|
|
||||||
|
93
po/ChangeLog
93
po/ChangeLog
@ -1,93 +0,0 @@
|
|||||||
2013-01-06 Paul Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* POTFILES.in: Add new load.c file.
|
|
||||||
|
|
||||||
2012-01-12 Paul Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* POTFILES.in: Add new guile.c file.
|
|
||||||
|
|
||||||
2011-09-26 Paul Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added new translation file for Czech (cs).
|
|
||||||
|
|
||||||
2009-09-16 Paul Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added new translation for Italian (it).
|
|
||||||
|
|
||||||
2008-05-17 Paul Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added new translation for Lithuanian (lt).
|
|
||||||
|
|
||||||
2007-08-15 Paul Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: The Kinyarwanda (rw) translation has disappeared from
|
|
||||||
the translation site, so remove it.
|
|
||||||
|
|
||||||
2006-01-28 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added new translation for Vietnamese (vi).
|
|
||||||
|
|
||||||
2005-07-14 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added new translation for Indonesian (id).
|
|
||||||
|
|
||||||
2005-05-09 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* POTFILES.in: Add new file vmsjobs.c.
|
|
||||||
|
|
||||||
2005-04-06 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added a new translation for Kinywarwanda (rw).
|
|
||||||
|
|
||||||
2005-02-09 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added a new translation for Irish (ga).
|
|
||||||
|
|
||||||
2005-02-01 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added a new translation for Finnish (fi).
|
|
||||||
|
|
||||||
2003-10-18 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added a new translation for Belarusian (be).
|
|
||||||
|
|
||||||
2002-12-19 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Added a new translation for Ukrainian (uk).
|
|
||||||
|
|
||||||
2002-10-05 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* POTFILES.in: Add variable.h as it has a translatable string.
|
|
||||||
|
|
||||||
2002-08-08 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Add a new translation for Chinese (simplified) (zh_CN).
|
|
||||||
|
|
||||||
2002-08-02 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS: Add a new translation for Swedish (sv).
|
|
||||||
|
|
||||||
2002-04-21 Paul D. Smith <psmith@gnu.org>
|
|
||||||
|
|
||||||
* LINGUAS, hr.po: Added new translation: Croatian.
|
|
||||||
|
|
||||||
* da.po, de.po, es.po, fr.po, gl.po, he.po, ja.po, ko.po, nl.po,
|
|
||||||
pl.po, pt_BR.po, ru.po, tr.po: Moved from i18n to here.
|
|
||||||
* .cvsignore: Moved from i18n to here.
|
|
||||||
|
|
||||||
* POTFILES.in, LINGUAS, Makevars: Created.
|
|
||||||
|
|
||||||
Copyright (C) 2002-2013 Free Software Foundation, Inc.
|
|
||||||
This file is part of GNU Make.
|
|
||||||
|
|
||||||
GNU Make is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
36
po/LINGUAS
36
po/LINGUAS
@ -1,5 +1,31 @@
|
|||||||
# Set of available languages: 25 languages
|
be
|
||||||
|
bg
|
||||||
be cs da de es fi fr ga gl he hr id it ja ko lt nl pl pt_BR ru sv tr uk vi zh_CN
|
cs
|
||||||
|
da
|
||||||
# Can't seem to get en@quot and en@boldquot to build properly?
|
de
|
||||||
|
es
|
||||||
|
fi
|
||||||
|
fr
|
||||||
|
ga
|
||||||
|
gl
|
||||||
|
he
|
||||||
|
hr
|
||||||
|
id
|
||||||
|
it
|
||||||
|
ja
|
||||||
|
ka
|
||||||
|
ko
|
||||||
|
lt
|
||||||
|
nl
|
||||||
|
pl
|
||||||
|
pt
|
||||||
|
pt_BR
|
||||||
|
ro
|
||||||
|
ru
|
||||||
|
sr
|
||||||
|
sv
|
||||||
|
tr
|
||||||
|
uk
|
||||||
|
vi
|
||||||
|
zh_CN
|
||||||
|
zh_TW
|
||||||
|
59
po/Makevars
59
po/Makevars
@ -1,59 +0,0 @@
|
|||||||
# This is a -*-Makefile-*-
|
|
||||||
# Copyright (C) 2002-2013 Free Software Foundation, Inc.
|
|
||||||
# This file is part of GNU Make.
|
|
||||||
#
|
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free
|
|
||||||
# Software Foundation; either version 3 of the License, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
|
|
||||||
# Makefile variables for PO directory in any package using GNU gettext.
|
|
||||||
|
|
||||||
# Usually the message domain is the same as the package name.
|
|
||||||
DOMAIN = $(PACKAGE)
|
|
||||||
|
|
||||||
# These two variables depend on the location of this directory.
|
|
||||||
subdir = po
|
|
||||||
top_builddir = ..
|
|
||||||
|
|
||||||
# These options get passed to xgettext.
|
|
||||||
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
|
|
||||||
|
|
||||||
# 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. (Note that the msgstr strings, extracted from the package's
|
|
||||||
# sources, belong to the copyright holder of the package.) Translators are
|
|
||||||
# expected to transfer the copyright for their translations to this person
|
|
||||||
# or entity, or to disclaim their copyright. The empty string stands for
|
|
||||||
# the public domain; in this case the translators are expected to disclaim
|
|
||||||
# their copyright.
|
|
||||||
COPYRIGHT_HOLDER = Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
# This is the email address or URL to which the translators shall report
|
|
||||||
# bugs in the untranslated strings:
|
|
||||||
# - Strings which are not entire sentences, see the maintainer guidelines
|
|
||||||
# in the GNU gettext documentation, section 'Preparing Strings'.
|
|
||||||
# - Strings which use unclear terms or require additional context to be
|
|
||||||
# understood.
|
|
||||||
# - Strings which make invalid assumptions about notation of date, time or
|
|
||||||
# money.
|
|
||||||
# - Pluralisation problems.
|
|
||||||
# - Incorrect English spelling.
|
|
||||||
# - Incorrect formatting.
|
|
||||||
# It can be your email address, or a mailing list address where translators
|
|
||||||
# can write to without being subscribed, or the URL of a web page through
|
|
||||||
# which the translators can contact you.
|
|
||||||
MSGID_BUGS_ADDRESS = bug-make@gnu.org
|
|
||||||
|
|
||||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
|
||||||
# message catalogs shall be used. It is usually empty.
|
|
||||||
EXTRA_LOCALE_CATEGORIES =
|
|
@ -1,5 +1,5 @@
|
|||||||
# List of source files containing translatable strings.
|
# List of source files containing translatable strings.
|
||||||
# Copyright (C) 2000-2013 Free Software Foundation, Inc.
|
# Copyright (C) 2000-2024 Free Software Foundation, Inc.
|
||||||
# This file is part of GNU Make.
|
# This file is part of GNU Make.
|
||||||
#
|
#
|
||||||
# GNU Make is free software; you can redistribute it and/or modify it under
|
# GNU Make is free software; you can redistribute it and/or modify it under
|
||||||
@ -13,33 +13,36 @@
|
|||||||
# details.
|
# details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
ar.c
|
src/ar.c
|
||||||
arscan.c
|
src/arscan.c
|
||||||
commands.c
|
src/commands.c
|
||||||
dir.c
|
src/dir.c
|
||||||
expand.c
|
src/expand.c
|
||||||
file.c
|
src/file.c
|
||||||
function.c
|
src/function.c
|
||||||
getopt.c
|
src/getopt.c
|
||||||
guile.c
|
src/guile.c
|
||||||
hash.c
|
src/hash.c
|
||||||
implicit.c
|
src/implicit.c
|
||||||
job.c
|
src/job.c
|
||||||
job.h
|
src/load.c
|
||||||
load.c
|
src/main.c
|
||||||
main.c
|
src/misc.c
|
||||||
misc.c
|
src/output.c
|
||||||
output.c
|
src/posixos.c
|
||||||
read.c
|
src/read.c
|
||||||
remake.c
|
src/remake.c
|
||||||
remote-cstms.c
|
src/remote-cstms.c
|
||||||
rule.c
|
src/rule.c
|
||||||
signame.c
|
src/shuffle.c
|
||||||
strcache.c
|
src/signame.c
|
||||||
variable.c
|
src/strcache.c
|
||||||
variable.h
|
src/variable.c
|
||||||
vmsfunctions.c
|
src/vmsfunctions.c
|
||||||
vmsjobs.c
|
src/vmsjobs.c
|
||||||
vpath.c
|
src/vpath.c
|
||||||
|
src/warning.c
|
||||||
|
src/warning.h
|
||||||
|
src/w32/w32os.c
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user