Compare commits
609 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
deb89378b5 | ||
|
|
ed5fc66af7 | ||
|
|
95c21e5775 | ||
|
|
916dd3e4c2 | ||
|
|
bc07cae127 | ||
|
|
4c3cde9ed2 | ||
|
|
5d8c8b3fb5 | ||
|
|
c670682a97 | ||
|
|
4034e3e02c | ||
|
|
9dc850b911 | ||
|
|
6b81f1b80f | ||
|
|
aa9dd7be5f | ||
|
|
97eeae3d75 | ||
|
|
f50637ef39 | ||
|
|
84309be01e | ||
|
|
563fb688b3 | ||
|
|
1aeb02030c | ||
|
|
43d2363c1e | ||
|
|
e7395a7d22 | ||
|
|
a38fdce3da | ||
|
|
da900b8789 |
||
|
|
3541190791 | ||
|
|
7262ed4066 | ||
|
|
e3690ac430 | ||
|
|
5f10b7c93e | ||
|
|
74a9a07c69 | ||
|
|
7b420c76e8 | ||
|
|
4ccd95e387 | ||
|
|
037b0a34f2 | ||
|
|
da4a9f4b88 | ||
|
|
186be743be | ||
|
|
19423ee8d9 | ||
|
|
f241947e6c | ||
|
|
8daf7ccb72 | ||
|
|
b7e197fb88 | ||
|
|
6bed1e3bd5 | ||
|
|
2e6762df8d | ||
|
|
c4e686c716 | ||
|
|
f11fa48d8f | ||
|
|
bd711c9036 | ||
|
|
fde0aac8f9 | ||
|
|
0d81c8b95a | ||
|
|
d03ac3403a | ||
|
|
55661b64e9 | ||
|
|
ca13a51589 | ||
|
|
7724c2d703 | ||
|
|
42b0e43e5a | ||
|
|
c913e4326c | ||
|
|
93638d9e58 | ||
|
|
677893973e | ||
|
|
d9051618e3 | ||
|
|
ff5301a5f3 | ||
|
|
c649282efb | ||
|
|
4ff7de7007 | ||
|
|
5da6a15c57 | ||
|
|
a34f33bc50 | ||
|
|
3008410463 | ||
|
|
ac77c2a354 | ||
|
|
aa7e8debee | ||
|
|
066e0a3d6d | ||
|
|
308b2c0ab2 | ||
|
|
05a6c9c8f3 | ||
|
|
f195b6a3c8 | ||
|
|
321ed23c22 | ||
|
|
ba498ce48c | ||
|
|
8d5b538747 | ||
|
|
5fd12c42e7 | ||
|
|
d432c95c15 | ||
|
|
393e74f1e0 | ||
|
|
1f35109c5e | ||
|
|
64dc6dd3e4 | ||
|
|
814eaf5324 | ||
|
|
da8822cd33 | ||
|
|
9e39fd242a | ||
|
|
31778c5ebd | ||
|
|
8f9fe41ba6 | ||
|
|
59f62d6bc9 | ||
|
|
65acd291de | ||
|
|
9c8400d99a | ||
|
|
d46ef9bbf3 | ||
|
|
ff0f48acd6 | ||
|
|
22597b6039 | ||
|
|
c4043528c1 | ||
|
|
be9fcec798 | ||
|
|
f2899ee090 | ||
|
|
25858e766a | ||
|
|
f8ef5964d0 | ||
|
|
b1748af87f | ||
|
|
2cdb051166 | ||
|
|
9819174c8d | ||
|
|
649a6e3083 | ||
|
|
1d0c071aeb | ||
|
|
79d75fdcdd | ||
|
|
588a4ae9f0 | ||
|
|
c2026da175 | ||
|
|
3f106c188e | ||
|
|
bf921512e2 | ||
|
|
ad7f78b5c8 | ||
|
|
f93afdebdd | ||
|
|
e2951e6856 | ||
|
|
ca94aff023 | ||
|
|
b7b5473796 | ||
|
|
2c91b113bb | ||
|
|
03e8cec9fe | ||
|
|
c2061af620 | ||
|
|
09d0e79c2b | ||
|
|
22d91a0910 | ||
|
|
796a198176 | ||
|
|
aee17a2180 | ||
|
|
df8cc89df4 | ||
|
|
9e774fba70 | ||
|
|
74983bcd56 | ||
|
|
67d5a7b3c6 | ||
|
|
204bab4f7f | ||
|
|
8157cd4820 | ||
|
|
1ff09bed2b | ||
|
|
b0ce095f6d | ||
|
|
a51a61214c | ||
|
|
2da7a540e7 | ||
|
|
a0bcb33eaa | ||
|
|
a28556f684 | ||
|
|
b6d9b2acd1 | ||
|
|
46ee70614f | ||
|
|
b24ebf5ec1 | ||
|
|
08a1249d7f | ||
|
|
5d3688479a | ||
|
|
dbe75d1cb5 | ||
|
|
d584a5bfb3 | ||
|
|
c4f8814a93 | ||
|
|
78a9fbc351 | ||
|
|
d75a6c86f9 | ||
|
|
11a27766bd | ||
|
|
1170d812fe | ||
|
|
089c0a1928 | ||
|
|
63065e7db7 | ||
|
|
6b2ff68f33 | ||
|
|
e6a3dff909 | ||
|
|
a09dbbec17 | ||
|
|
882d68b75c | ||
|
|
26bc979446 | ||
|
|
fbaee91204 | ||
|
|
1b641ac57f | ||
|
|
9e656cf658 | ||
|
|
fd8c8ee765 | ||
|
|
4108f57be7 | ||
|
|
b65d1d3090 | ||
|
|
303495d1bf | ||
|
|
dae90ef93d | ||
|
|
cb0039f53c | ||
|
|
9b149e59e4 | ||
|
|
2bc8b3d5d5 | ||
|
|
3210f66fb1 | ||
|
|
35f28c9a68 | ||
|
|
b7229da165 | ||
|
|
b3e2d7fc60 | ||
|
|
c7513cd67c | ||
|
|
cdeff9e00a | ||
|
|
1e72602218 | ||
|
|
0256efd992 | ||
|
|
64975231d1 | ||
|
|
f63d6e5cd4 | ||
|
|
0e7ccf2b47 | ||
|
|
071cbd0906 | ||
|
|
fcc584306b | ||
|
|
9a03f61609 | ||
|
|
15d70f8b4a | ||
|
|
f11a9b4fe3 | ||
|
|
2a352348bd | ||
|
|
986dc48123 | ||
|
|
be9961f6d0 | ||
|
|
946f8b8693 | ||
|
|
8b746d13cf | ||
|
|
78c9d9e324 | ||
|
|
d471fb8f62 | ||
|
|
4979be53ac | ||
|
|
d461276d48 | ||
|
|
064a0517d6 | ||
|
|
bc5cb6094e | ||
|
|
0963ae5102 | ||
|
|
29816481d1 | ||
|
|
26bc2eb795 | ||
|
|
102ff85d98 | ||
|
|
50345c3ee4 | ||
|
|
fb50c77241 | ||
|
|
ca69f778a9 | ||
|
|
838cca0381 | ||
|
|
baf046a6a4 | ||
|
|
c63e907e87 | ||
|
|
e5cef5e271 | ||
|
|
759d6796c6 | ||
|
|
a9b3ba531f | ||
|
|
f2d727806b | ||
|
|
79683d7d62 | ||
|
|
40937c8a7a | ||
|
|
40610a988c | ||
|
|
dde320d13d | ||
|
|
26cfdf277e | ||
|
|
345ce0e5b8 | ||
|
|
197c02993b | ||
|
|
bb318e2964 | ||
|
|
8454ff1601 | ||
|
|
3696d7be37 | ||
|
|
04b63f48ea | ||
|
|
fe3a1dd604 | ||
|
|
050a503e16 | ||
|
|
423327ef48 | ||
|
|
13a1b3e907 | ||
|
|
1cc2a497d3 | ||
|
|
ed790644ea | ||
|
|
ea106d15b2 | ||
|
|
e38302eeb1 | ||
|
|
395ef05d65 | ||
|
|
9d08846cc7 | ||
|
|
5aa32e278d | ||
|
|
f4c0ae4dea | ||
|
|
392287d18b | ||
|
|
a889754fa2 | ||
|
|
f3953123c0 | ||
|
|
17f23f30d6 | ||
|
|
bc094d8811 | ||
|
|
b610699f35 | ||
|
|
1e60df6dc1 | ||
|
|
bb1cbacab5 | ||
|
|
d66ece5f5d | ||
|
|
0c8cdc456b | ||
|
|
bb26a282aa |
||
|
|
2506a2faa2 | ||
|
|
c80ecd9db9 | ||
|
|
5dcc35c709 | ||
|
|
7fa10a167d | ||
|
|
5bf57b1504 | ||
|
|
32488add5b | ||
|
|
7c66ce151d | ||
|
|
d5e84a533c | ||
|
|
e91d1127db | ||
|
|
b19096d798 | ||
|
|
ec97a0708b | ||
|
|
936827a34b | ||
|
|
91a9a89fab | ||
|
|
ab0834da77 | ||
|
|
9fef07981c |
||
|
|
7c494340f9 | ||
|
|
ae55d5722d | ||
|
|
9f569993f0 | ||
|
|
8ef3cc0ed4 | ||
|
|
561c76845a | ||
|
|
bee5851fb0 | ||
|
|
b0274e84e7 | ||
|
|
ecbc53b331 | ||
|
|
f571c557e2 | ||
|
|
793a1c3612 | ||
|
|
dcd292bb5a | ||
|
|
39d1e08dc7 | ||
|
|
8326796861 | ||
|
|
ae56326d8d | ||
|
|
d452ecad11 | ||
|
|
3733c3cf5d | ||
|
|
7395ebdf85 | ||
|
|
a3207ebb16 | ||
|
|
43a2b51955 | ||
|
|
e3ea6478d9 | ||
|
|
6ff9776922 | ||
|
|
d074784f33 | ||
|
|
faaad7b7c5 | ||
|
|
2134f5703e | ||
|
|
637f46e17d | ||
|
|
75ea12f0a3 | ||
|
|
b15350c441 | ||
|
|
5624addc78 | ||
|
|
72c55bdcb2 | ||
|
|
f49edf212f | ||
|
|
138a8a192c |
||
|
|
10a4e45e89 | ||
|
|
b1741da5b7 | ||
|
|
9436f5bc42 | ||
|
|
45b099cf05 | ||
|
|
c2db65dbc7 | ||
|
|
ad05a88747 | ||
|
|
150d4f5dc0 | ||
|
|
9bc7bec4a7 | ||
|
|
9f971e4cf2 | ||
|
|
26252866ff | ||
|
|
6beb732b5c | ||
|
|
535c42e96c | ||
|
|
c9dec05f47 | ||
|
|
ad2b787fea | ||
|
|
30f6c6490e | ||
|
|
7e690d1b1d | ||
|
|
6e9956416e | ||
|
|
fde2a68e73 | ||
|
|
5c42276905 | ||
|
|
4571daf34e | ||
|
|
101851f2d3 | ||
|
|
8d50b10ccb | ||
|
|
3a2607aa17 | ||
|
|
c467007dbb | ||
|
|
415daf8d3b | ||
|
|
f540c43dae | ||
|
|
277ae4829a | ||
|
|
ab16bf76ef | ||
|
|
9a0bd11655 | ||
|
|
b04585e064 | ||
|
|
3130f89edd | ||
|
|
d14e3f780f | ||
|
|
b3e0a8c314 | ||
|
|
324c2d071e | ||
|
|
0a64e4b921 | ||
|
|
2221c5b843 | ||
|
|
2e9e67ab5b | ||
|
|
4fb1d9c02d | ||
|
|
dbf79976ab | ||
|
|
c4c93c1113 | ||
|
|
46551f13fc | ||
|
|
7684b6800d | ||
|
|
b1466a4c8f | ||
|
|
cad4c2ab27 | ||
|
|
f2347fa378 | ||
|
|
dd6ce9ce9c | ||
|
|
2414227a75 | ||
|
|
55ecc214e1 | ||
|
|
5ed2c68dc5 | ||
|
|
16c9e1e6b0 | ||
|
|
4c12d4e704 | ||
|
|
e467536081 | ||
|
|
b3ffc2fef6 | ||
|
|
e4e06c7ce8 | ||
|
|
c0513dfb8c | ||
|
|
bd75b0a7fe | ||
|
|
8e1e241814 | ||
|
|
b945bce4cb | ||
|
|
693a96cb40 | ||
|
|
d954989b45 | ||
|
|
3131d89fde | ||
|
|
3e4eba9070 | ||
|
|
4e3eb75037 | ||
|
|
e3316c21a0 | ||
|
|
55367be78b | ||
|
|
05eb8b6a78 | ||
|
|
b9da2e689a | ||
|
|
a0a4c7571b | ||
|
|
b92051c2fd | ||
|
|
4612226c7e | ||
|
|
4a07d55953 | ||
|
|
3db4917d37 | ||
|
|
1af12992cf | ||
|
|
203ef6c1f7 | ||
|
|
46f541b5e6 | ||
|
|
351bd6cd02 | ||
|
|
c8dee5c194 | ||
|
|
329ba54c7e | ||
|
|
76bbf0976d | ||
|
|
c5abc51c7c | ||
|
|
8dd648e754 | ||
|
|
11e59a1355 | ||
|
|
9195984ef3 | ||
|
|
de383e7548 | ||
|
|
1610d07dcd | ||
|
|
79beb34d80 | ||
|
|
4375d5ca30 | ||
|
|
2400b2d574 | ||
|
|
61fd310e63 | ||
|
|
1835dddc24 | ||
|
|
8e2921fd5a | ||
|
|
b9d9d0c37a | ||
|
|
629648da07 | ||
|
|
c31c7edb69 | ||
|
|
96581d5c96 | ||
|
|
ce47215a63 | ||
|
|
d09c32278d | ||
|
|
098cd8787a | ||
|
|
efdf386e31 | ||
|
|
0a113b08ab | ||
|
|
eab15b0506 | ||
|
|
f49b015f1f | ||
|
|
3f594feabd | ||
|
|
a7c9cd0323 | ||
|
|
5ef051104a | ||
|
|
0d5d7e9999 | ||
|
|
699faa5e25 | ||
|
|
df08120417 | ||
|
|
724ffdbb53 | ||
|
|
b038223eae | ||
|
|
bbb52ff9a6 | ||
|
|
9fc3f49bd6 | ||
|
|
7347c8fd58 | ||
|
|
04104b76f3 | ||
|
|
199081935e | ||
|
|
c4c64c841c | ||
|
|
e11dee8544 | ||
|
|
86a8f5cf5a | ||
|
|
19ff4992f3 | ||
|
|
02ee7904a4 | ||
|
|
0f37fb5c2c | ||
|
|
97430c9392 | ||
|
|
8fc18e146b | ||
|
|
16f19fee74 | ||
|
|
7b70466c53 | ||
|
|
f8855bc5dd | ||
|
|
639617a0ed | ||
|
|
e7fbfad6e4 | ||
|
|
641dc00b5f | ||
|
|
2b7dccf61f | ||
|
|
0492f50518 | ||
|
|
f84b34dea7 | ||
|
|
453497595c | ||
|
|
360d2b99cd | ||
|
|
ef80e1fa9d | ||
|
|
eac4c415ba | ||
|
|
4f8b7ad60d | ||
|
|
8f30dbcc0b | ||
|
|
835bcc89f9 | ||
|
|
a03b2d278b | ||
|
|
3a0654b687 | ||
|
|
142da175a2 | ||
|
|
49825df9b4 | ||
|
|
ed87733a22 | ||
|
|
1fdf929486 | ||
|
|
b2e10a3b7c | ||
|
|
127768a63e | ||
|
|
8ed2f329ec | ||
|
|
7a3d8e78c6 | ||
|
|
06a69a4fd9 | ||
|
|
e91db1d96b | ||
|
|
1e68c10ca8 | ||
|
|
315c4674d5 | ||
|
|
ca9cb26aac | ||
|
|
26512adf37 | ||
|
|
63dd7b41ef | ||
|
|
1ae6ae5b62 | ||
|
|
486dd7a45b | ||
|
|
e1890f92f2 | ||
|
|
ec047534c7 | ||
|
|
c0b18590df | ||
|
|
4f6b4d4bb4 | ||
|
|
56d430e19a | ||
|
|
cdb74fa5c8 | ||
|
|
893a03a0cf | ||
|
|
cf21f0581e | ||
|
|
bdaca0631c | ||
|
|
61fb1adee2 | ||
|
|
8f31ccc919 | ||
|
|
1757c4302b | ||
|
|
bc925acb7d | ||
|
|
b0d63dbf0f | ||
|
|
a9ecc1d687 | ||
|
|
57ec2c6da2 | ||
|
|
eba90976c0 | ||
|
|
405ae9bea2 | ||
|
|
12131c1727 | ||
|
|
eedc10e71b | ||
|
|
7e85d9bf7b | ||
|
|
a97a9bad50 | ||
|
|
19c0535a63 | ||
|
|
565e8feaf2 | ||
|
|
9bef4a9bb1 | ||
|
|
65fdd909e8 | ||
|
|
72e167a6f8 | ||
|
|
58664af968 | ||
|
|
deee8f95aa | ||
|
|
111d4ef777 | ||
|
|
56d12042aa | ||
|
|
cdd0186c31 | ||
|
|
03c34a7e1f | ||
|
|
bb479d9770 | ||
|
|
2ec8c6e8c9 | ||
|
|
929678a63d | ||
|
|
9c188645b4 | ||
|
|
f731780a81 | ||
|
|
14d28871b5 | ||
|
|
bf92566673 | ||
|
|
10f5cf664b | ||
|
|
f4e4d19314 | ||
|
|
e811eb017b | ||
|
|
2096cfc8bc | ||
|
|
aa7e2f369c | ||
|
|
53c48319dd | ||
|
|
48c266a57a | ||
|
|
21e3c8f22f | ||
|
|
8a758df481 | ||
|
|
96b97dac7f | ||
|
|
f5934325a4 | ||
|
|
e15c1cf2f4 | ||
|
|
eca05efe33 | ||
|
|
2aa9685103 | ||
|
|
9814bf8bf6 | ||
|
|
465cd2abbf | ||
|
|
a3b6f46f68 | ||
|
|
205b40da9d | ||
|
|
cd4b136636 | ||
|
|
152afa6f24 | ||
|
|
d5af607134 | ||
|
|
924ee344ab | ||
|
|
a91606d4ba | ||
|
|
4574488d84 | ||
|
|
94da38c804 | ||
|
|
306a9cfda2 | ||
|
|
e4abbb6f3e | ||
|
|
f558e87b58 | ||
|
|
66b98259c5 | ||
|
|
d64bdcf487 | ||
|
|
f700ed56ad | ||
|
|
e6ae5c218d | ||
|
|
f54d04c405 | ||
|
|
6c9f7f5273 | ||
|
|
08ec4b6a6c | ||
|
|
6951c61aee | ||
|
|
3fa802844a | ||
|
|
dcfbb7a72e | ||
|
|
dc03cfc635 | ||
|
|
b3f2794361 | ||
|
|
6193662f24 | ||
|
|
43f936f6e3 | ||
|
|
4fa6c0a0f2 | ||
|
|
3a63053e85 | ||
|
|
dd816cc3e3 | ||
|
|
ed30ceed59 | ||
|
|
751f271fc3 | ||
|
|
4531f33ec9 | ||
|
|
223ff9d8e4 | ||
|
|
ff0af32c7d | ||
|
|
0917ed3f90 | ||
|
|
5961c79b1c | ||
|
|
a5d4d8f85d | ||
|
|
ccac016359 | ||
|
|
752aa5455a | ||
|
|
6aa88d69ae | ||
|
|
95c97f6ea7 | ||
|
|
54ae414367 | ||
|
|
dc683b73ac | ||
|
|
4efe111a88 | ||
|
|
ea3cb65d83 | ||
|
|
7fe201b148 | ||
|
|
7dff78b417 | ||
|
|
51a6d3593c | ||
|
|
957db76127 | ||
|
|
8703f41ded | ||
|
|
1d3888b468 | ||
|
|
169a9110ad | ||
|
|
a8441ce179 | ||
|
|
58dbcf70fa | ||
|
|
3e2b3a9d7a | ||
|
|
e7ad4decdb | ||
|
|
71a6c68957 | ||
|
|
e546e8e8c8 | ||
|
|
7eabfd2d54 | ||
|
|
cd63825ab4 | ||
|
|
0ce13e852b | ||
|
|
72dd691407 | ||
|
|
b42822b569 | ||
|
|
8e5c4b1bb4 | ||
|
|
53c4a0f73f | ||
|
|
97857e815d | ||
|
|
773f36cff7 | ||
|
|
352f32d3d1 | ||
|
|
df7d22b1d3 | ||
|
|
9f5278c112 | ||
|
|
98f988e9c6 | ||
|
|
cde07425ae | ||
|
|
52c949474b | ||
|
|
2498f3d3fb | ||
|
|
cf9050e104 | ||
|
|
dcc9bf3235 | ||
|
|
fe62b1ec08 | ||
|
|
65cb15b936 | ||
|
|
e10d820c6f | ||
|
|
7ade1a070e | ||
|
|
b31f0b7e9d | ||
|
|
16dead84af | ||
|
|
475ac39285 | ||
|
|
317a62aceb | ||
|
|
7156dc7e9b | ||
|
|
cb8843b516 | ||
|
|
1cc853bb60 | ||
|
|
328c18e61f | ||
|
|
82e6513e5e | ||
|
|
f56e2b573d | ||
|
|
91599c23af | ||
|
|
7844acce6d | ||
|
|
7ba1fecec8 | ||
|
|
ef4f0ea417 | ||
|
|
70cdc79878 | ||
|
|
c3215b7372 | ||
|
|
1fd7d3cfa1 | ||
|
|
117278abd0 | ||
|
|
2272bb7315 | ||
|
|
4830bd0241 | ||
|
|
139d71a9fb | ||
|
|
b959b0277f | ||
|
|
87d17f048e | ||
|
|
473f80e480 | ||
|
|
ace4eca586 | ||
|
|
13bbaded90 | ||
|
|
afa951ce79 | ||
|
|
7fb6341799 | ||
|
|
156edf52c6 | ||
|
|
edf17a3a09 | ||
|
|
1d47f9e33b | ||
|
|
ca286f57ff | ||
|
|
8a9a71d5bd | ||
|
|
1f8d8f93ae | ||
|
|
cd6ff90af5 | ||
|
|
eaf2933aa8 | ||
|
|
84e77dfb4d | ||
|
|
ca9335f385 | ||
|
|
d5ad16c60d | ||
|
|
0ad7b67678 | ||
|
|
75c801898d | ||
|
|
e68a717cca | ||
|
|
0ab1a34ed9 |
54 changed files with 5294 additions and 2836 deletions
1
.fmf/version
Normal file
1
.fmf/version
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
1
|
||||||
13
.gitignore
vendored
13
.gitignore
vendored
|
|
@ -1,7 +1,6 @@
|
||||||
ruby-1.8.6-p388.tar.bz2
|
/*/
|
||||||
ruby-refm-rdp-1.8.2-ja-html.tar.gz
|
/ruby-*.tar.xz
|
||||||
rubyfaq-990927.tar.gz
|
/rexml-*.gem
|
||||||
rubyfaq-jp-990927.tar.gz
|
/*.rpm
|
||||||
ruby-1.8.6-p399.tar.bz2
|
|
||||||
ruby-1.8-rev27738_trunk-ext_tk.tar.gz
|
!/plans/
|
||||||
/ruby-1.8.6-p420.tar.bz2
|
|
||||||
|
|
|
||||||
488
irb.1
488
irb.1
|
|
@ -1,488 +0,0 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! it was generated by rd2
|
|
||||||
.TH irb-beta 1 "May 2001"
|
|
||||||
.SH What is irb?
|
|
||||||
.PP
|
|
||||||
irb stands for `interactive ruby'. irb is a tool to execute interactively
|
|
||||||
ruby expressions read from stdin.
|
|
||||||
.SH Invoking
|
|
||||||
.PP
|
|
||||||
.nf
|
|
||||||
\& % ruby \-r irb \-e0
|
|
||||||
\& % irb
|
|
||||||
.fi
|
|
||||||
Either of the aboves. In the former style, options can be specified
|
|
||||||
as follows:
|
|
||||||
.nf
|
|
||||||
\& % ruby \-r irb \-e0 \-\- \-v
|
|
||||||
.fi
|
|
||||||
.SH Usage
|
|
||||||
.PP
|
|
||||||
Use of irb is easy if you know ruby. Executing irb, prompts are
|
|
||||||
displayed as follows. Then, enter expression of ruby. A input is
|
|
||||||
executed when it is syntacticaly completed.
|
|
||||||
.nf
|
|
||||||
\& dim% irb
|
|
||||||
\& irb(main):001:0> 1+2
|
|
||||||
\& 3
|
|
||||||
\& irb(main):002:0> class Foo
|
|
||||||
\& irb(main):003:1> def foo
|
|
||||||
\& irb(main):004:2> print 1
|
|
||||||
\& irb(main):005:2> end
|
|
||||||
\& irb(main):006:1> end
|
|
||||||
\& nil
|
|
||||||
\& irb(main):007:0>
|
|
||||||
.fi
|
|
||||||
And, Readline extesion module can be used with irb. Using Readline
|
|
||||||
is the standard default action if Readline is installed.
|
|
||||||
.SH Command line option
|
|
||||||
.PP
|
|
||||||
.nf
|
|
||||||
\& irb.rb [options] file_name opts
|
|
||||||
\& options:
|
|
||||||
\& \-f suppress read ~/.irbrc
|
|
||||||
\& \-m bc mode (fraction or matrix are available)
|
|
||||||
\& \-d set $DEBUG to true (same as `ruby \-d')
|
|
||||||
\& \-r load\-module same as `ruby \-r'
|
|
||||||
\& \-\-inspect uses `inspect' for output (the default except bc mode)
|
|
||||||
\& \-\-noinspect doesn't uses inspect for output
|
|
||||||
\& \-\-readline uses Readline extension module
|
|
||||||
\& \-\-noreadline doesn't use Readline extension module
|
|
||||||
\& \-\-prompt prompt\-mode
|
|
||||||
\& \-\-prompt\-mode prompt\-mode
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& switches prompt mode. Pre\-defined prompt modes are
|
|
||||||
\& `defalut', `simple', `xmp' and `inf\-ruby'
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& \-\-inf\-ruby\-mode uses prompt appreciate for inf\-ruby\-mode on emacs.
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& Suppresses \-\-readline.
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& \-\-simple\-prompt simple prompt mode
|
|
||||||
\& \-\-noprompt no prompt
|
|
||||||
\& \-\-tracer display trace for each execution of commands.
|
|
||||||
\& \-\-back\-trace\-limit n
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& displayes backtrace top n and tail n. The default
|
|
||||||
\& value is 16.
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& \-\-irb_debug n sets internal debug level to n (It shouldn't be used)
|
|
||||||
\& \-v, \-\-version prints the version of irb
|
|
||||||
.fi
|
|
||||||
.SH Configurations
|
|
||||||
.PP
|
|
||||||
irb reads `~/.irbrc' when it is invoked. If `~/.irbrb' doesn't exist
|
|
||||||
irb try to read in the order `.irbrc', `irb.rc', `_irbrc' then `$irbrc'.
|
|
||||||
The following is altanative to the command line option. To use them
|
|
||||||
type as follows in an irb session.
|
|
||||||
.nf
|
|
||||||
\& IRB.conf[:IRB_NAME]="irb"
|
|
||||||
\& IRB.conf[:MATH_MODE]=false
|
|
||||||
\& IRB.conf[:USE_TRACER]=false
|
|
||||||
\& IRB.conf[:USE_LOADER]=false
|
|
||||||
\& IRB.conf[:IGNORE_SIGINT]=true
|
|
||||||
\& IRB.conf[:IGNORE_EOF]=false
|
|
||||||
\& IRB.conf[:INSPECT_MODE]=nil
|
|
||||||
\& IRB.conf[:IRB_RC] = nil
|
|
||||||
\& IRB.conf[:BACK_TRACE_LIMIT]=16
|
|
||||||
\& IRB.conf[:USE_LOADER] = false
|
|
||||||
\& IRB.conf[:USE_READLINE] = nil
|
|
||||||
\& IRB.conf[:USE_TRACER] = false
|
|
||||||
\& IRB.conf[:IGNORE_SIGINT] = true
|
|
||||||
\& IRB.conf[:IGNORE_EOF] = false
|
|
||||||
\& IRB.conf[:PROMPT_MODE] = :DEFALUT
|
|
||||||
\& IRB.conf[:PROMPT] = {...}
|
|
||||||
\& IRB.conf[:DEBUG_LEVEL]=0
|
|
||||||
\& IRB.conf[:VERBOSE]=true
|
|
||||||
.fi
|
|
||||||
.SH Customizing prompt
|
|
||||||
.PP
|
|
||||||
To costomize the prompt you set a variable
|
|
||||||
.nf
|
|
||||||
\& IRB.conf[:PROMPT]
|
|
||||||
.fi
|
|
||||||
For example, describe as follows in `.irbrc'.
|
|
||||||
.nf
|
|
||||||
\& IRB.conf[:PROMPT][:MY_PROMPT] = { # name of prompt mode
|
|
||||||
\& :PROMPT_I => nil, # normal prompt
|
|
||||||
\& :PROMPT_S => nil, # prompt for continuated strings
|
|
||||||
\& :PROMPT_C => nil, # prompt for continuated statement
|
|
||||||
\& :RETURN => " ==>%s\\n" # format to return value
|
|
||||||
\& }
|
|
||||||
.fi
|
|
||||||
Then, invoke irb with the above prompt mode by
|
|
||||||
.nf
|
|
||||||
\& % irb \-\-prompt my\-prompt
|
|
||||||
.fi
|
|
||||||
Or add the following in `.irbrc'.
|
|
||||||
.nf
|
|
||||||
\& IRB.conf[:PROMPT_MODE] = :MY_PROMPT
|
|
||||||
.fi
|
|
||||||
Constants PROMPT_I, PROMPT_S and PROMPT_C specifies the format.
|
|
||||||
In the prompt specification, some special strings are available.
|
|
||||||
.nf
|
|
||||||
\& %N command name which is running
|
|
||||||
\& %m to_s of main object (self)
|
|
||||||
\& %M inspect of main object (self)
|
|
||||||
\& %l type of string(", ', /, ]), `]' is inner %w[...]
|
|
||||||
\& %NNi indent level. NN is degits and means as same as printf("%NNd").
|
|
||||||
\& It can be ommited
|
|
||||||
\& %NNn line number.
|
|
||||||
\& %% %
|
|
||||||
.fi
|
|
||||||
For instance, the default prompt mode is defined as follows:
|
|
||||||
IRB.conf[:PROMPT_MODE][:DEFAULT] = {
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
PROMPT_I => "%N(%m):%03n:%i> ",
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
PROMPT_S => "%N(%m):%03n:%i%l ",
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
PROMPT_C => "%N(%m):%03n:%i* ",
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
RETURN => "%s\\n"
|
|
||||||
}
|
|
||||||
RETURN is used to printf.
|
|
||||||
.SH Configurating subirb
|
|
||||||
.PP
|
|
||||||
The command line option or IRB.conf specify the default behavior of
|
|
||||||
(sub)irb. On the other hand, each conf of in the next sction `6. Command'
|
|
||||||
is used to individually configurate (sub)irb.
|
|
||||||
If proc is set to IRB.conf[:IRB_RC], its subirb will be invoked after
|
|
||||||
execution of that proc under giving the context of irb as its
|
|
||||||
aregument. By this mechanism each subirb can be configurated.
|
|
||||||
.SH Command
|
|
||||||
.PP
|
|
||||||
For irb commands, both simple name and `irb_'\-prefixed name are prepared.
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
exit, quit, irb_exit
|
|
||||||
Quits (sub)irb.
|
|
||||||
if you've done cb (see below), exit from the binding mode.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf, irb_context
|
|
||||||
Displays current configuration. Modifing the configuration is
|
|
||||||
achieved by sending message to `conf'.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.back_trace_limit
|
|
||||||
Sets display lines of backtrace as top n and tail n.
|
|
||||||
The default value is 16.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.debug_level = N
|
|
||||||
Sets debug level of irb.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.ignore_eof = true/false
|
|
||||||
Whether ^D (control\-d) will be ignored or not.
|
|
||||||
If false is set, ^D means quit.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.ignore_sigint= true/false
|
|
||||||
Whether ^C (control\-c) will be ignored or not.
|
|
||||||
If false is set, ^D means quit. If true,
|
|
||||||
|
|
||||||
.nf
|
|
||||||
\& during input: cancel inputing then return to top level.
|
|
||||||
\& during execute: abondon current execution.
|
|
||||||
.fi
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.inf_ruby_mode = true/false
|
|
||||||
Whether inf\-ruby\-mode or not. The default value is false.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.inspect_mode = true/false/nil
|
|
||||||
Specifies inspect mode.
|
|
||||||
true: display inspect
|
|
||||||
false: display to_s
|
|
||||||
nil: inspect mode in non math mode,
|
|
||||||
|
|
||||||
.nf
|
|
||||||
\& non inspect mode in math mode.
|
|
||||||
.fi
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.irb_level
|
|
||||||
The level of cb.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.math_mode
|
|
||||||
Whether bc mode or not.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.use_loader = true/false
|
|
||||||
Whether irb's own file reader method is used when load/require or not.
|
|
||||||
This mode is globaly affected (irb wide).
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.prompt_c
|
|
||||||
prompt for a continuating statement (e.g, immediately after of `if')
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.prompt_i
|
|
||||||
standard prompt
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.prompt_s
|
|
||||||
prompt for a continuating string
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.rc
|
|
||||||
Whether ~/.irbrc is read or not.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.use_prompt = true/false
|
|
||||||
Prompting or not.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.use_readline = true/false/nil
|
|
||||||
Whether readline is used or not.
|
|
||||||
true: uses
|
|
||||||
false: doen't use
|
|
||||||
nil: intends to use readline except for inf\-reuby\-mode (default)
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
conf.verbose=T/F
|
|
||||||
Whether verbose messages are display or not.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
cb, irb_change_binding [obj]
|
|
||||||
Enter new binding which has a distinct scope of local variables.
|
|
||||||
If obj is given, obj will be self.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
irb [obj]
|
|
||||||
Invoke subirb. If obj is given, obj will be self.
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
jobs, irb_jobs
|
|
||||||
List of subirb
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
fg n, irb_fg n
|
|
||||||
Switch into specified subirb. The following is candidates of n:
|
|
||||||
|
|
||||||
.nf
|
|
||||||
\& irb number
|
|
||||||
\& thhread
|
|
||||||
\& irb object
|
|
||||||
\& self(obj which is specified of irb obj)
|
|
||||||
.fi
|
|
||||||
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.fi
|
|
||||||
.B
|
|
||||||
kill n, irb_kill n
|
|
||||||
Kill subirb. The means of n is as same as the case of irb_fg.
|
|
||||||
.SH System variable
|
|
||||||
.PP
|
|
||||||
.nf
|
|
||||||
\& _ The latest value of evaluation (it is local)
|
|
||||||
.fi
|
|
||||||
.SH Session Example
|
|
||||||
.PP
|
|
||||||
.nf
|
|
||||||
\& dim% ruby irb.rb
|
|
||||||
\& irb(main):001:0> irb # invoke subirb
|
|
||||||
\& irb#1(main):001:0> jobs # list of subirbs
|
|
||||||
\& #0\->irb on main (#<Thread:0x400fb7e4> : stop)
|
|
||||||
\& #1\->irb#1 on main (#<Thread:0x40125d64> : running)
|
|
||||||
\& nil
|
|
||||||
\& irb#1(main):002:0> fg 0 # switch job
|
|
||||||
\& nil
|
|
||||||
\& irb(main):002:0> class Foo;end
|
|
||||||
\& nil
|
|
||||||
\& irb(main):003:0> irb Foo # invoke subirb which has the
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& # context of Foo
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& irb#2(Foo):001:0> def foo # define Foo#foo
|
|
||||||
\& irb#2(Foo):002:1> print 1
|
|
||||||
\& irb#2(Foo):003:1> end
|
|
||||||
\& nil
|
|
||||||
\& irb#2(Foo):004:0> fg 0 # switch job
|
|
||||||
\& nil
|
|
||||||
\& irb(main):004:0> jobs # list of job
|
|
||||||
\& #0\->irb on main (#<Thread:0x400fb7e4> : running)
|
|
||||||
\& #1\->irb#1 on main (#<Thread:0x40125d64> : stop)
|
|
||||||
\& #2\->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
|
|
||||||
\& nil
|
|
||||||
\& irb(main):005:0> Foo.instance_methods # Foo#foo is defined asurely
|
|
||||||
\& ["foo"]
|
|
||||||
\& irb(main):006:0> fg 2 # switch job
|
|
||||||
\& nil
|
|
||||||
\& irb#2(Foo):005:0> def bar # define Foo#bar
|
|
||||||
\& irb#2(Foo):006:1> print "bar"
|
|
||||||
\& irb#2(Foo):007:1> end
|
|
||||||
\& nil
|
|
||||||
\& irb#2(Foo):010:0> Foo.instance_methods
|
|
||||||
\& ["bar", "foo"]
|
|
||||||
\& irb#2(Foo):011:0> fg 0
|
|
||||||
\& nil
|
|
||||||
\& irb(main):007:0> f = Foo.new
|
|
||||||
\& #<Foo:0x4010af3c>
|
|
||||||
\& irb(main):008:0> irb f # invoke subirb which has the
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& # context of f (instance of Foo)
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& irb#3(#<Foo:0x4010af3c>):001:0> jobs
|
|
||||||
\& #0\->irb on main (#<Thread:0x400fb7e4> : stop)
|
|
||||||
\& #1\->irb#1 on main (#<Thread:0x40125d64> : stop)
|
|
||||||
\& #2\->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
|
|
||||||
\& #3\->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running)
|
|
||||||
\& nil
|
|
||||||
\& irb#3(#<Foo:0x4010af3c>):002:0> foo # evaluate f.foo
|
|
||||||
\& 1nil
|
|
||||||
\& irb#3(#<Foo:0x4010af3c>):003:0> bar # evaluate f.bar
|
|
||||||
\& barnil
|
|
||||||
\& irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# kill job
|
|
||||||
\& nil
|
|
||||||
\& irb(main):009:0> jobs
|
|
||||||
\& #0\->irb on main (#<Thread:0x400fb7e4> : running)
|
|
||||||
\& nil
|
|
||||||
\& irb(main):010:0> exit # exit
|
|
||||||
\& dim%
|
|
||||||
.fi
|
|
||||||
.SH Restrictions
|
|
||||||
.PP
|
|
||||||
Because irb evaluates the inputs immediately after the imput is
|
|
||||||
syntactically completed, irb gives slight different result than
|
|
||||||
directly use ruby. Known difference is pointed out here.
|
|
||||||
.SH Declaration of the local variable
|
|
||||||
.PP
|
|
||||||
The following causes an error in ruby:
|
|
||||||
.nf
|
|
||||||
\& eval "foo = 0"
|
|
||||||
\& foo
|
|
||||||
\& \-\-
|
|
||||||
\& \-:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
|
|
||||||
\& \-\-\-
|
|
||||||
\& NameError
|
|
||||||
.fi
|
|
||||||
Though, the above will successfully done by irb.
|
|
||||||
.nf
|
|
||||||
\& >> eval "foo = 0"
|
|
||||||
.fi
|
|
||||||
.nf
|
|
||||||
\& => 0
|
|
||||||
\& >> foo
|
|
||||||
\& => 0
|
|
||||||
.fi
|
|
||||||
Ruby evaluates a code after reading entire of code and determination
|
|
||||||
of the scope of local variables. On the other hand, irb do
|
|
||||||
immediately. More precisely, irb evaluate at first
|
|
||||||
.nf
|
|
||||||
\& evel "foo = 0"
|
|
||||||
.fi
|
|
||||||
then foo is defined on this timing. It is because of this
|
|
||||||
incompatibility.
|
|
||||||
If you'd like to detect those differences, begin...end can be used:
|
|
||||||
.nf
|
|
||||||
\& >> begin
|
|
||||||
\& ?> eval "foo = 0"
|
|
||||||
\& >> foo
|
|
||||||
\& >> end
|
|
||||||
\& NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0>
|
|
||||||
\& (irb):3
|
|
||||||
\& (irb_local_binding):1:in `eval'
|
|
||||||
.fi
|
|
||||||
.SH Here\-document
|
|
||||||
.PP
|
|
||||||
Implementation of Here\-document is incomplete.
|
|
||||||
.SH Symbol
|
|
||||||
.PP
|
|
||||||
Irb can not always recognize a symbol as to be Symbol. Concretely, an
|
|
||||||
expression have completed, however Irb regard it as continuation line.
|
|
||||||
|
|
||||||
303
libruby.stp
Normal file
303
libruby.stp
Normal file
|
|
@ -0,0 +1,303 @@
|
||||||
|
/* SystemTap tapset to make it easier to trace Ruby 2.0
|
||||||
|
*
|
||||||
|
* All probes provided by Ruby can be listed using following command
|
||||||
|
* (the path to the library must be adjuste appropriately):
|
||||||
|
*
|
||||||
|
* stap -L 'process("@LIBRARY_PATH@").mark("*")'
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.array.create - Allocation of new array.
|
||||||
|
*
|
||||||
|
* @size: Number of elements (an int)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.array.create =
|
||||||
|
process("@LIBRARY_PATH@").mark("array__create")
|
||||||
|
{
|
||||||
|
size = $arg1
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.cmethod.entry - Fired just before a method implemented in C is entered.
|
||||||
|
*
|
||||||
|
* @classname: Name of the class (string)
|
||||||
|
* @methodname: The method about bo be executed (string)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.cmethod.entry =
|
||||||
|
process("@LIBRARY_PATH@").mark("cmethod__entry")
|
||||||
|
{
|
||||||
|
classname = user_string($arg1)
|
||||||
|
methodname = user_string($arg2)
|
||||||
|
file = user_string($arg3)
|
||||||
|
line = $arg4
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.cmethod.return - Fired just after a method implemented in C has returned.
|
||||||
|
*
|
||||||
|
* @classname: Name of the class (string)
|
||||||
|
* @methodname: The executed method (string)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.cmethod.return =
|
||||||
|
process("@LIBRARY_PATH@").mark("cmethod__return")
|
||||||
|
{
|
||||||
|
classname = user_string($arg1)
|
||||||
|
methodname = user_string($arg2)
|
||||||
|
file = user_string($arg3)
|
||||||
|
line = $arg4
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.find.require.entry - Fired when require starts to search load
|
||||||
|
* path for suitable file to require.
|
||||||
|
*
|
||||||
|
* @requiredfile: The name of the file to be required (string)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.find.require.entry =
|
||||||
|
process("@LIBRARY_PATH@").mark("find__require__entry")
|
||||||
|
{
|
||||||
|
requiredfile = user_string($arg1)
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.find.require.return - Fired just after require has finished
|
||||||
|
* search of load path for suitable file to require.
|
||||||
|
*
|
||||||
|
* @requiredfile: The name of the file to be required (string)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.find.require.return =
|
||||||
|
process("@LIBRARY_PATH@").mark("find__require__return")
|
||||||
|
{
|
||||||
|
requiredfile = user_string($arg1)
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.gc.mark.begin - Fired when a GC mark phase is about to start.
|
||||||
|
*
|
||||||
|
* It takes no arguments.
|
||||||
|
*/
|
||||||
|
probe ruby.gc.mark.begin =
|
||||||
|
process("@LIBRARY_PATH@").mark("gc__mark__begin")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.gc.mark.end - Fired when a GC mark phase has ended.
|
||||||
|
*
|
||||||
|
* It takes no arguments.
|
||||||
|
*/
|
||||||
|
probe ruby.gc.mark.end =
|
||||||
|
process("@LIBRARY_PATH@").mark("gc__mark__end")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.gc.sweep.begin - Fired when a GC sweep phase is about to start.
|
||||||
|
*
|
||||||
|
* It takes no arguments.
|
||||||
|
*/
|
||||||
|
probe ruby.gc.sweep.begin =
|
||||||
|
process("@LIBRARY_PATH@").mark("gc__sweep__begin")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.gc.sweep.end - Fired when a GC sweep phase has ended.
|
||||||
|
*
|
||||||
|
* It takes no arguments.
|
||||||
|
*/
|
||||||
|
probe ruby.gc.sweep.end =
|
||||||
|
process("@LIBRARY_PATH@").mark("gc__sweep__end")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.hash.create - Allocation of new hash.
|
||||||
|
*
|
||||||
|
* @size: Number of elements (int)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.hash.create =
|
||||||
|
process("@LIBRARY_PATH@").mark("hash__create")
|
||||||
|
{
|
||||||
|
size = $arg1
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.load.entry - Fired when calls to "load" are made.
|
||||||
|
*
|
||||||
|
* @loadedfile: The name of the file to be loaded (string)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.load.entry =
|
||||||
|
process("@LIBRARY_PATH@").mark("load__entry")
|
||||||
|
{
|
||||||
|
loadedfile = user_string($arg1)
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.load.return - Fired just after require has finished
|
||||||
|
* search of load path for suitable file to require.
|
||||||
|
*
|
||||||
|
* @loadedfile: The name of the file that was loaded (string)
|
||||||
|
*/
|
||||||
|
probe ruby.load.return =
|
||||||
|
process("@LIBRARY_PATH@").mark("load__return")
|
||||||
|
{
|
||||||
|
loadedfile = user_string($arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.method.entry - Fired just before a method implemented in Ruby is entered.
|
||||||
|
*
|
||||||
|
* @classname: Name of the class (string)
|
||||||
|
* @methodname: The method about bo be executed (string)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.method.entry =
|
||||||
|
process("@LIBRARY_PATH@").mark("method__entry")
|
||||||
|
{
|
||||||
|
classname = user_string($arg1)
|
||||||
|
methodname = user_string($arg2)
|
||||||
|
file = user_string($arg3)
|
||||||
|
line = $arg4
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.method.return - Fired just after a method implemented in Ruby has returned.
|
||||||
|
*
|
||||||
|
* @classname: Name of the class (string)
|
||||||
|
* @methodname: The executed method (string)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.method.return =
|
||||||
|
process("@LIBRARY_PATH@").mark("method__return")
|
||||||
|
{
|
||||||
|
classname = user_string($arg1)
|
||||||
|
methodname = user_string($arg2)
|
||||||
|
file = user_string($arg3)
|
||||||
|
line = $arg4
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.object.create - Allocation of new object.
|
||||||
|
*
|
||||||
|
* @classname: Name of the class (string)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.object.create =
|
||||||
|
process("@LIBRARY_PATH@").mark("object__create")
|
||||||
|
{
|
||||||
|
classname = user_string($arg1)
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.parse.begin - Fired just before a Ruby source file is parsed.
|
||||||
|
*
|
||||||
|
* @parsedfile: The name of the file to be parsed (string)
|
||||||
|
* @parsedline: The line number of beginning of parsing (int)
|
||||||
|
*/
|
||||||
|
probe ruby.parse.begin =
|
||||||
|
process("@LIBRARY_PATH@").mark("parse__begin")
|
||||||
|
{
|
||||||
|
parsedfile = user_string($arg1)
|
||||||
|
parsedline = $arg2
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.parse.end - Fired just after a Ruby source file was parsed.
|
||||||
|
*
|
||||||
|
* @parsedfile: The name of parsed the file (string)
|
||||||
|
* @parsedline: The line number of beginning of parsing (int)
|
||||||
|
*/
|
||||||
|
probe ruby.parse.end =
|
||||||
|
process("@LIBRARY_PATH@").mark("parse__end")
|
||||||
|
{
|
||||||
|
parsedfile = user_string($arg1)
|
||||||
|
parsedline = $arg2
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.raise - Fired when an exception is raised.
|
||||||
|
*
|
||||||
|
* @classname: The class name of the raised exception (string)
|
||||||
|
* @file: The name of the file where the exception was raised (string)
|
||||||
|
* @line: The line number in the file where the exception was raised (int)
|
||||||
|
*/
|
||||||
|
probe ruby.raise =
|
||||||
|
process("@LIBRARY_PATH@").mark("raise")
|
||||||
|
{
|
||||||
|
classname = user_string($arg1)
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.require.entry - Fired on calls to rb_require_safe (when a file
|
||||||
|
* is required).
|
||||||
|
*
|
||||||
|
* @requiredfile: The name of the file to be required (string)
|
||||||
|
* @file: The file that called "require" (string)
|
||||||
|
* @line: The line number where the call to require was made(int)
|
||||||
|
*/
|
||||||
|
probe ruby.require.entry =
|
||||||
|
process("@LIBRARY_PATH@").mark("require__entry")
|
||||||
|
{
|
||||||
|
requiredfile = user_string($arg1)
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.require.return - Fired just after require has finished
|
||||||
|
* search of load path for suitable file to require.
|
||||||
|
*
|
||||||
|
* @requiredfile: The file that was required (string)
|
||||||
|
*/
|
||||||
|
probe ruby.require.return =
|
||||||
|
process("@LIBRARY_PATH@").mark("require__return")
|
||||||
|
{
|
||||||
|
requiredfile = user_string($arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* probe ruby.string.create - Allocation of new string.
|
||||||
|
*
|
||||||
|
* @size: Number of elements (an int)
|
||||||
|
* @file: The file name where the method is being called (string)
|
||||||
|
* @line: The line number where the method is being called (int)
|
||||||
|
*/
|
||||||
|
probe ruby.string.create =
|
||||||
|
process("@LIBRARY_PATH@").mark("string__create")
|
||||||
|
{
|
||||||
|
size = $arg1
|
||||||
|
file = user_string($arg2)
|
||||||
|
line = $arg3
|
||||||
|
}
|
||||||
22
macros.ruby
Normal file
22
macros.ruby
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
%ruby_libdir %{_datadir}/%{name}
|
||||||
|
%ruby_libarchdir %{_libdir}/%{name}
|
||||||
|
|
||||||
|
# This is the local lib/arch and should not be used for packaging.
|
||||||
|
%ruby_sitedir site_ruby
|
||||||
|
%ruby_sitelibdir %{_prefix}/local/share/%{name}/%{ruby_sitedir}
|
||||||
|
%ruby_sitearchdir %{_prefix}/local/%{_lib}/%{name}/%{ruby_sitedir}
|
||||||
|
|
||||||
|
# This is the general location for libs/archs compatible with all
|
||||||
|
# or most of the Ruby versions available in the Fedora repositories.
|
||||||
|
%ruby_vendordir vendor_ruby
|
||||||
|
%ruby_vendorlibdir %{ruby_libdir}/%{ruby_vendordir}
|
||||||
|
%ruby_vendorarchdir %{ruby_libarchdir}/%{ruby_vendordir}
|
||||||
|
|
||||||
|
# For ruby packages we want to filter out any provides caused by private
|
||||||
|
# libs in %%{ruby_vendorarchdir}/%%{ruby_sitearchdir}.
|
||||||
|
#
|
||||||
|
# Note that this must be invoked in the spec file, preferably as
|
||||||
|
# "%{?ruby_default_filter}", before any %description block.
|
||||||
|
%ruby_default_filter %{expand: \
|
||||||
|
%global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^(%{ruby_vendorarchdir}|%{ruby_sitearchdir})/.*\\\\.so$ \
|
||||||
|
}
|
||||||
227
macros.rubygems
Normal file
227
macros.rubygems
Normal file
|
|
@ -0,0 +1,227 @@
|
||||||
|
# The RubyGems root folder.
|
||||||
|
%gem_dir %{_datadir}/gems
|
||||||
|
%gem_archdir %{_libdir}/gems
|
||||||
|
|
||||||
|
# %gem_prerelease - Provides prerelease string if available.
|
||||||
|
#
|
||||||
|
# Usage: %gem_prerelease [custom_gem_name]
|
||||||
|
#
|
||||||
|
# If avilable, prints prerelease string, which is a %prerelease macro by
|
||||||
|
# default. When [custom_gem_name] is provided, the custom_gem_name is used to
|
||||||
|
# derive %custom_gem_name_prerelease macro, which can be predefined.
|
||||||
|
#
|
||||||
|
# Please note that for the prerelease macros are the dashes in
|
||||||
|
# [custom_gem_name] replaced by underscores.
|
||||||
|
#
|
||||||
|
%gem_prerelease() %{?1:%{expand:%%{?%{gsub %{1} - _}_prerelease}}}%{!?1:%{?prerelease}}
|
||||||
|
|
||||||
|
# %gem_version - Provides version string (including prerelease if available).
|
||||||
|
#
|
||||||
|
# Usage: %gem_version [custom_gem_name]
|
||||||
|
#
|
||||||
|
# Prints version (including prerelease string), that is %version macro by
|
||||||
|
# default. When [custom_gem_name] is provided, the custom_gem_name is used to
|
||||||
|
# derive %custom_gem_name_version macro which needs to be predefined.
|
||||||
|
#
|
||||||
|
# Please note that for the version macros are the dashes in [custom_gem_name]
|
||||||
|
# replaced by underscores.
|
||||||
|
#
|
||||||
|
%gem_version() %{?1:%{expand:%{%{gsub %{1} - _}_version}}}%{!?1:%{version}}%{gem_prerelease %{?1}}
|
||||||
|
|
||||||
|
# %gem_name_version - Provides gem_name-version string.
|
||||||
|
#
|
||||||
|
# Usage: %gem_name_version [custom_gem_name]
|
||||||
|
#
|
||||||
|
# Prints gem_name-version string, by default joining %gem_name, %version and
|
||||||
|
# %prerelease macros. When [custom_gem_name] is provided, the
|
||||||
|
# custom_gem_name is joined with version as provided by %gem_version macro.
|
||||||
|
#
|
||||||
|
%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{gem_version %{?1}}
|
||||||
|
|
||||||
|
# Common gem locations and files.
|
||||||
|
#
|
||||||
|
# These macros leverages %gem_name_version macro and accepts custom gem_name.
|
||||||
|
#
|
||||||
|
# -d Use default gem install location.
|
||||||
|
#
|
||||||
|
%gem_instdir() %{gem_dir}/gems/%{gem_name_version %{?1}}
|
||||||
|
%gem_extdir_mri() %{gem_archdir}/%{name}/%{gem_name_version %{?1}}
|
||||||
|
%gem_libdir() %{gem_instdir %{?1}}/lib
|
||||||
|
%gem_cache() %{gem_dir}/cache/%{gem_name_version %{?1}}.gem
|
||||||
|
%gem_spec(d) %{gem_dir}/specifications%{?-d:/default}/%{gem_name_version %{?1}}.gemspec
|
||||||
|
%gem_docdir() %{gem_dir}/doc/%{gem_name_version %{?1}}
|
||||||
|
%gem_plugin() %{gem_dir}/plugins/%{?1}%{!?1:%{gem_name}}_plugin.rb
|
||||||
|
|
||||||
|
|
||||||
|
# %gem_install - Install gem into appropriate directory.
|
||||||
|
#
|
||||||
|
# Usage: %gem_install [options]
|
||||||
|
#
|
||||||
|
# -n <gem_file> Overrides gem file name for installation.
|
||||||
|
# -d <install_dir> Set installation directory.
|
||||||
|
#
|
||||||
|
%gem_install(d:n:) \
|
||||||
|
mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \
|
||||||
|
\
|
||||||
|
CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' --with-ldflags='%{build_ldflags}' $CONFIGURE_ARGS" \\\
|
||||||
|
gem install \\\
|
||||||
|
-V \\\
|
||||||
|
--local \\\
|
||||||
|
--build-root %{-d*}%{!?-d:.} \\\
|
||||||
|
--force \\\
|
||||||
|
--document=ri,rdoc \\\
|
||||||
|
%{-n*}%{!?-n:%{gem_name}-%{version}%{?prerelease}.gem} \
|
||||||
|
%{nil}
|
||||||
|
|
||||||
|
|
||||||
|
# The 'read' command in %%gemspec_* macros is not essential, but it is usefull
|
||||||
|
# to make the sript appear in build log.
|
||||||
|
|
||||||
|
|
||||||
|
# %gemspec_add_dep - Add dependency into .gemspec.
|
||||||
|
#
|
||||||
|
# Usage: %gemspec_add_dep -g <gem> [options] [requirements]
|
||||||
|
#
|
||||||
|
# Add dependency named <gem> to .gemspec file. The macro adds runtime
|
||||||
|
# dependency by default. The [requirements] argument can be used to specify
|
||||||
|
# the dependency constraints more precisely. It is expected to be valid Ruby
|
||||||
|
# code.
|
||||||
|
#
|
||||||
|
# -s <gemspec_file> Overrides the default .gemspec location.
|
||||||
|
# -d Add development dependecy.
|
||||||
|
#
|
||||||
|
%gemspec_add_dep(g:s:d) \
|
||||||
|
read -d '' gemspec_add_dep_script << 'EOR' || : \
|
||||||
|
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
||||||
|
\
|
||||||
|
name = '%{-g*}' \
|
||||||
|
requirements = %{*}%{!?1:nil} \
|
||||||
|
\
|
||||||
|
type = :%{!?-d:runtime}%{?-d:development} \
|
||||||
|
\
|
||||||
|
spec = Gem::Specification.load(gemspec_file) \
|
||||||
|
abort("#{gemspec_file} is not accessible.") unless spec \
|
||||||
|
\
|
||||||
|
dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
|
||||||
|
if dep \
|
||||||
|
dep.requirement.concat requirements \
|
||||||
|
else \
|
||||||
|
spec.public_send "add_#{type}_dependency", name, requirements \
|
||||||
|
end \
|
||||||
|
File.write gemspec_file, spec.to_ruby \
|
||||||
|
EOR\
|
||||||
|
echo "$gemspec_add_dep_script" | ruby \
|
||||||
|
unset -v gemspec_add_dep_script \
|
||||||
|
%{nil}
|
||||||
|
|
||||||
|
|
||||||
|
# %gemspec_remove_dep - Remove dependency from .gemspec.
|
||||||
|
#
|
||||||
|
# Usage: %gemspec_remove_dep -g <gem> [options] [requirements]
|
||||||
|
#
|
||||||
|
# Remove dependency named <gem> from .gemspec file. The macro removes runtime
|
||||||
|
# dependency by default. The [requirements] argument can be used to specify
|
||||||
|
# the dependency constraints more precisely. It is expected to be valid Ruby
|
||||||
|
# code. The macro fails if these specific requirements can't be removed.
|
||||||
|
#
|
||||||
|
# -s <gemspec_file> Overrides the default .gemspec location.
|
||||||
|
# -d Remove development dependecy.
|
||||||
|
#
|
||||||
|
%gemspec_remove_dep(g:s:d) \
|
||||||
|
read -d '' gemspec_remove_dep_script << 'EOR' || : \
|
||||||
|
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
||||||
|
\
|
||||||
|
name = '%{-g*}' \
|
||||||
|
requirements = %{*}%{!?1:nil} \
|
||||||
|
\
|
||||||
|
type = :%{!?-d:runtime}%{?-d:development} \
|
||||||
|
\
|
||||||
|
spec = Gem::Specification.load(gemspec_file) \
|
||||||
|
abort("#{gemspec_file} is not accessible.") unless spec \
|
||||||
|
\
|
||||||
|
dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
|
||||||
|
if dep \
|
||||||
|
if requirements \
|
||||||
|
requirements = Gem::Requirement.create(requirements).requirements \
|
||||||
|
requirements.each do |r| \
|
||||||
|
unless dep.requirement.requirements.reject! { |dependency_requirements| dependency_requirements == r } \
|
||||||
|
abort("Requirement '#{r.first} #{r.last}' was not possible to remove for dependency '#{dep}'!") \
|
||||||
|
end \
|
||||||
|
end \
|
||||||
|
spec.dependencies.delete dep if dep.requirement.requirements.empty? \
|
||||||
|
else \
|
||||||
|
spec.dependencies.delete dep \
|
||||||
|
end \
|
||||||
|
else \
|
||||||
|
abort("Dependency '#{name}' was not found!") \
|
||||||
|
end \
|
||||||
|
File.write gemspec_file, spec.to_ruby \
|
||||||
|
EOR\
|
||||||
|
echo "$gemspec_remove_dep_script" | ruby \
|
||||||
|
unset -v gemspec_remove_dep_script \
|
||||||
|
%{nil}
|
||||||
|
|
||||||
|
|
||||||
|
# %%gemspec_add_file - Add files to various files lists in .gemspec.
|
||||||
|
#
|
||||||
|
# Usage: %%gemspec_add_file [options] <file>
|
||||||
|
#
|
||||||
|
# Add files to .gemspec file. <file> is expected to be valid Ruby code.
|
||||||
|
# Path to file is expected. Does not check real files in any way.
|
||||||
|
# By default, `files` list is edited.
|
||||||
|
#
|
||||||
|
# -s <gemspec_file> Overrides the default .gemspec location.
|
||||||
|
# -t Edit test_files only.
|
||||||
|
# -r Edit extra_rdoc_files only.
|
||||||
|
#
|
||||||
|
%gemspec_add_file(s:tr) \
|
||||||
|
read -d '' gemspec_add_file_script << 'EOR' || : \
|
||||||
|
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
||||||
|
\
|
||||||
|
abort("gemspec_add_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \
|
||||||
|
\
|
||||||
|
filenames = %{*}%{!?1:nil} \
|
||||||
|
filenames = Array(filenames) \
|
||||||
|
\
|
||||||
|
spec = Gem::Specification.load(gemspec_file) \
|
||||||
|
abort("#{gemspec_file} is not accessible.") unless spec \
|
||||||
|
\
|
||||||
|
spec.%{?-t:test_}%{?-r:extra_rdoc_}files += filenames \
|
||||||
|
File.write gemspec_file, spec.to_ruby \
|
||||||
|
EOR\
|
||||||
|
echo "$gemspec_add_file_script" | ruby \
|
||||||
|
unset -v gemspec_add_file_script \
|
||||||
|
%{nil}
|
||||||
|
|
||||||
|
|
||||||
|
# %%gemspec_remove_file - Remove files from various files lists in .gemspec.
|
||||||
|
#
|
||||||
|
# Usage: %%gemspec_remove_file [options] <file>
|
||||||
|
#
|
||||||
|
# Remove files from .gemspec file. <file> is expected to be valid Ruby code.
|
||||||
|
# Path to file is expected. Does not check/remove real files in any way.
|
||||||
|
# By default, `files` list is edited. File has to be removed from `test_files`
|
||||||
|
# first in order to be removable from `files`.
|
||||||
|
#
|
||||||
|
# -s <gemspec_file> Overrides the default .gemspec location.
|
||||||
|
# -t Edit test_files only.
|
||||||
|
# -r Edit extra_rdoc_files only.
|
||||||
|
#
|
||||||
|
%gemspec_remove_file(s:tr) \
|
||||||
|
read -d '' gemspec_remove_file_script << 'EOR' || : \
|
||||||
|
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
||||||
|
\
|
||||||
|
abort("gemspec_remove_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \
|
||||||
|
\
|
||||||
|
filenames = %{*}%{!?1:nil} \
|
||||||
|
filenames = Array(filenames) \
|
||||||
|
\
|
||||||
|
spec = Gem::Specification.load(gemspec_file) \
|
||||||
|
abort("#{gemspec_file} is not accessible.") unless spec \
|
||||||
|
\
|
||||||
|
spec.%{?-t:test_}%{?-r:extra_rdoc_}files -= filenames \
|
||||||
|
File.write gemspec_file, spec.to_ruby \
|
||||||
|
EOR\
|
||||||
|
echo "$gemspec_remove_file_script" | ruby \
|
||||||
|
unset -v gemspec_remove_file_script \
|
||||||
|
%{nil}
|
||||||
158
operating_system.rb
Normal file
158
operating_system.rb
Normal file
|
|
@ -0,0 +1,158 @@
|
||||||
|
module Gem
|
||||||
|
class << self
|
||||||
|
|
||||||
|
##
|
||||||
|
# Returns full path of previous but one directory of dir in path
|
||||||
|
# E.g. for '/usr/share/ruby', 'ruby', it returns '/usr'
|
||||||
|
|
||||||
|
def previous_but_one_dir_to(path, dir)
|
||||||
|
return unless path
|
||||||
|
|
||||||
|
split_path = path.split(File::SEPARATOR)
|
||||||
|
File.join(split_path.take_while { |one_dir| one_dir !~ /^#{dir}$/ }[0..-2])
|
||||||
|
end
|
||||||
|
private :previous_but_one_dir_to
|
||||||
|
|
||||||
|
##
|
||||||
|
# Detects --install-dir option specified on command line.
|
||||||
|
|
||||||
|
def opt_install_dir?
|
||||||
|
@opt_install_dir ||= ARGV.include?('--install-dir') || ARGV.include?('-i')
|
||||||
|
end
|
||||||
|
private :opt_install_dir?
|
||||||
|
|
||||||
|
##
|
||||||
|
# Detects --build-root option specified on command line.
|
||||||
|
|
||||||
|
def opt_build_root?
|
||||||
|
@opt_build_root ||= ARGV.include?('--build-root')
|
||||||
|
end
|
||||||
|
private :opt_build_root?
|
||||||
|
|
||||||
|
##
|
||||||
|
# Tries to detect, if arguments and environment variables suggest that
|
||||||
|
# 'gem install' is executed from rpmbuild.
|
||||||
|
|
||||||
|
def rpmbuild?
|
||||||
|
@rpmbuild ||= ENV['RPM_PACKAGE_NAME'] && (opt_install_dir? || opt_build_root?)
|
||||||
|
end
|
||||||
|
private :rpmbuild?
|
||||||
|
|
||||||
|
##
|
||||||
|
# Default gems locations allowed on FHS system (/usr, /usr/share).
|
||||||
|
# The locations are derived from directories specified during build
|
||||||
|
# configuration.
|
||||||
|
|
||||||
|
def default_locations
|
||||||
|
@default_locations ||= {
|
||||||
|
:system => previous_but_one_dir_to(RbConfig::CONFIG['vendordir'], RbConfig::CONFIG['RUBY_INSTALL_NAME']),
|
||||||
|
:local => previous_but_one_dir_to(RbConfig::CONFIG['sitedir'], RbConfig::CONFIG['RUBY_INSTALL_NAME'])
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# For each location provides set of directories for binaries (:bin_dir)
|
||||||
|
# platform independent (:gem_dir) and dependent (:ext_dir) files.
|
||||||
|
|
||||||
|
def default_dirs
|
||||||
|
@libdir ||= case RUBY_PLATFORM
|
||||||
|
when 'java'
|
||||||
|
RbConfig::CONFIG['datadir']
|
||||||
|
else
|
||||||
|
RbConfig::CONFIG['libdir']
|
||||||
|
end
|
||||||
|
|
||||||
|
@default_dirs ||= default_locations.inject(Hash.new) do |hash, location|
|
||||||
|
destination, path = location
|
||||||
|
|
||||||
|
hash[destination] = if path
|
||||||
|
{
|
||||||
|
:bin_dir => File.join(path, RbConfig::CONFIG['bindir'].split(File::SEPARATOR).last),
|
||||||
|
:gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems'),
|
||||||
|
:ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems')
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
:bin_dir => '',
|
||||||
|
:gem_dir => '',
|
||||||
|
:ext_dir => ''
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
hash
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Remove methods we are going to override. This avoids "method redefined;"
|
||||||
|
# warnings otherwise issued by Ruby.
|
||||||
|
|
||||||
|
remove_method :default_dir if method_defined? :default_dir
|
||||||
|
remove_method :default_specifications_dir if method_defined? :default_specifications_dir
|
||||||
|
remove_method :default_path if method_defined? :default_path
|
||||||
|
remove_method :default_bindir if method_defined? :default_bindir
|
||||||
|
remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for
|
||||||
|
|
||||||
|
##
|
||||||
|
# RubyGems default overrides.
|
||||||
|
|
||||||
|
def default_dir
|
||||||
|
if opt_build_root?
|
||||||
|
Gem.default_dirs[:system][:gem_dir]
|
||||||
|
elsif Process.uid == 0
|
||||||
|
Gem.default_dirs[:local][:gem_dir]
|
||||||
|
else
|
||||||
|
Gem.user_dir
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Path to specification files of default gems.
|
||||||
|
|
||||||
|
def default_specifications_dir
|
||||||
|
@default_specifications_dir ||= File.join(Gem.default_dirs[:system][:gem_dir], "specifications", "default")
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Default gem load path
|
||||||
|
|
||||||
|
def default_path
|
||||||
|
path = default_dirs.collect {|location, paths| paths[:gem_dir]}
|
||||||
|
path.unshift Gem.user_dir if File.exist? Gem.user_home
|
||||||
|
path
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_bindir
|
||||||
|
if opt_build_root?
|
||||||
|
Gem.default_dirs[:system][:bin_dir]
|
||||||
|
elsif Process.uid == 0
|
||||||
|
Gem.default_dirs[:local][:bin_dir]
|
||||||
|
else
|
||||||
|
File.join [Dir.home, 'bin']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_ext_dir_for base_dir
|
||||||
|
dir = if rpmbuild?
|
||||||
|
build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir]
|
||||||
|
if build_dir != base_dir
|
||||||
|
File.join build_dir, Gem.default_dirs[:system][:ext_dir]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
|
||||||
|
dirs && dirs.last[:ext_dir]
|
||||||
|
end
|
||||||
|
dir && File.join(dir, RbConfig::CONFIG['RUBY_INSTALL_NAME'])
|
||||||
|
end
|
||||||
|
|
||||||
|
# This method should be available since RubyGems 2.2 until RubyGems 3.0.
|
||||||
|
# https://github.com/rubygems/rubygems/issues/749
|
||||||
|
if method_defined? :install_extension_in_lib
|
||||||
|
remove_method :install_extension_in_lib
|
||||||
|
|
||||||
|
def install_extension_in_lib
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
6
plans/all.fmf
Normal file
6
plans/all.fmf
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
summary: Test plan with all Fedora tests
|
||||||
|
discover:
|
||||||
|
how: fmf
|
||||||
|
url: https://src.fedoraproject.org/tests/ruby.git
|
||||||
|
execute:
|
||||||
|
how: tmt
|
||||||
28
rdoc-pr1531-fix-mutilple-document-installation.patch
Normal file
28
rdoc-pr1531-fix-mutilple-document-installation.patch
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
From 994ee4c17fb8c217ab0335df55620c6bdb5d5cbe Mon Sep 17 00:00:00 2001
|
||||||
|
From: tompng <tomoyapenguin@gmail.com>
|
||||||
|
Date: Fri, 26 Dec 2025 04:57:12 +0900
|
||||||
|
Subject: [PATCH] Fix comment_location for merged ClassModule
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/rdoc/code_object/class_module.rb | 7 ++++++-
|
||||||
|
test/rdoc/code_object/class_module_test.rb | 6 ++++++
|
||||||
|
2 files changed, 12 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/rdoc/code_object/class_module.rb b/lib/rdoc/code_object/class_module.rb
|
||||||
|
index b6bed352a2..d7ee36f950 100644
|
||||||
|
--- a/lib/rdoc/code_object/class_module.rb
|
||||||
|
+++ b/lib/rdoc/code_object/class_module.rb
|
||||||
|
@@ -477,7 +477,12 @@ def merge(class_module)
|
||||||
|
document = document.merge other_document
|
||||||
|
|
||||||
|
@comment = RDoc::Comment.from_document(document)
|
||||||
|
- @comment_location = document
|
||||||
|
+
|
||||||
|
+ @comment_location = if document.parts.first.is_a?(RDoc::Markup::Document)
|
||||||
|
+ document.parts.map { |doc| [doc, doc.file] }
|
||||||
|
+ else
|
||||||
|
+ [[document, document.file]]
|
||||||
|
+ end
|
||||||
|
end
|
||||||
|
|
||||||
|
cm = class_module
|
||||||
166
rpm_test_helper.rb
Normal file
166
rpm_test_helper.rb
Normal file
|
|
@ -0,0 +1,166 @@
|
||||||
|
require 'tmpdir'
|
||||||
|
require 'tempfile'
|
||||||
|
require 'fileutils'
|
||||||
|
# Available in Ruby upstream sources under tool/lib/envutil.rb
|
||||||
|
# Required for finding and setting up the built ruby binary.
|
||||||
|
require 'envutil'
|
||||||
|
|
||||||
|
module RPMTestHelper
|
||||||
|
def setup
|
||||||
|
@tmpdir = Dir.mktmpdir
|
||||||
|
@tempfiles = []
|
||||||
|
end
|
||||||
|
|
||||||
|
def teardown
|
||||||
|
@tempfiles.each do |file|
|
||||||
|
file.close
|
||||||
|
file.unlink
|
||||||
|
end
|
||||||
|
|
||||||
|
FileUtils.rmtree(@tmpdir)
|
||||||
|
end
|
||||||
|
|
||||||
|
GENERATOR_SCRIPT = ENV['GENERATOR_SCRIPT'].clone.freeze
|
||||||
|
if GENERATOR_SCRIPT.nil? || GENERATOR_SCRIPT == ''
|
||||||
|
raise "GENERATOR_SCRIPT is not specified." \
|
||||||
|
"Specify the ENV variable with absolute path to the generator."
|
||||||
|
end
|
||||||
|
|
||||||
|
Dependency = Struct.new('Dependency', :name, :requirements) do
|
||||||
|
def to_rpm_str
|
||||||
|
"rubygem(#{self.name})"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def make_gemspec(gem_info)
|
||||||
|
file = Tempfile.new('req_gemspec', @tmpdir)
|
||||||
|
# Fake gemspec with enough to pass most checks
|
||||||
|
# Rubygems uses to validate the format.
|
||||||
|
gemspec_contents = <<~EOF
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
# stub: #{gem_info.name} #{gem_info.version} ruby lib
|
||||||
|
|
||||||
|
Gem::Specification.new do |s|
|
||||||
|
s.name = "#{gem_info.name}".freeze
|
||||||
|
s.version = "#{gem_info.version}"
|
||||||
|
|
||||||
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
||||||
|
s.require_paths = ["lib".freeze]
|
||||||
|
s.authors = ["John Doe".freeze]
|
||||||
|
s.bindir = "bin".freeze
|
||||||
|
s.date = "2023-12-15"
|
||||||
|
s.description = "Fake gemspec helper for testing Rubygem Generators".freeze
|
||||||
|
s.email = ["example@example.com".freeze]
|
||||||
|
s.files = ["LICENSE.txt".freeze, "lib/#{gem_info.name}.rb".freeze, "#{gem_info.name}.gemspec".freeze]
|
||||||
|
s.homepage = "https://pkgs.fedoraproject.org/rpms/ruby".freeze
|
||||||
|
s.licenses = ["MIT".freeze]
|
||||||
|
s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
|
||||||
|
s.rubygems_version = "3.3.5".freeze
|
||||||
|
s.summary = "Fake gemspec for testing Rubygem Generators".freeze
|
||||||
|
|
||||||
|
if s.respond_to? :specification_version then
|
||||||
|
s.specification_version = 4
|
||||||
|
end
|
||||||
|
|
||||||
|
if s.respond_to? :add_runtime_dependency then
|
||||||
|
#{gem_info.gemspec_runtime_dep_str}
|
||||||
|
else
|
||||||
|
#{gem_info.gemspec_dep_str}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EOF
|
||||||
|
|
||||||
|
file.write gemspec_contents
|
||||||
|
file.rewind
|
||||||
|
@tempfiles << file
|
||||||
|
file
|
||||||
|
end
|
||||||
|
|
||||||
|
# Caller is expected to close subprocess stdin via #close_write
|
||||||
|
# in order to let subprocess proceed if the process is reading
|
||||||
|
# from STDIN in a loop.
|
||||||
|
def rb_subprocess(*args)
|
||||||
|
args = [GENERATOR_SCRIPT] if args.empty?
|
||||||
|
ruby = EnvUtil.rubybin
|
||||||
|
f = IO.popen([ruby] + args, 'r+') #, external_encoding: external_encoding)
|
||||||
|
yield(f)
|
||||||
|
ensure
|
||||||
|
f.close unless !f || f.closed?
|
||||||
|
end
|
||||||
|
|
||||||
|
def run_generator_single_file(gem_info)
|
||||||
|
lines = []
|
||||||
|
gemspec_f = make_gemspec(gem_info)
|
||||||
|
|
||||||
|
rb_subprocess do |io|
|
||||||
|
io.write gemspec_f.path
|
||||||
|
io.close_write
|
||||||
|
lines = io.readlines
|
||||||
|
end
|
||||||
|
|
||||||
|
lines
|
||||||
|
end
|
||||||
|
|
||||||
|
def helper_rubygems_dependency
|
||||||
|
"ruby(rubygems)"
|
||||||
|
end
|
||||||
|
|
||||||
|
class GemInfo
|
||||||
|
attr_accessor :name, :version, :dependencies
|
||||||
|
|
||||||
|
def initialize(name: 'foo', version: '1.2.3', dependencies: [])
|
||||||
|
@name = name
|
||||||
|
@version = version
|
||||||
|
@dependencies = dependencies
|
||||||
|
end
|
||||||
|
|
||||||
|
def dependencies=(other)
|
||||||
|
raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Expected array of `Dependency' elements" \
|
||||||
|
unless other.is_a?(Array) && other.all? { |elem| elem.respond_to?(:name) && elem.respond_to?(:requirements) }
|
||||||
|
|
||||||
|
@dependencies = other
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_rpm_str
|
||||||
|
"rubygem(#{self.name})"
|
||||||
|
end
|
||||||
|
|
||||||
|
def gemspec_dep_str
|
||||||
|
return '' if self.dependencies.nil? || self.dependencies.empty?
|
||||||
|
@dependencies.inject("") do |memo, dep|
|
||||||
|
memo += if dep.requirements && !dep.requirements.empty?
|
||||||
|
%Q|s.add_dependency(%q<#{dep.name}>.freeze, #{handle_dep_requirements(dep.requirements)})|
|
||||||
|
else
|
||||||
|
%Q|s.add_dependency(%q<#{dep.name}>.freeze)|
|
||||||
|
end
|
||||||
|
|
||||||
|
memo += "\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def gemspec_runtime_dep_str
|
||||||
|
return '' if self.dependencies.nil? || self.dependencies.empty?
|
||||||
|
|
||||||
|
@dependencies.inject("") do |memo, dep|
|
||||||
|
memo += if dep.requirements && !dep.requirements.empty?
|
||||||
|
%Q|s.add_runtime_dependency(%q<#{dep.name}>.freeze, #{handle_dep_requirements(dep.requirements)})|
|
||||||
|
else
|
||||||
|
%Q|s.add_runtime_dependency(%q<#{dep.name}>.freeze)|
|
||||||
|
end
|
||||||
|
|
||||||
|
memo += "\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def handle_dep_requirements(reqs)
|
||||||
|
raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Reqs must be an array." \
|
||||||
|
unless reqs.is_a? Array
|
||||||
|
raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Reqs must not be empty for this method." \
|
||||||
|
if reqs.empty?
|
||||||
|
|
||||||
|
'[ "' + reqs.join('", "') + '" ]'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
Index: ruby_1_8_6/ext/openssl/ossl_digest.c
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8_6/ext/openssl/ossl_digest.c (revision 12042)
|
|
||||||
+++ ruby_1_8_6/ext/openssl/ossl_digest.c (revision 12043)
|
|
||||||
@@ -264,6 +264,10 @@
|
|
||||||
void
|
|
||||||
Init_ossl_digest()
|
|
||||||
{
|
|
||||||
+#if 0 /* let rdoc know about mOSSL */
|
|
||||||
+ mOSSL = rb_define_module("OpenSSL");
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
mDigest = rb_define_module_under(mOSSL, "Digest");
|
|
||||||
|
|
||||||
eDigestError = rb_define_class_under(mDigest, "DigestError", eOSSLError);
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
--- lib/cgi.rb (revision 19665)
|
|
||||||
+++ lib/cgi.rb (working copy)
|
|
||||||
@@ -546,6 +546,11 @@
|
|
||||||
when Hash
|
|
||||||
options = options.dup
|
|
||||||
end
|
|
||||||
+ options.each_value do |value|
|
|
||||||
+ if /\n(?![ \t])/ === value
|
|
||||||
+ raise ArgumentError, "potential HTTP header injection detected"
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
|
|
||||||
unless options.has_key?("type")
|
|
||||||
options["type"] = "text/html"
|
|
||||||
|
|
@ -1,100 +0,0 @@
|
||||||
diff -ur ruby-1.8.6-p287.orig/ext/openssl/openssl_missing.c ruby-1.8.6-p287/ext/openssl/openssl_missing.c
|
|
||||||
--- ruby-1.8.6-p287.orig/ext/openssl/openssl_missing.c 2007-02-13 00:01:19.000000000 +0100
|
|
||||||
+++ ruby-1.8.6-p287/ext/openssl/openssl_missing.c 2009-03-15 05:32:31.000000000 +0100
|
|
||||||
@@ -43,7 +43,7 @@
|
|
||||||
{
|
|
||||||
return CRYPTO_set_ex_data(&str->ex_data, idx, data);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+
|
|
||||||
void *X509_STORE_get_ex_data(X509_STORE *str, int idx)
|
|
||||||
{
|
|
||||||
return CRYPTO_get_ex_data(&str->ex_data, idx);
|
|
||||||
@@ -113,7 +113,7 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(HAVE_EVP_CIPHER_CTX_COPY)
|
|
||||||
-/*
|
|
||||||
+/*
|
|
||||||
* this function does not exist in OpenSSL yet... or ever?.
|
|
||||||
* a future version may break this function.
|
|
||||||
* tested on 0.9.7d.
|
|
||||||
@@ -182,12 +182,12 @@
|
|
||||||
(ASN1_STRING *)(*a)->serialNumber,
|
|
||||||
(ASN1_STRING *)(*b)->serialNumber));
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+
|
|
||||||
int
|
|
||||||
X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev)
|
|
||||||
{
|
|
||||||
X509_CRL_INFO *inf;
|
|
||||||
-
|
|
||||||
+
|
|
||||||
inf = crl->crl;
|
|
||||||
if (!inf->revoked)
|
|
||||||
inf->revoked = sk_X509_REVOKED_new(OSSL_X509_REVOKED_cmp);
|
|
||||||
@@ -233,54 +233,6 @@
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#if !defined(HAVE_BN_RAND_RANGE) || !defined(HAVE_BN_PSEUDO_RAND_RANGE)
|
|
||||||
-static int
|
|
||||||
-bn_rand_range(int pseudo, BIGNUM *r, BIGNUM *range)
|
|
||||||
-{
|
|
||||||
- int (*bn_rand)(BIGNUM *, int, int, int) = pseudo ? BN_pseudo_rand : BN_rand;
|
|
||||||
- int n;
|
|
||||||
-
|
|
||||||
- if (range->neg || BN_is_zero(range)) return 0;
|
|
||||||
-
|
|
||||||
- n = BN_num_bits(range);
|
|
||||||
-
|
|
||||||
- if (n == 1) {
|
|
||||||
- if (!BN_zero(r)) return 0;
|
|
||||||
- } else if (!BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3)) {
|
|
||||||
- do {
|
|
||||||
- if (!bn_rand(r, n + 1, -1, 0)) return 0;
|
|
||||||
- if (BN_cmp(r ,range) >= 0) {
|
|
||||||
- if (!BN_sub(r, r, range)) return 0;
|
|
||||||
- if (BN_cmp(r, range) >= 0)
|
|
||||||
- if (!BN_sub(r, r, range)) return 0;
|
|
||||||
- }
|
|
||||||
- } while (BN_cmp(r, range) >= 0);
|
|
||||||
- } else {
|
|
||||||
- do {
|
|
||||||
- if (!bn_rand(r, n, -1, 0)) return 0;
|
|
||||||
- } while (BN_cmp(r, range) >= 0);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return 1;
|
|
||||||
-}
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
-#if !defined(HAVE_BN_RAND_RANGE)
|
|
||||||
-int
|
|
||||||
-BN_rand_range(BIGNUM *r, BIGNUM *range)
|
|
||||||
-{
|
|
||||||
- return bn_rand_range(0, r, range);
|
|
||||||
-}
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
-#if !defined(HAVE_BN_PSEUDO_RAND_RANGE)
|
|
||||||
-int
|
|
||||||
-BN_pseudo_rand_range(BIGNUM *r, BIGNUM *range)
|
|
||||||
-{
|
|
||||||
- return bn_rand_range(1, r, range);
|
|
||||||
-}
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
#if !defined(HAVE_CONF_GET1_DEFAULT_CONFIG_FILE)
|
|
||||||
#define OPENSSL_CONF "openssl.cnf"
|
|
||||||
char *
|
|
||||||
@@ -315,7 +267,7 @@
|
|
||||||
{
|
|
||||||
int i,j;
|
|
||||||
const char *prompt;
|
|
||||||
-
|
|
||||||
+
|
|
||||||
if (key) {
|
|
||||||
i = strlen(key);
|
|
||||||
i = (i > num) ? num : i;
|
|
||||||
|
|
@ -1,130 +0,0 @@
|
||||||
Mon Dec 24 16:18:57 2007 Eric Hodel <drbrain@segment7.net>
|
|
||||||
|
|
||||||
* lib/rdoc/ri/ri_options.rb: Fix ri --help listing of gem ri paths.
|
|
||||||
Merge of r14567 and r14569 from trunk.
|
|
||||||
|
|
||||||
* lib/rdoc/ri/ri_paths.rb: Fix duplication of ri data for multiple
|
|
||||||
gems. Merge of r14567 from trunk
|
|
||||||
|
|
||||||
Index: ruby_1_8/lib/rdoc/ri/ri_options.rb
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8/lib/rdoc/ri/ri_options.rb (revision 14581)
|
|
||||||
+++ ruby_1_8/lib/rdoc/ri/ri_options.rb (revision 14582)
|
|
||||||
@@ -62,10 +62,11 @@
|
|
||||||
(RI::Paths::HOMEDIR || "No ~/.rdoc found") ],
|
|
||||||
|
|
||||||
[ "--gems", nil, nil,
|
|
||||||
- "Include documentation from Rubygems:\n " +
|
|
||||||
- (RI::Paths::GEMDIRS ? "#{Gem.path}/doc/*/ri" :
|
|
||||||
- "No Rubygems ri found.") ],
|
|
||||||
-
|
|
||||||
+ "Include documentation from RubyGems:\n" +
|
|
||||||
+ (RI::Paths::GEMDIRS ?
|
|
||||||
+ Gem.path.map { |dir| " #{dir}/doc/*/ri" }.join("\n") :
|
|
||||||
+ "No Rubygems ri found.") ],
|
|
||||||
+
|
|
||||||
[ "--format", "-f", "<name>",
|
|
||||||
"Format to use when displaying output:\n" +
|
|
||||||
" " + RI::TextFormatter.list + "\n" +
|
|
||||||
@@ -116,7 +117,8 @@
|
|
||||||
def OptionList.error(msg)
|
|
||||||
$stderr.puts
|
|
||||||
$stderr.puts msg
|
|
||||||
- $stderr.puts "\nFor help on options, try 'ri --help'\n\n"
|
|
||||||
+ name = File.basename $PROGRAM_NAME
|
|
||||||
+ $stderr.puts "\nFor help on options, try '#{name} --help'\n\n"
|
|
||||||
exit 1
|
|
||||||
end
|
|
||||||
|
|
||||||
@@ -136,7 +138,11 @@
|
|
||||||
RI::Paths::HOMEDIR
|
|
||||||
]
|
|
||||||
|
|
||||||
- directories << "#{Gem.path}/doc/*/ri" if RI::Paths::GEMDIRS
|
|
||||||
+ if RI::Paths::GEMDIRS then
|
|
||||||
+ Gem.path.each do |dir|
|
|
||||||
+ directories << "#{dir}/doc/*/ri"
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
|
|
||||||
directories = directories.join("\n ")
|
|
||||||
|
|
||||||
@@ -157,16 +163,16 @@
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
- ri File
|
|
||||||
- ri File.new
|
|
||||||
- ri F.n
|
|
||||||
- ri zip
|
|
||||||
+ #{name} File
|
|
||||||
+ #{name} File.new
|
|
||||||
+ #{name} F.n
|
|
||||||
+ #{name} zip
|
|
||||||
|
|
||||||
Note that shell quoting may be required for method names
|
|
||||||
containing punctuation:
|
|
||||||
|
|
||||||
- ri 'Array.[]'
|
|
||||||
- ri compact\\!
|
|
||||||
+ #{name} 'Array.[]'
|
|
||||||
+ #{name} compact\\!
|
|
||||||
|
|
||||||
By default ri searches for documentation in the following
|
|
||||||
directories:
|
|
||||||
@@ -180,8 +186,8 @@
|
|
||||||
EOT
|
|
||||||
|
|
||||||
if short_form
|
|
||||||
- puts "For help on options, type 'ri -h'"
|
|
||||||
- puts "For a list of classes I know about, type 'ri -c'"
|
|
||||||
+ puts "For help on options, type '#{name} -h'"
|
|
||||||
+ puts "For a list of classes I know about, type '#{name} -c'"
|
|
||||||
else
|
|
||||||
puts "Options:\n\n"
|
|
||||||
OPTION_LIST.each do|long, short, arg, desc|
|
|
||||||
Index: ruby_1_8/lib/rdoc/ri/ri_paths.rb
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8/lib/rdoc/ri/ri_paths.rb (revision 14581)
|
|
||||||
+++ ruby_1_8/lib/rdoc/ri/ri_paths.rb (revision 14582)
|
|
||||||
@@ -44,8 +44,29 @@
|
|
||||||
|
|
||||||
begin
|
|
||||||
require 'rubygems'
|
|
||||||
- GEMDIRS = Dir["#{Gem.path}/doc/*/ri"]
|
|
||||||
- GEMDIRS.each { |path| RI::Paths::PATH << path }
|
|
||||||
+
|
|
||||||
+ # HACK dup'd from Gem.latest_partials and friends
|
|
||||||
+ all_paths = []
|
|
||||||
+
|
|
||||||
+ all_paths = Gem.path.map do |dir|
|
|
||||||
+ Dir[File.join(dir, 'doc', '*', 'ri')]
|
|
||||||
+ end.flatten
|
|
||||||
+
|
|
||||||
+ ri_paths = {}
|
|
||||||
+
|
|
||||||
+ all_paths.each do |dir|
|
|
||||||
+ base = File.basename File.dirname(dir)
|
|
||||||
+ if base =~ /(.*)-((\d+\.)*\d+)/ then
|
|
||||||
+ name, version = $1, $2
|
|
||||||
+ ver = Gem::Version.new version
|
|
||||||
+ if ri_paths[name].nil? or ver > ri_paths[name][0] then
|
|
||||||
+ ri_paths[name] = [ver, dir]
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
+ GEMDIRS = ri_paths.map { |k,v| v.last }.sort
|
|
||||||
+ GEMDIRS.each { |dir| RI::Paths::PATH << dir }
|
|
||||||
rescue LoadError
|
|
||||||
GEMDIRS = nil
|
|
||||||
end
|
|
||||||
@@ -55,7 +76,7 @@
|
|
||||||
|
|
||||||
def self.path(use_system, use_site, use_home, use_gems, *extra_dirs)
|
|
||||||
path = raw_path(use_system, use_site, use_home, use_gems, *extra_dirs)
|
|
||||||
- return path.select { |path| File.directory? path }
|
|
||||||
+ return path.select { |directory| File.directory? directory }
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns the selected documentation directories including nonexistent
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
--- ruby-1.8.6-p383/lib/mkmf.rb.static 2009-03-31 18:19:39.000000000 +0900
|
|
||||||
+++ ruby-1.8.6-p383/lib/mkmf.rb 2009-12-09 15:03:19.000000000 +0900
|
|
||||||
@@ -275,7 +275,7 @@
|
|
||||||
'LDFLAGS' => "#$LDFLAGS #{ldflags}",
|
|
||||||
'LIBPATH' => libpathflag(libpath),
|
|
||||||
'LOCAL_LIBS' => "#$LOCAL_LIBS #$libs",
|
|
||||||
- 'LIBS' => "#$LIBRUBYARG_STATIC #{opt} #$LIBS")
|
|
||||||
+ 'LIBS' => "#$LIBRUBYARG_SHARED #{opt} #$LIBS")
|
|
||||||
Config::expand(TRY_LINK.dup, conf)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
@ -1,97 +0,0 @@
|
||||||
diff -ur ruby-1.8.6-p383.0-deadcode/configure.in ruby-1.8.6-p383/configure.in
|
|
||||||
--- ruby-1.8.6-p383.0-deadcode/configure.in 2009-07-20 15:24:22.000000000 +0200
|
|
||||||
+++ ruby-1.8.6-p383/configure.in 2009-10-22 16:37:13.729623476 +0200
|
|
||||||
@@ -1613,6 +1613,13 @@
|
|
||||||
rubyw_install_name="$RUBYW_INSTALL_NAME"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
+
|
|
||||||
+AC_ARG_WITH(ruby-prefix,
|
|
||||||
+ AC_HELP_STRING([--with-ruby-prefix], [build ruby with the special library prefix.])
|
|
||||||
+ ,,
|
|
||||||
+ with_ruby_prefix=no)
|
|
||||||
+
|
|
||||||
+if test "x$with_ruby_prefix" = "x"; then
|
|
||||||
case "$target_os" in
|
|
||||||
cygwin*|mingw*|*djgpp*|os2-emx*)
|
|
||||||
RUBY_LIB_PREFIX="/lib/ruby"
|
|
||||||
@@ -1621,20 +1628,30 @@
|
|
||||||
RUBY_LIB_PREFIX="`eval "echo ${libdir}"`/ruby"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
+else
|
|
||||||
+ RUBY_LIB_PREFIX="${with_ruby_prefix}/ruby"
|
|
||||||
+fi
|
|
||||||
RUBY_LIB_PATH="${RUBY_LIB_PREFIX}/${MAJOR}.${MINOR}"
|
|
||||||
+RUBY_LIB_PATH2="${libdir}/ruby/${MAJOR}.${MINOR}"
|
|
||||||
|
|
||||||
AC_ARG_WITH(sitedir,
|
|
||||||
[ --with-sitedir=DIR site libraries in DIR [PREFIX/lib/ruby/site_ruby]],
|
|
||||||
[sitedir=$withval],
|
|
||||||
[sitedir="`eval "echo ${libdir}"`/ruby/site_ruby"])
|
|
||||||
-SITE_DIR=`eval echo \\"${sitedir}\\"`
|
|
||||||
+SITE_DIR=`eval echo \\"${sitedir}\\" | sed -e "s/lib64/lib/"`
|
|
||||||
+_fc_sitedir="\$(DESTDIR)${sitedir}"
|
|
||||||
+SITE_DIR2=`eval echo \\"${_fc_sitedir}\\"`
|
|
||||||
+sitedir=`eval echo \\"${sitedir}\\" | sed -e "s/lib64/lib/"`
|
|
||||||
+
|
|
||||||
case "$target_os" in
|
|
||||||
cygwin*|mingw*|*djgpp*|os2-emx*)
|
|
||||||
RUBY_SITE_LIB_PATH="`expr "$SITE_DIR" : "$prefix\(/.*\)"`" ||
|
|
||||||
RUBY_SITE_LIB_PATH="$SITE_DIR";;
|
|
||||||
*)
|
|
||||||
- RUBY_SITE_LIB_PATH="$SITE_DIR";;
|
|
||||||
+ RUBY_SITE_LIB_PATH="$SITE_DIR";
|
|
||||||
+ RUBY_SITE_LIB_PATH2="$SITE_DIR2";;
|
|
||||||
esac
|
|
||||||
+RUBY_SITE_LIB_PATH3="${RUBY_SITE_LIB_PATH2}/${MAJOR}.${MINOR}"
|
|
||||||
RUBY_SITE_LIB_PATH2="${RUBY_SITE_LIB_PATH}/${MAJOR}.${MINOR}"
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_LIB, "${RUBY_LIB_PATH}")
|
|
||||||
@@ -1644,6 +1661,7 @@
|
|
||||||
AC_SUBST(arch)dnl
|
|
||||||
AC_SUBST(sitearch)dnl
|
|
||||||
AC_SUBST(sitedir)dnl
|
|
||||||
+AC_SUBST(_fc_sitedir)dnl
|
|
||||||
|
|
||||||
configure_args=$ac_configure_args
|
|
||||||
AC_SUBST(configure_args)dnl
|
|
||||||
@@ -1652,7 +1670,7 @@
|
|
||||||
arch="fat-${target_os}"
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB,
|
|
||||||
- "${RUBY_LIB_PATH}/" __ARCHITECTURE__ "-${target_os}")
|
|
||||||
+ "${RUBY_LIB_PATH2}/" __ARCHITECTURE__ "-${target_os}")
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_SITE_THIN_ARCHLIB,
|
|
||||||
"${RUBY_SITE_LIB_PATH}/" __ARCHITECTURE__ "-${target_os}")
|
|
||||||
@@ -1667,8 +1685,8 @@
|
|
||||||
*) sitearch="${arch}" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
-AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "${RUBY_LIB_PATH}/${arch}")
|
|
||||||
-AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, "${RUBY_SITE_LIB_PATH2}/${sitearch}")
|
|
||||||
+AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "${RUBY_LIB_PATH2}/${arch}")
|
|
||||||
+AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, "${RUBY_SITE_LIB_PATH3}/${sitearch}")
|
|
||||||
|
|
||||||
AC_ARG_WITH(search-path,
|
|
||||||
[ --with-search-path=DIR specify the additional search path],
|
|
||||||
Only in ruby-1.8.6-p383/: configure.in.orig
|
|
||||||
Only in ruby-1.8.6-p383/: configure.in.rej
|
|
||||||
diff -ur ruby-1.8.6-p383.0-deadcode/mkconfig.rb ruby-1.8.6-p383/mkconfig.rb
|
|
||||||
--- ruby-1.8.6-p383.0-deadcode/mkconfig.rb 2008-06-07 18:37:10.000000000 +0200
|
|
||||||
+++ ruby-1.8.6-p383/mkconfig.rb 2009-10-22 16:30:55.776872493 +0200
|
|
||||||
@@ -139,10 +139,10 @@
|
|
||||||
print(*v_others)
|
|
||||||
print <<EOS
|
|
||||||
CONFIG["ruby_version"] = "$(MAJOR).$(MINOR)"
|
|
||||||
- CONFIG["rubylibdir"] = "$(libdir)/ruby/$(ruby_version)"
|
|
||||||
- CONFIG["archdir"] = "$(rubylibdir)/$(arch)"
|
|
||||||
+ CONFIG["rubylibdir"] = "$(prefix)/lib/ruby/$(ruby_version)"
|
|
||||||
+ CONFIG["archdir"] = "$(libdir)/ruby/$(ruby_version)/$(arch)"
|
|
||||||
CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
|
|
||||||
- CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
|
|
||||||
+ CONFIG["sitearchdir"] = "$(_fc_sitedir)/$(ruby_version)/$(sitearch)"
|
|
||||||
CONFIG["topdir"] = File.dirname(__FILE__)
|
|
||||||
MAKEFILE_CONFIG = {}
|
|
||||||
CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
|
|
||||||
|
|
@ -1,373 +0,0 @@
|
||||||
Mon Feb 25 17:30:29 2008 Technorama Ltd. <oss-ruby@technorama.net>
|
|
||||||
* ext/openssl/digest.c ext/openssl/lib/openssl/digest.rb:
|
|
||||||
Commit patch #9280 from Akinori MUSHA.
|
|
||||||
Simplify the OpenSSL::Digest class and make use of the
|
|
||||||
existing Digest framework.
|
|
||||||
Enhance performance.
|
|
||||||
|
|
||||||
Thu Apr 5 14:58:49 2007 Technorama Ltd. <oss-ruby@technorama.net>
|
|
||||||
* ext/openssl/ossl_pkcs5.c: New module.
|
|
||||||
|
|
||||||
* ext/openssl/ossl_{cipher,digest,pkcs7,pkcs12}.c:
|
|
||||||
Remove redundant module namespace.
|
|
||||||
|
|
||||||
* ext/openssl/lib/openssl/{cipher,digest}.rb
|
|
||||||
Add backwards compatibile classes for rearranged classes.
|
|
||||||
|
|
||||||
* ext/openssl/ossl_{pkcs7,pkcs12}.c: Add documentation.
|
|
||||||
|
|
||||||
Index: ruby_1_8/ext/openssl/lib/openssl/digest.rb
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8/ext/openssl/lib/openssl/digest.rb (revision 11708)
|
|
||||||
+++ ruby_1_8/ext/openssl/lib/openssl/digest.rb (revision 15600)
|
|
||||||
@@ -19,13 +19,17 @@
|
|
||||||
#require 'openssl'
|
|
||||||
|
|
||||||
module OpenSSL
|
|
||||||
- module Digest
|
|
||||||
+ class Digest
|
|
||||||
|
|
||||||
alg = %w(DSS DSS1 MD2 MD4 MD5 MDC2 RIPEMD160 SHA SHA1)
|
|
||||||
if OPENSSL_VERSION_NUMBER > 0x00908000
|
|
||||||
alg += %w(SHA224 SHA256 SHA384 SHA512)
|
|
||||||
end
|
|
||||||
|
|
||||||
+ def self.digest(name, data)
|
|
||||||
+ super(data, name)
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
alg.each{|name|
|
|
||||||
klass = Class.new(Digest){
|
|
||||||
define_method(:initialize){|*data|
|
|
||||||
@@ -44,6 +48,14 @@
|
|
||||||
const_set(name, klass)
|
|
||||||
}
|
|
||||||
|
|
||||||
+ # This class is only provided for backwards compatibility. Use OpenSSL::Digest in the future.
|
|
||||||
+ class Digest < Digest
|
|
||||||
+ def initialize(*args)
|
|
||||||
+ # add warning
|
|
||||||
+ super(*args)
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
end # Digest
|
|
||||||
end # OpenSSL
|
|
||||||
|
|
||||||
Index: ruby_1_8/ext/openssl/ossl_digest.c
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8/ext/openssl/ossl_digest.c (revision 11708)
|
|
||||||
+++ ruby_1_8/ext/openssl/ossl_digest.c (revision 15600)
|
|
||||||
@@ -24,7 +24,6 @@
|
|
||||||
/*
|
|
||||||
* Classes
|
|
||||||
*/
|
|
||||||
-VALUE mDigest;
|
|
||||||
VALUE cDigest;
|
|
||||||
VALUE eDigestError;
|
|
||||||
|
|
||||||
@@ -36,11 +35,23 @@
|
|
||||||
const EVP_MD *
|
|
||||||
GetDigestPtr(VALUE obj)
|
|
||||||
{
|
|
||||||
- EVP_MD_CTX *ctx;
|
|
||||||
+ const EVP_MD *md;
|
|
||||||
|
|
||||||
- SafeGetDigest(obj, ctx);
|
|
||||||
+ if (TYPE(obj) == T_STRING) {
|
|
||||||
+ const char *name = STR2CSTR(obj);
|
|
||||||
|
|
||||||
- return EVP_MD_CTX_md(ctx); /*== ctx->digest*/
|
|
||||||
+ md = EVP_get_digestbyname(name);
|
|
||||||
+ if (!md)
|
|
||||||
+ ossl_raise(rb_eRuntimeError, "Unsupported digest algorithm (%s).", name);
|
|
||||||
+ } else {
|
|
||||||
+ EVP_MD_CTX *ctx;
|
|
||||||
+
|
|
||||||
+ SafeGetDigest(obj, ctx);
|
|
||||||
+
|
|
||||||
+ md = EVP_MD_CTX_md(ctx);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return md;
|
|
||||||
}
|
|
||||||
|
|
||||||
VALUE
|
|
||||||
@@ -51,7 +62,6 @@
|
|
||||||
|
|
||||||
ret = ossl_digest_alloc(cDigest);
|
|
||||||
GetDigest(ret, ctx);
|
|
||||||
- EVP_MD_CTX_init(ctx);
|
|
||||||
EVP_DigestInit_ex(ctx, md, NULL);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
@@ -69,14 +79,18 @@
|
|
||||||
ctx = EVP_MD_CTX_create();
|
|
||||||
if (ctx == NULL)
|
|
||||||
ossl_raise(rb_eRuntimeError, "EVP_MD_CTX_create() failed");
|
|
||||||
- EVP_MD_CTX_init(ctx);
|
|
||||||
obj = Data_Wrap_Struct(klass, 0, EVP_MD_CTX_destroy, ctx);
|
|
||||||
-
|
|
||||||
+
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
VALUE ossl_digest_update(VALUE, VALUE);
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * call-seq:
|
|
||||||
+ * Digest.new(string) -> digest
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
static VALUE
|
|
||||||
ossl_digest_initialize(int argc, VALUE *argv, VALUE self)
|
|
||||||
{
|
|
||||||
@@ -86,14 +100,9 @@
|
|
||||||
VALUE type, data;
|
|
||||||
|
|
||||||
rb_scan_args(argc, argv, "11", &type, &data);
|
|
||||||
- StringValue(type);
|
|
||||||
+ md = GetDigestPtr(type);
|
|
||||||
if (!NIL_P(data)) StringValue(data);
|
|
||||||
- name = StringValuePtr(type);
|
|
||||||
-
|
|
||||||
- md = EVP_get_digestbyname(name);
|
|
||||||
- if (!md) {
|
|
||||||
- ossl_raise(rb_eRuntimeError, "Unsupported digest algorithm (%s).", name);
|
|
||||||
- }
|
|
||||||
+
|
|
||||||
GetDigest(self, ctx);
|
|
||||||
EVP_DigestInit_ex(ctx, md, NULL);
|
|
||||||
|
|
||||||
@@ -118,6 +127,11 @@
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * call-seq:
|
|
||||||
+ * digest.reset -> self
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
static VALUE
|
|
||||||
ossl_digest_reset(VALUE self)
|
|
||||||
{
|
|
||||||
@@ -129,6 +143,11 @@
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * call-seq:
|
|
||||||
+ * digest.update(string) -> aString
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
VALUE
|
|
||||||
ossl_digest_update(VALUE self, VALUE data)
|
|
||||||
{
|
|
||||||
@@ -136,126 +155,77 @@
|
|
||||||
|
|
||||||
StringValue(data);
|
|
||||||
GetDigest(self, ctx);
|
|
||||||
- EVP_DigestUpdate(ctx, RSTRING(data)->ptr, RSTRING(data)->len);
|
|
||||||
+ EVP_DigestUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data));
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void
|
|
||||||
-digest_final(EVP_MD_CTX *ctx, char **buf, int *buf_len)
|
|
||||||
-{
|
|
||||||
- EVP_MD_CTX final;
|
|
||||||
-
|
|
||||||
- if (!EVP_MD_CTX_copy(&final, ctx)) {
|
|
||||||
- ossl_raise(eDigestError, NULL);
|
|
||||||
- }
|
|
||||||
- if (!(*buf = OPENSSL_malloc(EVP_MD_CTX_size(&final)))) {
|
|
||||||
- EVP_MD_CTX_cleanup(&final);
|
|
||||||
- ossl_raise(eDigestError, "Cannot allocate mem for digest");
|
|
||||||
- }
|
|
||||||
- EVP_DigestFinal_ex(&final, *buf, buf_len);
|
|
||||||
- EVP_MD_CTX_cleanup(&final);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
+/*
|
|
||||||
+ * call-seq:
|
|
||||||
+ * digest.finish -> aString
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
static VALUE
|
|
||||||
-ossl_digest_digest(VALUE self)
|
|
||||||
+ossl_digest_finish(int argc, VALUE *argv, VALUE self)
|
|
||||||
{
|
|
||||||
EVP_MD_CTX *ctx;
|
|
||||||
- char *buf;
|
|
||||||
- int buf_len;
|
|
||||||
- VALUE digest;
|
|
||||||
-
|
|
||||||
- GetDigest(self, ctx);
|
|
||||||
- digest_final(ctx, &buf, &buf_len);
|
|
||||||
- digest = ossl_buf2str(buf, buf_len);
|
|
||||||
-
|
|
||||||
- return digest;
|
|
||||||
-}
|
|
||||||
+ VALUE str;
|
|
||||||
|
|
||||||
-static VALUE
|
|
||||||
-ossl_digest_hexdigest(VALUE self)
|
|
||||||
-{
|
|
||||||
- EVP_MD_CTX *ctx;
|
|
||||||
- char *buf, *hexbuf;
|
|
||||||
- int buf_len;
|
|
||||||
- VALUE hexdigest;
|
|
||||||
+ rb_scan_args(argc, argv, "01", &str);
|
|
||||||
|
|
||||||
GetDigest(self, ctx);
|
|
||||||
- digest_final(ctx, &buf, &buf_len);
|
|
||||||
- if (string2hex(buf, buf_len, &hexbuf, NULL) != 2 * buf_len) {
|
|
||||||
- OPENSSL_free(buf);
|
|
||||||
- ossl_raise(eDigestError, "Memory alloc error");
|
|
||||||
+
|
|
||||||
+ if (NIL_P(str)) {
|
|
||||||
+ str = rb_str_new(NULL, EVP_MD_CTX_size(ctx));
|
|
||||||
+ } else {
|
|
||||||
+ StringValue(str);
|
|
||||||
+ rb_str_resize(str, EVP_MD_CTX_size(ctx));
|
|
||||||
}
|
|
||||||
- OPENSSL_free(buf);
|
|
||||||
- hexdigest = ossl_buf2str(hexbuf, 2 * buf_len);
|
|
||||||
|
|
||||||
- return hexdigest;
|
|
||||||
-}
|
|
||||||
+ EVP_DigestFinal_ex(ctx, RSTRING_PTR(str), NULL);
|
|
||||||
|
|
||||||
-static VALUE
|
|
||||||
-ossl_digest_s_digest(VALUE klass, VALUE str, VALUE data)
|
|
||||||
-{
|
|
||||||
- VALUE obj = rb_class_new_instance(1, &str, klass);
|
|
||||||
-
|
|
||||||
- ossl_digest_update(obj, data);
|
|
||||||
-
|
|
||||||
- return ossl_digest_digest(obj);
|
|
||||||
+ return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * call-seq:
|
|
||||||
+ * digest.name -> string
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
static VALUE
|
|
||||||
-ossl_digest_s_hexdigest(VALUE klass, VALUE str, VALUE data)
|
|
||||||
+ossl_digest_name(VALUE self)
|
|
||||||
{
|
|
||||||
- VALUE obj = rb_class_new_instance(1, &str, klass);
|
|
||||||
-
|
|
||||||
- ossl_digest_update(obj, data);
|
|
||||||
-
|
|
||||||
- return ossl_digest_hexdigest(obj);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static VALUE
|
|
||||||
-ossl_digest_equal(VALUE self, VALUE other)
|
|
||||||
-{
|
|
||||||
EVP_MD_CTX *ctx;
|
|
||||||
- VALUE str1, str2;
|
|
||||||
|
|
||||||
- if (rb_obj_is_kind_of(other, cDigest) == Qtrue) {
|
|
||||||
- str2 = ossl_digest_digest(other);
|
|
||||||
- } else {
|
|
||||||
- StringValue(other);
|
|
||||||
- str2 = other;
|
|
||||||
- }
|
|
||||||
GetDigest(self, ctx);
|
|
||||||
- if (RSTRING(str2)->len == EVP_MD_CTX_size(ctx)) {
|
|
||||||
- str1 = ossl_digest_digest(self);
|
|
||||||
- } else {
|
|
||||||
- str1 = ossl_digest_hexdigest(self);
|
|
||||||
- }
|
|
||||||
- if (RSTRING(str1)->len == RSTRING(str2)->len
|
|
||||||
- && rb_str_cmp(str1, str2) == 0) {
|
|
||||||
- return Qtrue;
|
|
||||||
- }
|
|
||||||
|
|
||||||
- return Qfalse;
|
|
||||||
+ return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx)));
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * call-seq:
|
|
||||||
+ * digest.digest_size -> integer
|
|
||||||
+ *
|
|
||||||
+ * Returns the output size of the digest.
|
|
||||||
+ */
|
|
||||||
static VALUE
|
|
||||||
-ossl_digest_name(VALUE self)
|
|
||||||
+ossl_digest_size(VALUE self)
|
|
||||||
{
|
|
||||||
EVP_MD_CTX *ctx;
|
|
||||||
|
|
||||||
GetDigest(self, ctx);
|
|
||||||
|
|
||||||
- return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx)));
|
|
||||||
+ return INT2NUM(EVP_MD_CTX_size(ctx));
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
-ossl_digest_size(VALUE self)
|
|
||||||
+ossl_digest_block_length(VALUE self)
|
|
||||||
{
|
|
||||||
EVP_MD_CTX *ctx;
|
|
||||||
|
|
||||||
GetDigest(self, ctx);
|
|
||||||
|
|
||||||
- return INT2NUM(EVP_MD_CTX_size(ctx));
|
|
||||||
+ return INT2NUM(EVP_MD_CTX_block_size(ctx));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -264,31 +234,26 @@
|
|
||||||
void
|
|
||||||
Init_ossl_digest()
|
|
||||||
{
|
|
||||||
- mDigest = rb_define_module_under(mOSSL, "Digest");
|
|
||||||
+ rb_require("openssl");
|
|
||||||
+ rb_require("digest");
|
|
||||||
+
|
|
||||||
+#if 0 /* let rdoc know about mOSSL */
|
|
||||||
+ mOSSL = rb_define_module("OpenSSL");
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ cDigest = rb_define_class_under(mOSSL, "Digest", rb_path2class("Digest::Class"));
|
|
||||||
+ eDigestError = rb_define_class_under(cDigest, "DigestError", eOSSLError);
|
|
||||||
|
|
||||||
- eDigestError = rb_define_class_under(mDigest, "DigestError", eOSSLError);
|
|
||||||
-
|
|
||||||
- cDigest = rb_define_class_under(mDigest, "Digest", rb_cObject);
|
|
||||||
-
|
|
||||||
rb_define_alloc_func(cDigest, ossl_digest_alloc);
|
|
||||||
- rb_define_singleton_method(cDigest, "digest", ossl_digest_s_digest, 2);
|
|
||||||
- rb_define_singleton_method(cDigest, "hexdigest", ossl_digest_s_hexdigest, 2);
|
|
||||||
-
|
|
||||||
+
|
|
||||||
rb_define_method(cDigest, "initialize", ossl_digest_initialize, -1);
|
|
||||||
- rb_define_method(cDigest, "reset", ossl_digest_reset, 0);
|
|
||||||
-
|
|
||||||
rb_define_copy_func(cDigest, ossl_digest_copy);
|
|
||||||
-
|
|
||||||
- rb_define_method(cDigest, "digest", ossl_digest_digest, 0);
|
|
||||||
- rb_define_method(cDigest, "hexdigest", ossl_digest_hexdigest, 0);
|
|
||||||
- rb_define_alias(cDigest, "inspect", "hexdigest");
|
|
||||||
- rb_define_alias(cDigest, "to_s", "hexdigest");
|
|
||||||
-
|
|
||||||
+ rb_define_method(cDigest, "reset", ossl_digest_reset, 0);
|
|
||||||
rb_define_method(cDigest, "update", ossl_digest_update, 1);
|
|
||||||
rb_define_alias(cDigest, "<<", "update");
|
|
||||||
-
|
|
||||||
- rb_define_method(cDigest, "==", ossl_digest_equal, 1);
|
|
||||||
-
|
|
||||||
+ rb_define_private_method(cDigest, "finish", ossl_digest_finish, -1);
|
|
||||||
+ rb_define_method(cDigest, "digest_length", ossl_digest_size, 0);
|
|
||||||
+ rb_define_method(cDigest, "block_length", ossl_digest_block_length, 0);
|
|
||||||
+
|
|
||||||
rb_define_method(cDigest, "name", ossl_digest_name, 0);
|
|
||||||
- rb_define_method(cDigest, "size", ossl_digest_size, 0);
|
|
||||||
}
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
--- ruby-1.8.6-p420/error.c.tainted 2008-08-04 12:16:55.000000000 +0900
|
|
||||||
+++ ruby-1.8.6-p420/error.c 2011-02-21 04:44:14.000000000 +0900
|
|
||||||
@@ -404,7 +404,6 @@
|
|
||||||
VALUE mesg = rb_attr_get(exc, rb_intern("mesg"));
|
|
||||||
|
|
||||||
if (NIL_P(mesg)) return rb_class_name(CLASS_OF(exc));
|
|
||||||
- if (OBJ_TAINTED(exc)) OBJ_TAINT(mesg);
|
|
||||||
return mesg;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -668,10 +667,9 @@
|
|
||||||
if (NIL_P(mesg)) return rb_class_name(CLASS_OF(exc));
|
|
||||||
StringValue(str);
|
|
||||||
if (str != mesg) {
|
|
||||||
- rb_iv_set(exc, "mesg", mesg = str);
|
|
||||||
+ OBJ_INFECT(str, mesg);
|
|
||||||
}
|
|
||||||
- if (OBJ_TAINTED(exc)) OBJ_TAINT(mesg);
|
|
||||||
- return mesg;
|
|
||||||
+ return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
--- ruby-1.8.7-p330/lib/fileutils.rb 2010-06-08 15:31:50.000000000 +0900
|
|
||||||
+++ ruby-1.8.7-p334/lib/fileutils.rb 2011-02-18 21:18:10.000000000 +0900
|
|
||||||
@@ -658,10 +658,10 @@
|
|
||||||
# removing directories. This requires the current process is the
|
|
||||||
# owner of the removing whole directory tree, or is the super user (root).
|
|
||||||
#
|
|
||||||
- # WARNING: You must ensure that *ALL* parent directories are not
|
|
||||||
- # world writable. Otherwise this method does not work.
|
|
||||||
- # Only exception is temporary directory like /tmp and /var/tmp,
|
|
||||||
- # whose permission is 1777.
|
|
||||||
+ # WARNING: You must ensure that *ALL* parent directories cannot be
|
|
||||||
+ # moved by other untrusted users. For example, parent directories
|
|
||||||
+ # should not be owned by untrusted users, and should not be world
|
|
||||||
+ # writable except when the sticky bit set.
|
|
||||||
#
|
|
||||||
# WARNING: Only the owner of the removing directory tree, or Unix super
|
|
||||||
# user (root) should invoke this method. Otherwise this method does not
|
|
||||||
@@ -704,6 +704,11 @@
|
|
||||||
end
|
|
||||||
f.chown euid, -1
|
|
||||||
f.chmod 0700
|
|
||||||
+ unless fu_stat_identical_entry?(st, File.lstat(fullpath))
|
|
||||||
+ # TOC-to-TOU attack?
|
|
||||||
+ File.unlink fullpath
|
|
||||||
+ return
|
|
||||||
+ end
|
|
||||||
}
|
|
||||||
# ---- tree root is frozen ----
|
|
||||||
root = Entry_.new(path)
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
Sat Apr 19 18:42:04 2008 Akinori MUSHA <knu@iDaemons.org>
|
|
||||||
|
|
||||||
* intern.h, hash.c (rb_hash_lookup): New internal function to
|
|
||||||
check if a key exists in a hash, ignoring #default; backported
|
|
||||||
from 1.9.
|
|
||||||
|
|
||||||
Thu Aug 30 08:24:18 2007 Tanaka Akira <akr@fsij.org>
|
|
||||||
|
|
||||||
* ruby.h (RHASH_TBL): defined for compatibility to 1.9.
|
|
||||||
* (RHASH_ITER_LEV): ditto.
|
|
||||||
* (RHASH_IFNONE): ditto.
|
|
||||||
* (RHASH_SIZE): ditto.
|
|
||||||
* (RHASH_EMPTY_P): ditto.
|
|
||||||
|
|
||||||
Index: ruby_1_8/ruby.h
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8/ruby.h (revision 13310)
|
|
||||||
+++ ruby_1_8/ruby.h (revision 13311)
|
|
||||||
@@ -374,6 +374,11 @@
|
|
||||||
int iter_lev;
|
|
||||||
VALUE ifnone;
|
|
||||||
};
|
|
||||||
+#define RHASH_TBL(h) (RHASH(h)->tbl)
|
|
||||||
+#define RHASH_ITER_LEV(h) (RHASH(h)->iter_lev)
|
|
||||||
+#define RHASH_IFNONE(h) (RHASH(h)->ifnone)
|
|
||||||
+#define RHASH_SIZE(h) (RHASH(h)->tbl->num_entries)
|
|
||||||
+#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
|
|
||||||
|
|
||||||
struct RFile {
|
|
||||||
struct RBasic basic;
|
|
||||||
Index: ruby_1_8/hash.c
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8/hash.c (revision 16077)
|
|
||||||
+++ ruby_1_8/hash.c (revision 16078)
|
|
||||||
@@ -454,6 +454,18 @@
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
+VALUE
|
|
||||||
+rb_hash_lookup(hash, key)
|
|
||||||
+ VALUE hash, key;
|
|
||||||
+{
|
|
||||||
+ VALUE val;
|
|
||||||
+
|
|
||||||
+ if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
|
|
||||||
+ return Qnil; /* without Hash#default */
|
|
||||||
+ }
|
|
||||||
+ return val;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* hsh.fetch(key [, default] ) => obj
|
|
||||||
Index: ruby_1_8/intern.h
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8/intern.h (revision 16077)
|
|
||||||
+++ ruby_1_8/intern.h (revision 16078)
|
|
||||||
@@ -270,6 +270,7 @@
|
|
||||||
VALUE rb_hash_new _((void));
|
|
||||||
VALUE rb_hash_freeze _((VALUE));
|
|
||||||
VALUE rb_hash_aref _((VALUE, VALUE));
|
|
||||||
+VALUE rb_hash_lookup _((VALUE, VALUE));
|
|
||||||
VALUE rb_hash_aset _((VALUE, VALUE, VALUE));
|
|
||||||
VALUE rb_hash_delete_if _((VALUE));
|
|
||||||
VALUE rb_hash_delete _((VALUE,VALUE));
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
Index: ruby-1.8-rev27736_trunk/ext/tk/lib/tk/pack.rb
|
|
||||||
===================================================================
|
|
||||||
--- ruby-1.8-rev27736_trunk/ext/tk/lib/tk/pack.rb (revision 27738)
|
|
||||||
+++ ruby-1.8-rev27736_trunk/ext/tk/lib/tk/pack.rb (working copy)
|
|
||||||
@@ -39,7 +39,23 @@
|
|
||||||
end
|
|
||||||
fail ArgumentError, 'no widget is given' if args.empty?
|
|
||||||
params = []
|
|
||||||
- args.flatten(1).each{|win| params.push(_epath(win))}
|
|
||||||
+
|
|
||||||
+ #args.flatten(1).each{|win| params.push(_epath(win))}
|
|
||||||
+ #
|
|
||||||
+ # flatten(level) is ruby >=1.8.7 feature, substituting
|
|
||||||
+ #
|
|
||||||
+ args_flatten_one = []
|
|
||||||
+ args.each {|args1|
|
|
||||||
+ if args1.is_a? Array then
|
|
||||||
+ args1.each {|args2|
|
|
||||||
+ args_flatten_one << args2
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ args_flatten_one << args1
|
|
||||||
+ end
|
|
||||||
+ }
|
|
||||||
+ args_flatten_one.each{|win| params.push(_epath(win))}
|
|
||||||
+
|
|
||||||
opts.each{|k, v|
|
|
||||||
params.push("-#{k}")
|
|
||||||
params.push(_epath(v)) # have to use 'epath' (hash_kv() is unavailable)
|
|
||||||
Index: ruby-1.8-rev27736_trunk/ext/tk/lib/tk/grid.rb
|
|
||||||
===================================================================
|
|
||||||
--- ruby-1.8-rev27736_trunk/ext/tk/lib/tk/grid.rb (revision 27738)
|
|
||||||
+++ ruby-1.8-rev27736_trunk/ext/tk/lib/tk/grid.rb (working copy)
|
|
||||||
@@ -63,7 +63,23 @@
|
|
||||||
end
|
|
||||||
fail ArgumentError, 'no widget is given' if args.empty?
|
|
||||||
params = []
|
|
||||||
- args.flatten(1).each{|win|
|
|
||||||
+
|
|
||||||
+ #args.flatten(1).each{|win|
|
|
||||||
+ #
|
|
||||||
+ # flatten(level) is ruby >=1.8.7 feature, substituting
|
|
||||||
+ #
|
|
||||||
+
|
|
||||||
+ args_flatten_one = []
|
|
||||||
+ args.each {|args1|
|
|
||||||
+ if args1.is_a? Array then
|
|
||||||
+ args1.each {|args2|
|
|
||||||
+ args_flatten_one << args2
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ args_flatten_one << args1
|
|
||||||
+ end
|
|
||||||
+ }
|
|
||||||
+ args_flatten_one.each{|win|
|
|
||||||
case win
|
|
||||||
when '-', ?- # RELATIVE PLACEMENT (increase columnspan)
|
|
||||||
params.push('-')
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
Sun Mar 1 03:04:19 2009 Akinori MUSHA <knu@iDaemons.org>
|
|
||||||
|
|
||||||
* class.c (rb_singleton_class_clone): Qnil must be used for a null
|
|
||||||
class reference when we use NIL_P() to check class reference
|
|
||||||
validity. The bug was exposed by the spec test of Sequel.
|
|
||||||
|
|
||||||
* eval.c (ruby_init): Use NEW_CREF().
|
|
||||||
|
|
||||||
Index: ruby_1_8/class.c
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8/class.c (revision 22678)
|
|
||||||
+++ ruby_1_8/class.c (revision 22679)
|
|
||||||
@@ -153,7 +153,7 @@
|
|
||||||
data.klass = obj;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- data.klass = 0;
|
|
||||||
+ data.klass = Qnil;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,111 +0,0 @@
|
||||||
Thu Jul 23 15:04:20 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
|
|
||||||
|
|
||||||
ruby* lib/irb.rb, lib/irb/init.rb, lib/irb/ext/save-history.rb: add
|
|
||||||
ruby IRB::irb_at_exit. no use finalizer saving history. [ruby-dev-38563]
|
|
||||||
|
|
||||||
Index: lib/irb/ext/save-history.rb
|
|
||||||
===================================================================
|
|
||||||
--- lib/irb/ext/save-history.rb (revision 24225)
|
|
||||||
+++ lib/irb/ext/save-history.rb (revision 24254)
|
|
||||||
@@ -50,23 +50,24 @@
|
|
||||||
module HistorySavingAbility
|
|
||||||
include Readline
|
|
||||||
|
|
||||||
- def HistorySavingAbility.create_finalizer
|
|
||||||
- proc do
|
|
||||||
- if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
|
|
||||||
- if hf = IRB.conf[:HISTORY_FILE]
|
|
||||||
- file = File.expand_path(hf)
|
|
||||||
- end
|
|
||||||
- file = IRB.rc_file("_history") unless file
|
|
||||||
- open(file, 'w' ) do |f|
|
|
||||||
- hist = HISTORY.to_a
|
|
||||||
- f.puts(hist[-num..-1] || hist)
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
+# def HistorySavingAbility.create_finalizer
|
|
||||||
+# proc do
|
|
||||||
+# if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
|
|
||||||
+# if hf = IRB.conf[:HISTORY_FILE]
|
|
||||||
+# file = File.expand_path(hf)
|
|
||||||
+# end
|
|
||||||
+# file = IRB.rc_file("_history") unless file
|
|
||||||
+# open(file, 'w' ) do |f|
|
|
||||||
+# hist = HISTORY.to_a
|
|
||||||
+# f.puts(hist[-num..-1] || hist)
|
|
||||||
+# end
|
|
||||||
+# end
|
|
||||||
+# end
|
|
||||||
+# end
|
|
||||||
|
|
||||||
def HistorySavingAbility.extended(obj)
|
|
||||||
- ObjectSpace.define_finalizer(obj, HistorySavingAbility.create_finalizer)
|
|
||||||
+# ObjectSpace.define_finalizer(obj, HistorySavingAbility.create_finalizer)
|
|
||||||
+ IRB.conf[:AT_EXIT].push proc{obj.save_history}
|
|
||||||
obj.load_history
|
|
||||||
obj
|
|
||||||
end
|
|
||||||
@@ -80,6 +81,19 @@
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
+
|
|
||||||
+ def save_history
|
|
||||||
+ if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
|
|
||||||
+ if history_file = IRB.conf[:HISTORY_FILE]
|
|
||||||
+ history_file = File.expand_path(history_file)
|
|
||||||
+ end
|
|
||||||
+ history_file = IRB.rc_file("_history") unless history_file
|
|
||||||
+ open(history_file, 'w' ) do |f|
|
|
||||||
+ hist = HISTORY.to_a
|
|
||||||
+ f.puts(hist[-num..-1] || hist)
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Index: lib/irb/init.rb
|
|
||||||
===================================================================
|
|
||||||
--- lib/irb/init.rb (revision 24225)
|
|
||||||
+++ lib/irb/init.rb (revision 24254)
|
|
||||||
@@ -114,6 +114,8 @@
|
|
||||||
# @CONF[:LC_MESSAGES] = "en"
|
|
||||||
@CONF[:LC_MESSAGES] = Locale.new
|
|
||||||
|
|
||||||
+ @CONF[:AT_EXIT] = []
|
|
||||||
+
|
|
||||||
@CONF[:DEBUG_LEVEL] = 1
|
|
||||||
end
|
|
||||||
|
|
||||||
Index: lib/irb.rb
|
|
||||||
===================================================================
|
|
||||||
--- lib/irb.rb (revision 24225)
|
|
||||||
+++ lib/irb.rb (revision 24254)
|
|
||||||
@@ -65,13 +65,21 @@
|
|
||||||
trap("SIGINT") do
|
|
||||||
irb.signal_handle
|
|
||||||
end
|
|
||||||
-
|
|
||||||
- catch(:IRB_EXIT) do
|
|
||||||
- irb.eval_input
|
|
||||||
+
|
|
||||||
+ begin
|
|
||||||
+ catch(:IRB_EXIT) do
|
|
||||||
+ irb.eval_input
|
|
||||||
+ end
|
|
||||||
+ ensure
|
|
||||||
+ irb_at_exit
|
|
||||||
end
|
|
||||||
# print "\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
+ def IRB.irb_at_exit
|
|
||||||
+ @CONF[:AT_EXIT].each{|hook| hook.call}
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
def IRB.irb_exit(irb, ret)
|
|
||||||
throw :IRB_EXIT, ret
|
|
||||||
end
|
|
||||||
25
ruby-2.1.0-Enable-configuration-of-archlibdir.patch
Normal file
25
ruby-2.1.0-Enable-configuration-of-archlibdir.patch
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
From e1293f665128b0d9c5bfa0b5beeab4afebf07e6a Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Tue, 1 Oct 2013 12:22:40 +0200
|
||||||
|
Subject: [PATCH] Allow to configure libruby.so placement.
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index a64358fada..b3bdfad1eb 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -3556,6 +3556,11 @@ AS_IF([test ${multiarch+set}], [
|
||||||
|
])
|
||||||
|
|
||||||
|
archlibdir='${libdir}/${arch}'
|
||||||
|
+AC_ARG_WITH(archlibdir,
|
||||||
|
+ AS_HELP_STRING([--with-archlibdir=DIR],
|
||||||
|
+ [prefix for libruby [[LIBDIR/ARCH]]]),
|
||||||
|
+ [archlibdir="$withval"])
|
||||||
|
+
|
||||||
|
sitearchlibdir='${libdir}/${sitearch}'
|
||||||
|
archincludedir='${includedir}/${arch}'
|
||||||
|
sitearchincludedir='${includedir}/${sitearch}'
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
From 6062f4976c5b51f8b952b9f6745175be7b1c5ff9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Fri, 8 Feb 2013 22:48:41 +0100
|
||||||
|
Subject: [PATCH] Prevent duplicated paths when empty version string is
|
||||||
|
configured.
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 3 ++-
|
||||||
|
loadpath.c | 12 ++++++++++++
|
||||||
|
tool/mkconfig.rb | 2 +-
|
||||||
|
3 files changed, 15 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 2bc5153141..a64358fada 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -4472,7 +4472,8 @@ AS_CASE(["$ruby_version_dir_name"],
|
||||||
|
ruby_version_dir=/'${ruby_version_dir_name}'
|
||||||
|
|
||||||
|
if test -z "${ruby_version_dir_name}"; then
|
||||||
|
- AC_MSG_ERROR([No ruby version, No place for bundled libraries])
|
||||||
|
+ unset ruby_version_dir
|
||||||
|
+ AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
rubylibdir='${rubylibprefix}'${ruby_version_dir}
|
||||||
|
diff --git a/loadpath.c b/loadpath.c
|
||||||
|
index b8969e6998..bbfd4daa78 100644
|
||||||
|
--- a/loadpath.c
|
||||||
|
+++ b/loadpath.c
|
||||||
|
@@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] =
|
||||||
|
RUBY_SEARCH_PATH "\0"
|
||||||
|
#endif
|
||||||
|
#ifndef NO_RUBY_SITE_LIB
|
||||||
|
+#ifdef RUBY_LIB_VERSION_BLANK
|
||||||
|
+ RUBY_SITE_LIB "\0"
|
||||||
|
+#else
|
||||||
|
RUBY_SITE_LIB2 "\0"
|
||||||
|
+#endif
|
||||||
|
#ifdef RUBY_THINARCH
|
||||||
|
RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
|
||||||
|
#endif
|
||||||
|
RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0"
|
||||||
|
+#ifndef RUBY_LIB_VERSION_BLANK
|
||||||
|
RUBY_SITE_LIB "\0"
|
||||||
|
#endif
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#ifndef NO_RUBY_VENDOR_LIB
|
||||||
|
+#ifdef RUBY_LIB_VERSION_BLANK
|
||||||
|
+ RUBY_VENDOR_LIB "\0"
|
||||||
|
+#else
|
||||||
|
RUBY_VENDOR_LIB2 "\0"
|
||||||
|
+#endif
|
||||||
|
#ifdef RUBY_THINARCH
|
||||||
|
RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
|
||||||
|
#endif
|
||||||
|
RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0"
|
||||||
|
+#ifndef RUBY_LIB_VERSION_BLANK
|
||||||
|
RUBY_VENDOR_LIB "\0"
|
||||||
|
+#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
RUBY_LIB "\0"
|
||||||
|
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
|
||||||
|
index db74115730..2b01796abf 100755
|
||||||
|
--- a/tool/mkconfig.rb
|
||||||
|
+++ b/tool/mkconfig.rb
|
||||||
|
@@ -114,7 +114,7 @@
|
||||||
|
val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump
|
||||||
|
case name
|
||||||
|
when /^prefix$/
|
||||||
|
- val = "(TOPDIR || DESTDIR + #{val})"
|
||||||
|
+ val = "(((TOPDIR && TOPDIR.empty?) ? nil : TOPDIR) || DESTDIR + #{val})"
|
||||||
|
when /^ARCH_FLAG$/
|
||||||
|
val = "arch_flag || #{val}" if universal
|
||||||
|
when /^UNIVERSAL_ARCHNAMES$/
|
||||||
22
ruby-2.1.0-always-use-i386.patch
Normal file
22
ruby-2.1.0-always-use-i386.patch
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
From 9e70f6e4b8771965a30ecfb6d1c6015df350ca55 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Mon, 19 Nov 2012 14:37:28 +0100
|
||||||
|
Subject: [PATCH] Always use i386.
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index b3bdfad1eb..411322a27f 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -4536,6 +4536,8 @@ AC_SUBST(vendorarchdir)dnl
|
||||||
|
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
||||||
|
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
||||||
|
|
||||||
|
+target_cpu=`echo $target_cpu | sed s/i.86/i386/`
|
||||||
|
+
|
||||||
|
AS_IF([test "${universal_binary-no}" = yes ], [
|
||||||
|
arch="universal-${target_os}"
|
||||||
|
AS_IF([test "${rb_cv_architecture_available}" = yes], [
|
||||||
94
ruby-2.1.0-custom-rubygems-location.patch
Normal file
94
ruby-2.1.0-custom-rubygems-location.patch
Normal file
|
|
@ -0,0 +1,94 @@
|
||||||
|
From c7952996ac9738a14bea0a1a971fea13460a6c94 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Fri, 11 Nov 2011 13:14:45 +0100
|
||||||
|
Subject: [PATCH] Allow to install RubyGems into custom location, outside of
|
||||||
|
Ruby tree.
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 5 +++++
|
||||||
|
loadpath.c | 4 ++++
|
||||||
|
template/verconf.h.tmpl | 3 +++
|
||||||
|
tool/rbinstall.rb | 10 ++++++++++
|
||||||
|
4 files changed, 22 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 411322a27f..b5f842a512 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -4508,6 +4508,10 @@ AC_ARG_WITH(vendorarchdir,
|
||||||
|
[vendorarchdir=$withval],
|
||||||
|
[vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}])
|
||||||
|
|
||||||
|
+AC_ARG_WITH(rubygemsdir,
|
||||||
|
+ AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]),
|
||||||
|
+ [rubygemsdir=$withval])
|
||||||
|
+
|
||||||
|
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
||||||
|
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||||
|
RUBY_EXEC_PREFIX=''
|
||||||
|
@@ -4532,6 +4536,7 @@ AC_SUBST(sitearchdir)dnl
|
||||||
|
AC_SUBST(vendordir)dnl
|
||||||
|
AC_SUBST(vendorlibdir)dnl
|
||||||
|
AC_SUBST(vendorarchdir)dnl
|
||||||
|
+AC_SUBST(rubygemsdir)dnl
|
||||||
|
|
||||||
|
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
||||||
|
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
||||||
|
diff --git a/loadpath.c b/loadpath.c
|
||||||
|
index bbfd4daa78..69677a9297 100644
|
||||||
|
--- a/loadpath.c
|
||||||
|
+++ b/loadpath.c
|
||||||
|
@@ -94,6 +94,10 @@ const char ruby_initial_load_paths[] =
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifdef RUBYGEMS_DIR
|
||||||
|
+ RUBYGEMS_DIR "\0"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
RUBY_LIB "\0"
|
||||||
|
#ifdef RUBY_THINARCH
|
||||||
|
RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
|
||||||
|
diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl
|
||||||
|
index 9ba2bd6de5..4ec4ce9353 100644
|
||||||
|
--- a/template/verconf.h.tmpl
|
||||||
|
+++ b/template/verconf.h.tmpl
|
||||||
|
@@ -36,6 +36,9 @@
|
||||||
|
% if C["RUBY_SEARCH_PATH"]
|
||||||
|
#define RUBY_SEARCH_PATH "${RUBY_SEARCH_PATH}"
|
||||||
|
% end
|
||||||
|
+% if C["rubygemsdir"]
|
||||||
|
+#define RUBYGEMS_DIR "${rubygemsdir}"
|
||||||
|
+% end
|
||||||
|
%
|
||||||
|
% R = {}
|
||||||
|
% R["ruby_version"] = '"RUBY_LIB_VERSION"'
|
||||||
|
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||||
|
index a9e6365b27..7117e65e82 100755
|
||||||
|
--- a/tool/rbinstall.rb
|
||||||
|
+++ b/tool/rbinstall.rb
|
||||||
|
@@ -393,6 +393,7 @@ def CONFIG.[](name, mandatory = false)
|
||||||
|
vendorlibdir = CONFIG["vendorlibdir"]
|
||||||
|
vendorarchlibdir = CONFIG["vendorarchdir"]
|
||||||
|
end
|
||||||
|
+rubygemsdir = CONFIG["rubygemsdir"]
|
||||||
|
mandir = CONFIG["mandir", true]
|
||||||
|
docdir = CONFIG["docdir", true]
|
||||||
|
enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'
|
||||||
|
@@ -1082,7 +1083,16 @@ def (bins = []).add(name)
|
||||||
|
install?(:local, :comm, :lib) do
|
||||||
|
prepare "library scripts", rubylibdir
|
||||||
|
noinst = %w[*.txt *.rdoc *.gemspec]
|
||||||
|
+ # Bundler carries "rubygems.rb" file, so it must be specialcased :/
|
||||||
|
+ noinst += %w[rubygems.rb rubygems/ bundler.rb bundler/] if rubygemsdir
|
||||||
|
install_recursive(File.join(srcdir, "lib"), rubylibdir, :no_install => noinst, :mode => $data_mode)
|
||||||
|
+ if rubygemsdir
|
||||||
|
+ noinst = %w[*.txt *.rdoc *.gemspec]
|
||||||
|
+ install_recursive(File.join(srcdir, "lib", "rubygems"), File.join(rubygemsdir, "rubygems"), :no_install => noinst, :mode => $data_mode)
|
||||||
|
+ install(File.join(srcdir, "lib", "rubygems.rb"), File.join(rubygemsdir, "rubygems.rb"), :mode => $data_mode)
|
||||||
|
+ install_recursive(File.join(srcdir, "lib", "bundler"), File.join(rubylibdir, "bundler"), :no_install => noinst, :mode => $data_mode)
|
||||||
|
+ install(File.join(srcdir, "lib", "bundler.rb"), rubylibdir, :mode => $data_mode)
|
||||||
|
+ end
|
||||||
|
end
|
||||||
|
|
||||||
|
install?(:local, :comm, :hdr, :'comm-hdr') do
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
From f833e213596b0bcfad8264a555eb5093303fb5f2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jarek Prokop <jprokop@redhat.com>
|
||||||
|
Date: Thu, 25 Sep 2025 12:26:39 +0200
|
||||||
|
Subject: [PATCH] Add ruby_version_dir_name support for RDoc.
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/rdoc/ri/paths.rb | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb
|
||||||
|
index 8e89b04e..731f9e36 100644
|
||||||
|
--- a/lib/rdoc/ri/paths.rb
|
||||||
|
+++ b/lib/rdoc/ri/paths.rb
|
||||||
|
@@ -10,7 +10,7 @@ module RDoc::RI::Paths
|
||||||
|
#:stopdoc:
|
||||||
|
require 'rbconfig'
|
||||||
|
|
||||||
|
- version = RbConfig::CONFIG['ruby_version']
|
||||||
|
+ version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
||||||
|
|
||||||
|
BASE = File.join RbConfig::CONFIG['ridir'], version
|
||||||
|
|
||||||
257
ruby-2.3.0-ruby_version.patch
Normal file
257
ruby-2.3.0-ruby_version.patch
Normal file
|
|
@ -0,0 +1,257 @@
|
||||||
|
From 5406ea4b4b13db747e5c1f8341bb257b4da04435 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Tue, 31 Mar 2015 16:21:04 +0200
|
||||||
|
Subject: [PATCH 1/4] Use ruby_version_dir_name for versioned directories.
|
||||||
|
|
||||||
|
This disallows changing the ruby_version constant by --with-ruby-version
|
||||||
|
configuration options. The two places version numbers are disallowed as
|
||||||
|
well, since there are a lot of places which cannot handle this format
|
||||||
|
properly.
|
||||||
|
|
||||||
|
ruby_version_dir_name now specifies custom version string for versioned
|
||||||
|
directories, e.g. instead of default X.Y.Z, you can specify whatever
|
||||||
|
string.
|
||||||
|
---
|
||||||
|
configure.ac | 66 ++++++++++++++++++++++++---------------------
|
||||||
|
template/ruby.pc.in | 1 +
|
||||||
|
2 files changed, 36 insertions(+), 31 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 2bbce78fd0..9d8662369c 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -4422,9 +4422,6 @@ AS_CASE(["$target_os"],
|
||||||
|
rubyw_install_name='$(RUBYW_INSTALL_NAME)'
|
||||||
|
])
|
||||||
|
|
||||||
|
-rubylibdir='${rubylibprefix}/${ruby_version}'
|
||||||
|
-rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'}
|
||||||
|
-
|
||||||
|
rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
|
||||||
|
AC_ARG_WITH(rubyarchprefix,
|
||||||
|
AS_HELP_STRING([--with-rubyarchprefix=DIR],
|
||||||
|
@@ -4447,57 +4444,63 @@ AC_ARG_WITH(ridir,
|
||||||
|
AC_SUBST(ridir)
|
||||||
|
AC_SUBST(RI_BASE_NAME)
|
||||||
|
|
||||||
|
-AC_ARG_WITH(ruby-version,
|
||||||
|
- AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]),
|
||||||
|
- [ruby_version=$withval],
|
||||||
|
- [ruby_version=full])
|
||||||
|
unset RUBY_LIB_VERSION
|
||||||
|
-unset RUBY_LIB_VERSION_STYLE
|
||||||
|
-AS_CASE(["$ruby_version"],
|
||||||
|
- [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'],
|
||||||
|
- [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */'])
|
||||||
|
-AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [
|
||||||
|
- {
|
||||||
|
- echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
||||||
|
- echo '@%:@include "confdefs.h"'
|
||||||
|
- echo '#define STRINGIZE(x) x'
|
||||||
|
- test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
||||||
|
- echo '#include "version.h"'
|
||||||
|
- echo 'ruby_version=RUBY_LIB_VERSION'
|
||||||
|
- } > conftest.c
|
||||||
|
- ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`"
|
||||||
|
- eval $ruby_version
|
||||||
|
-], [test -z "${ruby_version}"], [
|
||||||
|
- AC_MSG_ERROR([No ruby version, No place for bundled libraries])
|
||||||
|
-], [
|
||||||
|
- RUBY_LIB_VERSION="${ruby_version}"
|
||||||
|
-])
|
||||||
|
+RUBY_LIB_VERSION_STYLE='3 /* full */'
|
||||||
|
+{
|
||||||
|
+echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
||||||
|
+echo '@%:@include "confdefs.h"'
|
||||||
|
+echo '#define STRINGIZE(x) x'
|
||||||
|
+test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
||||||
|
+echo '#include "version.h"'
|
||||||
|
+echo 'ruby_version=RUBY_LIB_VERSION'
|
||||||
|
+} > conftest.c
|
||||||
|
+ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`"
|
||||||
|
+eval $ruby_version
|
||||||
|
+
|
||||||
|
+RUBY_LIB_VERSION="${ruby_version}"
|
||||||
|
+
|
||||||
|
AC_SUBST(RUBY_LIB_VERSION_STYLE)
|
||||||
|
AC_SUBST(RUBY_LIB_VERSION)
|
||||||
|
|
||||||
|
+AC_ARG_WITH(ruby-version,
|
||||||
|
+ AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|STR)]),
|
||||||
|
+ [ruby_version_dir_name=$withval],
|
||||||
|
+ [ruby_version_dir_name=full])
|
||||||
|
+AS_CASE(["$ruby_version_dir_name"],
|
||||||
|
+ [full], [ruby_version_dir_name='${ruby_version}'])
|
||||||
|
+
|
||||||
|
+ruby_version_dir=/'${ruby_version_dir_name}'
|
||||||
|
+
|
||||||
|
+if test -z "${ruby_version_dir_name}"; then
|
||||||
|
+ AC_MSG_ERROR([No ruby version, No place for bundled libraries])
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+rubylibdir='${rubylibprefix}'${ruby_version_dir}
|
||||||
|
+rubyarchdir=${multiarch+'${rubyarchprefix}'${ruby_version_dir}}${multiarch-'${rubylibdir}/${arch}'}
|
||||||
|
+
|
||||||
|
AC_ARG_WITH(sitedir,
|
||||||
|
AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]),
|
||||||
|
[sitedir=$withval],
|
||||||
|
[sitedir='${rubylibprefix}/site_ruby'])
|
||||||
|
-sitelibdir='${sitedir}/${ruby_version}'
|
||||||
|
+sitelibdir='${sitedir}'${ruby_version_dir}
|
||||||
|
|
||||||
|
AC_ARG_WITH(sitearchdir,
|
||||||
|
AS_HELP_STRING([--with-sitearchdir=DIR],
|
||||||
|
[architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]),
|
||||||
|
[sitearchdir=$withval],
|
||||||
|
- [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}])
|
||||||
|
+ [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby'${ruby_version_dir}}${multiarch-'${sitelibdir}/${sitearch}'}])
|
||||||
|
|
||||||
|
AC_ARG_WITH(vendordir,
|
||||||
|
AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]),
|
||||||
|
[vendordir=$withval],
|
||||||
|
[vendordir='${rubylibprefix}/vendor_ruby'])
|
||||||
|
-vendorlibdir='${vendordir}/${ruby_version}'
|
||||||
|
+vendorlibdir='${vendordir}'${ruby_version_dir}
|
||||||
|
|
||||||
|
AC_ARG_WITH(vendorarchdir,
|
||||||
|
AS_HELP_STRING([--with-vendorarchdir=DIR],
|
||||||
|
[architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]),
|
||||||
|
[vendorarchdir=$withval],
|
||||||
|
- [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}])
|
||||||
|
+ [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}])
|
||||||
|
|
||||||
|
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
||||||
|
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||||
|
@@ -4514,6 +4517,7 @@ AC_SUBST(sitearchincludedir)dnl
|
||||||
|
AC_SUBST(arch)dnl
|
||||||
|
AC_SUBST(sitearch)dnl
|
||||||
|
AC_SUBST(ruby_version)dnl
|
||||||
|
+AC_SUBST(ruby_version_dir_name)dnl
|
||||||
|
AC_SUBST(rubylibdir)dnl
|
||||||
|
AC_SUBST(rubyarchdir)dnl
|
||||||
|
AC_SUBST(sitedir)dnl
|
||||||
|
diff --git a/template/ruby.pc.in b/template/ruby.pc.in
|
||||||
|
index 6901ec2320..9b7b787208 100644
|
||||||
|
--- a/template/ruby.pc.in
|
||||||
|
+++ b/template/ruby.pc.in
|
||||||
|
@@ -2,6 +2,7 @@ MAJOR=@MAJOR@
|
||||||
|
MINOR=@MINOR@
|
||||||
|
TEENY=@TEENY@
|
||||||
|
ruby_version=@ruby_version@
|
||||||
|
+ruby_version_dir_name=@ruby_version_dir_name@
|
||||||
|
RUBY_API_VERSION=@RUBY_API_VERSION@
|
||||||
|
RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@
|
||||||
|
arch=@arch@
|
||||||
|
|
||||||
|
From baff562149499973123d2187620201be641c6538 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Tue, 31 Mar 2015 16:37:26 +0200
|
||||||
|
Subject: [PATCH 2/4] Add ruby_version_dir_name support for RDoc.
|
||||||
|
|
||||||
|
---
|
||||||
|
tool/rbinstall.rb | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||||
|
index 874c3ef1d9..a9e6365b27 100755
|
||||||
|
--- a/tool/rbinstall.rb
|
||||||
|
+++ b/tool/rbinstall.rb
|
||||||
|
@@ -1053,7 +1053,7 @@ def (bins = []).add(name)
|
||||||
|
|
||||||
|
install?(:doc, :rdoc) do
|
||||||
|
if $rdocdir
|
||||||
|
- ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version'], "system")
|
||||||
|
+ ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version_dir_name'] || CONFIG['ruby_version'], "system")
|
||||||
|
prepare "rdoc", ridatadir
|
||||||
|
install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode)
|
||||||
|
end
|
||||||
|
|
||||||
|
From 7cf872a9a34f38d71cd2ca04ac114b4ea85cc56c Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Tue, 31 Mar 2015 16:37:44 +0200
|
||||||
|
Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems.
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/rubygems/defaults.rb | 7 ++++---
|
||||||
|
test/rubygems/test_gem.rb | 5 +++--
|
||||||
|
2 files changed, 7 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
|
||||||
|
index 90f09fc191..f6b8a03b95 100644
|
||||||
|
--- a/lib/rubygems/defaults.rb
|
||||||
|
+++ b/lib/rubygems/defaults.rb
|
||||||
|
@@ -35,7 +35,7 @@ def self.default_spec_cache_dir
|
||||||
|
# specified in the environment
|
||||||
|
|
||||||
|
def self.default_dir
|
||||||
|
- @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"])
|
||||||
|
+ @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"])
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
@@ -104,7 +104,8 @@ def self.user_dir
|
||||||
|
gem_dir = File.join(Gem.user_home, ".gem")
|
||||||
|
gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir)
|
||||||
|
parts = [gem_dir, ruby_engine]
|
||||||
|
- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty?
|
||||||
|
+ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||||
|
+ parts << ruby_version_dir_name unless ruby_version_dir_name.empty?
|
||||||
|
File.join parts
|
||||||
|
end
|
||||||
|
|
||||||
|
@@ -265,7 +266,7 @@ def self.vendor_dir # :nodoc:
|
||||||
|
return nil unless RbConfig::CONFIG.key? "vendordir"
|
||||||
|
|
||||||
|
File.join RbConfig::CONFIG["vendordir"], "gems",
|
||||||
|
- RbConfig::CONFIG["ruby_version"]
|
||||||
|
+ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
|
||||||
|
index 74c8953904..1f3bd91d51 100644
|
||||||
|
--- a/test/rubygems/test_gem.rb
|
||||||
|
+++ b/test/rubygems/test_gem.rb
|
||||||
|
@@ -1339,7 +1339,8 @@ def test_self_use_paths
|
||||||
|
|
||||||
|
def test_self_user_dir
|
||||||
|
parts = [@userhome, ".gem", Gem.ruby_engine]
|
||||||
|
- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty?
|
||||||
|
+ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||||
|
+ parts << ruby_version_dir_name unless ruby_version_dir_name.empty?
|
||||||
|
|
||||||
|
FileUtils.mkdir_p File.join(parts)
|
||||||
|
|
||||||
|
@@ -1415,7 +1416,7 @@ def test_self_vendor_dir
|
||||||
|
vendordir(File.join(@tempdir, "vendor")) do
|
||||||
|
expected =
|
||||||
|
File.join RbConfig::CONFIG["vendordir"], "gems",
|
||||||
|
- RbConfig::CONFIG["ruby_version"]
|
||||||
|
+ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||||
|
|
||||||
|
assert_equal expected, Gem.vendor_dir
|
||||||
|
end
|
||||||
|
|
||||||
|
From 17cb98b7b78f8bfc511feffbe061747f676055b1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Wed, 1 Apr 2015 14:55:37 +0200
|
||||||
|
Subject: [PATCH 4/4] Let headers directories follow the configured version
|
||||||
|
name.
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 9d8662369c..2bc5153141 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -151,7 +151,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
|
||||||
|
RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
|
||||||
|
AC_SUBST(RUBY_BASE_NAME)
|
||||||
|
AC_SUBST(RUBYW_BASE_NAME)
|
||||||
|
-AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}')
|
||||||
|
+AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version_dir_name}')
|
||||||
|
|
||||||
|
dnl checks for alternative programs
|
||||||
|
AC_CANONICAL_BUILD
|
||||||
86
ruby-2.7.0-Initialize-ABRT-hook.patch
Normal file
86
ruby-2.7.0-Initialize-ABRT-hook.patch
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
From 03b44a86b574dc0b63fd57c5f9b52b56ad3ced37 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Mon, 6 Jan 2020 13:56:04 +0100
|
||||||
|
Subject: [PATCH] Initialize ABRT hook.
|
||||||
|
|
||||||
|
The ABRT hook used to be initialized by preludes via patches [[1], [2]].
|
||||||
|
Unfortunately, due to [[3]] and especially since [[4]], this would
|
||||||
|
require boostrapping [[5]].
|
||||||
|
|
||||||
|
To keep the things simple for now, load the ABRT hook via C.
|
||||||
|
|
||||||
|
[1]: https://bugs.ruby-lang.org/issues/8566
|
||||||
|
[2]: https://bugs.ruby-lang.org/issues/15306
|
||||||
|
[3]: https://bugs.ruby-lang.org/issues/16254
|
||||||
|
[4]: https://github.com/ruby/ruby/pull/2735
|
||||||
|
[5]: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/
|
||||||
|
---
|
||||||
|
abrt.c | 12 ++++++++++++
|
||||||
|
common.mk | 1 +
|
||||||
|
ruby.c | 4 ++++
|
||||||
|
spec/ruby/core/kernel/require_spec.rb | 2 ++
|
||||||
|
4 files changed, 19 insertions(+)
|
||||||
|
create mode 100644 abrt.c
|
||||||
|
|
||||||
|
diff --git a/abrt.c b/abrt.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..e99cb432e6
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/abrt.c
|
||||||
|
@@ -0,0 +1,12 @@
|
||||||
|
+#include "internal.h"
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+Init_abrt(void)
|
||||||
|
+{
|
||||||
|
+ rb_eval_string(
|
||||||
|
+ " begin\n"
|
||||||
|
+ " require 'abrt'\n"
|
||||||
|
+ " rescue LoadError\n"
|
||||||
|
+ " end\n"
|
||||||
|
+ );
|
||||||
|
+}
|
||||||
|
diff --git a/common.mk b/common.mk
|
||||||
|
index 08fee9119a..dae7d9dc00 100644
|
||||||
|
--- a/common.mk
|
||||||
|
+++ b/common.mk
|
||||||
|
@@ -116,6 +116,7 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \
|
||||||
|
prism_init.$(OBJEXT)
|
||||||
|
|
||||||
|
COMMONOBJS = \
|
||||||
|
+ abrt.$(OBJEXT) \
|
||||||
|
array.$(OBJEXT) \
|
||||||
|
ast.$(OBJEXT) \
|
||||||
|
bignum.$(OBJEXT) \
|
||||||
|
diff --git a/ruby.c b/ruby.c
|
||||||
|
index b00fc1502d..32b88f7496 100644
|
||||||
|
--- a/ruby.c
|
||||||
|
+++ b/ruby.c
|
||||||
|
@@ -1773,10 +1773,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt)
|
||||||
|
|
||||||
|
void Init_builtin_features(void);
|
||||||
|
|
||||||
|
+/* abrt.c */
|
||||||
|
+void Init_abrt(void);
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
ruby_init_prelude(void)
|
||||||
|
{
|
||||||
|
Init_builtin_features();
|
||||||
|
+ Init_abrt();
|
||||||
|
}
|
||||||
|
|
||||||
|
void rb_call_builtin_inits(void);
|
||||||
|
diff --git a/spec/ruby/core/kernel/require_spec.rb b/spec/ruby/core/kernel/require_spec.rb
|
||||||
|
index 60d17242fe..a8f93b0db4 100644
|
||||||
|
--- a/spec/ruby/core/kernel/require_spec.rb
|
||||||
|
+++ b/spec/ruby/core/kernel/require_spec.rb
|
||||||
|
@@ -26,6 +26,8 @@
|
||||||
|
out = ruby_exe("puts $LOADED_FEATURES", options: '--disable-gems --disable-did-you-mean')
|
||||||
|
features = out.lines.map { |line| File.basename(line.chomp, '.*') }
|
||||||
|
|
||||||
|
+ # Ignore ABRT
|
||||||
|
+ features -= %w[abrt]
|
||||||
|
# Ignore CRuby internals
|
||||||
|
features -= %w[encdb transdb windows_1252 windows_31j]
|
||||||
|
features.reject! { |feature| feature.end_with?('-fake') }
|
||||||
23
ruby-3.3.0-Disable-syntax-suggest-test-case.patch
Normal file
23
ruby-3.3.0-Disable-syntax-suggest-test-case.patch
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
From 9b7cb6a40d73bb86ee0de34360068e90e80f4e7e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Thu, 7 Sep 2023 13:13:02 +0200
|
||||||
|
Subject: [PATCH] Disable syntax-suggest test case.
|
||||||
|
|
||||||
|
This requires internet connection.
|
||||||
|
---
|
||||||
|
common.mk | 2 --
|
||||||
|
1 file changed, 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common.mk b/common.mk
|
||||||
|
index dae7d9dc00..111e859d1b 100644
|
||||||
|
--- a/common.mk
|
||||||
|
+++ b/common.mk
|
||||||
|
@@ -1619,8 +1619,6 @@ no-test-bundled-gems-spec:
|
||||||
|
|
||||||
|
test-syntax-suggest:
|
||||||
|
|
||||||
|
-check: $(DOT_WAIT) $(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest
|
||||||
|
-
|
||||||
|
test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck
|
||||||
|
no-test-bundler-precheck:
|
||||||
|
yes-test-bundler-precheck: main $(arch)-fake.rb
|
||||||
|
|
@ -0,0 +1,117 @@
|
||||||
|
From 1cfb11bc8d01e4fc1ff47807721e29b250f0f19f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jarek Prokop <jprokop@redhat.com>
|
||||||
|
Date: Mon, 22 Dec 2025 10:13:34 +0100
|
||||||
|
Subject: [PATCH] Support customizable rustc_flags for rustc builds.
|
||||||
|
|
||||||
|
Add `rustc_flags` option for configure that appends to RUSTC_FLAGS
|
||||||
|
flags used when compiling with rustc for customizable build flags.
|
||||||
|
It appends to existing defaults in RUSTC_FLAGS.
|
||||||
|
|
||||||
|
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
|
||||||
|
---
|
||||||
|
common.mk | 10 ++--------
|
||||||
|
configure.ac | 8 ++++++++
|
||||||
|
defs/jit.mk | 2 ++
|
||||||
|
template/Makefile.in | 1 +
|
||||||
|
4 files changed, 13 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common.mk b/common.mk
|
||||||
|
index 08fee9119a..9ac5ae919f 100644
|
||||||
|
--- a/common.mk
|
||||||
|
+++ b/common.mk
|
||||||
|
@@ -270,21 +270,15 @@ MAKE_LINK = $(MINIRUBY) -rfileutils -e "include FileUtils::Verbose" \
|
||||||
|
# For release builds
|
||||||
|
YJIT_RUSTC_ARGS = --crate-name=yjit \
|
||||||
|
$(JIT_RUST_FLAGS) \
|
||||||
|
+ $(RUSTC_FLAGS) \
|
||||||
|
--edition=2021 \
|
||||||
|
- -g \
|
||||||
|
- -C lto=thin \
|
||||||
|
- -C opt-level=3 \
|
||||||
|
- -C overflow-checks=on \
|
||||||
|
'--out-dir=$(CARGO_TARGET_DIR)/release/' \
|
||||||
|
'$(top_srcdir)/yjit/src/lib.rs'
|
||||||
|
|
||||||
|
ZJIT_RUSTC_ARGS = --crate-name=zjit \
|
||||||
|
$(JIT_RUST_FLAGS) \
|
||||||
|
+ $(RUSTC_FLAGS) \
|
||||||
|
--edition=2024 \
|
||||||
|
- -g \
|
||||||
|
- -C lto=thin \
|
||||||
|
- -C opt-level=3 \
|
||||||
|
- -C overflow-checks=on \
|
||||||
|
'--out-dir=$(CARGO_TARGET_DIR)/release/' \
|
||||||
|
'$(top_srcdir)/zjit/src/lib.rs'
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 2bbce78fd0..a3aa6dc383 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -69,6 +69,7 @@ dnl 93(bright yellow) is copied from .github/workflows/mingw.yml
|
||||||
|
AC_ARG_VAR([cflags], [additional CFLAGS (ignored when CFLAGS is given)])dnl
|
||||||
|
AC_ARG_VAR([cppflags], [additional CPPFLAGS (ignored when CPPFLAGS is given)])dnl
|
||||||
|
AC_ARG_VAR([cxxflags], [additional CXXFLAGS (ignored when CXXFLAGS is given)])dnl
|
||||||
|
+AC_ARG_VAR([rustc_flags], [additional RUSTC_FLAGS])dnl
|
||||||
|
|
||||||
|
[begin]_group "environment section" && {
|
||||||
|
HAVE_BASERUBY=yes
|
||||||
|
@@ -4054,6 +4055,11 @@ AS_CASE(["${ZJIT_SUPPORT}"],
|
||||||
|
AC_DEFINE(USE_ZJIT, 0)
|
||||||
|
])
|
||||||
|
|
||||||
|
+RUSTC_FLAGS='-g -C lto=thin -C opt-level=3 -C overflow-checks=on'
|
||||||
|
+AS_IF([test -n "${rustc_flags}"], [
|
||||||
|
+ RUSTC_FLAGS="${RUSTC_FLAGS} ${rustc_flags}"
|
||||||
|
+])
|
||||||
|
+
|
||||||
|
JIT_RUST_FLAGS='--crate-type=staticlib --cfg feature=\"stats_allocator\"'
|
||||||
|
RLIB_DIR=
|
||||||
|
AS_CASE(["$JIT_CARGO_SUPPORT:$YJIT_SUPPORT:$ZJIT_SUPPORT"],
|
||||||
|
@@ -4111,6 +4117,7 @@ AS_IF([test -n "$RUST_LIB"], [
|
||||||
|
dnl These variables end up in ::RbConfig::CONFIG
|
||||||
|
AC_SUBST(RUSTC)dnl Rust compiler command
|
||||||
|
AC_SUBST(JIT_RUST_FLAGS)dnl the common rustc flags for JIT crates such as zjit
|
||||||
|
+AC_SUBST(RUSTC_FLAGS)dnl user-configurable rustc compiler flags
|
||||||
|
AC_SUBST(CARGO)dnl Cargo command for Rust builds
|
||||||
|
AC_SUBST(CARGO_BUILD_ARGS)dnl for selecting Rust build profiles
|
||||||
|
AC_SUBST(YJIT_SUPPORT)dnl what flavor of YJIT the Ruby build includes
|
||||||
|
@@ -4855,6 +4862,7 @@ config_summary "strip command" "$STRIP"
|
||||||
|
config_summary "install doc" "$DOCTARGETS"
|
||||||
|
config_summary "YJIT support" "$YJIT_SUPPORT"
|
||||||
|
config_summary "ZJIT support" "$ZJIT_SUPPORT"
|
||||||
|
+config_summary "RUSTC_FLAGS" "$RUSTC_FLAGS"
|
||||||
|
config_summary "man page type" "$MANTYPE"
|
||||||
|
config_summary "search path" "$search_path"
|
||||||
|
config_summary "static-linked-ext" ${EXTSTATIC:+"yes"}
|
||||||
|
diff --git a/defs/jit.mk b/defs/jit.mk
|
||||||
|
index 42b56c4cd9..27b14e7a07 100644
|
||||||
|
--- a/defs/jit.mk
|
||||||
|
+++ b/defs/jit.mk
|
||||||
|
@@ -40,6 +40,7 @@ else ifneq ($(strip $(RLIB_DIR)),) # combo build
|
||||||
|
$(RUST_LIB): $(srcdir)/ruby.rs
|
||||||
|
$(ECHO) 'building $(@F)'
|
||||||
|
$(gnumake_recursive)$(Q) $(RUSTC) --edition=2024 \
|
||||||
|
+ $(RUSTC_FLAGS) \
|
||||||
|
'-L$(@D)' \
|
||||||
|
--extern=yjit \
|
||||||
|
--extern=zjit \
|
||||||
|
@@ -58,6 +59,7 @@ $(JIT_RLIB):
|
||||||
|
$(gnumake_recursive)$(Q) $(RUSTC) --crate-name=jit \
|
||||||
|
--edition=2024 \
|
||||||
|
$(JIT_RUST_FLAGS) \
|
||||||
|
+ $(RUSTC_FLAGS) \
|
||||||
|
'--out-dir=$(@D)' \
|
||||||
|
'$(top_srcdir)/jit/src/lib.rs'
|
||||||
|
endif # ifneq ($(JIT_CARGO_SUPPORT),no)
|
||||||
|
diff --git a/template/Makefile.in b/template/Makefile.in
|
||||||
|
index 443c394cb4..0b7b50e3aa 100644
|
||||||
|
--- a/template/Makefile.in
|
||||||
|
+++ b/template/Makefile.in
|
||||||
|
@@ -115,6 +115,7 @@ CARGO_TARGET_DIR=@abs_top_builddir@/target
|
||||||
|
CARGO_BUILD_ARGS=@CARGO_BUILD_ARGS@
|
||||||
|
ZJIT_TEST_FEATURES=@ZJIT_TEST_FEATURES@
|
||||||
|
JIT_RUST_FLAGS=@JIT_RUST_FLAGS@
|
||||||
|
+RUSTC_FLAGS=@RUSTC_FLAGS@
|
||||||
|
RLIB_DIR=@RLIB_DIR@
|
||||||
|
RUST_LIB=@RUST_LIB@
|
||||||
|
RUST_LIBOBJ = $(RUST_LIB:.a=.@OBJEXT@)
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
--- ruby-1.8.6-p287/configure.in.i386 2009-03-16 00:55:15.000000000 +0900
|
|
||||||
+++ ruby-1.8.6-p287/configure.in 2009-03-16 01:42:41.000000000 +0900
|
|
||||||
@@ -1662,6 +1662,8 @@
|
|
||||||
configure_args=$ac_configure_args
|
|
||||||
AC_SUBST(configure_args)dnl
|
|
||||||
|
|
||||||
+target_cpu=`echo $target_cpu | sed s/i.86/i386/`
|
|
||||||
+
|
|
||||||
if test "$fat_binary" != no ; then
|
|
||||||
arch="fat-${target_os}"
|
|
||||||
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
||||||
diff -pruN ruby-1.8.6.orig/ext/bigdecimal/bigdecimal.c ruby-1.8.6/ext/bigdecimal/bigdecimal.c
|
|
||||||
--- ruby-1.8.6.orig/ext/bigdecimal/bigdecimal.c 2007-02-27 20:51:55.000000000 +0900
|
|
||||||
+++ ruby-1.8.6/ext/bigdecimal/bigdecimal.c 2007-03-15 21:14:32.000000000 +0900
|
|
||||||
@@ -2167,12 +2167,14 @@ VpGetDoubleNegZero(void) /* Returns the
|
|
||||||
return nzero;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
VP_EXPORT int
|
|
||||||
VpIsNegDoubleZero(double v)
|
|
||||||
{
|
|
||||||
double z = VpGetDoubleNegZero();
|
|
||||||
return MemCmp(&v,&z,sizeof(v))==0;
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
VP_EXPORT int
|
|
||||||
VpException(unsigned short f, const char *str,int always)
|
|
||||||
diff -pruN ruby-1.8.6.orig/parse.y ruby-1.8.6/parse.y
|
|
||||||
--- ruby-1.8.6.orig/parse.y 2007-03-03 16:30:46.000000000 +0900
|
|
||||||
+++ ruby-1.8.6/parse.y 2007-03-15 21:15:58.000000000 +0900
|
|
||||||
@@ -4511,6 +4511,7 @@ rb_node_newnode(type, a0, a1, a2)
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
static enum node_type
|
|
||||||
nodetype(node) /* for debug */
|
|
||||||
NODE *node;
|
|
||||||
@@ -4524,6 +4525,7 @@ nodeline(node)
|
|
||||||
{
|
|
||||||
return nd_line(node);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
static NODE*
|
|
||||||
newline_node(node)
|
|
||||||
diff -pruN ruby-1.8.6.orig/regex.c ruby-1.8.6/regex.c
|
|
||||||
--- ruby-1.8.6.orig/regex.c 2007-02-27 20:51:55.000000000 +0900
|
|
||||||
+++ ruby-1.8.6/regex.c 2007-03-15 21:16:52.000000000 +0900
|
|
||||||
@@ -998,6 +998,7 @@ print_partial_compiled_pattern(start, en
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
static void
|
|
||||||
print_compiled_pattern(bufp)
|
|
||||||
struct re_pattern_buffer *bufp;
|
|
||||||
@@ -1006,6 +1007,7 @@ print_compiled_pattern(bufp)
|
|
||||||
|
|
||||||
print_partial_compiled_pattern(buffer, buffer + bufp->used);
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
static char*
|
|
||||||
calculate_must_string(start, end)
|
|
||||||
@@ -2586,6 +2588,7 @@ insert_jump_n(op, from, to, current_end,
|
|
||||||
|
|
||||||
If you call this function, you must zero out pending_exact. */
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
static void
|
|
||||||
insert_op(op, there, current_end)
|
|
||||||
int op;
|
|
||||||
@@ -2599,6 +2602,7 @@ insert_op(op, there, current_end)
|
|
||||||
|
|
||||||
there[0] = (char)op;
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Open up space at location THERE, and insert operation OP followed by
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
diff -ruN ruby-1.8.4.orig/configure.in ruby-1.8.4/configure.in
|
|
||||||
--- ruby-1.8.4.orig/configure.in 2006-04-20 12:53:38.000000000 +0900
|
|
||||||
+++ ruby-1.8.4/configure.in 2006-04-20 13:06:07.000000000 +0900
|
|
||||||
@@ -1472,12 +1472,16 @@
|
|
||||||
esac
|
|
||||||
RUBY_SITE_LIB_PATH3="${RUBY_SITE_LIB_PATH2}/${MAJOR}.${MINOR}"
|
|
||||||
RUBY_SITE_LIB_PATH2="${RUBY_SITE_LIB_PATH}/${MAJOR}.${MINOR}"
|
|
||||||
+RUBY_DEPRECATED_SITE_LIB_PATH="${SITE_DIR2}/${MAJOR}.${MINOR}"
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_LIB, "${RUBY_LIB_PATH}")
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, "${RUBY_SITE_LIB_PATH}")
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_SITE_LIB2, "${RUBY_SITE_LIB_PATH2}")
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_DEPRECATED_OLD_SITE_LIB, "${libdir}/site_ruby")
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_DEPRECATED_OLD_SITE_LIB2, "${libdir}/site_ruby/${MAJOR}.${MINOR}")
|
|
||||||
+AC_DEFINE_UNQUOTED(RUBY_DEPRECATED_LIB, "${RUBY_LIB_PATH2}")
|
|
||||||
+AC_DEFINE_UNQUOTED(RUBY_DEPRECATED_SITE_LIB, "${SITE_DIR2}")
|
|
||||||
+AC_DEFINE_UNQUOTED(RUBY_DEPRECATED_SITE_LIB2, "${RUBY_DEPRECATED_SITE_LIB_PATH}")
|
|
||||||
|
|
||||||
AC_SUBST(arch)dnl
|
|
||||||
AC_SUBST(sitearch)dnl
|
|
||||||
diff -ruN ruby-1.8.4.orig/ruby.c ruby-1.8.4/ruby.c
|
|
||||||
--- ruby-1.8.4.orig/ruby.c 2005-12-12 09:36:52.000000000 +0900
|
|
||||||
+++ ruby-1.8.4/ruby.c 2006-04-20 12:59:50.000000000 +0900
|
|
||||||
@@ -292,11 +292,17 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_SITE_LIB2));
|
|
||||||
+#ifdef RUBY_DEPRECATED_SITE_LIB
|
|
||||||
+ incpush(RUBY_RELATIVE(RUBY_DEPRECATED_SITE_LIB2));
|
|
||||||
+#endif
|
|
||||||
#ifdef RUBY_SITE_THIN_ARCHLIB
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_SITE_THIN_ARCHLIB));
|
|
||||||
#endif
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_SITE_ARCHLIB));
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_SITE_LIB));
|
|
||||||
+#ifdef RUBY_DEPRECATED_SITE_LIB
|
|
||||||
+ incpush(RUBY_RELATIVE(RUBY_DEPRECATED_SITE_LIB));
|
|
||||||
+#endif
|
|
||||||
#ifdef RUBY_DEPRECATED_OLD_SITE_LIB2
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_DEPRECATED_OLD_SITE_LIB2));
|
|
||||||
#endif
|
|
||||||
@@ -308,6 +314,9 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_LIB));
|
|
||||||
+#ifdef RUBY_DEPRECATED_LIB
|
|
||||||
+ incpush(RUBY_RELATIVE(RUBY_DEPRECATED_LIB));
|
|
||||||
+#endif
|
|
||||||
#ifdef RUBY_THIN_ARCHLIB
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_THIN_ARCHLIB));
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
diff -ruN ruby-1.8.4.orig/configure.in ruby-1.8.4/configure.in
|
|
||||||
--- ruby-1.8.4.orig/configure.in 2006-06-07 13:58:03.000000000 +0900
|
|
||||||
+++ ruby-1.8.4/configure.in 2006-06-07 15:54:36.000000000 +0900
|
|
||||||
@@ -1476,6 +1476,8 @@
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_LIB, "${RUBY_LIB_PATH}")
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, "${RUBY_SITE_LIB_PATH}")
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_SITE_LIB2, "${RUBY_SITE_LIB_PATH2}")
|
|
||||||
+AC_DEFINE_UNQUOTED(RUBY_DEPRECATED_OLD_SITE_LIB, "${libdir}/site_ruby")
|
|
||||||
+AC_DEFINE_UNQUOTED(RUBY_DEPRECATED_OLD_SITE_LIB2, "${libdir}/site_ruby/${MAJOR}.${MINOR}")
|
|
||||||
|
|
||||||
AC_SUBST(arch)dnl
|
|
||||||
AC_SUBST(sitearch)dnl
|
|
||||||
@@ -1506,6 +1508,7 @@
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "${RUBY_LIB_PATH2}/${arch}")
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, "${RUBY_SITE_LIB_PATH3}/${sitearch}")
|
|
||||||
+AC_DEFINE_UNQUOTED(RUBY_DEPRECATED_OLD_SITE_ARCHLIB, "${libdir}/site_ruby/${MAJOR}.${MINOR}/${sitearch}")
|
|
||||||
|
|
||||||
AC_ARG_WITH(search-path,
|
|
||||||
[ --with-search-path=DIR specify the additional search path],
|
|
||||||
diff -ruN ruby-1.8.4.orig/ruby.c ruby-1.8.4/ruby.c
|
|
||||||
--- ruby-1.8.4.orig/ruby.c 2005-12-12 09:36:52.000000000 +0900
|
|
||||||
+++ ruby-1.8.4/ruby.c 2006-06-07 15:56:14.000000000 +0900
|
|
||||||
@@ -297,6 +297,15 @@
|
|
||||||
#endif
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_SITE_ARCHLIB));
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_SITE_LIB));
|
|
||||||
+#ifdef RUBY_DEPRECATED_OLD_SITE_LIB2
|
|
||||||
+ incpush(RUBY_RELATIVE(RUBY_DEPRECATED_OLD_SITE_LIB2));
|
|
||||||
+#endif
|
|
||||||
+#ifdef RUBY_DEPRECATED_OLD_SITE_ARCHLIB
|
|
||||||
+ incpush(RUBY_RELATIVE(RUBY_DEPRECATED_OLD_SITE_ARCHLIB));
|
|
||||||
+#endif
|
|
||||||
+#ifdef RUBY_DEPRECATED_OLD_SITE_LIB
|
|
||||||
+ incpush(RUBY_RELATIVE(RUBY_DEPRECATED_OLD_SITE_LIB));
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
incpush(RUBY_RELATIVE(RUBY_LIB));
|
|
||||||
#ifdef RUBY_THIN_ARCHLIB
|
|
||||||
39
ruby-exercise.stp
Normal file
39
ruby-exercise.stp
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
/* Example tapset file.
|
||||||
|
*
|
||||||
|
* You can execute the tapset using following command (please adjust the path
|
||||||
|
* prior running the command, if needed):
|
||||||
|
*
|
||||||
|
* stap /usr/share/doc/ruby-2.0.0.0/ruby-exercise.stp -c "ruby -e \"puts 'test'\""
|
||||||
|
*/
|
||||||
|
|
||||||
|
probe ruby.cmethod.entry {
|
||||||
|
printf("%d -> %s::%s %s:%d\n", tid(), classname, methodname, file, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
probe ruby.cmethod.return {
|
||||||
|
printf("%d <- %s::%s %s:%d\n", tid(), classname, methodname, file, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
probe ruby.method.entry {
|
||||||
|
printf("%d -> %s::%s %s:%d\n", tid(), classname, methodname, file, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
probe ruby.method.return {
|
||||||
|
printf("%d <- %s::%s %s:%d\n", tid(), classname, methodname, file, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
probe ruby.gc.mark.begin { printf("%d gc.mark.begin\n", tid()); }
|
||||||
|
|
||||||
|
probe ruby.gc.mark.end { printf("%d gc.mark.end\n", tid()); }
|
||||||
|
|
||||||
|
probe ruby.gc.sweep.begin { printf("%d gc.sweep.begin\n", tid()); }
|
||||||
|
|
||||||
|
probe ruby.gc.sweep.end { printf("%d gc.sweep.end\n", tid()); }
|
||||||
|
|
||||||
|
probe ruby.object.create{
|
||||||
|
printf("%d obj.create %s %s:%d\n", tid(), classname, file, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
probe ruby.raise {
|
||||||
|
printf("%d raise %s %s:%d\n", tid(), classname, file, line);
|
||||||
|
}
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
;; ruby-mode-init.el
|
|
||||||
;; Created: 2002-02-01
|
|
||||||
;;
|
|
||||||
(if (featurep 'xemacs)
|
|
||||||
(setq load-path (cons "/usr/lib/xemacs/xemacs-packages/lisp/ruby-mode" load-path))
|
|
||||||
(setq load-path (cons "/usr/share/emacs/site-lisp/ruby-mode" load-path)))
|
|
||||||
|
|
||||||
|
|
||||||
(autoload 'ruby-mode "ruby-mode" "Mode for editing ruby source files" t)
|
|
||||||
(setq auto-mode-alist
|
|
||||||
(cons '("\\.rb$" . ruby-mode) auto-mode-alist))
|
|
||||||
(setq interpreter-mode-alist
|
|
||||||
(cons '("ruby" . ruby-mode) interpreter-mode-alist))
|
|
||||||
|
|
||||||
(autoload 'run-ruby "inf-ruby" "Run an inferior Ruby process")
|
|
||||||
(autoload 'inf-ruby-keys "inf-ruby" "Set local key defs for inf-ruby in ruby-mode")
|
|
||||||
|
|
||||||
(add-hook 'ruby-mode-hook
|
|
||||||
'(lambda ()
|
|
||||||
(inf-ruby-keys)))
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
diff -ruN ruby-1.8.3.orig/mkconfig.rb ruby-1.8.3/mkconfig.rb
|
|
||||||
--- ruby-1.8.3.orig/mkconfig.rb 2005-09-21 15:10:57.000000000 +0900
|
|
||||||
+++ ruby-1.8.3/mkconfig.rb 2005-09-21 15:17:32.000000000 +0900
|
|
||||||
@@ -74,7 +74,7 @@
|
|
||||||
|
|
||||||
drive = File::PATH_SEPARATOR == ';'
|
|
||||||
|
|
||||||
-prefix = '/lib/ruby/' + RUBY_VERSION.sub(/\.\d+$/, '') + '/' + RUBY_PLATFORM
|
|
||||||
+prefix = '/lib64/ruby/' + RUBY_VERSION.sub(/\.\d+$/, '') + '/' + RUBY_PLATFORM
|
|
||||||
print " TOPDIR = File.dirname(__FILE__).chomp!(#{prefix.dump})\n"
|
|
||||||
print " DESTDIR = ", (drive ? "TOPDIR && TOPDIR[/\\A[a-z]:/i] || " : ""), "'' unless defined? DESTDIR\n"
|
|
||||||
print " CONFIG = {}\n"
|
|
||||||
|
|
@ -1,176 +0,0 @@
|
||||||
diff -up ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl.c.ossl10 ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl.c
|
|
||||||
--- ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl.c.ossl10 2007-02-13 00:01:19.000000000 +0100
|
|
||||||
+++ ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl.c 2009-08-26 12:29:41.000000000 +0200
|
|
||||||
@@ -92,7 +92,7 @@ ossl_x509_ary2sk(VALUE ary)
|
|
||||||
|
|
||||||
#define OSSL_IMPL_SK2ARY(name, type) \
|
|
||||||
VALUE \
|
|
||||||
-ossl_##name##_sk2ary(STACK *sk) \
|
|
||||||
+ossl_##name##_sk2ary(STACK_OF(type) *sk) \
|
|
||||||
{ \
|
|
||||||
type *t; \
|
|
||||||
int i, num; \
|
|
||||||
@@ -102,7 +102,7 @@ ossl_##name##_sk2ary(STACK *sk) \
|
|
||||||
OSSL_Debug("empty sk!"); \
|
|
||||||
return Qnil; \
|
|
||||||
} \
|
|
||||||
- num = sk_num(sk); \
|
|
||||||
+ num = sk_##type##_num(sk); \
|
|
||||||
if (num < 0) { \
|
|
||||||
OSSL_Debug("items in sk < -1???"); \
|
|
||||||
return rb_ary_new(); \
|
|
||||||
@@ -110,7 +110,7 @@ ossl_##name##_sk2ary(STACK *sk) \
|
|
||||||
ary = rb_ary_new2(num); \
|
|
||||||
\
|
|
||||||
for (i=0; i<num; i++) { \
|
|
||||||
- t = (type *)sk_value(sk, i); \
|
|
||||||
+ t = sk_##type##_value(sk, i); \
|
|
||||||
rb_ary_push(ary, ossl_##name##_new(t)); \
|
|
||||||
} \
|
|
||||||
return ary; \
|
|
||||||
diff -up ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl_pkcs7.c.ossl10 ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl_pkcs7.c
|
|
||||||
--- ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl_pkcs7.c.ossl10 2007-02-13 00:01:19.000000000 +0100
|
|
||||||
+++ ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl_pkcs7.c 2009-08-26 12:53:05.000000000 +0200
|
|
||||||
@@ -543,12 +543,11 @@ ossl_pkcs7_add_certificate(VALUE self, V
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static STACK *
|
|
||||||
-pkcs7_get_certs_or_crls(VALUE self, int want_certs)
|
|
||||||
+static STACK_OF(X509) *
|
|
||||||
+pkcs7_get_certs(VALUE self)
|
|
||||||
{
|
|
||||||
PKCS7 *pkcs7;
|
|
||||||
STACK_OF(X509) *certs;
|
|
||||||
- STACK_OF(X509_CRL) *crls;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
GetPKCS7(self, pkcs7);
|
|
||||||
@@ -556,17 +555,38 @@ pkcs7_get_certs_or_crls(VALUE self, int
|
|
||||||
switch(i){
|
|
||||||
case NID_pkcs7_signed:
|
|
||||||
certs = pkcs7->d.sign->cert;
|
|
||||||
- crls = pkcs7->d.sign->crl;
|
|
||||||
break;
|
|
||||||
case NID_pkcs7_signedAndEnveloped:
|
|
||||||
certs = pkcs7->d.signed_and_enveloped->cert;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ certs = NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return certs;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static STACK_OF(X509_CRL) *
|
|
||||||
+pkcs7_get_crls(VALUE self)
|
|
||||||
+{
|
|
||||||
+ PKCS7 *pkcs7;
|
|
||||||
+ STACK_OF(X509_CRL) *crls;
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ GetPKCS7(self, pkcs7);
|
|
||||||
+ i = OBJ_obj2nid(pkcs7->type);
|
|
||||||
+ switch(i){
|
|
||||||
+ case NID_pkcs7_signed:
|
|
||||||
+ crls = pkcs7->d.sign->crl;
|
|
||||||
+ break;
|
|
||||||
+ case NID_pkcs7_signedAndEnveloped:
|
|
||||||
crls = pkcs7->d.signed_and_enveloped->crl;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- certs = crls = NULL;
|
|
||||||
+ crls = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return want_certs ? certs : crls;
|
|
||||||
+ return crls;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
@@ -581,7 +601,7 @@ ossl_pkcs7_set_certificates(VALUE self,
|
|
||||||
STACK_OF(X509) *certs;
|
|
||||||
X509 *cert;
|
|
||||||
|
|
||||||
- certs = pkcs7_get_certs_or_crls(self, 1);
|
|
||||||
+ certs = pkcs7_get_certs(self);
|
|
||||||
while((cert = sk_X509_pop(certs))) X509_free(cert);
|
|
||||||
rb_iterate(rb_each, ary, ossl_pkcs7_set_certs_i, self);
|
|
||||||
|
|
||||||
@@ -591,7 +611,7 @@ ossl_pkcs7_set_certificates(VALUE self,
|
|
||||||
static VALUE
|
|
||||||
ossl_pkcs7_get_certificates(VALUE self)
|
|
||||||
{
|
|
||||||
- return ossl_x509_sk2ary(pkcs7_get_certs_or_crls(self, 1));
|
|
||||||
+ return ossl_x509_sk2ary(pkcs7_get_certs(self));
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
@@ -621,7 +641,7 @@ ossl_pkcs7_set_crls(VALUE self, VALUE ar
|
|
||||||
STACK_OF(X509_CRL) *crls;
|
|
||||||
X509_CRL *crl;
|
|
||||||
|
|
||||||
- crls = pkcs7_get_certs_or_crls(self, 0);
|
|
||||||
+ crls = pkcs7_get_crls(self);
|
|
||||||
while((crl = sk_X509_CRL_pop(crls))) X509_CRL_free(crl);
|
|
||||||
rb_iterate(rb_each, ary, ossl_pkcs7_set_crls_i, self);
|
|
||||||
|
|
||||||
@@ -631,7 +651,7 @@ ossl_pkcs7_set_crls(VALUE self, VALUE ar
|
|
||||||
static VALUE
|
|
||||||
ossl_pkcs7_get_crls(VALUE self)
|
|
||||||
{
|
|
||||||
- return ossl_x509crl_sk2ary(pkcs7_get_certs_or_crls(self, 0));
|
|
||||||
+ return ossl_x509crl_sk2ary(pkcs7_get_crls(self));
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
diff -up ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl_ssl.c.ossl10 ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl_ssl.c
|
|
||||||
--- ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl_ssl.c.ossl10 2007-03-12 05:12:32.000000000 +0100
|
|
||||||
+++ ruby-1.8.6.369/ruby-1.8.6-p369/ext/openssl/ossl_ssl.c 2009-08-26 12:08:48.000000000 +0200
|
|
||||||
@@ -89,12 +89,18 @@ static char *ossl_sslctx_attrs[] = {
|
|
||||||
static char *ossl_ssl_attr_readers[] = { "io", "context", };
|
|
||||||
static char *ossl_ssl_attrs[] = { "sync_close", };
|
|
||||||
|
|
||||||
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
|
|
||||||
+#define OSSL_MORE_CONST const
|
|
||||||
+#define STACK _STACK
|
|
||||||
+#else
|
|
||||||
+#define OSSL_MORE_CONST
|
|
||||||
+#endif
|
|
||||||
/*
|
|
||||||
* SSLContext class
|
|
||||||
*/
|
|
||||||
struct {
|
|
||||||
const char *name;
|
|
||||||
- SSL_METHOD *(*func)(void);
|
|
||||||
+ OSSL_MORE_CONST SSL_METHOD *(*func)(void);
|
|
||||||
} ossl_ssl_method_tab[] = {
|
|
||||||
#define OSSL_SSL_METHOD_ENTRY(name) { #name, name##_method }
|
|
||||||
OSSL_SSL_METHOD_ENTRY(TLSv1),
|
|
||||||
@@ -144,7 +150,7 @@ static VALUE
|
|
||||||
ossl_sslctx_initialize(int argc, VALUE *argv, VALUE self)
|
|
||||||
{
|
|
||||||
VALUE ssl_method;
|
|
||||||
- SSL_METHOD *method = NULL;
|
|
||||||
+ OSSL_MORE_CONST SSL_METHOD *method = NULL;
|
|
||||||
SSL_CTX *ctx;
|
|
||||||
int i;
|
|
||||||
char *s;
|
|
||||||
@@ -407,7 +413,7 @@ ossl_sslctx_setup(VALUE self)
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
-ossl_ssl_cipher_to_ary(SSL_CIPHER *cipher)
|
|
||||||
+ossl_ssl_cipher_to_ary(OSSL_MORE_CONST SSL_CIPHER *cipher)
|
|
||||||
{
|
|
||||||
VALUE ary;
|
|
||||||
int bits, alg_bits;
|
|
||||||
@@ -805,7 +811,7 @@ static VALUE
|
|
||||||
ossl_ssl_get_cipher(VALUE self)
|
|
||||||
{
|
|
||||||
SSL *ssl;
|
|
||||||
- SSL_CIPHER *cipher;
|
|
||||||
+ OSSL_MORE_CONST SSL_CIPHER *cipher;
|
|
||||||
|
|
||||||
Data_Get_Struct(self, SSL, ssl);
|
|
||||||
if (!ssl) {
|
|
||||||
59
ruby.rpmlintrc
Normal file
59
ruby.rpmlintrc
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
# Keep matching patterns enough not to hide unintended errors and warnings.
|
||||||
|
|
||||||
|
# There is no way to implement this with `%{SOURCE0}` without `%{_sourcedir}`.
|
||||||
|
# The order in the .spec file could be possibly different.
|
||||||
|
addFilter(r'ruby\.(spec|src):20: E: use-of-RPM_SOURCE_DIR$')
|
||||||
|
|
||||||
|
# The used version is not obvious.
|
||||||
|
addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-build_assert\)$')
|
||||||
|
addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-check_type\)$')
|
||||||
|
addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-container_of\)$')
|
||||||
|
addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-list\)$')
|
||||||
|
|
||||||
|
# The template files do not have to have executable bits.
|
||||||
|
addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/gems/bundler-[\d\.]+/lib/bundler/templates/[\w/\.]+ 644 /usr/bin/env ')
|
||||||
|
|
||||||
|
# Samples don't really need executable bits.
|
||||||
|
addFilter(r'^rubygem-bigdecimal\.x86_64: E: non-executable-script /usr/share/gems/gems/bigdecimal-[\d\.]+/sample/\w+.rb 644 /usr/local/bin/ruby$')
|
||||||
|
|
||||||
|
# The bundled gem files permissions are overridden as 644 by `make install`.
|
||||||
|
# https://bugs.ruby-lang.org/issues/17840
|
||||||
|
# https://github.com/rubygems/rubygems/issues/5255
|
||||||
|
addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(abbrev|getoptlong|nkf|observer|resolv|resolv-replace|rinda|syslog)-[\d\.]+/bin/\w+ 644 ')
|
||||||
|
|
||||||
|
# Ruby provides API to set the cipher list.
|
||||||
|
addFilter(r'^ruby-libs\.\w+: W: crypto-policy-non-compliance-openssl /usr/lib(64)?/ruby/openssl.so SSL_CTX_set_cipher_list$')
|
||||||
|
|
||||||
|
# `gethostbyname` is part of deprecated Ruby API. There is also request to drop the API altogether:
|
||||||
|
# https://bugs.ruby-lang.org/issues/13097
|
||||||
|
# https://bugs.ruby-lang.org/issues/17944
|
||||||
|
addFilter(r'^ruby-libs\.\w+: W: binary-or-shlib-calls-gethostbyname /usr/lib(64)?/ruby/socket.so$')
|
||||||
|
|
||||||
|
# Rake ships some examples.
|
||||||
|
addFilter(r'^rubygem-rake.noarch: W: devel-file-in-non-devel-package /usr/share/gems/gems/rake-[\d\.]+/doc/example/\w+.c$')
|
||||||
|
|
||||||
|
# Some executables don't have their manual pages. Is it worth of use help2man?
|
||||||
|
addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|racc|rbs|rdbg|rdoc|ruby-mri|syntax_suggest|typeprof)$')
|
||||||
|
|
||||||
|
# Default gems does not come with any documentation.
|
||||||
|
addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentation$')
|
||||||
|
|
||||||
|
# rubygems-devel ships only RPM macros and generators. Their placement is given
|
||||||
|
# by RPM and can't be modified.
|
||||||
|
addFilter(r'rubygems-devel.noarch: W: only-non-binary-in-usr-lib$')
|
||||||
|
|
||||||
|
# Ignore some spelling false positives.
|
||||||
|
# Ignore spelling of technical terms
|
||||||
|
addFilter(r'^ruby-default-gems.noarch: E: spelling-error \(\'gemspec\'')
|
||||||
|
addFilter(r'^ruby-libs.x86_64: E: spelling-error \(\'libruby\'')
|
||||||
|
addFilter(r'^rubygem-test-unit.noarch: E: spelling-error \(\'xUnit\'')
|
||||||
|
addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'libyaml\'')
|
||||||
|
addFilter(r'^rubygem-io-console.x86_64: E: spelling-error \(\'readline\'')
|
||||||
|
# `pyaml` is part of URL
|
||||||
|
addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'pyyaml\'')
|
||||||
|
# `de-` is actually prefix
|
||||||
|
addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'de\'')
|
||||||
|
|
||||||
|
# It does not seemt to be worth of changing rubygems to archful package due to
|
||||||
|
# single directory, unless it causes some real troubles.
|
||||||
|
addFilter(r'^rubygems.noarch: E: noarch-with-lib64$')
|
||||||
|
|
@ -1,351 +0,0 @@
|
||||||
Index: ruby_1_8_7/marshal.c
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8_7/marshal.c (revision 26075)
|
|
||||||
+++ ruby_1_8_7/marshal.c (revision 26076)
|
|
||||||
@@ -85,12 +85,10 @@
|
|
||||||
static ID s_getc, s_read, s_write, s_binmode;
|
|
||||||
|
|
||||||
struct dump_arg {
|
|
||||||
- VALUE obj;
|
|
||||||
VALUE str, dest;
|
|
||||||
st_table *symbols;
|
|
||||||
st_table *data;
|
|
||||||
int taint;
|
|
||||||
- VALUE wrapper;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct dump_call_arg {
|
|
||||||
@@ -104,22 +102,32 @@
|
|
||||||
struct dump_arg *arg;
|
|
||||||
ID sym;
|
|
||||||
{
|
|
||||||
- if (!DATA_PTR(arg->wrapper)) {
|
|
||||||
+ if (!arg->symbols) {
|
|
||||||
rb_raise(rb_eRuntimeError, "Marshal.dump reentered at %s",
|
|
||||||
rb_id2name(sym));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void clear_dump_arg _((struct dump_arg *arg));
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
mark_dump_arg(ptr)
|
|
||||||
void *ptr;
|
|
||||||
{
|
|
||||||
struct dump_arg *p = ptr;
|
|
||||||
- if (!ptr)
|
|
||||||
+ if (!p->symbols)
|
|
||||||
return;
|
|
||||||
rb_mark_set(p->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+free_dump_arg(ptr)
|
|
||||||
+ void *ptr;
|
|
||||||
+{
|
|
||||||
+ clear_dump_arg(ptr);
|
|
||||||
+ xfree(ptr);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static VALUE
|
|
||||||
class2path(klass)
|
|
||||||
VALUE klass;
|
|
||||||
@@ -699,32 +707,17 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-static VALUE
|
|
||||||
-dump(arg)
|
|
||||||
- struct dump_call_arg *arg;
|
|
||||||
-{
|
|
||||||
- w_object(arg->obj, arg->arg, arg->limit);
|
|
||||||
- if (arg->arg->dest) {
|
|
||||||
- rb_io_write(arg->arg->dest, arg->arg->str);
|
|
||||||
- rb_str_resize(arg->arg->str, 0);
|
|
||||||
- }
|
|
||||||
- return 0;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static VALUE
|
|
||||||
-dump_ensure(arg)
|
|
||||||
+static void
|
|
||||||
+clear_dump_arg(arg)
|
|
||||||
struct dump_arg *arg;
|
|
||||||
{
|
|
||||||
- if (!DATA_PTR(arg->wrapper)) return 0;
|
|
||||||
+ if (!arg->symbols) return;
|
|
||||||
st_free_table(arg->symbols);
|
|
||||||
+ arg->symbols = 0;
|
|
||||||
st_free_table(arg->data);
|
|
||||||
- DATA_PTR(arg->wrapper) = 0;
|
|
||||||
- arg->wrapper = 0;
|
|
||||||
if (arg->taint) {
|
|
||||||
OBJ_TAINT(arg->str);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -760,8 +753,8 @@
|
|
||||||
{
|
|
||||||
VALUE obj, port, a1, a2;
|
|
||||||
int limit = -1;
|
|
||||||
- struct dump_arg arg;
|
|
||||||
- struct dump_call_arg c_arg;
|
|
||||||
+ struct dump_arg *arg;
|
|
||||||
+ VALUE wrapper;
|
|
||||||
|
|
||||||
port = Qnil;
|
|
||||||
rb_scan_args(argc, argv, "12", &obj, &a1, &a2);
|
|
||||||
@@ -775,37 +768,40 @@
|
|
||||||
else if (NIL_P(a1)) goto type_error;
|
|
||||||
else port = a1;
|
|
||||||
}
|
|
||||||
- arg.dest = 0;
|
|
||||||
- arg.symbols = st_init_numtable();
|
|
||||||
- arg.data = st_init_numtable();
|
|
||||||
- arg.taint = Qfalse;
|
|
||||||
- arg.str = rb_str_buf_new(0);
|
|
||||||
- RBASIC(arg.str)->klass = 0;
|
|
||||||
- arg.wrapper = Data_Wrap_Struct(rb_cData, mark_dump_arg, 0, &arg);
|
|
||||||
+ wrapper = Data_Make_Struct(rb_cData, struct dump_arg, mark_dump_arg, free_dump_arg, arg);
|
|
||||||
+ arg->dest = 0;
|
|
||||||
+ arg->symbols = st_init_numtable();
|
|
||||||
+ arg->data = st_init_numtable();
|
|
||||||
+ arg->taint = Qfalse;
|
|
||||||
+ arg->str = rb_str_buf_new(0);
|
|
||||||
+ RBASIC(arg->str)->klass = 0;
|
|
||||||
if (!NIL_P(port)) {
|
|
||||||
if (!rb_respond_to(port, s_write)) {
|
|
||||||
type_error:
|
|
||||||
rb_raise(rb_eTypeError, "instance of IO needed");
|
|
||||||
}
|
|
||||||
- arg.dest = port;
|
|
||||||
+ arg->dest = port;
|
|
||||||
if (rb_respond_to(port, s_binmode)) {
|
|
||||||
rb_funcall2(port, s_binmode, 0, 0);
|
|
||||||
- check_dump_arg(&arg, s_binmode);
|
|
||||||
+ check_dump_arg(arg, s_binmode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
- port = arg.str;
|
|
||||||
+ port = arg->str;
|
|
||||||
}
|
|
||||||
|
|
||||||
- c_arg.obj = obj;
|
|
||||||
- c_arg.arg = &arg;
|
|
||||||
- c_arg.limit = limit;
|
|
||||||
+ w_byte(MARSHAL_MAJOR, arg);
|
|
||||||
+ w_byte(MARSHAL_MINOR, arg);
|
|
||||||
|
|
||||||
- w_byte(MARSHAL_MAJOR, &arg);
|
|
||||||
- w_byte(MARSHAL_MINOR, &arg);
|
|
||||||
+ w_object(obj, arg, limit);
|
|
||||||
+ if (arg->dest) {
|
|
||||||
+ rb_io_write(arg->dest, arg->str);
|
|
||||||
+ rb_str_resize(arg->str, 0);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- rb_ensure(dump, (VALUE)&c_arg, dump_ensure, (VALUE)&arg);
|
|
||||||
- RBASIC(arg.str)->klass = rb_cString;
|
|
||||||
+ RBASIC(arg->str)->klass = rb_cString;
|
|
||||||
+ clear_dump_arg(arg);
|
|
||||||
+ RB_GC_GUARD(wrapper);
|
|
||||||
|
|
||||||
return port;
|
|
||||||
}
|
|
||||||
@@ -817,7 +813,6 @@
|
|
||||||
st_table *data;
|
|
||||||
VALUE proc;
|
|
||||||
int taint;
|
|
||||||
- VALUE wrapper;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -825,22 +820,31 @@
|
|
||||||
struct load_arg *arg;
|
|
||||||
ID sym;
|
|
||||||
{
|
|
||||||
- if (!DATA_PTR(arg->wrapper)) {
|
|
||||||
+ if (!arg->symbols) {
|
|
||||||
rb_raise(rb_eRuntimeError, "Marshal.load reentered at %s",
|
|
||||||
rb_id2name(sym));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void clear_load_arg _((struct load_arg *arg));
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
mark_load_arg(ptr)
|
|
||||||
void *ptr;
|
|
||||||
{
|
|
||||||
struct load_arg *p = ptr;
|
|
||||||
- if (!ptr)
|
|
||||||
+ if (!p->symbols)
|
|
||||||
return;
|
|
||||||
rb_mark_tbl(p->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+free_load_arg(void *ptr)
|
|
||||||
+{
|
|
||||||
+ clear_load_arg(ptr);
|
|
||||||
+ xfree(ptr);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static VALUE r_object _((struct load_arg *arg));
|
|
||||||
|
|
||||||
static int
|
|
||||||
@@ -1415,23 +1419,14 @@
|
|
||||||
return r_object0(arg, arg->proc, 0, Qnil);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static VALUE
|
|
||||||
-load(arg)
|
|
||||||
+static void
|
|
||||||
+clear_load_arg(arg)
|
|
||||||
struct load_arg *arg;
|
|
||||||
{
|
|
||||||
- return r_object(arg);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static VALUE
|
|
||||||
-load_ensure(arg)
|
|
||||||
- struct load_arg *arg;
|
|
||||||
-{
|
|
||||||
- if (!DATA_PTR(arg->wrapper)) return 0;
|
|
||||||
+ if (!arg->symbols) return;
|
|
||||||
st_free_table(arg->symbols);
|
|
||||||
+ arg->symbols = 0;
|
|
||||||
st_free_table(arg->data);
|
|
||||||
- DATA_PTR(arg->wrapper) = 0;
|
|
||||||
- arg->wrapper = 0;
|
|
||||||
- return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -1451,35 +1446,37 @@
|
|
||||||
VALUE *argv;
|
|
||||||
{
|
|
||||||
VALUE port, proc;
|
|
||||||
- int major, minor;
|
|
||||||
- VALUE v;
|
|
||||||
- struct load_arg arg;
|
|
||||||
+ int major, minor, taint = Qfalse;
|
|
||||||
+ VALUE v, wrapper;
|
|
||||||
+ struct load_arg *arg;
|
|
||||||
|
|
||||||
rb_scan_args(argc, argv, "11", &port, &proc);
|
|
||||||
v = rb_check_string_type(port);
|
|
||||||
if (!NIL_P(v)) {
|
|
||||||
- arg.taint = OBJ_TAINTED(port); /* original taintedness */
|
|
||||||
+ taint = OBJ_TAINTED(port); /* original taintedness */
|
|
||||||
port = v;
|
|
||||||
}
|
|
||||||
else if (rb_respond_to(port, s_getc) && rb_respond_to(port, s_read)) {
|
|
||||||
if (rb_respond_to(port, s_binmode)) {
|
|
||||||
rb_funcall2(port, s_binmode, 0, 0);
|
|
||||||
}
|
|
||||||
- arg.taint = Qtrue;
|
|
||||||
+ taint = Qtrue;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rb_raise(rb_eTypeError, "instance of IO needed");
|
|
||||||
}
|
|
||||||
- arg.src = port;
|
|
||||||
- arg.offset = 0;
|
|
||||||
- arg.symbols = st_init_numtable();
|
|
||||||
- arg.data = st_init_numtable();
|
|
||||||
- arg.proc = 0;
|
|
||||||
- arg.wrapper = Data_Wrap_Struct(rb_cData, mark_load_arg, 0, &arg);
|
|
||||||
+ wrapper = Data_Make_Struct(rb_cData, struct load_arg, mark_load_arg, free_load_arg, arg);
|
|
||||||
+ arg->src = port;
|
|
||||||
+ arg->offset = 0;
|
|
||||||
+ arg->symbols = st_init_numtable();
|
|
||||||
+ arg->data = st_init_numtable();
|
|
||||||
+ arg->proc = 0;
|
|
||||||
+ arg->taint = taint;
|
|
||||||
|
|
||||||
- major = r_byte(&arg);
|
|
||||||
- minor = r_byte(&arg);
|
|
||||||
+ major = r_byte(arg);
|
|
||||||
+ minor = r_byte(arg);
|
|
||||||
if (major != MARSHAL_MAJOR || minor > MARSHAL_MINOR) {
|
|
||||||
+ clear_load_arg(arg);
|
|
||||||
rb_raise(rb_eTypeError, "incompatible marshal file format (can't be read)\n\
|
|
||||||
\tformat version %d.%d required; %d.%d given",
|
|
||||||
MARSHAL_MAJOR, MARSHAL_MINOR, major, minor);
|
|
||||||
@@ -1490,8 +1487,10 @@
|
|
||||||
MARSHAL_MAJOR, MARSHAL_MINOR, major, minor);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!NIL_P(proc)) arg.proc = proc;
|
|
||||||
- v = rb_ensure(load, (VALUE)&arg, load_ensure, (VALUE)&arg);
|
|
||||||
+ if (!NIL_P(proc)) arg->proc = proc;
|
|
||||||
+ v = r_object(arg);
|
|
||||||
+ clear_load_arg(arg);
|
|
||||||
+ RB_GC_GUARD(wrapper);
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
Index: ruby_1_8_7/test/ruby/test_marshal.rb
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8_7/test/ruby/test_marshal.rb (revision 26075)
|
|
||||||
+++ ruby_1_8_7/test/ruby/test_marshal.rb (revision 26076)
|
|
||||||
@@ -71,4 +71,41 @@
|
|
||||||
}
|
|
||||||
assert_equal("marshal data too short", e.message)
|
|
||||||
end
|
|
||||||
+
|
|
||||||
+ class DumpTest
|
|
||||||
+ def marshal_dump
|
|
||||||
+ loop { Thread.pass }
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
+ class LoadTest
|
|
||||||
+ def marshal_dump
|
|
||||||
+ nil
|
|
||||||
+ end
|
|
||||||
+ def marshal_load(obj)
|
|
||||||
+ loop { Thread.pass }
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
+ def test_context_switch
|
|
||||||
+ o = DumpTest.new
|
|
||||||
+ Thread.new { Marshal.dump(o) }
|
|
||||||
+ GC.start
|
|
||||||
+ assert(true, '[ruby-dev:39425]')
|
|
||||||
+
|
|
||||||
+ o = LoadTest.new
|
|
||||||
+ m = Marshal.dump(o)
|
|
||||||
+ Thread.new { Marshal.load(m) }
|
|
||||||
+ GC.start
|
|
||||||
+ assert(true, '[ruby-dev:39425]')
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
+ def test_taint
|
|
||||||
+ x = Object.new
|
|
||||||
+ x.taint
|
|
||||||
+ s = Marshal.dump(x)
|
|
||||||
+ assert_equal(true, s.tainted?)
|
|
||||||
+ y = Marshal.load(s)
|
|
||||||
+ assert_equal(true, y.tainted?)
|
|
||||||
+ end
|
|
||||||
end
|
|
||||||
Index: ruby_1_8_7/ruby.h
|
|
||||||
===================================================================
|
|
||||||
--- ruby_1_8_7/ruby.h (revision 16014)
|
|
||||||
+++ ruby_1_8_7/ruby.h (revision 16015)
|
|
||||||
@@ -224,6 +224,8 @@
|
|
||||||
|
|
||||||
#define TYPE(x) rb_type((VALUE)(x))
|
|
||||||
|
|
||||||
+#define RB_GC_GUARD(v) (*(volatile VALUE *)&(v))
|
|
||||||
+
|
|
||||||
void rb_check_type _((VALUE,int));
|
|
||||||
#define Check_Type(v,t) rb_check_type((VALUE)(v),t)
|
|
||||||
|
|
||||||
6
rubygems.attr
Normal file
6
rubygems.attr
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
%__rubygems_requires %{_rpmconfigdir}/rubygems.req
|
||||||
|
%__rubygems_provides %{_rpmconfigdir}/rubygems.prov
|
||||||
|
%__rubygems_conflicts %{_rpmconfigdir}/rubygems.con
|
||||||
|
# In non-gem packages, the %%{gem_name} macro is not available and the macro
|
||||||
|
# stays unexpanded which leads to "invalid regex" error (rhbz#1154067).
|
||||||
|
%__rubygems_path ^%{?gem_name:%{gem_spec}}%{!?gem_name:this_should_never_match_anything}$
|
||||||
52
rubygems.con
Normal file
52
rubygems.con
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
|
require 'rubygems/package'
|
||||||
|
|
||||||
|
module RubyGemsReq
|
||||||
|
module Helpers
|
||||||
|
# Keep only '!=' requirements.
|
||||||
|
def self.conflicts(requirements)
|
||||||
|
conflicts = requirements.select {|r| r.first == '!='}
|
||||||
|
end
|
||||||
|
|
||||||
|
# Converts Gem::Requirement into array of requirements strings compatible
|
||||||
|
# with RPM .spec file.
|
||||||
|
def self.requirement_versions_to_rpm(requirement)
|
||||||
|
self.conflicts(requirement.requirements).map do |op, version|
|
||||||
|
version == Gem::Version.new(0) ? "" : "= #{version}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Report conflicting gem dependencies including their version.
|
||||||
|
def self.gem_dependencies(specification)
|
||||||
|
specification.runtime_dependencies.each do |dependency|
|
||||||
|
conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement|
|
||||||
|
requirement_string = "rubygem(#{dependency.name}) #{requirement}"
|
||||||
|
end
|
||||||
|
if conflict_strings.length > 0
|
||||||
|
conflict_string = conflict_strings.join(' with ')
|
||||||
|
conflict_string.prepend('(').concat(')') if conflict_strings.length > 1
|
||||||
|
puts conflict_string
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Reports all conflicts specified by all provided .gemspec files.
|
||||||
|
def self.conflicts
|
||||||
|
while filename = gets
|
||||||
|
filename.strip!
|
||||||
|
begin
|
||||||
|
specification = Gem::Specification.load filename
|
||||||
|
|
||||||
|
gem_dependencies(specification)
|
||||||
|
rescue => e
|
||||||
|
# Ignore all errors.
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if __FILE__ == $0
|
||||||
|
RubyGemsReq::conflicts
|
||||||
|
end
|
||||||
36
rubygems.prov
Normal file
36
rubygems.prov
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
|
require 'rubygems/package'
|
||||||
|
|
||||||
|
module RubyGemsProv
|
||||||
|
module Helpers
|
||||||
|
# If there is some prelease version files, such as rc1 (i.e. non-numeric
|
||||||
|
# field), prepend this field by tilde instead of dot.
|
||||||
|
def self.normalize_prerelease(version)
|
||||||
|
if version.prerelease?
|
||||||
|
prerelease = version.version.sub /^#{version.release}\./, ''
|
||||||
|
"#{version.release}~#{prerelease}"
|
||||||
|
else
|
||||||
|
version.release
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Reports all functionality gem provides.
|
||||||
|
def self.provides
|
||||||
|
while filename = gets
|
||||||
|
filename.strip!
|
||||||
|
begin
|
||||||
|
specification = Gem::Specification.load filename
|
||||||
|
|
||||||
|
puts "rubygem(#{specification.name}) = #{Helpers::normalize_prerelease(specification.version)}"
|
||||||
|
rescue => e
|
||||||
|
# Ignore all errors.
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if __FILE__ == $0
|
||||||
|
RubyGemsProv::provides
|
||||||
|
end
|
||||||
88
rubygems.req
Normal file
88
rubygems.req
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
|
require 'rubygems/package'
|
||||||
|
|
||||||
|
module RubyGemsReq
|
||||||
|
module Helpers
|
||||||
|
# Expands '~>' and '!=' gem requirements.
|
||||||
|
def self.expand_requirement(requirements)
|
||||||
|
requirements.inject([]) do |output, r|
|
||||||
|
output.concat case r.first
|
||||||
|
when '~>'
|
||||||
|
expand_pessimistic_requirement(r)
|
||||||
|
when '!='
|
||||||
|
# If there is only the conflict requirement, we still need to depend
|
||||||
|
# on the specified gem.
|
||||||
|
if requirements.size == 1
|
||||||
|
Gem::Requirement.default.requirements
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
[r]
|
||||||
|
end
|
||||||
|
end.reject {|r| r.empty? }
|
||||||
|
end
|
||||||
|
|
||||||
|
# Expands the pessimistic version operator '~>' into equivalent '>=' and
|
||||||
|
# '<' pair.
|
||||||
|
def self.expand_pessimistic_requirement(requirement)
|
||||||
|
next_version = Gem::Version.create(requirement.last).bump
|
||||||
|
return ['>=', requirement.last], ['<', next_version]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Converts Gem::Requirement into array of requirements strings compatible
|
||||||
|
# with RPM .spec file.
|
||||||
|
def self.requirement_versions_to_rpm(requirement)
|
||||||
|
self.expand_requirement(requirement.requirements).map do |op, version|
|
||||||
|
version == Gem::Version.new(0) ? "" : " #{op} #{version}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Compose dependency together with its requirements in RPM rich dependency
|
||||||
|
# string.
|
||||||
|
def self.compose_dependency_string(name, requirements)
|
||||||
|
dependency_strings = requirements.map { |requirement| name + requirement }
|
||||||
|
dependency_string = dependency_strings.join(' with ')
|
||||||
|
dependency_string.prepend('(').concat(')') if dependency_strings.length > 1
|
||||||
|
dependency_string
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Report RubyGems dependency, versioned if required.
|
||||||
|
def self.rubygems_dependency(specification)
|
||||||
|
dependency_name = "ruby(rubygems)"
|
||||||
|
requirements = Helpers::requirement_versions_to_rpm(specification.required_rubygems_version)
|
||||||
|
|
||||||
|
puts Helpers::compose_dependency_string(dependency_name, requirements)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Report all gem dependencies including their version.
|
||||||
|
def self.gem_dependencies(specification)
|
||||||
|
specification.runtime_dependencies.each do |dependency|
|
||||||
|
dependency_name = "rubygem(#{dependency.name})"
|
||||||
|
requirements = Helpers::requirement_versions_to_rpm(dependency.requirement)
|
||||||
|
|
||||||
|
puts Helpers::compose_dependency_string(dependency_name, requirements)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Reports all requirements specified by all provided .gemspec files.
|
||||||
|
def self.requires
|
||||||
|
while filename = gets
|
||||||
|
filename.strip!
|
||||||
|
begin
|
||||||
|
specification = Gem::Specification.load filename
|
||||||
|
|
||||||
|
rubygems_dependency(specification)
|
||||||
|
gem_dependencies(specification)
|
||||||
|
rescue => e
|
||||||
|
# Ignore all errors.
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if __FILE__ == $0
|
||||||
|
RubyGemsReq::requires
|
||||||
|
end
|
||||||
6
sources
6
sources
|
|
@ -1,5 +1 @@
|
||||||
b6dd396f513efeb7864685c840f9643a ruby-refm-rdp-1.8.2-ja-html.tar.gz
|
SHA512 (ruby-4.0.1.tar.xz) = b67d9d1f97ba30200d103f8454e39dc2d0450819d51d91eb5451d44b0bafc56d2fa48bb1be6c5081babe5828f679984bad02b9bcee7441f6bd34c0a95b8f200b
|
||||||
634c25b14e19925d10af3720d72e8741 rubyfaq-990927.tar.gz
|
|
||||||
4fcec898f51d8371cc42d0a013940469 rubyfaq-jp-990927.tar.gz
|
|
||||||
6a8313c73087513f24e52d8cee5b3804 ruby-1.8-rev27738_trunk-ext_tk.tar.gz
|
|
||||||
1c7a978e9ffd4f56dc2ad74bbd2c34f3 ruby-1.8.6-p420.tar.bz2
|
|
||||||
|
|
|
||||||
7
test_abrt.rb
Normal file
7
test_abrt.rb
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
if !!$LOADED_FEATURES.detect { |f| f =~ /abrt\.rb/ }
|
||||||
|
exit true
|
||||||
|
else
|
||||||
|
puts 'ERROR: ABRT hook was not loaded.'
|
||||||
|
|
||||||
|
exit false
|
||||||
|
end
|
||||||
34
test_openssl_fips.rb
Normal file
34
test_openssl_fips.rb
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
require 'openssl'
|
||||||
|
|
||||||
|
# Run openssl tests in OpenSSL FIPS. See the link below for how to test.
|
||||||
|
# https://github.com/ruby/openssl/blob/master/.github/workflows/test.yml
|
||||||
|
# - step name: test on fips module
|
||||||
|
|
||||||
|
# Listing the testing files by an array explicitly rather than the `Dir.glob`
|
||||||
|
# to prevent the test files from not loading unintentionally.
|
||||||
|
TEST_FILES = %w[
|
||||||
|
test/openssl/test_fips.rb
|
||||||
|
test/openssl/test_pkey.rb
|
||||||
|
].freeze
|
||||||
|
|
||||||
|
if ARGV.empty?
|
||||||
|
puts 'ERROR: Argument base_dir required.'
|
||||||
|
puts "Usage: #{__FILE__} base_dir [options]"
|
||||||
|
exit false
|
||||||
|
end
|
||||||
|
BASE_DIR = ARGV[0]
|
||||||
|
abs_test_files = TEST_FILES.map { |file| File.join(BASE_DIR, file) }
|
||||||
|
|
||||||
|
# Set Fedora/RHEL downstream OpenSSL downstream environment variable to enable
|
||||||
|
# FIPS module in non-FIPS OS environment. It is available in Fedora 38 or later
|
||||||
|
# versions.
|
||||||
|
# https://src.fedoraproject.org/rpms/openssl/blob/rawhide/f/0009-Add-Kernel-FIPS-mode-flag-support.patch
|
||||||
|
ENV['OPENSSL_FORCE_FIPS_MODE'] = '1'
|
||||||
|
# A flag to tell the tests the current environment is FIPS enabled.
|
||||||
|
# https://github.com/ruby/openssl/blob/master/test/openssl/test_fips.rb
|
||||||
|
ENV['TEST_RUBY_OPENSSL_FIPS_ENABLED'] = 'true'
|
||||||
|
|
||||||
|
abs_test_files.each do |file|
|
||||||
|
puts "INFO: Loading #{file}."
|
||||||
|
require file
|
||||||
|
end
|
||||||
124
test_rubygems_con.rb
Normal file
124
test_rubygems_con.rb
Normal file
|
|
@ -0,0 +1,124 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'test/unit'
|
||||||
|
require 'rpm_test_helper'
|
||||||
|
|
||||||
|
class TestRubyGemsCon < Test::Unit::TestCase
|
||||||
|
include RPMTestHelper
|
||||||
|
|
||||||
|
def test_filter_out_regular_requirements
|
||||||
|
gem_i = GemInfo.new
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(0, lines.size)
|
||||||
|
|
||||||
|
deps = [ Dependency.new('bar') ]
|
||||||
|
gem_i.dependencies = deps
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(0, lines.size)
|
||||||
|
|
||||||
|
deps = [
|
||||||
|
Dependency.new('bar'),
|
||||||
|
Dependency.new('baq'),
|
||||||
|
Dependency.new('quz')
|
||||||
|
]
|
||||||
|
|
||||||
|
gem_i.dependencies = deps
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(0, lines.size)
|
||||||
|
|
||||||
|
deps = [
|
||||||
|
Dependency.new('bar', ['>= 4.1']),
|
||||||
|
Dependency.new('baz', ['~> 3.2']),
|
||||||
|
Dependency.new('quz', ['>= 5.6'])
|
||||||
|
]
|
||||||
|
|
||||||
|
gem_i.dependencies = deps
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(0, lines.size)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_single_gem_single_version_conflict
|
||||||
|
con = Dependency.new('bar', ['!= 0.4.4'])
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [ con ])
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
assert_equal("#{con.to_rpm_str} = 0.4.4\n", lines.first)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_multiple_gems_with_single_conflict
|
||||||
|
cons = [
|
||||||
|
Dependency.new('bar', ['!= 1.1']),
|
||||||
|
Dependency.new('baq', ['!= 1.2.2']),
|
||||||
|
Dependency.new('quz', ['!= 1.3'])
|
||||||
|
]
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: cons)
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(3, lines.size)
|
||||||
|
|
||||||
|
assert_equal("#{cons[0].to_rpm_str} = 1.1\n" , lines[0])
|
||||||
|
assert_equal("#{cons[1].to_rpm_str} = 1.2.2\n", lines[1])
|
||||||
|
assert_equal("#{cons[2].to_rpm_str} = 1.3\n" , lines[2])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_multiple_conflicts_on_single_gem
|
||||||
|
con = Dependency.new('bar', ['!= 2.3', '!= 2.4'])
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [con])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
rpm_name = con.to_rpm_str
|
||||||
|
left_rpm_constraint = "(#{rpm_name} = 2.3 with "
|
||||||
|
right_rpm_constraint = "#{rpm_name} = 2.4)\n"
|
||||||
|
assert_equal((left_rpm_constraint + right_rpm_constraint), lines[0])
|
||||||
|
|
||||||
|
con = Dependency.new('bar', ['!= 2.3', '!= 2.4', '!= 4.5'])
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [ con ])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
|
||||||
|
rpm_name = con.to_rpm_str
|
||||||
|
left_rpm_constraint = "(#{rpm_name} = 2.3 with "
|
||||||
|
middle_rpm_constraint = "#{rpm_name} = 2.4 with "
|
||||||
|
right_rpm_constraint = "#{rpm_name} = 4.5)\n"
|
||||||
|
|
||||||
|
assert_equal((left_rpm_constraint + middle_rpm_constraint + right_rpm_constraint), lines[0])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_generates_conflicts_while_ignoring_regular_requirements
|
||||||
|
deps = [
|
||||||
|
Dependency.new('bar', ['>= 2.3', '!= 2.4.2']),
|
||||||
|
Dependency.new('quz', ['~> 3.0', '!= 3.2'])
|
||||||
|
]
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: deps)
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
|
||||||
|
rpm_name = deps[0].to_rpm_str
|
||||||
|
rpm_constraint = "#{rpm_name} = 2.4.2\n"
|
||||||
|
assert_equal(rpm_constraint, lines[0])
|
||||||
|
|
||||||
|
rpm_name = deps[1].to_rpm_str
|
||||||
|
rpm_constraint = "#{rpm_name} = 3.2\n"
|
||||||
|
assert_equal(rpm_constraint, lines[1])
|
||||||
|
end
|
||||||
|
end
|
||||||
52
test_rubygems_prov.rb
Normal file
52
test_rubygems_prov.rb
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'test/unit'
|
||||||
|
require 'rpm_test_helper'
|
||||||
|
|
||||||
|
class TestRubyGemsProv < Test::Unit::TestCase
|
||||||
|
include RPMTestHelper
|
||||||
|
|
||||||
|
def test_provides_the_gem_version
|
||||||
|
gem_i = GemInfo.new(version: '1.2')
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first)
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(name: 'somegem_foo', version: '4.5.6')
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first)
|
||||||
|
|
||||||
|
deps = [
|
||||||
|
Dependency.new('bar'),
|
||||||
|
Dependency.new('baq', [">= 1.2"]),
|
||||||
|
Dependency.new('quz', ["!= 3.2"])
|
||||||
|
]
|
||||||
|
gem_i = GemInfo.new(dependencies: deps)
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_translates_prelease_version_provides_from_rubygems_to_rpm
|
||||||
|
gem_i = GemInfo.new(version: '1.2.3.dev')
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
assert_equal("#{gem_i.to_rpm_str} = 1.2.3~dev\n", lines.first)
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(name: 'foo2', version: '1.2.3.dev.2')
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
assert_equal("#{gem_i.to_rpm_str} = 1.2.3~dev.2\n", lines.first)
|
||||||
|
end
|
||||||
|
end
|
||||||
205
test_rubygems_req.rb
Normal file
205
test_rubygems_req.rb
Normal file
|
|
@ -0,0 +1,205 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'test/unit'
|
||||||
|
require 'rpm_test_helper'
|
||||||
|
|
||||||
|
class TestRubyGemsReq < Test::Unit::TestCase
|
||||||
|
include RPMTestHelper
|
||||||
|
|
||||||
|
def test_depends_on_rubygems
|
||||||
|
gem_i = GemInfo.new
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(1, lines.size)
|
||||||
|
assert_equal("#{helper_rubygems_dependency}\n", lines.first)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_requires_rubygems_and_dependency
|
||||||
|
dep = Dependency.new('bar')
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
assert_equal("#{helper_rubygems_dependency}\n", lines.first)
|
||||||
|
assert_equal("#{dep.to_rpm_str}\n", lines[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_requires_multiple_dependencies_with_constraint
|
||||||
|
constraints = [
|
||||||
|
'>= 3.0',
|
||||||
|
'>= 3.0.0',
|
||||||
|
'>= 3',
|
||||||
|
'= 1.0.2',
|
||||||
|
'= 3.0',
|
||||||
|
'< 3.2',
|
||||||
|
'<= 3.4'
|
||||||
|
]
|
||||||
|
|
||||||
|
dependencies = []
|
||||||
|
constraints.each_with_index do |constraint, idx|
|
||||||
|
dependencies << Dependency.new("bar#{idx}", [constraint])
|
||||||
|
end
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: dependencies)
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
# + 1 for the rubygems dependency
|
||||||
|
assert_equal(constraints.size + 1, lines.size)
|
||||||
|
dependencies.each_with_index do |dep, idx|
|
||||||
|
rpm_dep_name = dep.to_rpm_str
|
||||||
|
# Start indexing lines at 1, to jump over rubygems dependency
|
||||||
|
assert_equal("#{rpm_dep_name} #{constraints[idx]}\n", lines[idx + 1])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_expands_pessimistic_constraint_for_rpm
|
||||||
|
dep = Dependency.new('bar', ['~> 1.2'])
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
|
||||||
|
rpm_dep_name = dep.to_rpm_str
|
||||||
|
left_constraint = "#{rpm_dep_name} >= 1.2"
|
||||||
|
right_constraint = "#{rpm_dep_name} < 2"
|
||||||
|
expected_constraint = "(#{left_constraint} with #{right_constraint})\n"
|
||||||
|
assert_equal(expected_constraint, lines[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_multiple_pessimistically_constrained_dependencies
|
||||||
|
dependencies = []
|
||||||
|
dep_map = [
|
||||||
|
{
|
||||||
|
constraint: '~> 1.2.3',
|
||||||
|
expanded_left: '>= 1.2.3',
|
||||||
|
expanded_rigth: '< 1.3',
|
||||||
|
gem_name: 'bar1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
constraint: '~> 1.2',
|
||||||
|
expanded_left: '>= 1.2',
|
||||||
|
expanded_rigth: '< 2',
|
||||||
|
gem_name: 'bar2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
constraint: '~> 3',
|
||||||
|
expanded_left: '>= 3',
|
||||||
|
expanded_rigth: '< 4',
|
||||||
|
gem_name: 'bar3'
|
||||||
|
}
|
||||||
|
].each do |deps|
|
||||||
|
dependencies << Dependency.new(deps[:gem_name], [deps[:constraint]])
|
||||||
|
end
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: dependencies)
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(dep_map.size + 1, lines.size)
|
||||||
|
|
||||||
|
dep_map.each_with_index do |hash, idx|
|
||||||
|
rpm_dep_name = dependencies[idx].to_rpm_str
|
||||||
|
left_constraint = rpm_dep_name + ' ' + hash[:expanded_left]
|
||||||
|
right_constraint = rpm_dep_name + ' ' + hash[:expanded_rigth]
|
||||||
|
expected_constraint = "(#{left_constraint} with #{right_constraint})\n"
|
||||||
|
assert_equal(expected_constraint, lines[idx + 1])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_multiple_constraints_on_one_dependency_composes_constraints_for_RPM
|
||||||
|
# The quoting here depends on how the constraint is expanded in the helpers.
|
||||||
|
# right now the form is `["#{constraint}"]`, therefore we have to not specify
|
||||||
|
# left and right quotes.
|
||||||
|
constraints = ['>= 0.2.3', '<= 0.2.5']
|
||||||
|
dep = Dependency.new('baz', constraints)
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
rpm_dep_name = dep.to_rpm_str
|
||||||
|
assert_equal("(#{rpm_dep_name} >= 0.2.3 with #{rpm_dep_name} <= 0.2.5)\n", lines[1])
|
||||||
|
|
||||||
|
# Not sure who would compose a dependency like this, but it's possible
|
||||||
|
# to do with the current generator
|
||||||
|
constraints = ['> 0.4.5', '< 0.6.4', '>= 2.3', '<= 2.5.3']
|
||||||
|
dep = Dependency.new('qux', constraints)
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
rpm_dep = dep.to_rpm_str
|
||||||
|
expected_str = "(#{rpm_dep} > 0.4.5 with #{rpm_dep} < 0.6.4 with " \
|
||||||
|
"#{rpm_dep} >= 2.3 with #{rpm_dep} <= 2.5.3)\n"
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
assert_equal(expected_str, lines[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1561487
|
||||||
|
def test_depends_on_gem_with_version_conflict
|
||||||
|
dep = Dependency.new('baz', ['!= 0.4'])
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
assert_equal("#{dep.to_rpm_str}\n", lines[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filters_conflict_from_regular_version_constraints
|
||||||
|
constraint = ['> 1.2.4', '!= 1.2.7']
|
||||||
|
dep = Dependency.new('baq', constraint)
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
assert_equal("#{dep.to_rpm_str} > 1.2.4\n", lines[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filtering_conflicts_is_not_depending_on_contraint_ordering
|
||||||
|
constraints = ['!= 1.2.7', '> 1.2.4']
|
||||||
|
dep = Dependency.new('baq', constraints)
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
assert_equal("#{dep.to_rpm_str} > 1.2.4\n", lines[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filters_multiple_conflicts_from_dependency
|
||||||
|
omit "Case not yet supported."
|
||||||
|
constraints = ['!= 1.2.4', '!= 1.2.5', '!= 2.3', '!= 4.8']
|
||||||
|
dep = Dependency.new('baf', constraints)
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
assert_equal("#{dep.to_rpm_str}\n", lines[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filters_multiple_conflicts_from_dependency_but_keeps_regular_constraint
|
||||||
|
constraints = ['!= 1.2.4', '!= 1.2.5', '!= 2.3', '<= 4.8']
|
||||||
|
dep = Dependency.new('bam', constraints)
|
||||||
|
|
||||||
|
gem_i = GemInfo.new(dependencies: [dep])
|
||||||
|
|
||||||
|
lines = run_generator_single_file(gem_i)
|
||||||
|
|
||||||
|
assert_equal(2, lines.size)
|
||||||
|
assert_equal("#{dep.to_rpm_str} <= 4.8\n", lines[1])
|
||||||
|
end
|
||||||
|
end
|
||||||
65
test_systemtap.rb
Normal file
65
test_systemtap.rb
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
require 'set'
|
||||||
|
|
||||||
|
LIBRUBY_SO = 'libruby.so'
|
||||||
|
PROBES_D = 'probes.d'
|
||||||
|
|
||||||
|
# These probes are excluded by VM_COLLECT_USAGE_DETAILS ifdef.
|
||||||
|
EXCLUDE_PROBES = Set.new %w(insn insn__operand)
|
||||||
|
|
||||||
|
## Detect SystemTap section headers presence
|
||||||
|
|
||||||
|
stap_headers = [
|
||||||
|
'\.stapsdt\.base',
|
||||||
|
'\.note\.stapsdt'
|
||||||
|
]
|
||||||
|
|
||||||
|
header_regexp = %r{ (#{stap_headers.join('|')}) }
|
||||||
|
|
||||||
|
section_headers = `readelf -S "#{LIBRUBY_SO}"`
|
||||||
|
detected_stap_headers = section_headers.scan(header_regexp).flatten
|
||||||
|
|
||||||
|
# Assume there are both headers until this is proven wrong ;)
|
||||||
|
unless detected_stap_headers.size == 2
|
||||||
|
puts 'ERROR: SystemTap (DTrace) headers were not detected in resulting library.'
|
||||||
|
exit false
|
||||||
|
end
|
||||||
|
|
||||||
|
## Find if every declared probe is propagated to resulting library
|
||||||
|
|
||||||
|
# Colect probes specified in probes.d file.
|
||||||
|
probes_declared = []
|
||||||
|
|
||||||
|
File.open(PROBES_D) do |file|
|
||||||
|
file.each_line do |line|
|
||||||
|
if probe = line[/probe (\S+)\(.*\);/, 1]
|
||||||
|
probes_declared << probe
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
probes_declared = Set.new probes_declared
|
||||||
|
|
||||||
|
unless EXCLUDE_PROBES.subset? probes_declared
|
||||||
|
puts 'ERROR: Change in SystemTap (DTrace) probes definition file detected.'
|
||||||
|
exit false
|
||||||
|
end
|
||||||
|
|
||||||
|
probes_declared -= EXCLUDE_PROBES
|
||||||
|
|
||||||
|
# Detect probes in resulting library.
|
||||||
|
get_probes_detected = %r{
|
||||||
|
^\s*Provider:\s+ruby,\s+Name:\s+(\S+),\s+.*$
|
||||||
|
}
|
||||||
|
|
||||||
|
probes_detected = `eu-readelf -n "#{LIBRUBY_SO}"`
|
||||||
|
|
||||||
|
probes_detected = Set.new probes_detected.scan(get_probes_detected).flatten
|
||||||
|
|
||||||
|
# Both sets must be equal, otherwise something is wrong.
|
||||||
|
unless probes_declared == probes_detected
|
||||||
|
puts 'ERROR: SystemTap (DTrace) probes were not correctly propagated into resulting library.'
|
||||||
|
puts " Undetected probes: #{(probes_declared - probes_detected).sort.join(', ')}\n",
|
||||||
|
" Additional detected probes: #{(probes_detected - probes_declared).sort.join(', ')}"
|
||||||
|
|
||||||
|
exit false
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue