Compare commits
5032 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51cbe48cb5 | ||
|
|
daf50693bf | ||
|
|
c2375d0ab6 | ||
|
|
2f6027486d | ||
|
|
3c4959f666 | ||
|
|
c0ee44bf27 | ||
|
|
4eb7b241c6 | ||
|
|
81424dce5c | ||
|
|
65be1a93f1 | ||
|
|
e2d4dadf33 | ||
|
|
67bfb782ef | ||
|
|
40cbe69897 | ||
|
|
fa39273e1f | ||
|
|
ef32f3880f | ||
|
|
31f7a01a9d | ||
|
|
d74309a7b7 | ||
|
|
190bd6ca65 | ||
|
|
209eb83d0d | ||
|
|
f10c3ca55e | ||
|
|
dcab47cdc0 | ||
|
|
aa3cc0ea81 | ||
|
|
6e8058ad41 | ||
|
|
de7be6694f | ||
|
|
8365dbd959 | ||
|
|
e2697e4a37 | ||
|
|
a091eeceab | ||
|
|
b2f29b855b | ||
|
|
e3a631c90e | ||
|
|
f480e3449e | ||
|
|
4b7b595e3c | ||
|
|
f2d4c15395 | ||
|
|
7fce4c5083 | ||
|
|
3f7b4ab7aa | ||
|
|
0d367bbd20 | ||
|
|
677623962e | ||
|
|
5c4d2627ff | ||
|
|
367f46eee2 | ||
|
|
12edc4e369 | ||
|
|
436f6a4ab6 | ||
|
|
957cb968c6 | ||
|
|
c6c6773c03 | ||
|
|
1f4ca71e21 | ||
|
|
28ea72d5b2 | ||
|
|
1128922b44 | ||
|
|
cd511791d1 | ||
|
|
de2cb864fa | ||
|
|
481bc91854 | ||
|
|
f5557b5723 | ||
|
|
a7a77b5b41 | ||
|
|
1ece25bdc2 | ||
|
|
c7ca96b327 | ||
|
|
402dfe30f9 | ||
|
|
68baac0549 | ||
|
|
a0195371e8 | ||
|
|
b7fdc03bd5 | ||
|
|
daff3c0908 | ||
|
|
f379697985 | ||
|
|
e39ba88e9c | ||
|
|
2f173bda9c | ||
|
|
a016fd01ec | ||
|
|
05d77917fd | ||
|
|
7b337de93e | ||
|
|
8dc056130c | ||
|
|
8c650303ff | ||
|
|
6a5185a2a7 | ||
|
|
3d54c3c689 | ||
|
|
9271c69b5d | ||
|
|
3dd4a01a5e | ||
|
|
01406251c9 | ||
|
|
c8405b4b5f | ||
|
|
4e653254c5 | ||
|
|
eaa24b08fd | ||
|
|
e57fc3d950 | ||
|
|
4ff33d41a7 | ||
|
|
03471469e7 | ||
|
|
2e24a3a2be | ||
|
|
2322deda65 | ||
|
|
d32d5e45fb | ||
|
|
34d23c617c | ||
|
|
b9ec69dce1 | ||
|
|
040f8a7176 | ||
|
|
8cb54a9a67 | ||
|
|
c88df5819d | ||
|
|
b5537553f2 | ||
|
|
a42f340d37 | ||
|
|
d52c44cba9 | ||
|
|
972a277956 | ||
|
|
5fbab1f4b5 | ||
|
|
d6390c159f | ||
|
|
7ea10e768e | ||
|
|
88f57d7543 | ||
|
|
17b13b161b | ||
|
|
857dac88c8 | ||
|
|
18c10f2bad | ||
|
|
81c1404b9c | ||
|
|
baaa613e44 | ||
|
|
29bac34c1d | ||
|
|
3e92ffde7d | ||
|
|
f34c5367d5 | ||
|
|
91bfebbed8 | ||
|
|
e16908b16b | ||
|
|
b240fdb2b9 | ||
|
|
33592d0142 | ||
|
|
c4afaabea9 | ||
|
|
041f96b349 | ||
|
|
7e8767e3fd | ||
|
|
8fe5fb7988 | ||
|
|
c3cd948537 | ||
|
|
e340f275b8 | ||
|
|
70a4c4e105 | ||
|
|
60dc751225 | ||
|
|
3f1cdbf5ef | ||
|
|
3ce3165ae6 | ||
|
|
b3ba45afa9 | ||
|
|
c89de04f40 | ||
|
|
d306893d83 | ||
|
|
d24186ea84 | ||
|
|
d8efeabf77 | ||
|
|
4b7b6768e6 | ||
|
|
46436a0909 | ||
|
|
a2b4146e10 | ||
|
|
08d323b1f8 | ||
|
|
b18738e03d | ||
|
|
6e1b3f621d | ||
|
|
68e9a2ed8d | ||
|
|
0de7b5504e | ||
|
|
1c0f28c559 | ||
|
|
da2350a1c9 | ||
|
|
aeb58dc2de | ||
|
|
592df25aef | ||
|
|
0ef55b831f | ||
|
|
a1a41bb4c7 | ||
|
|
394f010952 | ||
|
|
5f88bea442 | ||
|
|
3089d118c1 | ||
|
|
d7ff4b8f34 | ||
|
|
36072c4776 | ||
|
|
87c9b01033 | ||
|
|
f9ca5b9f27 | ||
|
|
6971918c27 | ||
|
|
32cecf55ee | ||
|
|
8816cdea9e | ||
|
|
1ac4ae0b41 | ||
|
|
f487102c0c | ||
|
|
c02de564e4 | ||
|
|
01230a62d4 | ||
|
|
392ed4f0cc | ||
|
|
fb809189d3 | ||
|
|
f613445eb2 | ||
|
|
4f9e548bf6 | ||
|
|
d855403546 | ||
|
|
fab9af7081 | ||
|
|
8496d8ff77 | ||
|
|
d8c4418952 | ||
|
|
3ba88a7509 | ||
|
|
ec855df071 | ||
|
|
58cb2cc2af | ||
|
|
9f71382912 | ||
|
|
6698650679 | ||
|
|
8f28c9009e | ||
|
|
eb645a8e46 | ||
|
|
d3d87ea190 | ||
|
|
641db8b9bd | ||
|
|
c8a89d84b5 | ||
|
|
d8fd5835b6 | ||
|
|
7e96b09e63 | ||
|
|
62dedc80b1 | ||
|
|
6475937fc2 | ||
|
|
42dbd4f855 | ||
|
|
70f1e92951 | ||
|
|
1570f90fde | ||
|
|
b03881d1bb | ||
|
|
3887d9b2bc | ||
|
|
3a1e191b72 | ||
|
|
943c007fb5 | ||
|
|
d7e9134d42 | ||
|
|
4d0ea423fb | ||
|
|
3f8613ae42 | ||
|
|
10591fb87f | ||
|
|
607f4e7b81 | ||
|
|
065e3d7c0d | ||
|
|
be300eb6d5 | ||
|
|
65df417444 | ||
|
|
ed8060abe0 | ||
|
|
cab8788f53 | ||
|
|
29e42143e0 | ||
|
|
83c9f7a4f2 | ||
|
|
30daf95ae8 | ||
|
|
5f01f273e0 | ||
|
|
bb7b51855a | ||
|
|
e0f5b12475 | ||
|
|
55059a53a3 | ||
|
|
72c01fbd33 | ||
|
|
f3410a0b1d | ||
|
|
3088cb171e | ||
|
|
8239bd1681 | ||
|
|
4e6f6320ad | ||
|
|
76dae1dc5f | ||
|
|
9c57a49bf4 | ||
|
|
9edb31a51c | ||
|
|
089e5b5996 | ||
|
|
9115ab5097 | ||
|
|
cd0524b5b7 | ||
|
|
41b8f31bcd | ||
|
|
161d6205b2 | ||
|
|
24093a932c | ||
|
|
2d1ab68656 | ||
|
|
2634e4909f | ||
|
|
b8b14c84e0 | ||
|
|
f0dcb5bbf7 | ||
|
|
f17c22dfb5 | ||
|
|
6ddc518417 | ||
|
|
552b4eae9e | ||
|
|
2f46613132 | ||
|
|
cc92b9a3a2 | ||
|
|
18878a8615 | ||
|
|
8b612d3568 | ||
|
|
946605a4c9 | ||
|
|
84dc0b5b83 | ||
|
|
3024c0096a | ||
|
|
c01f78e515 | ||
|
|
8dae60c5f0 | ||
|
|
c6e2d9c1b0 | ||
|
|
e26a0be731 | ||
|
|
f1fe614d67 | ||
|
|
a961797155 | ||
|
|
051720defd | ||
|
|
bc4237c93e | ||
|
|
6ce0ee49a9 | ||
|
|
8e816f8f88 | ||
|
|
8ab69c4d32 | ||
|
|
6cc9b31747 | ||
|
|
5eb7026dd1 | ||
|
|
3d439d8946 | ||
|
|
c3e34b480a | ||
|
|
e3778923b6 | ||
|
|
00ad8e87f4 | ||
|
|
4d56d4f1f9 | ||
|
|
a6d579ea15 | ||
|
|
664939eeba | ||
|
|
a2e6de9b5d | ||
|
|
bb5bd8091d | ||
|
|
2d43b56deb | ||
|
|
6e68a01e50 | ||
|
|
6c2729ae6f | ||
|
|
d2d23b76da | ||
|
|
b47bd9cc00 | ||
|
|
eeb9c84677 | ||
|
|
1cdfc30374 | ||
|
|
0c4e97b6a1 | ||
|
|
7baa6e824b | ||
|
|
cc0d08255c | ||
|
|
8f0b91edaa | ||
|
|
cde8f697a9 | ||
|
|
11bfccd53f | ||
|
|
261d36e801 | ||
|
|
9c267e9c73 | ||
|
|
09a5826903 | ||
|
|
f4fc670ab4 | ||
|
|
bb3239903b | ||
|
|
8949e67ce3 | ||
|
|
85638aad03 | ||
|
|
4214281ab3 | ||
|
|
96bc3ff8f6 | ||
|
|
a6db0bfae2 | ||
|
|
c3aa5443b9 | ||
|
|
e60bccd95c | ||
|
|
7bda4e98b3 | ||
|
|
b085ce9e94 | ||
|
|
0eddf8421d | ||
|
|
d6710a6aaf | ||
|
|
74e6db9060 | ||
|
|
f8d038c0b8 | ||
|
|
1fbe67af3d | ||
|
|
f351e4402c | ||
|
|
1901b05b9c | ||
|
|
c394046971 | ||
|
|
5e73266572 | ||
|
|
294ad3e818 | ||
|
|
760bca3048 | ||
|
|
3954fc8545 | ||
|
|
a8e40bf803 | ||
|
|
f1b26cb72e | ||
|
|
de7171db8a | ||
|
|
6c854246aa | ||
|
|
8e6d890a19 | ||
|
|
a5fb33b0e4 | ||
|
|
2611cbed40 | ||
|
|
2fcac22e66 | ||
|
|
85a05681cc | ||
|
|
bdd1069a9e | ||
|
|
93287b950b | ||
|
|
4b82d881dc | ||
|
|
b13b253ced | ||
|
|
103a98a468 | ||
|
|
7e93a0e5f1 | ||
|
|
05c6c40e36 | ||
|
|
8c0c3263e2 | ||
|
|
a5934fcaa6 | ||
|
|
7201053f2a | ||
|
|
216d269f1d | ||
|
|
09470ec672 | ||
|
|
42cc997aea | ||
|
|
7cb756cdbb | ||
|
|
26ed2327ae | ||
|
|
99cf7b4ab3 | ||
|
|
bece9aca84 | ||
|
|
2e11e7e456 | ||
|
|
e5edac8af6 | ||
|
|
01e42bfea0 | ||
|
|
1b64213b10 | ||
|
|
98f27a89ec | ||
|
|
68f79043aa | ||
|
|
4457c6a2ad | ||
|
|
ba58a9f30d | ||
|
|
1f5ca24197 | ||
|
|
908ba6e3d6 | ||
|
|
08477f6624 | ||
|
|
49b1c0df2b | ||
|
|
ca5f713282 | ||
|
|
7f5d1953d4 | ||
|
|
544b147370 | ||
|
|
6f2c05b888 | ||
|
|
6c1113769b | ||
|
|
1bef2b7e98 | ||
|
|
a260e7e860 | ||
|
|
6d1c32d46a | ||
|
|
6dfc536ecd | ||
|
|
bcee2ca162 | ||
|
|
0940ee6015 | ||
|
|
4e6d535058 | ||
|
|
78154a63e8 | ||
|
|
9cd83a4efb | ||
|
|
c3d9dda0e5 | ||
|
|
401b4cb137 | ||
|
|
ee6eb508cb | ||
|
|
296a349d49 | ||
|
|
472ad39db3 | ||
|
|
f01b9797d7 | ||
|
|
2536029ea9 | ||
|
|
9a585e6c6a | ||
|
|
74b439b7f1 | ||
|
|
a135a1245a | ||
|
|
29f81b7775 | ||
|
|
453331dba0 | ||
|
|
1eeef97c78 | ||
|
|
36a4ca8b11 | ||
|
|
5b5894afba | ||
|
|
b706da1109 | ||
|
|
b304387308 | ||
|
|
9455621ec2 | ||
|
|
8fb5cb2137 | ||
|
|
1aa5d4875e | ||
|
|
45a4388164 | ||
|
|
62eba4774d | ||
|
|
edfe2297fd | ||
|
|
1b7f9e24f4 | ||
|
|
4be703cde0 | ||
|
|
8f21332fec | ||
|
|
d155156e32 | ||
|
|
b962622975 | ||
|
|
db89b534bd | ||
|
|
58e76721b9 | ||
|
|
da760a66de | ||
|
|
22b14e0f23 | ||
|
|
0da639298c | ||
|
|
9347f86939 | ||
|
|
24901f7a38 | ||
|
|
c557e76565 | ||
|
|
7ccf56a0b7 | ||
|
|
a714377123 | ||
|
|
9989f8e267 | ||
|
|
4d35ac6a16 | ||
|
|
dbd9f1c5a1 | ||
|
|
ef2c42a889 | ||
|
|
c2d58d39dd | ||
|
|
893b2e4f62 | ||
|
|
23683c65de | ||
|
|
c82985cb5e | ||
|
|
58409a2eaf | ||
|
|
dd53ddb003 | ||
|
|
12270b9dbf | ||
|
|
eb36b2a622 | ||
|
|
bf08bd7076 | ||
|
|
e652a32f05 | ||
|
|
3895c974a0 | ||
|
|
9f54cea5c5 | ||
|
|
37dc719d13 | ||
|
|
0007877944 | ||
|
|
e73ab84680 | ||
|
|
46433b9eb3 | ||
|
|
92f17eeba7 | ||
|
|
33fb7bbd1b | ||
|
|
e65c9f6865 | ||
|
|
89c1d361b2 | ||
|
|
37dede3163 | ||
|
|
39772e4c4c | ||
|
|
3de26ff3d7 | ||
|
|
14e3a541e1 | ||
|
|
65c250699f | ||
|
|
a250792202 | ||
|
|
08300ccffb | ||
|
|
14ed97f219 | ||
|
|
eeded917cd | ||
|
|
7a575d2f4b | ||
|
|
1928d83259 | ||
|
|
b27e78cd78 | ||
|
|
d7b624457f | ||
|
|
0f6a5cd385 | ||
|
|
c1ad4bde28 | ||
|
|
7dd14870ce | ||
|
|
e35c023c61 | ||
|
|
453ad8df9d | ||
|
|
509bbd7067 | ||
|
|
4f0b7cd2c2 | ||
|
|
8af9881e9b | ||
|
|
7bd735416d | ||
|
|
e0f3188970 | ||
|
|
fa3f07c092 | ||
|
|
ebbbed166e | ||
|
|
284ed13fa6 | ||
|
|
9d3d492214 | ||
|
|
9f3a46c6c1 | ||
|
|
7565f9dcdb | ||
|
|
bdf4832269 | ||
|
|
484aaf50cc | ||
|
|
8091a3d6cb | ||
|
|
c84123dce5 | ||
|
|
cfbacdb41e | ||
|
|
859d296105 | ||
|
|
482f60d1d3 | ||
|
|
012da99644 | ||
|
|
e8dafd1090 | ||
|
|
6464d6682c | ||
|
|
79c20a7edd | ||
|
|
715e029361 | ||
|
|
5ff08386af | ||
|
|
fd2b72fd0f | ||
|
|
04821c7be8 | ||
|
|
73b46a92bc | ||
|
|
9f36ae4e20 | ||
|
|
52158d9316 | ||
|
|
c513fd72fb | ||
|
|
aa86432ec6 | ||
|
|
2251428f0a | ||
|
|
5ce3071143 | ||
|
|
213e3f0860 | ||
|
|
8de143a994 | ||
|
|
4b5281bfe6 | ||
|
|
027632cbac | ||
|
|
dbbef6ba23 | ||
|
|
8111a4bb9d | ||
|
|
0a3cc5e8e3 | ||
|
|
0e59ade030 | ||
|
|
306eea5e59 | ||
|
|
4c2af4f888 | ||
|
|
dd28f5b5eb | ||
|
|
5f20c43315 | ||
|
|
87adcfeea8 | ||
|
|
b5e20018b5 | ||
|
|
d891143a08 | ||
|
|
193f68083f | ||
|
|
e93c9060f5 | ||
|
|
8d5961ecaf | ||
|
|
9726574846 | ||
|
|
3dbde09747 | ||
|
|
fbe9142b7e | ||
|
|
4be224238e | ||
|
|
e359a7ca59 | ||
|
|
48f23aadbe | ||
|
|
78d3c7e2a2 | ||
|
|
0d89e5e32b | ||
|
|
d861a52ebe | ||
|
|
b27f4e3aeb | ||
|
|
67ef6df4db | ||
|
|
b369be65d7 | ||
|
|
1925db5c77 | ||
|
|
5b070418e7 | ||
|
|
488e1bab2c | ||
|
|
a6f85f51d0 | ||
|
|
025b914079 | ||
|
|
eb17895630 | ||
|
|
949766d92e | ||
|
|
37d125b890 | ||
|
|
6dc8bbcb3a | ||
|
|
dd56784d28 | ||
|
|
c7a5dd36e2 | ||
|
|
ab995df777 | ||
|
|
b42dbc01fe | ||
|
|
4d939802ae | ||
|
|
1dff309a3f | ||
|
|
f9d8325cc2 | ||
|
|
aa079dbdf1 | ||
|
|
49aed3969c | ||
|
|
9c5c8b22c8 | ||
|
|
f0edfa6edf | ||
|
|
222f551c37 | ||
|
|
080a78664e | ||
|
|
3d8d8d3644 | ||
|
|
a024c6df95 | ||
|
|
da6bbfb2d4 | ||
|
|
ea10e3bab0 | ||
|
|
907fe912ef | ||
|
|
f229290880 | ||
|
|
f47dcdc47a | ||
|
|
a3fc492d45 | ||
|
|
74fb1029fa | ||
|
|
b3a6e307b9 | ||
|
|
34fe51a4aa | ||
|
|
5988b3a222 | ||
|
|
7fd639d6fc | ||
|
|
bd61a36587 | ||
|
|
b7a612dcdf | ||
|
|
6c250ab486 | ||
|
|
907546b55e | ||
|
|
9e7f53a35a | ||
|
|
f555b8110d | ||
|
|
ff1108712c | ||
|
|
1891ce3545 | ||
|
|
b1a2728af6 | ||
|
|
c8bf8a5e6e | ||
|
|
afd5d6b5cd | ||
|
|
9a05ffea27 | ||
|
|
3553c8b9e9 | ||
|
|
29fc9cd22c | ||
|
|
c2ca8693e9 | ||
|
|
377ac68690 | ||
|
|
876c26f658 | ||
|
|
d3daa829f0 | ||
|
|
ccf530ba5e | ||
|
|
efae58a4ef | ||
|
|
dbc864c9db | ||
|
|
9683e0df07 | ||
|
|
82fcc5e1de | ||
|
|
415ddeecf8 | ||
|
|
ebef9628a3 | ||
|
|
6e9353f1a8 | ||
|
|
98f8f40896 | ||
|
|
2ccb3d5531 | ||
|
|
83a074eea6 | ||
|
|
7dc11472bf | ||
|
|
92ca6d6423 | ||
|
|
4cce23ea89 | ||
|
|
6b98e86056 | ||
|
|
3de3664671 | ||
|
|
264604df3e | ||
|
|
208537f6f2 | ||
|
|
a648dc6b33 | ||
|
|
2966f174ae | ||
|
|
508d79c475 | ||
|
|
6f0b32a71f | ||
|
|
015e29efe1 | ||
|
|
abc9412f23 | ||
|
|
6ee020cea4 | ||
|
|
95b07c365c | ||
|
|
8e75575b88 | ||
|
|
42c69b3809 | ||
|
|
d5e5e4ed1a | ||
|
|
42a60b2434 | ||
|
|
ac3e21f8d4 | ||
|
|
4e5d340665 | ||
|
|
7a26c60dbd | ||
|
|
bff1656a1a | ||
|
|
9daafc32f1 | ||
|
|
544fa3eddb | ||
|
|
7806fded3e | ||
|
|
e9d4780bbc | ||
|
|
1d981ebd50 | ||
|
|
36c79e9df6 | ||
|
|
d36028cff4 | ||
|
|
2c701d372e | ||
|
|
e546d6246f | ||
|
|
50fcade81b | ||
|
|
df79ba0dcf | ||
|
|
16f99bd0b2 | ||
|
|
2ce1b388c9 | ||
|
|
621a4d637d | ||
|
|
1ea9582218 | ||
|
|
b22956bab2 | ||
|
|
28b48f3e1a | ||
|
|
b2ff9dbcd4 | ||
|
|
051c5dbc27 | ||
|
|
e854e053e4 | ||
|
|
c86d4c8920 | ||
|
|
4b34ba1035 | ||
|
|
8d1ec0df3d | ||
|
|
6c627dbac9 | ||
|
|
6ec46ca802 | ||
|
|
86cad961e5 | ||
|
|
deb1cb4805 | ||
|
|
a77b48f491 | ||
|
|
3352889d73 | ||
|
|
4040792501 | ||
|
|
295742e2b5 | ||
|
|
fea0a74bec | ||
|
|
cb229f0842 | ||
|
|
66c2ac0bc9 | ||
|
|
9aa77178f3 | ||
|
|
6df84a794b | ||
|
|
78f4081bc9 | ||
|
|
05d52752ff | ||
|
|
f082d26ddd | ||
|
|
0d3d74e5c2 | ||
|
|
43ca805248 | ||
|
|
cd960caf8d | ||
|
|
9b575dd976 | ||
|
|
00b3aa77ae | ||
|
|
88af9f783d | ||
|
|
3282eaea8d | ||
|
|
1e10309ff7 | ||
|
|
cb36aadaf6 | ||
|
|
ec91152a36 | ||
|
|
64194a823a | ||
|
|
6ef6428331 | ||
|
|
98d54182d3 | ||
|
|
73ec2a27d0 | ||
|
|
8147a09489 | ||
|
|
3d282b9239 | ||
|
|
df5e151049 | ||
|
|
c0ebbc97c9 | ||
|
|
462a4a1353 | ||
|
|
a638b62ab1 | ||
|
|
c7860322f5 | ||
|
|
f1f301ad3b | ||
|
|
64c3b11478 | ||
|
|
7ad6c35627 | ||
|
|
025b779a30 | ||
|
|
98f9dd266f | ||
|
|
1db2552644 | ||
|
|
d848559f70 | ||
|
|
6b6f868f2a | ||
|
|
786ab114b7 | ||
|
|
51d869493a | ||
|
|
db0baaafe3 | ||
|
|
3d1c92e22c | ||
|
|
cf925ddc97 | ||
|
|
3d3614e522 | ||
|
|
c1284a9046 | ||
|
|
851b58248d | ||
|
|
899f3a7e37 | ||
|
|
73012ec4c8 | ||
|
|
94b24e8893 | ||
|
|
ae6252ca5f | ||
|
|
d3e04b3daf | ||
|
|
3254d2f8f9 | ||
|
|
02307cf7ce | ||
|
|
1cc48bf7d7 | ||
|
|
3c7ea3000a | ||
|
|
746495896c | ||
|
|
e6dc448f18 | ||
|
|
27801c354b | ||
|
|
25ee9456f5 | ||
|
|
ef1f441424 | ||
|
|
db483e77e4 | ||
|
|
7f9e89eb53 | ||
|
|
00bac8f294 | ||
|
|
f180d748be | ||
|
|
eb8a0ef75e | ||
|
|
2cbae1d691 | ||
|
|
5c11fe88df | ||
|
|
1565a643bd | ||
|
|
20fcd3f1dd | ||
|
|
e73a7c80bf | ||
|
|
c9fe2cd469 | ||
|
|
d71f8dcab5 | ||
|
|
ea446c0f0e | ||
|
|
efadc0e299 | ||
|
|
bd6aac3102 | ||
|
|
bddb15ef4c | ||
|
|
70424b511e | ||
|
|
2a558e9d7a | ||
|
|
8426b65592 | ||
|
|
140f1773cf | ||
|
|
682ac5194e | ||
|
|
48c87da07b | ||
|
|
bbdc429db3 | ||
|
|
2e490050f6 | ||
|
|
ebde2a101e | ||
|
|
ee2ddaa7cc | ||
|
|
6848752fed | ||
|
|
dfad4a0abc | ||
|
|
7043fff807 | ||
|
|
7fd44a983d | ||
|
|
6117ef44e4 | ||
|
|
2a823fbdfd | ||
|
|
a954d0976a | ||
|
|
595ec7e034 | ||
|
|
4a1df7e0b2 | ||
|
|
1d09d1a4e2 | ||
|
|
567d67fae2 | ||
|
|
8249108cc6 | ||
|
|
e06a0271a4 | ||
|
|
ff7c0335ff | ||
|
|
3d3d65f3f7 | ||
|
|
a22f5d8d86 | ||
|
|
06d8a3ad23 | ||
|
|
0586b388df | ||
|
|
fd02a140c4 | ||
|
|
d55b17dd65 | ||
|
|
77611913c6 | ||
|
|
112122bc28 | ||
|
|
fca26c0b79 | ||
|
|
67462ca65a | ||
|
|
4687860885 | ||
|
|
a05a6456d5 | ||
|
|
b810a113af | ||
|
|
3df1eeccb9 | ||
|
|
71c357e485 | ||
|
|
aa9faceb03 | ||
|
|
6075abfbdb | ||
|
|
a9bfd88248 | ||
|
|
4c566617f7 | ||
|
|
5ba1144515 | ||
|
|
4b471ecc6e | ||
|
|
f34dd94166 | ||
|
|
ccfbfcc890 | ||
|
|
26d45bc106 | ||
|
|
f0192edf0d | ||
|
|
a8b4a0f287 | ||
|
|
1cb6f31b03 | ||
|
|
fc576a40d6 | ||
|
|
d39b666913 | ||
|
|
47f6a6d3cf | ||
|
|
16c5403ab3 | ||
|
|
497bbb3ae3 | ||
|
|
fa310c825d | ||
|
|
6de191a926 | ||
|
|
07fa1cd5f8 | ||
|
|
ea6143402f | ||
|
|
83a8a8ed22 | ||
|
|
19102559f0 | ||
|
|
817c120b1c | ||
|
|
d78d18c4bd | ||
|
|
5146c64dfc | ||
|
|
c7bb523c8f | ||
|
|
e22ff0d8cd | ||
|
|
d876d9b778 | ||
|
|
9ceb3f6b49 | ||
|
|
0bd63ce8be | ||
|
|
417fe0ec67 | ||
|
|
c8b4f978e1 | ||
|
|
674434b0fc | ||
|
|
9268b7aa7c | ||
|
|
69d45b49e9 | ||
|
|
f5bc0cbb65 | ||
|
|
8d755c010d | ||
|
|
0f26bb9e92 | ||
|
|
69b68153a1 | ||
|
|
bee5c05568 | ||
|
|
235a045d08 | ||
|
|
409e7a2e64 | ||
|
|
a8aad95d41 | ||
|
|
c46a15b574 | ||
|
|
4a87d4ab8e | ||
|
|
bf8413379f | ||
|
|
efc570afab | ||
|
|
e3c182a1c4 | ||
|
|
932cd6fa19 | ||
|
|
0ff048521b | ||
|
|
8709e1c1c3 | ||
|
|
9de7e25085 | ||
|
|
3a9388b43a | ||
|
|
32834dd67d | ||
|
|
05545a2528 | ||
|
|
41675e5ed6 | ||
|
|
918cb16921 | ||
|
|
176a84a828 | ||
|
|
c470ffe1ac | ||
|
|
d9c5191563 | ||
|
|
fc748eb3d0 | ||
|
|
1be6267149 | ||
|
|
f6d07b54f1 | ||
|
|
9b455e9254 | ||
|
|
cc7df29e81 | ||
|
|
ae2a803496 | ||
|
|
8d1a753a1b | ||
|
|
e04b76c2c3 | ||
|
|
a0c8aca3a2 | ||
|
|
6795f4ca12 | ||
|
|
f856952728 | ||
|
|
f78134efa5 | ||
|
|
867a92f083 | ||
|
|
69e50595bf | ||
|
|
02239c094e | ||
|
|
eb56744f4d | ||
|
|
0614bd206f | ||
|
|
2326355497 | ||
|
|
c36f13e44d | ||
|
|
fda7fcd73d | ||
|
|
a235d030ac | ||
|
|
7f9d098c2f | ||
|
|
1fc14fd7ed | ||
|
|
d2d6c91b66 | ||
|
|
679f787a65 | ||
|
|
c6aa32bb3c | ||
|
|
732c1985ef | ||
|
|
7e4c6afd91 | ||
|
|
abd1546d86 | ||
|
|
fa99b76b58 | ||
|
|
d2d2234def | ||
|
|
03c4d65af1 | ||
|
|
3aaa077c9f | ||
|
|
dae00fec29 | ||
|
|
47bf7ecb2b | ||
|
|
3ecf4ef8c9 | ||
|
|
8ab47537c7 | ||
|
|
cf11c32720 | ||
|
|
0f40175524 | ||
|
|
ecacce7e07 | ||
|
|
e32247e53a | ||
|
|
37f489886e | ||
|
|
b33777fd2f | ||
|
|
88254a14a7 | ||
|
|
e1464ece55 | ||
|
|
a21d3d353b | ||
|
|
2850ca60be | ||
|
|
f2eb1c93df | ||
|
|
4095eb2196 | ||
|
|
f7ee8d001a | ||
|
|
57033a62fa | ||
|
|
4bd863761a | ||
|
|
31cab4bae2 | ||
|
|
66ea42f8d7 | ||
|
|
f5c9a8c2ee | ||
|
|
5333a799ea | ||
|
|
90070c317d | ||
|
|
a3f1ae8c4f | ||
|
|
a9a29d207d | ||
|
|
e119c32a9c | ||
|
|
82808f944a | ||
|
|
83897af710 | ||
|
|
d39322e278 | ||
|
|
ed365614f4 | ||
|
|
974749aaf6 | ||
|
|
6acfcd82b1 | ||
|
|
079d063c6d | ||
|
|
db7c3d2de6 | ||
|
|
2053db4d17 | ||
|
|
7ebb17e459 | ||
|
|
e73a1a4ec3 | ||
|
|
77c24d4127 | ||
|
|
80754a4062 | ||
|
|
8170bcfcdd | ||
|
|
07e0da24c5 | ||
|
|
22d2786940 | ||
|
|
e9bc3a9e32 | ||
|
|
848299ba38 | ||
|
|
2ddaabed25 | ||
|
|
062ff13da6 | ||
|
|
93cb2db531 | ||
|
|
a7e568b1d1 | ||
|
|
19bbe5e421 | ||
|
|
86fe78f5f1 | ||
|
|
eace068788 | ||
|
|
70bb1f1707 | ||
|
|
85be3aefa7 | ||
|
|
24c0ece841 | ||
|
|
2b6833cb80 | ||
|
|
73620fe868 | ||
|
|
e6bac6f208 | ||
|
|
63859bf113 | ||
|
|
5cfa74801f | ||
|
|
5970b7a00a | ||
|
|
41750ce70d | ||
|
|
d154f151aa | ||
|
|
6d2d5806b5 | ||
|
|
8a481e7e13 | ||
|
|
86d39255ec | ||
|
|
2efd7a5e0b | ||
|
|
dae219d5c3 | ||
|
|
459b6eae11 | ||
|
|
3194f2001b | ||
|
|
05f5ba4bf9 | ||
|
|
73cae8d9c4 | ||
|
|
52ae0ea055 | ||
|
|
de12a34415 | ||
|
|
243d516bf0 | ||
|
|
6500ac80e4 | ||
|
|
a2692e4ef5 | ||
|
|
bdc825fc3c | ||
|
|
64d3f87e60 | ||
|
|
7eb386e55e | ||
|
|
5da9116c06 | ||
|
|
aca8576de4 | ||
|
|
e81f3daa28 | ||
|
|
7b49166f9b | ||
|
|
a44beee172 | ||
|
|
65abd279cd | ||
|
|
87d15212eb | ||
|
|
4b354cbe26 | ||
|
|
226d4f04f3 | ||
|
|
5661afa315 | ||
|
|
0c8462723b | ||
|
|
fbe76c41fd | ||
|
|
78685addbb | ||
|
|
55b1182a4c | ||
|
|
d5903e4612 | ||
|
|
f0f2c6c486 | ||
|
|
a177b9be8a | ||
|
|
df623dad15 | ||
|
|
835b8f246e | ||
|
|
d7873b5319 | ||
|
|
c1af0d3806 | ||
|
|
d4e3699510 | ||
|
|
466da3afcc | ||
|
|
90e5ccd98c | ||
|
|
13f636ec68 | ||
|
|
28537ae7b7 | ||
|
|
c8dd1bb40b | ||
|
|
3445a781eb | ||
|
|
6641f42417 | ||
|
|
296212d78d | ||
|
|
4d12c5455a | ||
|
|
f4ec99ecb4 | ||
|
|
b99e945e6d | ||
|
|
a733e7e303 | ||
|
|
7f57405eac | ||
|
|
e8afbfbce7 | ||
|
|
5dcc0f7802 | ||
|
|
9509c10064 | ||
|
|
f182590aae | ||
|
|
54ef9443d3 | ||
|
|
74dd7a36b5 | ||
|
|
749a4e78c7 | ||
|
|
3df208efc0 | ||
|
|
69931996bf | ||
|
|
f9cb21e886 | ||
|
|
0074ecd6fa | ||
|
|
8b94937609 | ||
|
|
bd8aab00e4 | ||
|
|
ae20e53cfb | ||
|
|
37faa41b6f | ||
|
|
1e673bfa42 | ||
|
|
27793d97dc | ||
|
|
9ec1c0e18e | ||
|
|
042666eb7e | ||
|
|
826732efec | ||
|
|
eb13cbe9bd | ||
|
|
0d17d90b29 | ||
|
|
3edfa390f7 | ||
|
|
bc64990bc6 | ||
|
|
483e4116c0 | ||
|
|
e1c2ea5123 | ||
|
|
c815aed207 | ||
|
|
d4377c1293 | ||
|
|
633e540a17 | ||
|
|
ec7f58bf96 | ||
|
|
1be63348b5 | ||
|
|
568305ddff | ||
|
|
cd6c370303 | ||
|
|
f147d64527 | ||
|
|
04cee45ac9 | ||
|
|
2b0444b6f4 | ||
|
|
b6fad65f52 | ||
|
|
1363b05e93 | ||
|
|
5cc76f7d84 | ||
|
|
59ce0c7514 | ||
|
|
ddf1879bed | ||
|
|
90dd26397c | ||
|
|
7135299a66 | ||
|
|
ac15d5d619 | ||
|
|
eac9a5905f | ||
|
|
80742b2647 | ||
|
|
8a0824df09 | ||
|
|
a388871083 | ||
|
|
2b83ea30e7 | ||
|
|
f56de63972 | ||
|
|
0b8a3ad8ad | ||
|
|
aa6a6df640 | ||
|
|
e905ce16c9 | ||
|
|
11e595089d | ||
|
|
b47357d73c | ||
|
|
5fc20487e4 | ||
|
|
534e1cbf1b | ||
|
|
ee5e20dae3 | ||
|
|
58d7704060 | ||
|
|
7769367747 | ||
|
|
87d0a7c315 | ||
|
|
09c9786fab | ||
|
|
1edfc82123 | ||
|
|
e6a122417a | ||
|
|
f5433477b9 | ||
|
|
b4b9ebe7d7 | ||
|
|
f59653ac2c | ||
|
|
84e331c586 | ||
|
|
db59f87e32 | ||
|
|
240f1fd223 | ||
|
|
867121ca68 | ||
|
|
bf1072c902 | ||
|
|
8061deb883 | ||
|
|
e7f4fd404d | ||
|
|
aa860bf4df | ||
|
|
158deae625 | ||
|
|
cfde03e694 | ||
|
|
4bca1c5440 | ||
|
|
d380d16427 | ||
|
|
2be065418b | ||
|
|
a095fd517f | ||
|
|
fb9f6fe9b5 | ||
|
|
9d4a36a62f | ||
|
|
0c75c13cc0 | ||
|
|
38dcd6bce9 | ||
|
|
102ac7bcf1 | ||
|
|
5362864cc9 | ||
|
|
15d9fb1879 | ||
|
|
2042e9a6d8 | ||
|
|
1339714eec | ||
|
|
5d690c9270 | ||
|
|
e5743db9b9 | ||
|
|
d195576fba | ||
|
|
5e5024342f | ||
|
|
4de45c2684 | ||
|
|
ce6ac93abe | ||
|
|
1f5a21decf | ||
|
|
ab049eca41 | ||
|
|
37fc258313 | ||
|
|
faa0a0e4c3 | ||
|
|
cf2f902b82 | ||
|
|
bf028990e7 | ||
|
|
025609c63f | ||
|
|
7aaad89ba9 | ||
|
|
2b94d7cf8e | ||
|
|
5d48c108a3 | ||
|
|
3ea1325620 | ||
|
|
dd30066feb | ||
|
|
e65a8b6a9a | ||
|
|
8121ac2c27 | ||
|
|
93f5a750cb | ||
|
|
281f6f18e1 | ||
|
|
db87a9d3ce | ||
|
|
d7329d7bc2 | ||
|
|
e9edfec0ec | ||
|
|
2ad21e7070 | ||
|
|
09d96bef9f | ||
|
|
9ebbde0e01 | ||
|
|
1de5817b58 | ||
|
|
f699d7c08e | ||
|
|
152fa33a55 | ||
|
|
3cf2fd40a8 | ||
|
|
653905e3a2 | ||
|
|
f800708ef3 | ||
|
|
6a62a6b693 | ||
|
|
a07a0ef54b | ||
|
|
3c81bb44ba | ||
|
|
e0db1f0268 | ||
|
|
9e16902397 | ||
|
|
63592096c5 | ||
|
|
4983ebcf7c | ||
|
|
d3f115933e | ||
|
|
18d155e713 | ||
|
|
a6afaeb974 | ||
|
|
769408130a | ||
|
|
90f68d2c66 | ||
|
|
8e20a14945 | ||
|
|
f403f256ca | ||
|
|
20221ee3aa | ||
|
|
594a6710ed | ||
|
|
d6dedee6ff | ||
|
|
0c02ee86a7 | ||
|
|
e12d7aadda | ||
|
|
fd11db92e1 | ||
|
|
ba0577dc96 | ||
|
|
ef1369c365 | ||
|
|
e17862c421 | ||
|
|
d5bb2955b1 | ||
|
|
d4274b32f2 | ||
|
|
6ab78eb88e | ||
|
|
d7665a63e3 | ||
|
|
369b2ef01f | ||
|
|
1ac1cc3d2c | ||
|
|
3c6f6fc811 | ||
|
|
bacfa91cfd | ||
|
|
cabcdf0ec9 | ||
|
|
fcc8b1d3e4 | ||
|
|
61b3ecb6d2 | ||
|
|
af8741c23c | ||
|
|
a591e183bc | ||
|
|
584e5506f2 | ||
|
|
2bd1a51193 | ||
|
|
1578a95982 | ||
|
|
7affaca321 | ||
|
|
b7fa2c4e21 | ||
|
|
2e1dbd0697 | ||
|
|
e69423a154 | ||
|
|
e68b7d8c63 | ||
|
|
638f779841 | ||
|
|
be1158f7a3 | ||
|
|
f0609699ba | ||
|
|
43371c31a2 | ||
|
|
dce105d16f | ||
|
|
4acf6d76bf | ||
|
|
a7bfaa3797 | ||
|
|
88bb67e279 | ||
|
|
46e9d85283 | ||
|
|
7c46a4c0e4 | ||
|
|
3e6ebd577f | ||
|
|
353726f08f | ||
|
|
7ae163d436 | ||
|
|
b9195b415a | ||
|
|
2f1c000f62 | ||
|
|
d7d12aa2dc | ||
|
|
48997cffa1 | ||
|
|
4ff4eab476 | ||
|
|
f90692cf81 | ||
|
|
13d9eed85b | ||
|
|
941acef009 | ||
|
|
b5a117c923 | ||
|
|
1534a115bd | ||
|
|
a03a35565e | ||
|
|
326b9838ed | ||
|
|
fa70a837d4 | ||
|
|
91004158c6 | ||
|
|
2929fb0a4d | ||
|
|
3f26bbc8b3 | ||
|
|
a3322fab0a | ||
|
|
21158195fb | ||
|
|
74a181febc | ||
|
|
9490bd2154 | ||
|
|
4c8672ed1f | ||
|
|
c77425bb22 | ||
|
|
a6605d842b | ||
|
|
f2f5f6c279 | ||
|
|
c994565c62 | ||
|
|
1b9becc541 | ||
|
|
08ff7b65af | ||
|
|
4d72e0fb9d | ||
|
|
a5a4525bed | ||
|
|
949621eb7f | ||
|
|
857a03c127 | ||
|
|
114da813a3 | ||
|
|
bf467c5df3 | ||
|
|
6c3623422f | ||
|
|
63121a0c49 | ||
|
|
12d1263980 | ||
|
|
6f332c7e4c | ||
|
|
bfcec69630 | ||
|
|
4373a2b629 | ||
|
|
a57d94af03 | ||
|
|
a1703bf70d | ||
|
|
dea7bbb4a0 | ||
|
|
565bd5f51e | ||
|
|
bef7e2645a | ||
|
|
f6a4a6b00f | ||
|
|
0c0b37800d | ||
|
|
4ecf481337 | ||
|
|
6f7e12d49b | ||
|
|
0aa513ad70 | ||
|
|
450c750214 | ||
|
|
a4e59c2758 | ||
|
|
9433e84776 | ||
|
|
17f0eb5148 | ||
|
|
ba11f19efc | ||
|
|
bb5dd49206 | ||
|
|
679ceabf36 | ||
|
|
31042e8ed1 | ||
|
|
2705f2c0e3 | ||
|
|
c678a9e3da | ||
|
|
0cf1f917d5 | ||
|
|
bc2e0cc87c | ||
|
|
0425f5d523 | ||
|
|
0ce98d4d65 | ||
|
|
7f43a7d134 | ||
|
|
661708b7fa | ||
|
|
ae167c09fc | ||
|
|
14d861a41c | ||
|
|
e864d27641 | ||
|
|
b892cebe8a | ||
|
|
49e47966a8 | ||
|
|
e861e35acf | ||
|
|
1847aa035d | ||
|
|
630ff6871d | ||
|
|
94238eebfa | ||
|
|
5b79f0d04a | ||
|
|
dc9fcea989 | ||
|
|
15514792d5 | ||
|
|
851bc506e4 | ||
|
|
932300256c | ||
|
|
6361f5c2d4 | ||
|
|
2d51ea5da4 | ||
|
|
fed7ba1dab | ||
|
|
19578d954f | ||
|
|
ab885a5397 | ||
|
|
4014a29d2b | ||
|
|
b4cd2a85df | ||
|
|
f5aed63b0b | ||
|
|
5cac0a528c | ||
|
|
bdb64c2e39 | ||
|
|
0903ae0599 | ||
|
|
1e3a5d4e26 | ||
|
|
6db99a4fe7 | ||
|
|
5b1a882fc2 | ||
|
|
a2578c21e4 | ||
|
|
8d0758fc4c | ||
|
|
880cbb2217 | ||
|
|
3b4820f290 | ||
|
|
9e05fdf4a1 | ||
|
|
7e53f4328f | ||
|
|
e470478dc1 | ||
|
|
7d303afd64 | ||
|
|
1552ed943a | ||
|
|
31b7580b76 | ||
|
|
cc3fc2ba4c | ||
|
|
0ce54c99af | ||
|
|
aaa5c9e8a4 | ||
|
|
cca240c8f9 | ||
|
|
ec09dfe5d1 | ||
|
|
fbbb82259a | ||
|
|
ea11aab71f | ||
|
|
2042c94a6c | ||
|
|
64be8a80b2 | ||
|
|
7185fe2876 | ||
|
|
0724eba935 | ||
|
|
441bb83682 | ||
|
|
2cffc90284 | ||
|
|
68cedd2599 | ||
|
|
d00fd06095 | ||
|
|
3d571ad934 | ||
|
|
8815f0a0b5 | ||
|
|
bfd03db12a | ||
|
|
f14eb07dc1 | ||
|
|
a9cc6a7d08 | ||
|
|
be2f2e42db | ||
|
|
05e5276aec | ||
|
|
dbf799bbf9 | ||
|
|
f39e570f36 | ||
|
|
58a6039c0a | ||
|
|
0662b953f0 | ||
|
|
1b04b8be01 | ||
|
|
500218df80 | ||
|
|
173a16b38a | ||
|
|
68ba5377c1 | ||
|
|
253507c0c3 | ||
|
|
7684652ce3 | ||
|
|
b12dc34ba7 | ||
|
|
9c31ee8a75 | ||
|
|
ae5ba2b110 | ||
|
|
13499f1655 | ||
|
|
49e9f365d8 | ||
|
|
0fa8a491d3 | ||
|
|
41cd861861 | ||
|
|
2913aa8d09 | ||
|
|
1bd2def41e | ||
|
|
386f0e577a | ||
|
|
7207ce2a18 | ||
|
|
20e52e5052 | ||
|
|
e9944150a5 | ||
|
|
fc1804974c | ||
|
|
12167e8f37 | ||
|
|
8dc26bbcd9 | ||
|
|
ee7acc6b13 | ||
|
|
f4422dc165 | ||
|
|
dc7e0899a0 | ||
|
|
5bb2d3baa0 | ||
|
|
5e97eb5ec4 | ||
|
|
6c80b15220 | ||
|
|
aad5a4c4b3 | ||
|
|
5eebb2defa | ||
|
|
b6ce0e6f0e | ||
|
|
943896e237 | ||
|
|
8ee4df8101 | ||
|
|
572f1cd427 | ||
|
|
e04662f84f | ||
|
|
5caaa2cd75 | ||
|
|
3759f62cba | ||
|
|
07f2dd5498 | ||
|
|
eab56b71be | ||
|
|
3040381f03 | ||
|
|
f855cf6bab | ||
|
|
b1e6c58ff2 | ||
|
|
4e6fdd12e2 | ||
|
|
458deaae5e | ||
|
|
9c7b98dcc8 | ||
|
|
e4525e57bb | ||
|
|
dba384108b | ||
|
|
e4ced765f1 | ||
|
|
a2d4dcc636 | ||
|
|
969e785d94 | ||
|
|
5b7ec8de95 | ||
|
|
e19872e77f | ||
|
|
eb865b0df2 | ||
|
|
c6a05f4a7d | ||
|
|
3126ed5f21 | ||
|
|
d684b17c06 | ||
|
|
5cfaa557d3 | ||
|
|
23006d1195 | ||
|
|
81cd458c26 | ||
|
|
27986c9edf | ||
|
|
b7bf88c761 | ||
|
|
29278090eb | ||
|
|
b1e5ec0573 | ||
|
|
4f09e8c975 | ||
|
|
a8855f48aa | ||
|
|
4181fd79cd | ||
|
|
b51be2bb1b | ||
|
|
773bca159a | ||
|
|
ec9959b152 | ||
|
|
1be486c90a | ||
|
|
7220bc1766 | ||
|
|
395c616a48 | ||
|
|
ebbcebac62 | ||
|
|
fa92f58167 | ||
|
|
ac2e0962ce | ||
|
|
fb2d2303d6 | ||
|
|
f5b4664c7c | ||
|
|
00d7fd8e21 | ||
|
|
adffba5081 | ||
|
|
e083c91d5e | ||
|
|
ed737cb2a2 | ||
|
|
488550c2e6 | ||
|
|
8523f75e6c | ||
|
|
4707362ccd | ||
|
|
dd5b1ac098 | ||
|
|
bcbe9c02da | ||
|
|
1544f98ee0 | ||
|
|
f0d5317913 | ||
|
|
2ae7429b18 | ||
|
|
4efe022165 | ||
|
|
796308ed85 | ||
|
|
4c105895ab | ||
|
|
9523e50732 | ||
|
|
52f0249c61 | ||
|
|
a27cb639d8 | ||
|
|
cf8f14780f | ||
|
|
098af17971 | ||
|
|
5745ede31d | ||
|
|
0b1d03abe6 | ||
|
|
00280936da | ||
|
|
480fe9cb9a | ||
|
|
bd91dd9d6d | ||
|
|
732c24f603 | ||
|
|
4e1f86881a | ||
|
|
07d4c6cf0b | ||
|
|
ead1b93f75 | ||
|
|
0be4c7dfbd | ||
|
|
5e5e36a659 | ||
|
|
16f67b5bb1 | ||
|
|
b8444aa518 | ||
|
|
a09bebcaea | ||
|
|
a9541997ae | ||
|
|
bd02892f7b | ||
|
|
ea9fa81ba5 | ||
|
|
670157b364 | ||
|
|
e5ae48a9da | ||
|
|
47514d07b1 | ||
|
|
f2e8f27c15 | ||
|
|
fc79b104f0 | ||
|
|
97143768c8 | ||
|
|
d3b97227a1 | ||
|
|
da2b695f93 | ||
|
|
10c285a774 | ||
|
|
0654ee6a10 | ||
|
|
8cf03c209f | ||
|
|
c588ce9648 | ||
|
|
3fac2dcc41 | ||
|
|
0080ffcf9f | ||
|
|
ce902bf27a | ||
|
|
2cde6aaabd | ||
|
|
578ddea418 | ||
|
|
cf0f5756f5 | ||
|
|
9e1d26e973 | ||
|
|
e389afedaa | ||
|
|
b9c79824a2 | ||
|
|
0777d3a5ba | ||
|
|
2344ffd0c7 | ||
|
|
0c75174ec3 | ||
|
|
e973adf84b | ||
|
|
f9137f606f | ||
|
|
b92deda41b | ||
|
|
8856a226c7 | ||
|
|
d8acd41ba1 | ||
|
|
8efbec3c0b | ||
|
|
4c7c9f4ff5 | ||
|
|
cd4f429f72 | ||
|
|
24c14ff7a8 | ||
|
|
eda1176ba7 | ||
|
|
c9f4e8ce5a | ||
|
|
6983c1d30d | ||
|
|
40cb314638 | ||
|
|
412618d531 | ||
|
|
7db4170062 | ||
|
|
f4fb9a0771 | ||
|
|
79e066d53c | ||
|
|
106147716a | ||
|
|
0d18f7249c | ||
|
|
26d1ddc176 | ||
|
|
4c506b36c5 | ||
|
|
4434f482c0 | ||
|
|
3def8ef60e | ||
|
|
20584ab084 | ||
|
|
7c28338d60 | ||
|
|
17a63c9646 | ||
|
|
01a361d637 | ||
|
|
7f20678969 | ||
|
|
69e36c9821 | ||
|
|
c503b43e38 | ||
|
|
83330d2b59 | ||
|
|
6501cba5a7 | ||
|
|
26480f14f9 | ||
|
|
6b0fb476ab | ||
|
|
dd7bd4f320 | ||
|
|
1315753e70 | ||
|
|
1c9cf668a1 | ||
|
|
8034536054 | ||
|
|
afa4cdc2d8 | ||
|
|
25e765baae | ||
|
|
a64a2e72cf | ||
|
|
c4b4ce7d85 | ||
|
|
4ad29b6c9b | ||
|
|
7e16a4edd7 | ||
|
|
acfeb5d043 | ||
|
|
71684cb071 | ||
|
|
4dec06e4f4 | ||
|
|
94df1b801a | ||
|
|
7555c3d949 | ||
|
|
013cfafe57 | ||
|
|
218fc602fa | ||
|
|
25a9181a1b | ||
|
|
02340062b4 | ||
|
|
4a276807b1 | ||
|
|
51834773b4 | ||
|
|
46ee4a3a53 | ||
|
|
607813d5ce | ||
|
|
67fade5b1e | ||
|
|
a9ed2296a1 | ||
|
|
fa0bbb57ea | ||
|
|
49cd6f6269 | ||
|
|
653f25d676 | ||
|
|
089189afaf | ||
|
|
0a89342508 | ||
|
|
06f57a31c1 | ||
|
|
19df1ea79d | ||
|
|
2b4d2b8748 | ||
|
|
a46138dea9 | ||
|
|
ea425a101a | ||
|
|
583232ea52 | ||
|
|
89c9bec81e | ||
|
|
262ab40188 | ||
|
|
199a8af7cc | ||
|
|
e9f42c1a94 | ||
|
|
a96eb7096d | ||
|
|
cc027148eb | ||
|
|
2b3ba850b3 | ||
|
|
b3789a4693 | ||
|
|
4030f8d7c3 | ||
|
|
cddaba8add | ||
|
|
192369dd2b | ||
|
|
73f10c9363 | ||
|
|
cdc2ebee90 | ||
|
|
2e4966c854 | ||
|
|
6c00a13ed5 | ||
|
|
c898b9db04 | ||
|
|
117743863e | ||
|
|
28ce08b9e2 | ||
|
|
0e8bf79fa4 | ||
|
|
dc671ad037 | ||
|
|
1bd3a702c9 | ||
|
|
561748a063 | ||
|
|
9ea4f80f15 | ||
|
|
0752eccfa5 | ||
|
|
6175ce7559 | ||
|
|
987fb137f9 | ||
|
|
514c61b8fe | ||
|
|
992250ddea | ||
|
|
d61190c3ff | ||
|
|
96e9dbca08 | ||
|
|
5a1ed51dcd | ||
|
|
63101e9914 | ||
|
|
8c1cc44522 | ||
|
|
36f818b9fb | ||
|
|
c0be585b67 | ||
|
|
656b2d562f | ||
|
|
f761130343 | ||
|
|
f1d85ac2e9 | ||
|
|
1585c014d7 | ||
|
|
37ce4108ce | ||
|
|
e822257565 | ||
|
|
a4a2f179c7 | ||
|
|
4663288b49 | ||
|
|
64b1bafd41 | ||
|
|
5f1b6f000d | ||
|
|
b29b7595dd | ||
|
|
833b0ac282 | ||
|
|
893a5565fe | ||
|
|
1f3cb2b93c | ||
|
|
077848fc0b | ||
|
|
f3e9588457 | ||
|
|
487ec2aff1 | ||
|
|
b8e2799700 | ||
|
|
5d152edcaf | ||
|
|
faa3d43d9c | ||
|
|
a0584c78a8 | ||
|
|
d71a12438b | ||
|
|
39aef5fc00 | ||
|
|
a82385cdae | ||
|
|
0ca1a481a3 | ||
|
|
ac1701ae29 | ||
|
|
77965ce5bf | ||
|
|
6fd45520da | ||
|
|
45c675fe7f | ||
|
|
bae97d17d0 | ||
|
|
bdf82246f7 | ||
|
|
1ae43b3405 | ||
|
|
6d2ec9baf7 | ||
|
|
b4682c8ca3 | ||
|
|
e275b567eb | ||
|
|
64d91943ec | ||
|
|
3e718920d1 | ||
|
|
3051c3d71d | ||
|
|
e052aaf44d | ||
|
|
b8fccb5f61 | ||
|
|
1ecea4c2f1 | ||
|
|
00b8e0b567 | ||
|
|
668b4f1b2c | ||
|
|
5ffc50732b | ||
|
|
9d66b85492 | ||
|
|
90b131260b | ||
|
|
fcfe2618d5 | ||
|
|
d24c11f2b1 | ||
|
|
3864da6300 | ||
|
|
d09b0c95ec | ||
|
|
7cedd620f1 | ||
|
|
0e2afedb7f | ||
|
|
de9cce3e80 | ||
|
|
52ca215e29 | ||
|
|
ad16830f71 | ||
|
|
468a6431f9 | ||
|
|
b8bd02c5b2 | ||
|
|
5cc59507f7 | ||
|
|
97c2224cd6 | ||
|
|
813cb032c4 | ||
|
|
513cdd580e | ||
|
|
9af964a6d6 | ||
|
|
440e71ff13 | ||
|
|
857d7bfe0f | ||
|
|
a43c63f149 | ||
|
|
8f75d34331 | ||
|
|
8ed028e2d6 | ||
|
|
a36f3764af | ||
|
|
a73d91a2e5 | ||
|
|
27aa265abd | ||
|
|
b7d9b58cc5 | ||
|
|
955d02049c | ||
|
|
069de3f008 | ||
|
|
04b3d8d86f | ||
|
|
502d15fd3b | ||
|
|
5e323b052a | ||
|
|
81daaddfe9 | ||
|
|
38e722f75d | ||
|
|
15790d7018 | ||
|
|
551d9eb328 | ||
|
|
1b08296392 | ||
|
|
8de84b5d8a | ||
|
|
78ac11ff88 | ||
|
|
283d621b6e | ||
|
|
86b1b28906 | ||
|
|
efdcd199c1 | ||
|
|
db1516d582 | ||
|
|
d99fbbb68f | ||
|
|
11960e53ef | ||
|
|
5f861e075c | ||
|
|
255d05a9c1 | ||
|
|
6d36ec3d76 | ||
|
|
7f6541ef02 | ||
|
|
664bdd359f | ||
|
|
306e601d4e | ||
|
|
fbaff33f3f | ||
|
|
a729c332c8 | ||
|
|
1682257b35 | ||
|
|
691e628726 | ||
|
|
85947d0985 | ||
|
|
0d3a52ae29 | ||
|
|
1b553f2b21 | ||
|
|
f14cd67446 | ||
|
|
84afaf385f | ||
|
|
1cc6e42682 | ||
|
|
38550bbc1b | ||
|
|
7551e4c14f | ||
|
|
b29d5e6032 | ||
|
|
b0f4052bd8 | ||
|
|
e482994a15 | ||
|
|
c086ccdab6 | ||
|
|
33d0660abc | ||
|
|
3338fcf014 | ||
|
|
c8137194f0 | ||
|
|
f04258eb29 | ||
|
|
1fa67e458c | ||
|
|
642be5fa3d | ||
|
|
2759f14f23 | ||
|
|
1b9e8a0e65 | ||
|
|
bb8a8ecda3 | ||
|
|
49e8e4b590 | ||
|
|
1a1bf31032 | ||
|
|
1b53452618 | ||
|
|
d339f2af29 | ||
|
|
4c1b53660d | ||
|
|
a2be05f24b | ||
|
|
719b6bfffd | ||
|
|
8c1274bbbb | ||
|
|
fb6d850637 | ||
|
|
b9148b1751 | ||
|
|
403a55afb2 | ||
|
|
663b30b3e8 | ||
|
|
6bb31a9a4c | ||
|
|
91da3d8e64 | ||
|
|
c6e89d9283 | ||
|
|
14cef6eab8 | ||
|
|
c096bb332a | ||
|
|
081918d71a | ||
|
|
58487accdd | ||
|
|
3df0f1902d | ||
|
|
4e27d91351 | ||
|
|
57eaea2e8c | ||
|
|
61fe89bda0 | ||
|
|
3d755a148b | ||
|
|
03fdb2058a | ||
|
|
379f23be02 | ||
|
|
9b926a480f | ||
|
|
780a57367d | ||
|
|
32e086f44a | ||
|
|
c8fc56686c | ||
|
|
63e45c586c | ||
|
|
a47b3ba01b | ||
|
|
f5f7abd71f | ||
|
|
2b9d02d594 | ||
|
|
4c063c6055 | ||
|
|
976b2b4d25 | ||
|
|
1f64f08cb3 | ||
|
|
cb9c4ac866 | ||
|
|
79b3ef0362 | ||
|
|
55c4a676ad | ||
|
|
d687e332ad | ||
|
|
690937f953 | ||
|
|
6bac1598f6 | ||
|
|
f2a692c515 | ||
|
|
d166c04db5 | ||
|
|
1de675e976 | ||
|
|
d5abcc5c88 | ||
|
|
519b760222 | ||
|
|
53bbbfbe21 | ||
|
|
9fb8030370 | ||
|
|
85982017b6 | ||
|
|
861f174f66 | ||
|
|
3e8391458c | ||
|
|
890df7153a | ||
|
|
2143c38ab8 | ||
|
|
6d988dde8d | ||
|
|
3100c5948a | ||
|
|
729f23b432 | ||
|
|
0de4ba738b | ||
|
|
31e9ded768 | ||
|
|
d10fceaacc | ||
|
|
0e171127b9 | ||
|
|
f0f7b23c8a | ||
|
|
fe4ef286f2 | ||
|
|
56adb5d9a5 | ||
|
|
16a4c49f98 | ||
|
|
d784d561fc | ||
|
|
e837be1af9 | ||
|
|
137db14b75 | ||
|
|
d3b0cb56b7 | ||
|
|
6793a54748 | ||
|
|
ba1ada5424 | ||
|
|
a770151359 | ||
|
|
6327877a6f | ||
|
|
50ac98bc04 | ||
|
|
ba87937fff | ||
|
|
1b7eedbb7d | ||
|
|
0e422dec8c | ||
|
|
bc2fa76588 | ||
|
|
30d083c6b7 | ||
|
|
a7b8cb6901 | ||
|
|
6f4b0e9bda | ||
|
|
cfd380d514 | ||
|
|
cd943ebe94 | ||
|
|
37728afada | ||
|
|
5f720f9b7c | ||
|
|
e3e94f0ac9 | ||
|
|
89bf5f4045 | ||
|
|
7ec191ce0b | ||
|
|
6f69c01915 | ||
|
|
2fcaa011ce | ||
|
|
06de8c56af | ||
|
|
eb388306fd | ||
|
|
c996632113 | ||
|
|
bc1320d83a | ||
|
|
7df89896f4 | ||
|
|
b71d430af6 | ||
|
|
0fd58fb585 | ||
|
|
32c801bbf6 | ||
|
|
ad48ad7586 | ||
|
|
5cdd37959a | ||
|
|
6810965457 | ||
|
|
18612eca59 | ||
|
|
48888b0f8e | ||
|
|
c4c167c1ca | ||
|
|
51b0f53b33 | ||
|
|
06e38d2ca2 | ||
|
|
793c9f5546 | ||
|
|
0384794912 | ||
|
|
26325fe812 | ||
|
|
9bb918915f | ||
|
|
7fb45e4bfd | ||
|
|
d7c2f683d9 | ||
|
|
b80a03e6b6 | ||
|
|
9026fb8e8a | ||
|
|
3ea9d1e665 | ||
|
|
bf4eeb48b9 | ||
|
|
76458f5bfc | ||
|
|
798dabc8f2 | ||
|
|
0faa6dd753 | ||
|
|
0185226042 | ||
|
|
99c3ed56fa | ||
|
|
305d5698df | ||
|
|
a15aee5d8e | ||
|
|
d899059075 | ||
|
|
b4c36164b5 | ||
|
|
3bc4a38b78 | ||
|
|
13fcb3c083 | ||
|
|
f3f309a22a | ||
|
|
73213ac59d | ||
|
|
a1db306a0c | ||
|
|
19b69ce3a5 | ||
|
|
ece72e5337 | ||
|
|
bad32724ec | ||
|
|
8f28df1d14 | ||
|
|
8b35940857 | ||
|
|
30993357d7 | ||
|
|
f86f6c6274 | ||
|
|
7d85902f37 | ||
|
|
c096aa9557 | ||
|
|
f3accb111e | ||
|
|
7cf1313572 | ||
|
|
18222de7b6 | ||
|
|
9de0503188 | ||
|
|
11863d2de3 | ||
|
|
a2ba60f6a8 | ||
|
|
e5b36583b5 | ||
|
|
acd9014553 | ||
|
|
ea88d9cfe9 | ||
|
|
055f7f4ab6 | ||
|
|
2c6c21a3bf | ||
|
|
71a297f121 | ||
|
|
8921bf4552 | ||
|
|
65e3ac4132 | ||
|
|
27e9bc6d02 | ||
|
|
d566510a40 | ||
|
|
3f4bf04dde | ||
|
|
8f846d507d | ||
|
|
10810482bc | ||
|
|
ffe9e77e36 | ||
|
|
86893e3dc4 | ||
|
|
ff3e56cf9a | ||
|
|
c904a42c5b | ||
|
|
f29b55957a | ||
|
|
b66f5b6231 | ||
|
|
e398c0dc5b | ||
|
|
060fb596f7 | ||
|
|
97feca0888 | ||
|
|
e41d67e031 | ||
|
|
8b5467e65d | ||
|
|
a7ffb2c1a4 | ||
|
|
bbe2db5814 | ||
|
|
66089c89aa | ||
|
|
2efc67da60 | ||
|
|
e0fbf14f99 | ||
|
|
8f3954c1bd | ||
|
|
4041f45b6c | ||
|
|
58cff1290d | ||
|
|
0521b9bb32 | ||
|
|
f18e1a9371 | ||
|
|
3f90fee614 | ||
|
|
77cd474a2d | ||
|
|
70a25c4587 | ||
|
|
cbd5a0a6e3 | ||
|
|
db81a74d66 | ||
|
|
a3431c5a73 | ||
|
|
d515877d91 | ||
|
|
4c4f3e9747 | ||
|
|
76d950b103 | ||
|
|
5aa3131385 | ||
|
|
b86e3047f3 | ||
|
|
45482187b4 | ||
|
|
f6aa864bc4 | ||
|
|
ac728d3e60 | ||
|
|
6180e6c047 | ||
|
|
6fb7b0fcf7 | ||
|
|
88888f5ba0 | ||
|
|
1303b5a6a9 | ||
|
|
fe30113502 | ||
|
|
0377f3580b | ||
|
|
f74d4b0660 | ||
|
|
9b299cb2bb | ||
|
|
cec283f608 | ||
|
|
aa86488fd9 | ||
|
|
c2d0870924 | ||
|
|
42ff1aaa75 | ||
|
|
31bb47356f | ||
|
|
b3881701c5 | ||
|
|
0fbd2fe224 | ||
|
|
c09111bbef | ||
|
|
59318f4705 | ||
|
|
8047edfb56 | ||
|
|
265b9bcb0f | ||
|
|
be407f531e | ||
|
|
28b2e36230 | ||
|
|
afff40e584 | ||
|
|
c9eb5f8173 | ||
|
|
5dfc2052bd | ||
|
|
98d03c74e1 | ||
|
|
7e1ee463ca | ||
|
|
5a55bb3f8d | ||
|
|
79fae306f6 | ||
|
|
81ac3b62fc | ||
|
|
9500f2718b | ||
|
|
a21e845ce7 | ||
|
|
2220784eda | ||
|
|
1dc62e8a19 | ||
|
|
12b9d6da10 | ||
|
|
8bdb6695c7 | ||
|
|
ce105e9bbe | ||
|
|
84e21703bd | ||
|
|
83b0c16728 | ||
|
|
973caa3a07 | ||
|
|
e43eaad557 | ||
|
|
a0c0728ea8 | ||
|
|
b4da4425ff | ||
|
|
fa471a4ed1 | ||
|
|
d8b9cda632 | ||
|
|
cf4a34c657 | ||
|
|
1cc04cff27 | ||
|
|
71e92774eb | ||
|
|
8fa8fc239f | ||
|
|
e5b08544ff | ||
|
|
2009354719 | ||
|
|
a5086f474e | ||
|
|
92a7c0ddd5 | ||
|
|
64aaf7ba81 | ||
|
|
83d4cdc090 | ||
|
|
a07056d67b | ||
|
|
64c83638ff | ||
|
|
15e6b88a8b | ||
|
|
36275f8e6e | ||
|
|
ccb62b4620 | ||
|
|
f9efb746d7 | ||
|
|
9e0c20c794 | ||
|
|
a17d1efe7c | ||
|
|
670669ef80 | ||
|
|
a33077b77f | ||
|
|
51cf847647 | ||
|
|
8af1c5fc8f | ||
|
|
c703bfb54d | ||
|
|
652a5eb592 | ||
|
|
62b2f2a7c9 | ||
|
|
4569df025e | ||
|
|
9a8d109650 | ||
|
|
d7f48e1ff0 | ||
|
|
0bbbfc2ef7 | ||
|
|
8770f2a0ea | ||
|
|
0743ef4d0b | ||
|
|
a4ac99877a | ||
|
|
536fa73d5f | ||
|
|
448f8c43d4 | ||
|
|
fe5eec5230 | ||
|
|
80d444624b | ||
|
|
24f65c502e | ||
|
|
b2aa78d6ab | ||
|
|
4eeaff175c | ||
|
|
a660c60eb1 | ||
|
|
8970785d33 | ||
|
|
a813f03955 | ||
|
|
4850b9d4d1 | ||
|
|
7da405e630 | ||
|
|
7213b12324 | ||
|
|
0e64c25ffc | ||
|
|
37dc13edaf | ||
|
|
8704a4ed35 | ||
|
|
fe256870b4 | ||
|
|
cb3505769b | ||
|
|
6649f9edc2 | ||
|
|
64acbbfcf0 | ||
|
|
df84fe0b58 | ||
|
|
f351e011d1 | ||
|
|
9ee6cbfb40 | ||
|
|
344280154a | ||
|
|
005827ab23 | ||
|
|
f60ae61652 | ||
|
|
8867adf942 | ||
|
|
c7dfa1699a | ||
|
|
a5aa159d9d | ||
|
|
6b03770602 | ||
|
|
88b73bacdb | ||
|
|
17b868381f | ||
|
|
a1cbb73f8b | ||
|
|
8d9ffcf565 | ||
|
|
88b671f8b1 | ||
|
|
76dfaa71a7 | ||
|
|
40d25d9062 | ||
|
|
f3d6818d5c | ||
|
|
c90cc465f5 | ||
|
|
d4df4375d5 | ||
|
|
1724ff5658 | ||
|
|
3fcd54203c | ||
|
|
2fc9ac4036 | ||
|
|
a7ab064a9e | ||
|
|
ea80c8d3c3 | ||
|
|
daa46105a7 | ||
|
|
44e188f111 | ||
|
|
7b97ea248a | ||
|
|
9cf1257be4 | ||
|
|
deb4f919cf | ||
|
|
9d99042fed | ||
|
|
716f12dd58 | ||
|
|
0e04e65ae0 | ||
|
|
5fe531050c | ||
|
|
e76083205f | ||
|
|
6390acc660 | ||
|
|
6d714e4425 | ||
|
|
3d3a26cd9a | ||
|
|
36decbfa69 | ||
|
|
d0d83cfe1e | ||
|
|
d04dc8440f | ||
|
|
4d40f86bd3 | ||
|
|
5358ffbe5a | ||
|
|
9ceb8fea78 | ||
|
|
a860a3d614 | ||
|
|
c803f7ae98 | ||
|
|
4ede87a8b0 | ||
|
|
9dd1f2747a | ||
|
|
08badb5a35 | ||
|
|
ff3469385b | ||
|
|
bfedeadacb | ||
|
|
a19c8b343e | ||
|
|
b09bee8158 | ||
|
|
b59d4f243b | ||
|
|
05d7378da5 | ||
|
|
ca5180f7a2 | ||
|
|
e6ec372926 | ||
|
|
e226837d33 | ||
|
|
8861c99333 | ||
|
|
5ba5ef6c46 | ||
|
|
94d0f21823 | ||
|
|
4767185082 | ||
|
|
5cd09af066 | ||
|
|
3c234a7d3b | ||
|
|
450b082daf | ||
|
|
427fa7fd0a | ||
|
|
52160bff18 | ||
|
|
d398ebe21f | ||
|
|
b96b32e9ec | ||
|
|
77e8096a6f | ||
|
|
bfb0985c38 | ||
|
|
a7a640bfb8 | ||
|
|
b05a565648 | ||
|
|
5d3965c7a6 | ||
|
|
7727f6fc7e | ||
|
|
4dcb15cf6d | ||
|
|
bdb9af63ed | ||
|
|
8ff7cbb9ce | ||
|
|
1601cf1b14 | ||
|
|
31d2c38687 | ||
|
|
b89bcdff62 | ||
|
|
1b28991e0a | ||
|
|
30c9d976f6 | ||
|
|
5300ffac7f | ||
|
|
a6681f2d7f | ||
|
|
59c9816dbf | ||
|
|
0e9f8bd38d | ||
|
|
953b65abcc | ||
|
|
6c0ea77d1d | ||
|
|
3737169450 | ||
|
|
eb9b00b210 | ||
|
|
0fea167f97 | ||
|
|
992bcac794 | ||
|
|
85502e34f9 | ||
|
|
bc038eb7c3 | ||
|
|
883f601bca | ||
|
|
915115386a | ||
|
|
2a4d440003 | ||
|
|
454acf58af | ||
|
|
e3ca5e6676 | ||
|
|
4952c4c7de | ||
|
|
7ce08c4216 | ||
|
|
65896ff2ed | ||
|
|
4b9707f8ea | ||
|
|
3b71d78f3c | ||
|
|
42a10d5690 | ||
|
|
2d21693b9d | ||
|
|
564483936f | ||
|
|
4a61efe641 | ||
|
|
f4a39457de | ||
|
|
165411f4a5 | ||
|
|
498c098d11 | ||
|
|
e124c86a4f | ||
|
|
bb19dffb26 | ||
|
|
ad0cfa41aa | ||
|
|
738720a000 | ||
|
|
bb57b82794 | ||
|
|
2262bc95f1 | ||
|
|
25b2f7b1d7 | ||
|
|
a2754894ea | ||
|
|
5715799d4e | ||
|
|
4925be0bc4 | ||
|
|
de1ec4be8b | ||
|
|
196737c217 | ||
|
|
835982faed | ||
|
|
864191b6ed | ||
|
|
5b023bb0a1 | ||
|
|
c7b48f6fef | ||
|
|
f751d68177 | ||
|
|
30e8e77fb6 | ||
|
|
bdd874eb7f | ||
|
|
02cadb882b | ||
|
|
669caefccb | ||
|
|
d43cfefa43 | ||
|
|
2d6db06fca | ||
|
|
ffa6fed3a3 | ||
|
|
422d3d4db6 | ||
|
|
09b1daa7b9 | ||
|
|
408aa10210 | ||
|
|
a3f39c2315 | ||
|
|
97e2834816 | ||
|
|
2207ab8f23 | ||
|
|
0e71b5dde8 | ||
|
|
30c204a0a5 | ||
|
|
bc557cc765 | ||
|
|
24d160e93e | ||
|
|
0b5ce9e16a | ||
|
|
8b6035ab82 | ||
|
|
9d04dccb79 | ||
|
|
3d2b25e45c | ||
|
|
27bc49d8c8 | ||
|
|
b843b73bb5 | ||
|
|
552cfac6ed | ||
|
|
1fb4fa02e3 | ||
|
|
fca8034578 | ||
|
|
53dcc39b72 | ||
|
|
3ab8468e73 | ||
|
|
0451c8e55f | ||
|
|
d802144f39 | ||
|
|
5d4a0e4050 | ||
|
|
97bad2c1ac | ||
|
|
58052e6632 | ||
|
|
cb673765c2 | ||
|
|
0df0677d5b | ||
|
|
9db8dc1895 | ||
|
|
817f43f927 | ||
|
|
c03c689cb2 | ||
|
|
564e7f5e5b | ||
|
|
7bdf63a0fa | ||
|
|
29b85fbce0 | ||
|
|
6f96484f83 | ||
|
|
e82fb5b58f | ||
|
|
24ee32d7b0 | ||
|
|
f3f0122f11 | ||
|
|
b14ba31250 | ||
|
|
716991775d | ||
|
|
08a9d80ebc | ||
|
|
f96c979024 | ||
|
|
c4d5bd13c7 | ||
|
|
fd345c8ef0 | ||
|
|
9f4e599232 | ||
|
|
08c8d1d1f7 | ||
|
|
4122ecbc80 | ||
|
|
4f591a6fe3 | ||
|
|
fe79e43459 | ||
|
|
d7e84fe07c | ||
|
|
04061ece4f | ||
|
|
66aaaa1751 | ||
|
|
1eed2ee985 | ||
|
|
c2ac47235f | ||
|
|
e8b4d5fb6f | ||
|
|
c16d7c481c | ||
|
|
22ca72e7b9 | ||
|
|
69585cb6e3 | ||
|
|
33e1dcc476 | ||
|
|
f0a9c45207 | ||
|
|
98a4a9f2cc | ||
|
|
becec8ac7e | ||
|
|
9dad7c2ace | ||
|
|
6dcdb50a3e | ||
|
|
0ae1298d25 | ||
|
|
f49644cdea | ||
|
|
023504ed64 | ||
|
|
dd5a6914f1 | ||
|
|
f6a0cd1bf8 | ||
|
|
285646bbfa | ||
|
|
2f18a34458 | ||
|
|
7b063e3e6c | ||
|
|
a2f90453f4 | ||
|
|
dc4ca26441 | ||
|
|
96f65479e7 | ||
|
|
e95eedb165 | ||
|
|
040c122719 | ||
|
|
9c1da4fa4c | ||
|
|
189e8b3f34 | ||
|
|
88bec814eb | ||
|
|
c0661744cc | ||
|
|
b968603a57 | ||
|
|
3b675d8b70 | ||
|
|
0036483ded | ||
|
|
c30fe932d9 | ||
|
|
8f99334f11 | ||
|
|
76d42b5200 | ||
|
|
0f40174723 | ||
|
|
734fb459a4 | ||
|
|
3a68dd2011 | ||
|
|
74dc7ffe4d | ||
|
|
dd26c0bbcc | ||
|
|
483ec0d762 | ||
|
|
c9ba73d931 | ||
|
|
b5d0a38860 | ||
|
|
1bca69f272 | ||
|
|
064d3584c0 | ||
|
|
0ef6843d85 | ||
|
|
9c95ec0b29 | ||
|
|
561a4fbeea | ||
|
|
84707ed926 | ||
|
|
6fba102d7d | ||
|
|
513aae5ef8 | ||
|
|
1da6bbd146 | ||
|
|
d438ea0880 | ||
|
|
d7612e7aaa | ||
|
|
6c352132d0 | ||
|
|
c78349a3a4 | ||
|
|
ce3146e91a | ||
|
|
0890ac4507 | ||
|
|
3ab56a188e | ||
|
|
00de72272d | ||
|
|
9bd4bc02d6 | ||
|
|
425beb4d97 | ||
|
|
404b7c7c4f | ||
|
|
4c87ef915f | ||
|
|
d087086581 | ||
|
|
c3767d593d | ||
|
|
09eed08b9c | ||
|
|
7303c387e8 | ||
|
|
b485ca8198 | ||
|
|
d94972503a | ||
|
|
0514dd5ebd | ||
|
|
175a042fd3 | ||
|
|
2e77cc635e | ||
|
|
a233ed2de7 | ||
|
|
a51566ec6e | ||
|
|
36450b9bc9 | ||
|
|
19c8a52fe1 | ||
|
|
1bf306bbbd | ||
|
|
126fc10b9d | ||
|
|
63459ab0c7 | ||
|
|
01d5ffcd87 | ||
|
|
16431f7a4c | ||
|
|
b25da51638 | ||
|
|
6926f4d0da | ||
|
|
5417f1cdc6 | ||
|
|
b1e5eafb80 | ||
|
|
deb5011d08 | ||
|
|
b4b7942230 | ||
|
|
9f8ff32bcc | ||
|
|
faa0f2a13c | ||
|
|
80310a3b7c | ||
|
|
c53b1be8b4 | ||
|
|
9f59c128be | ||
|
|
a1f8cc2817 | ||
|
|
29635b7bbd | ||
|
|
434ff28af4 | ||
|
|
d391670755 | ||
|
|
78c46aab35 | ||
|
|
637da63506 | ||
|
|
af7785727b | ||
|
|
bbbffe7423 | ||
|
|
23c7089789 | ||
|
|
fcc30cbf30 | ||
|
|
267666cd97 | ||
|
|
582d01784a | ||
|
|
d592a1655f | ||
|
|
502420ceff | ||
|
|
9d584d0c47 | ||
|
|
15e9d5f96e | ||
|
|
1a187e73ae | ||
|
|
138307dd0c | ||
|
|
6384264aa7 | ||
|
|
fcc4c1b2f2 | ||
|
|
6c95a5d496 | ||
|
|
f16228d811 | ||
|
|
3d9c8f4fd4 | ||
|
|
631cbdbda8 | ||
|
|
7b9b18f03c | ||
|
|
471950434e | ||
|
|
1774c7a7b3 | ||
|
|
80c02ad36a | ||
|
|
af4af94203 | ||
|
|
761c5c8450 | ||
|
|
52c8bedb9c | ||
|
|
a74bc9369b | ||
|
|
0fd9cdb861 | ||
|
|
65ff89a0b0 | ||
|
|
7705603f73 | ||
|
|
62dd040a8f | ||
|
|
8859a09cd2 | ||
|
|
4acdfeae61 | ||
|
|
1bbe6409e1 | ||
|
|
77a34ebdf9 | ||
|
|
9780427940 | ||
|
|
dacedfcc0e | ||
|
|
52c359bc77 | ||
|
|
53df9fbb4f | ||
|
|
0ffa959044 | ||
|
|
0fbf70d95d | ||
|
|
459c647bc9 | ||
|
|
71d9911539 | ||
|
|
b7aa47a178 | ||
|
|
c6524d0311 | ||
|
|
a045154b5e | ||
|
|
21d4f3a356 | ||
|
|
c2ca5f44b4 | ||
|
|
2bfa4d7e4f | ||
|
|
577657b3f7 | ||
|
|
0816e9554d | ||
|
|
915f91a619 | ||
|
|
0c33e8ac48 | ||
|
|
a2197f3a41 | ||
|
|
f50439b990 | ||
|
|
df30182a10 | ||
|
|
0668b6d7ba | ||
|
|
21161a60ff | ||
|
|
fffc2d2765 | ||
|
|
12e36ee0e7 | ||
|
|
b5979b13e3 | ||
|
|
efa506b235 | ||
|
|
c5a35acd67 | ||
|
|
4bf9b168a5 | ||
|
|
b3ede099e2 | ||
|
|
c98afe2205 | ||
|
|
8078845273 | ||
|
|
8ddc1f8977 | ||
|
|
e3cd0a67d0 | ||
|
|
e9b71872a8 | ||
|
|
fce6ecb05c | ||
|
|
f43cab0951 | ||
|
|
4a6ec6377d | ||
|
|
6ee21727de | ||
|
|
8db35ab9a2 | ||
|
|
67999d1b1c | ||
|
|
e763eeacdd | ||
|
|
b8a91db089 | ||
|
|
4c9dd028d2 | ||
|
|
088dce709e | ||
|
|
ab41fd6692 | ||
|
|
5e13bba068 | ||
|
|
d9cc1f85a5 | ||
|
|
03307f91df | ||
|
|
3526d92660 | ||
|
|
d7020434d9 | ||
|
|
e2e72b14b2 | ||
|
|
3ece0e7b76 | ||
|
|
68c681bb78 | ||
|
|
e7ced54369 | ||
|
|
14fe0b8ad2 | ||
|
|
2dc49ee88d | ||
|
|
45bf93405a | ||
|
|
c5a19b57f7 | ||
|
|
2e1810e3a7 | ||
|
|
566fec4015 | ||
|
|
8bec127a1d | ||
|
|
9482ce1fce | ||
|
|
e200a41d3d | ||
|
|
0b5836cfce | ||
|
|
c043275f1b | ||
|
|
9cf5404bb7 | ||
|
|
5879f8207f | ||
|
|
ee7ec4fa66 | ||
|
|
19f4b27fd2 | ||
|
|
8ea5e946a2 | ||
|
|
8bcb812529 | ||
|
|
2a11cb8b76 | ||
|
|
6906911e85 | ||
|
|
b63d11d5b0 | ||
|
|
5cb45c253e | ||
|
|
1b997f10a8 | ||
|
|
8cba8d6d1d | ||
|
|
240c0643f2 | ||
|
|
82ce798f41 | ||
|
|
2fb128fb34 | ||
|
|
0216fa2a00 | ||
|
|
fd5d89b61c | ||
|
|
eaf046c6a4 | ||
|
|
bb4b6c8ee2 | ||
|
|
eba264fcd0 | ||
|
|
78ae5d7723 | ||
|
|
22bb0562fe | ||
|
|
b215b19cae | ||
|
|
361b629034 | ||
|
|
809ded74c9 | ||
|
|
0b7b25487f | ||
|
|
3d3a520a7d | ||
|
|
6d6eb0f2d1 | ||
|
|
fc8d18ebdc | ||
|
|
9030541e4b | ||
|
|
78d25ad337 | ||
|
|
c512b37a4e | ||
|
|
f158375054 | ||
|
|
d7847ff768 | ||
|
|
2aa4387eba | ||
|
|
c1e6b52184 | ||
|
|
05b6c3f8cf | ||
|
|
6e462abb4d | ||
|
|
5d477bc956 | ||
|
|
98faee1d5c | ||
|
|
a49662276d | ||
|
|
4cb91d6f7b | ||
|
|
7d74e209f3 | ||
|
|
3f20014f33 | ||
|
|
3e717842c9 | ||
|
|
836d081bca | ||
|
|
190c437980 | ||
|
|
979b53cab6 | ||
|
|
965e7f471f | ||
|
|
8fec824484 | ||
|
|
c8d8860742 | ||
|
|
c90ecc6847 | ||
|
|
fa44cd5cef | ||
|
|
71e49e289a | ||
|
|
c3f3f26632 | ||
|
|
0b7c673205 | ||
|
|
f5fb771573 | ||
|
|
cd9cdd6410 | ||
|
|
f8f71b1c2c | ||
|
|
ad42579f08 | ||
|
|
c11a665ba1 | ||
|
|
1a563c2b31 | ||
|
|
aca5941a0e | ||
|
|
8f4efeea97 | ||
|
|
9eee71edf7 | ||
|
|
42edb6840e | ||
|
|
a2528a86b4 | ||
|
|
35cf52d182 | ||
|
|
8ce45d2161 | ||
|
|
a1ebdf63f3 | ||
|
|
6c46a5d623 | ||
|
|
2a38ec4c93 | ||
|
|
57e495943f | ||
|
|
b1da3664ec | ||
|
|
87c772b117 | ||
|
|
ccccd7b60d | ||
|
|
f21fcb3b88 | ||
|
|
d2004a186c | ||
|
|
69f6baf28e | ||
|
|
0f427ed334 | ||
|
|
1cc94a0f79 | ||
|
|
cbfba84aa2 | ||
|
|
1568e64f95 | ||
|
|
5e471719a6 | ||
|
|
2fde72075f | ||
|
|
e672e10219 | ||
|
|
a996b8aa7f | ||
|
|
813fefbc71 | ||
|
|
e60f25f209 | ||
|
|
d3ade02c16 | ||
|
|
81cb520b47 | ||
|
|
e9c83db42b | ||
|
|
e3115aa505 | ||
|
|
474048ae8b | ||
|
|
405b04efab | ||
|
|
b063ab42bf | ||
|
|
2e0ee5404d | ||
|
|
c6ac709d70 | ||
|
|
92b7534885 | ||
|
|
23ec6c6bb0 | ||
|
|
a7026da45c | ||
|
|
222c84d9be | ||
|
|
045e5bd458 | ||
|
|
6665a996e6 | ||
|
|
58733eb26a | ||
|
|
b211829fb1 | ||
|
|
4473311bdb | ||
|
|
cbae98670b | ||
|
|
ceab445b9f | ||
|
|
88d2f6b83a | ||
|
|
7e6be184bc | ||
|
|
3948b082ad | ||
|
|
7a2d65967c | ||
|
|
970196d825 | ||
|
|
6e07f46df8 | ||
|
|
73107d6b0f | ||
|
|
0c853ac3ea | ||
|
|
7151fd8836 | ||
|
|
3d7684277a | ||
|
|
497ed9f933 | ||
|
|
ea408cc0d0 | ||
|
|
7145b72482 | ||
|
|
bd63545b0c | ||
|
|
e2f390c5da | ||
|
|
95c7f4fba3 | ||
|
|
72b91758c9 | ||
|
|
f1900f6a7b | ||
|
|
2d1430da13 | ||
|
|
7d5bb088b4 | ||
|
|
d392056457 | ||
|
|
1523ebe9f7 | ||
|
|
22afc6dadd | ||
|
|
7ec28231d9 | ||
|
|
1de110fbba | ||
|
|
7dbf6f97f6 | ||
|
|
1cf2526a79 | ||
|
|
86449790fe | ||
|
|
c82db2116b | ||
|
|
7bf724b1d3 | ||
|
|
9f212e7201 | ||
|
|
06b9433351 | ||
|
|
bc087cfefb | ||
|
|
9f37e4c907 | ||
|
|
addcde4f35 | ||
|
|
2f821b9e9b | ||
|
|
db80c5e97e | ||
|
|
9a39ccea8f | ||
|
|
1bb7bfaf7f | ||
|
|
3fc1344865 | ||
|
|
11b62114bb | ||
|
|
44f089508b | ||
|
|
d45b2c7947 | ||
|
|
6a48385111 | ||
|
|
1203a14563 | ||
|
|
9fb1a9537d | ||
|
|
407920e40a | ||
|
|
18d2b28c49 | ||
|
|
c37ea9aff5 | ||
|
|
f84f04591b | ||
|
|
c6fb6bde40 | ||
|
|
ddcb97f953 | ||
|
|
473a5542be | ||
|
|
30b65d3114 | ||
|
|
e28ca3922f | ||
|
|
d5a760776a | ||
|
|
6a418cfb8d | ||
|
|
f2f1c49c90 | ||
|
|
07fd0ccc9a | ||
|
|
592045cd54 | ||
|
|
3cd3052c56 | ||
|
|
c078deaab1 | ||
|
|
9776dc0433 | ||
|
|
2cdfe14e5a | ||
|
|
13e52962ee | ||
|
|
10b0cb108c | ||
|
|
c3bc4d6195 | ||
|
|
b12fb7ebc8 | ||
|
|
56557f7ff6 | ||
|
|
4ee1bca1d9 | ||
|
|
c6a7af3fa7 | ||
|
|
d00680a883 | ||
|
|
c7f23ca0d6 | ||
|
|
d0acc9827a | ||
|
|
c1010c3422 | ||
|
|
1181ad2bf0 | ||
|
|
053e687e79 | ||
|
|
7ac8ddde96 | ||
|
|
3dd5b2845b | ||
|
|
55f1cafb70 | ||
|
|
90b7b7ba5c | ||
|
|
2243de9e2f | ||
|
|
ef202fbe0c | ||
|
|
45e77e7739 | ||
|
|
076ed08bdd | ||
|
|
1785de0f31 | ||
|
|
27de2a42d9 | ||
|
|
514a8c737a | ||
|
|
32f7b06a36 | ||
|
|
67d64b804f | ||
|
|
bfe009f98d | ||
|
|
796bf5f85c | ||
|
|
7eb463a66e | ||
|
|
f417b1cf90 | ||
|
|
c3317819cb | ||
|
|
88fa9084e2 | ||
|
|
a3d2d0cd22 | ||
|
|
eaa45d8a9a | ||
|
|
f4260da1c2 | ||
|
|
f850e4d2d4 | ||
|
|
51c6867f72 | ||
|
|
40d578be95 | ||
|
|
0583bc9859 | ||
|
|
98f8192bde | ||
|
|
89621faaea | ||
|
|
e74cc0df27 | ||
|
|
afef04bb54 | ||
|
|
60048c6550 | ||
|
|
179d308fe0 | ||
|
|
372a455bea | ||
|
|
aa7444cd3d | ||
|
|
4fecf33416 | ||
|
|
2eb4248f90 | ||
|
|
cde1d18399 | ||
|
|
999dda8f83 | ||
|
|
568800c045 | ||
|
|
7255f6969b | ||
|
|
17fa1b5007 | ||
|
|
61e5ee5d63 | ||
|
|
cfc25d0a92 | ||
|
|
9c3d8dae57 | ||
|
|
6dad59cb92 | ||
|
|
4e2154e58f | ||
|
|
c110865bf2 | ||
|
|
b99c8b641a | ||
|
|
e111add17f | ||
|
|
5ae7276682 | ||
|
|
26c5bc9d97 | ||
|
|
346f102234 | ||
|
|
8c140f4725 | ||
|
|
631e235ef3 | ||
|
|
c33ffbae04 | ||
|
|
83108f815c | ||
|
|
f8c14e1d98 | ||
|
|
a588a1fd84 | ||
|
|
11596ec0f8 | ||
|
|
8fc43046eb | ||
|
|
a2b9a000dc | ||
|
|
c926214640 | ||
|
|
584501a1cc | ||
|
|
3ad71700dd | ||
|
|
176b9febb4 | ||
|
|
17f696d3b3 | ||
|
|
3c10e3b502 | ||
|
|
10d8ed4d98 | ||
|
|
4ba73dac34 | ||
|
|
8cd13d4b35 | ||
|
|
49956faab9 | ||
|
|
3b84345b77 | ||
|
|
1b731e525f | ||
|
|
c35994d5bf | ||
|
|
b75a3e112b | ||
|
|
ae5198e5e7 | ||
|
|
4d466fe879 | ||
|
|
71ca837ada | ||
|
|
8773a0b747 | ||
|
|
8617ceddf3 | ||
|
|
62d806d512 | ||
|
|
ee6a75c9b5 | ||
|
|
e53571d2f0 | ||
|
|
b5ebd12fe2 | ||
|
|
b1ba869b37 | ||
|
|
4846ab70d8 | ||
|
|
ec5bb88820 | ||
|
|
42fab1591d | ||
|
|
12dbd65f4c | ||
|
|
b7c064142e | ||
|
|
92afa52eec | ||
|
|
d1a9328793 | ||
|
|
55d339194d | ||
|
|
1d2916da8c | ||
|
|
7fc69a6b51 | ||
|
|
237c843621 | ||
|
|
ef0fefc506 | ||
|
|
9fb514ff81 | ||
|
|
dfc0efa8ed | ||
|
|
b56bfcea96 | ||
|
|
8ec5e81186 | ||
|
|
8e227f603d | ||
|
|
603467785b | ||
|
|
f70046e6b7 | ||
|
|
99b52e6e71 | ||
|
|
0ff4120692 | ||
|
|
8a45aa4185 | ||
|
|
168f9c46ea | ||
|
|
17b7305086 | ||
|
|
1a585a6c74 | ||
|
|
dd37959899 | ||
|
|
ff9145f8a5 | ||
|
|
42be50d10b | ||
|
|
b81cb554f5 | ||
|
|
2b7b7f6d97 | ||
|
|
4e671c54ee | ||
|
|
797af2e80f | ||
|
|
a7ffffc336 | ||
|
|
ed16bd133a | ||
|
|
22e4ee5604 | ||
|
|
e32416430c | ||
|
|
248248c6b2 | ||
|
|
4e062d86b4 | ||
|
|
d701d2ccf3 | ||
|
|
62d175c984 | ||
|
|
0cbaecca60 | ||
|
|
e7d2fa7084 | ||
|
|
67a01ef2ee | ||
|
|
fa02f94ca4 | ||
|
|
5c4bb69af9 | ||
|
|
a0989ad672 | ||
|
|
ef9347bcfb | ||
|
|
d5d1e89cbd | ||
|
|
867e1333d0 | ||
|
|
7c155f7456 | ||
|
|
e92da6a6ba | ||
|
|
1acb2a1a09 | ||
|
|
5deaaa278c | ||
|
|
44321c5c24 | ||
|
|
bce276d573 | ||
|
|
50b148ca22 | ||
|
|
18a241fe21 | ||
|
|
c69acfa5c8 | ||
|
|
00f44d558a | ||
|
|
dd84a57580 | ||
|
|
63bade7a0c | ||
|
|
375de085e2 | ||
|
|
fb4f361cd0 | ||
|
|
523be30974 | ||
|
|
a25e33d96e | ||
|
|
e03e87b791 | ||
|
|
c005b5fe9c | ||
|
|
93c22dd978 | ||
|
|
69f8d8fa7a | ||
|
|
cf1914fc00 | ||
|
|
a73b7052c9 | ||
|
|
9e456acbab | ||
|
|
01fab24c15 | ||
|
|
d6a232dbe0 | ||
|
|
f8543f7755 | ||
|
|
420a61491d | ||
|
|
2bffd569d7 | ||
|
|
f9aafeee1e | ||
|
|
2cf9ebc62c | ||
|
|
5717cb981e | ||
|
|
1b4c4be151 | ||
|
|
2fe9bfcd82 | ||
|
|
c422ce7c1d | ||
|
|
fcd58a95dd | ||
|
|
c96dd43174 | ||
|
|
a138196a6c | ||
|
|
04392babca | ||
|
|
7acc7c4dae | ||
|
|
abe744c5a0 | ||
|
|
01f2dd03d5 | ||
|
|
73fb2345fc | ||
|
|
27280ea8be | ||
|
|
80678b2188 | ||
|
|
41f365112c | ||
|
|
cb6c6fb374 | ||
|
|
882e2e42cf | ||
|
|
3959ca6270 | ||
|
|
0e2b1359e3 | ||
|
|
a5a5dbc408 | ||
|
|
df7e3f8635 | ||
|
|
6cffac79bd | ||
|
|
3a281b2399 | ||
|
|
01a36ab333 | ||
|
|
5bcd1e7ccd | ||
|
|
20b9f34b5c | ||
|
|
6e56ba9f24 | ||
|
|
3a4aac0213 | ||
|
|
f461b99722 | ||
|
|
618b3f5f2d | ||
|
|
277efc1dfb | ||
|
|
1af88be371 | ||
|
|
0d1a1b7526 | ||
|
|
6ff6c805af | ||
|
|
9eaf735bcd | ||
|
|
dcd6b19348 | ||
|
|
6c409d6b92 | ||
|
|
7d19154e18 | ||
|
|
7b777568ed | ||
|
|
0ad317213c | ||
|
|
07df403203 | ||
|
|
143a4d7f76 | ||
|
|
1714f410f0 | ||
|
|
7dc1524c08 | ||
|
|
e73caad0d7 | ||
|
|
8a7f34665b | ||
|
|
b19d6ab9c5 | ||
|
|
6059da918e | ||
|
|
bbd328d307 | ||
|
|
4437bae16d | ||
|
|
feee268970 | ||
|
|
cac819766e | ||
|
|
25d48f700c | ||
|
|
ddaba07d82 | ||
|
|
d62766a94d | ||
|
|
32779ab1f6 | ||
|
|
c113d390a7 | ||
|
|
fbabfc593d | ||
|
|
99117cbc90 | ||
|
|
918ad28a93 | ||
|
|
380a2b23e6 | ||
|
|
4001663982 | ||
|
|
73b6214a13 | ||
|
|
749508af01 | ||
|
|
3bf75fab3f | ||
|
|
71e9f1ab8d | ||
|
|
21b7734d92 | ||
|
|
7904f75782 | ||
|
|
e4cfe74887 | ||
|
|
e993c17f89 | ||
|
|
d636b4fdde | ||
|
|
3c8e055ed0 | ||
|
|
9b3c7b8afa | ||
|
|
071548a62f | ||
|
|
f221f64509 | ||
|
|
c3c70cf704 | ||
|
|
340ad44aab | ||
|
|
2e05830eb1 | ||
|
|
872f049b30 | ||
|
|
21ad5162c4 | ||
|
|
8ef9d68542 | ||
|
|
e104592e1f | ||
|
|
11771d9a37 | ||
|
|
0ebb192b2f | ||
|
|
ffed252df4 | ||
|
|
670cb423f9 | ||
|
|
5da37c573f | ||
|
|
2968b60ee0 | ||
|
|
ca7d701007 | ||
|
|
a87ae5173f | ||
|
|
c352249e30 | ||
|
|
4ce03b75bc | ||
|
|
7fc0b1ebd2 | ||
|
|
d546d828d3 | ||
|
|
faf4a1e370 | ||
|
|
b09d87970c | ||
|
|
cefcbfea8e | ||
|
|
c010a6f8b0 | ||
|
|
c546b75443 | ||
|
|
9d2ef9f453 | ||
|
|
2b3a8a4a5a | ||
|
|
aaf2830b8b | ||
|
|
281ccb3dad | ||
|
|
48d70d960c | ||
|
|
3a3f9789ce | ||
|
|
77b688f4fa | ||
|
|
c0eb5844e5 | ||
|
|
9bfc83ac5c | ||
|
|
0296f96c7b | ||
|
|
6d73c86209 | ||
|
|
9c071ea40d | ||
|
|
3404a61ebf | ||
|
|
2fd2a5403f | ||
|
|
db23d27eb4 | ||
|
|
cd3086f78d | ||
|
|
0ff059e388 | ||
|
|
aef7065e85 | ||
|
|
9bb99de0a7 | ||
|
|
83d6e04d39 | ||
|
|
9c60f122a6 | ||
|
|
8404f084c8 | ||
|
|
a10ab78e28 | ||
|
|
3a4210e9d7 | ||
|
|
d0ca3952a3 | ||
|
|
badf5b047b | ||
|
|
7bc28cc334 | ||
|
|
6ebed7a2a6 | ||
|
|
220fb068aa | ||
|
|
5084130e71 | ||
|
|
e0b9f79b9b | ||
|
|
a8b856432a | ||
|
|
c7b11360e9 | ||
|
|
266f64d848 | ||
|
|
2d49842cd1 | ||
|
|
bd005b6ba6 | ||
|
|
6755c397c9 | ||
|
|
932ed6b280 | ||
|
|
a43cb60097 | ||
|
|
a6c1cfe037 | ||
|
|
7197f15783 | ||
|
|
d375ddadc4 | ||
|
|
a7e13b1963 | ||
|
|
bb968fc5a2 | ||
|
|
f40b0f52e0 | ||
|
|
401dcb3635 | ||
|
|
131d34f318 | ||
|
|
14f073d410 | ||
|
|
0bf61ad57b | ||
|
|
2809fe95db | ||
|
|
c3f7b035fd | ||
|
|
2f4d8a634d | ||
|
|
79836520d9 | ||
|
|
e0ff3f16cc | ||
|
|
40c279ef95 | ||
|
|
e436f84244 | ||
|
|
c952c0ca16 | ||
|
|
1c483ffe4e | ||
|
|
9f7db44574 | ||
|
|
2126683203 | ||
|
|
adccd18015 | ||
|
|
a88c6da9ac | ||
|
|
624b576b1e | ||
|
|
281835887a | ||
|
|
c6d8208150 | ||
|
|
edf6e9ceac | ||
|
|
71ffe2f1c4 | ||
|
|
e4f7b78e9b | ||
|
|
459aab628d | ||
|
|
cfd5e69b81 | ||
|
|
d4e6b15d98 | ||
|
|
f5a77d3958 | ||
|
|
09d657e98e | ||
|
|
b1b94d2b7f | ||
|
|
9eb314fcaa | ||
|
|
d0c8245a58 | ||
|
|
87b70e2cb4 | ||
|
|
c5f3475f48 | ||
|
|
220c72d67f | ||
|
|
66038ef729 | ||
|
|
a670408617 | ||
|
|
1f93c39c58 | ||
|
|
5d2151ed64 | ||
|
|
63f824b218 | ||
|
|
2441068d54 | ||
|
|
0840ffa3dd | ||
|
|
e2a7b7e50d | ||
|
|
a6f6c2b9c5 | ||
|
|
a6b87ee144 | ||
|
|
837eff1704 | ||
|
|
a0902ad8d8 | ||
|
|
3b0311a1e4 | ||
|
|
123996aad0 | ||
|
|
0bcfd09536 | ||
|
|
6d0b4a28ab | ||
|
|
4f6320a7eb | ||
|
|
7430f9142f | ||
|
|
397e0d1368 | ||
|
|
360994b638 | ||
|
|
44b8947445 | ||
|
|
a88c15e101 | ||
|
|
8d9ab6a061 | ||
|
|
a364ab0d0f | ||
|
|
ef5c973c93 | ||
|
|
35322eccc1 | ||
|
|
892b8f155f | ||
|
|
228130ddc8 | ||
|
|
b4580eb04c | ||
|
|
3ba9cfba01 | ||
|
|
2ad5d2ea2a | ||
|
|
279291221c | ||
|
|
be2862ef4e | ||
|
|
67ec7ee5e9 | ||
|
|
f1a0619821 | ||
|
|
2bc43f7f37 | ||
|
|
4ab362ae17 | ||
|
|
d1a3adfcf0 | ||
|
|
dbb25bfeed | ||
|
|
8da62b310e | ||
|
|
5506e89aa9 | ||
|
|
4bc6ace201 | ||
|
|
213e9746ad | ||
|
|
a65519def0 | ||
|
|
0ceb7c411b | ||
|
|
01657e6991 | ||
|
|
b909da759d | ||
|
|
9519f3d988 | ||
|
|
8ae84cfaba | ||
|
|
78be85c84f | ||
|
|
e7ae983b41 | ||
|
|
f3b353f5f9 | ||
|
|
8948cb100b | ||
|
|
17075736a0 | ||
|
|
42729d9cce | ||
|
|
9153e03e5c | ||
|
|
3b19cc303f | ||
|
|
5c95977dcc | ||
|
|
bc309e42d8 | ||
|
|
a7ceacb991 | ||
|
|
5b1ef64e31 | ||
|
|
f2051f0440 | ||
|
|
dd1c667d8d | ||
|
|
2abdd71b41 | ||
|
|
9e9f5d01ad | ||
|
|
bafc6cebe1 | ||
|
|
5b6eefbf04 | ||
|
|
c017387214 | ||
|
|
81b9148b9e | ||
|
|
98bb151d85 | ||
|
|
a0c42a3fd1 | ||
|
|
c40559433b | ||
|
|
03d907e1e5 | ||
|
|
ce4de6227e | ||
|
|
bee224c567 | ||
|
|
e4de235e75 | ||
|
|
f42b1dfcbd | ||
|
|
c337b52ec8 | ||
|
|
c69b9b7b24 | ||
|
|
a4eff6de3f | ||
|
|
7f469eadff | ||
|
|
3c8881487f | ||
|
|
abee9c83b4 | ||
|
|
4ddba5f7ed | ||
|
|
a06f682e49 | ||
|
|
7e9baf9e25 | ||
|
|
d96ea5ba00 | ||
|
|
ad402ff85b | ||
|
|
653d7c5257 | ||
|
|
e0fdb34104 | ||
|
|
62ae830e49 | ||
|
|
b3a384e1d8 | ||
|
|
a05bea7de5 | ||
|
|
dfc5cf288c | ||
|
|
275943d8df | ||
|
|
e1fdd4341b | ||
|
|
ccc1b23bea | ||
|
|
f80e839ff4 | ||
|
|
63c3feb79e | ||
|
|
7e7461e8fb | ||
|
|
7753d823cb | ||
|
|
f9bcce6a68 | ||
|
|
197f07306b | ||
|
|
40cea0110f | ||
|
|
02879d94ff | ||
|
|
dd61795bb8 | ||
|
|
a14527ec06 | ||
|
|
1141f11955 | ||
|
|
09e77812b6 | ||
|
|
4e87cf9d74 | ||
|
|
207215980b | ||
|
|
dd60cc326c | ||
|
|
5eefca43e7 | ||
|
|
0da545ecac | ||
|
|
d8579a5b80 | ||
|
|
f3dd889d44 | ||
|
|
e00cab75bd | ||
|
|
97cdd79478 | ||
|
|
9c894f5935 | ||
|
|
eb397b5693 | ||
|
|
8b45d6f84f | ||
|
|
3bd550d6a2 | ||
|
|
7eca1284c8 | ||
|
|
ccd155572f | ||
|
|
e0f463c4f9 | ||
|
|
fc73e93b50 | ||
|
|
5695e4c03d | ||
|
|
ec107b290f | ||
|
|
9061800b30 | ||
|
|
82c09e66d2 | ||
|
|
20600b8cac | ||
|
|
e049fc2840 | ||
|
|
66bb71534b | ||
|
|
cde3320582 | ||
|
|
dce590fb21 | ||
|
|
b0b882cbb3 | ||
|
|
439d3b3ddb | ||
|
|
cc42391e0f | ||
|
|
69ebc8173e | ||
|
|
9cff241ad5 | ||
|
|
a82a587b32 | ||
|
|
4a6b5d5247 | ||
|
|
9b130e1d19 | ||
|
|
a1c965d70d | ||
|
|
11ca06b104 | ||
|
|
9c391bbda1 | ||
|
|
965ce633c3 | ||
|
|
f603c82e81 | ||
|
|
497adc3b42 | ||
|
|
06c98320a8 | ||
|
|
57ced37229 | ||
|
|
618a9b2d7b | ||
|
|
c7011d21aa | ||
|
|
9889b1a5fe | ||
|
|
8f675b0ee8 | ||
|
|
358b387283 | ||
|
|
42ec822379 | ||
|
|
8b2e79bcfa | ||
|
|
680563cc4c | ||
|
|
1d2d4b94c5 | ||
|
|
8019748396 | ||
|
|
6699399e51 | ||
|
|
eec50b524b | ||
|
|
5172f09b9f | ||
|
|
26a72619ae | ||
|
|
21e81e92a9 | ||
|
|
828aeefb1d | ||
|
|
7f2db8c267 | ||
|
|
d096b155f4 | ||
|
|
c33a63cabc | ||
|
|
416fcd0810 | ||
|
|
0fc9326a4c | ||
|
|
df995c4ef8 | ||
|
|
8c9f887613 | ||
|
|
3f12a51759 | ||
|
|
e51fe2934e | ||
|
|
fade526ae4 | ||
|
|
7897f10126 | ||
|
|
eb5b0767aa | ||
|
|
2fb599ea86 | ||
|
|
50e4b609c6 | ||
|
|
7e4e2c988a | ||
|
|
88a7a23132 | ||
|
|
2162627f35 | ||
|
|
bc3314a57d | ||
|
|
45b4895888 | ||
|
|
b6a35716ce | ||
|
|
b91a155e8d | ||
|
|
18db930866 | ||
|
|
76006fc346 | ||
|
|
30ba96e58f | ||
|
|
83fea631f1 | ||
|
|
f15249afe5 | ||
|
|
3e39daeb12 | ||
|
|
fd67da607e | ||
|
|
540e57f026 | ||
|
|
fdd7e91ba0 | ||
|
|
bd5abb2922 | ||
|
|
6423eab917 | ||
|
|
142d1f5cbc | ||
|
|
315623d361 | ||
|
|
03c8a91f6a | ||
|
|
0d4d201b70 | ||
|
|
7fb463abb9 | ||
|
|
9985816642 | ||
|
|
fe71ba992d | ||
|
|
13bf7d4ff1 | ||
|
|
38ea75e8ca | ||
|
|
823edd0bb2 | ||
|
|
3be081f476 | ||
|
|
254f65f299 | ||
|
|
8643e21913 | ||
|
|
b1cd8ea241 | ||
|
|
758a9c9096 | ||
|
|
7cf1b7ed51 | ||
|
|
1306cdd998 | ||
|
|
4be8472f61 | ||
|
|
f031bdfbc9 | ||
|
|
e1848c1d28 | ||
|
|
c83d22b5fc | ||
|
|
9b8b17b6f1 | ||
|
|
e4adc675e5 | ||
|
|
f095e619b9 | ||
|
|
dbfa6c925e | ||
|
|
ed0f6f75a7 | ||
|
|
b10a98a3ac | ||
|
|
4e5dfc8b18 | ||
|
|
688eca23ff | ||
|
|
acaa589bdd | ||
|
|
34a8f0c96b | ||
|
|
d93f2b335d | ||
|
|
0fbdb3f65d | ||
|
|
cc582dd4b4 | ||
|
|
091fcc3aa9 | ||
|
|
a4f5084589 | ||
|
|
71c976d212 | ||
|
|
38350ae33d | ||
|
|
01918a6f48 | ||
|
|
c4134ee71e | ||
|
|
5b3c96a9bb | ||
|
|
cb9fba98d8 | ||
|
|
474db2085e | ||
|
|
7c729d4c3c | ||
|
|
0ee993569f | ||
|
|
6c8d51f403 | ||
|
|
24264eb00e | ||
|
|
27f337aa11 | ||
|
|
2d69f386d0 | ||
|
|
4a15477783 | ||
|
|
8823a5ac1c | ||
|
|
cb2e6c9d02 | ||
|
|
4f44431900 | ||
|
|
20a00c4cdf | ||
|
|
1728a0c3e6 | ||
|
|
d05e4581c9 | ||
|
|
fd1784369a | ||
|
|
5f68e14d3b | ||
|
|
1eb7b8cf46 | ||
|
|
e56f5c4d6b | ||
|
|
7618dc504c | ||
|
|
75460d8586 | ||
|
|
1f8d79b69a | ||
|
|
d25026b749 | ||
|
|
3214cd0d56 | ||
|
|
1664d1b503 | ||
|
|
6e847b7d76 | ||
|
|
6e0e6d2654 | ||
|
|
6eb97a30a3 | ||
|
|
e32eb7e990 | ||
|
|
f323f54704 | ||
|
|
1a3bdf03c3 | ||
|
|
eed0ccad73 | ||
|
|
a5a4cce7f1 | ||
|
|
a26992ef55 | ||
|
|
cb97e8dd93 | ||
|
|
3c5a1605d5 | ||
|
|
aca8b5c89d | ||
|
|
23bf70296e | ||
|
|
3f32dd767e | ||
|
|
41a97c8f80 | ||
|
|
b255f02762 | ||
|
|
ee5e507ff6 | ||
|
|
7ec450912d | ||
|
|
039efd55d5 | ||
|
|
8bf8617876 | ||
|
|
4b46e21685 | ||
|
|
b1516f64eb | ||
|
|
439d47b4e4 | ||
|
|
e88df95b42 | ||
|
|
48b35bb495 | ||
|
|
861a235ecb | ||
|
|
799f1f6768 | ||
|
|
624e56db6a | ||
|
|
77b94f6030 | ||
|
|
5d06daeb5e | ||
|
|
b79fce76cb | ||
|
|
6f9a0e73bb | ||
|
|
953fb35f82 | ||
|
|
553fff270a | ||
|
|
8e77f17760 | ||
|
|
c5c92d50eb | ||
|
|
efef229b85 | ||
|
|
7569204a53 | ||
|
|
3a3443dff6 | ||
|
|
3fcaf5b903 | ||
|
|
b926d8a0cd | ||
|
|
fbeffee91e | ||
|
|
aef6d50b08 | ||
|
|
7b283bfaff | ||
|
|
bba66cbe28 | ||
|
|
d493658a58 | ||
|
|
c0f0350634 | ||
|
|
6251c97cd5 | ||
|
|
db61a09cf1 | ||
|
|
95ad2875b6 | ||
|
|
620c120503 | ||
|
|
ed0b5e649d | ||
|
|
d02d72e06d | ||
|
|
f5f7d47be1 | ||
|
|
d632266a40 | ||
|
|
fd067dd8b8 | ||
|
|
ac7323118e | ||
|
|
c50d6ac902 | ||
|
|
16fa40b893 | ||
|
|
e9126baaab | ||
|
|
23f3f1adfe | ||
|
|
741bea032c | ||
|
|
151b04637e | ||
|
|
af7e3cadde | ||
|
|
76672a4e34 | ||
|
|
4e9ba49272 | ||
|
|
6acb830263 | ||
|
|
fb60d01f6a | ||
|
|
80495e50f9 | ||
|
|
1fa38689d8 | ||
|
|
491babd5cd | ||
|
|
1e468c5541 | ||
|
|
ccd90df62f | ||
|
|
67ca2c704b | ||
|
|
5f6f2d5f51 | ||
|
|
ec8cc2b528 | ||
|
|
076cc764a7 | ||
|
|
82ba0c6c07 | ||
|
|
3b24db92b5 | ||
|
|
4cf4bf3a03 | ||
|
|
f9438c75d0 | ||
|
|
f3ea0420f8 | ||
|
|
179ed7cce6 | ||
|
|
1689131043 | ||
|
|
84b7cd593f | ||
|
|
a88c02854a | ||
|
|
1b279cd7ff | ||
|
|
802acb4d16 | ||
|
|
90268876f7 | ||
|
|
9e4c757f50 | ||
|
|
e558809043 | ||
|
|
ac394718ec | ||
|
|
e673127263 | ||
|
|
38c3c84969 | ||
|
|
3da4d6664b | ||
|
|
f0f0663d1b | ||
|
|
9cdd79e33f | ||
|
|
f07d4c9439 | ||
|
|
63f9f4291a | ||
|
|
d46d897ac9 | ||
|
|
fa2a66db67 | ||
|
|
bb04d5cc63 | ||
|
|
905549ea2d | ||
|
|
39a792adda | ||
|
|
ac762e95a6 | ||
|
|
597727f8be | ||
|
|
9c29966674 | ||
|
|
b45ec3f04e | ||
|
|
b2c98feea4 | ||
|
|
68d22253ec | ||
|
|
7eca383b10 | ||
|
|
108ea1522a | ||
|
|
15bbd088e6 | ||
|
|
d8a402ae5b | ||
|
|
23ba0c3396 | ||
|
|
cdd2ea3067 | ||
|
|
c8cc6f4fc1 | ||
|
|
ccced9f290 | ||
|
|
cc3d9f4eb7 | ||
|
|
572cb93bf8 | ||
|
|
c85888eb57 | ||
|
|
bcea1df01c | ||
|
|
f20247ae55 | ||
|
|
0d9a6d3c25 | ||
|
|
f9923452b3 | ||
|
|
f2761270f3 | ||
|
|
f45b8b1083 | ||
|
|
05c761dee9 | ||
|
|
003fd4d834 | ||
|
|
ec42db62a3 | ||
|
|
8b715d9c3f | ||
|
|
5c865b9b70 | ||
|
|
6f26c45143 | ||
|
|
3383486adc | ||
|
|
0426796d9f | ||
|
|
030e8dd1ac | ||
|
|
4c9a52044a | ||
|
|
857f791286 | ||
|
|
9885f1a19e | ||
|
|
003957a689 | ||
|
|
c1a8574d8f | ||
|
|
4236157823 | ||
|
|
a6389eb7de | ||
|
|
90bb855ffa | ||
|
|
7cd478418d | ||
|
|
90f2e40ff9 | ||
|
|
145390c7f3 | ||
|
|
1179217334 | ||
|
|
081bdd0828 | ||
|
|
6ec65cd4ca | ||
|
|
3060f27909 | ||
|
|
bae03404f4 | ||
|
|
1c7f754e5b | ||
|
|
4574f768ef | ||
|
|
f5e8857c5e | ||
|
|
1d70b590fc | ||
|
|
f40c78a064 | ||
|
|
ac88cab68f | ||
|
|
30df1c838d | ||
|
|
4693af0736 | ||
|
|
2bbf42b49d | ||
|
|
670024cf77 | ||
|
|
caf6dc0f05 | ||
|
|
280384fce3 | ||
|
|
30adc4c9b8 | ||
|
|
78ef0618bc | ||
|
|
b9fcae8da6 | ||
|
|
7ae6c62ddb | ||
|
|
835b47c196 | ||
|
|
c4fddcc6e9 | ||
|
|
b637f75164 | ||
|
|
4f14db8af2 | ||
|
|
82b7067fdf | ||
|
|
1fe196f95c | ||
|
|
048c406f49 | ||
|
|
b0572a5462 | ||
|
|
0244d794cd | ||
|
|
b0377da771 | ||
|
|
ad6625456e | ||
|
|
c31f797ab0 | ||
|
|
b701aa10d4 | ||
|
|
267e83d8a7 | ||
|
|
bf1639e044 | ||
|
|
52cdcdde76 | ||
|
|
f56939c16c | ||
|
|
d51c8997ee | ||
|
|
23cbc2b1d9 | ||
|
|
dd0ae255ad | ||
|
|
1f06dd40f7 | ||
|
|
a384ad5b12 | ||
|
|
ca10229565 | ||
|
|
6e82ab1f15 | ||
|
|
8c96ca42d5 | ||
|
|
b93a2ba1cf | ||
|
|
113e942c3c | ||
|
|
e6a3468598 | ||
|
|
45ef496dd5 | ||
|
|
383e73a5f5 | ||
|
|
a4d40177fd | ||
|
|
d06ebf23d4 | ||
|
|
87db69478d | ||
|
|
b43c277dc6 | ||
|
|
ad7d89b165 | ||
|
|
8ac1752743 | ||
|
|
bf4d51ea0b | ||
|
|
8e76cda200 | ||
|
|
ca343889fc | ||
|
|
4887936809 | ||
|
|
24fe8699ea | ||
|
|
f01d1c4385 | ||
|
|
c67b922185 | ||
|
|
5b22873b3d | ||
|
|
9c61843737 | ||
|
|
df84677d16 | ||
|
|
a1be45d0e7 | ||
|
|
0c7d0c0b6c | ||
|
|
a4861a3072 | ||
|
|
e0e545774a | ||
|
|
747855b960 | ||
|
|
31cebb969a | ||
|
|
214deeda54 | ||
|
|
5aadb6df19 | ||
|
|
18ce5ccf8f | ||
|
|
77ec27c730 | ||
|
|
b7750cf61c | ||
|
|
1e7d946d91 | ||
|
|
96e1b2d25c | ||
|
|
bff7107f56 | ||
|
|
4d1703fc06 | ||
|
|
12ddf241a5 | ||
|
|
547933e7e4 | ||
|
|
f2bcc6cc35 | ||
|
|
153841f91a | ||
|
|
a399451e1e | ||
|
|
265ef337a8 | ||
|
|
108277fb5d | ||
|
|
ada675dea2 | ||
|
|
1ee90a6fe7 | ||
|
|
240ada5775 | ||
|
|
e515042a36 | ||
|
|
ae87948a23 | ||
|
|
ad103dcafa | ||
|
|
14d48eba46 | ||
|
|
c59546fae0 | ||
|
|
7d847f4dc4 | ||
|
|
07255da6e9 | ||
|
|
220b6a9fee | ||
|
|
24f0757d82 | ||
|
|
3dd630d0a5 | ||
|
|
0b864aacdc | ||
|
|
ac67f3b53e | ||
|
|
097df180e2 | ||
|
|
a9d7135c19 | ||
|
|
bfce2c7508 | ||
|
|
fc6aa7374a | ||
|
|
8d2538f205 | ||
|
|
f663d37da7 | ||
|
|
f90eaa5f46 | ||
|
|
6449e8b1b9 | ||
|
|
a7b918837e | ||
|
|
dce691e15d | ||
|
|
648d08eb30 | ||
|
|
b043c4a5b8 | ||
|
|
5db9673904 | ||
|
|
0eb6ef2cd0 | ||
|
|
a2af4940aa | ||
|
|
310099d888 | ||
|
|
202fbc6812 | ||
|
|
311d71ec86 | ||
|
|
5af543dc4a | ||
|
|
c5d9ee8924 | ||
|
|
7183db1b7d | ||
|
|
a531a4f5e3 | ||
|
|
63ae407169 | ||
|
|
1b6909dd9b | ||
|
|
f5cc63156c | ||
|
|
e5276856cb | ||
|
|
db92699c02 | ||
|
|
7f4a69319a | ||
|
|
5ef3621556 | ||
|
|
6701977f1a | ||
|
|
353d12d2e6 | ||
|
|
717bcb8624 | ||
|
|
4f9a309de8 | ||
|
|
487b2495a1 | ||
|
|
2b48728741 | ||
|
|
58efe1550d | ||
|
|
16d8c25b23 | ||
|
|
65d4169f00 | ||
|
|
ffb9574312 | ||
|
|
976d0240c4 | ||
|
|
6e7b00a0f6 | ||
|
|
b4298979fe | ||
|
|
676591ffc0 | ||
|
|
975cba295b | ||
|
|
e46bac19fa | ||
|
|
90e90f61c1 | ||
|
|
47c8e1366f | ||
|
|
25f20b1967 | ||
|
|
51f60f3a1e | ||
|
|
6bbadbfaac | ||
|
|
340ecf6e9a | ||
|
|
86e90bba87 | ||
|
|
81e236b2de | ||
|
|
45887dec8e | ||
|
|
f27f2f8e49 | ||
|
|
4d74784209 | ||
|
|
527bb7abfe | ||
|
|
9f6ebd7c6e | ||
|
|
615ea969f8 | ||
|
|
4601c36f57 | ||
|
|
21cd05aad5 | ||
|
|
ca41909ec5 | ||
|
|
4d63544fe9 | ||
|
|
901e4851b9 | ||
|
|
9001b9ed3c | ||
|
|
d649b715ed | ||
|
|
65b2a24f7c | ||
|
|
726b350689 | ||
|
|
a0c6519de9 | ||
|
|
8421dcb762 | ||
|
|
9c565b155a | ||
|
|
94e5297960 | ||
|
|
52081c46d6 | ||
|
|
21d125c914 | ||
|
|
be306d09e9 | ||
|
|
c488f7c4d8 | ||
|
|
8174489787 | ||
|
|
99b76c8c3c | ||
|
|
a9f0b98d4d | ||
|
|
eb1d90a8cf | ||
|
|
15ae92aae9 | ||
|
|
e414c5fdfb | ||
|
|
a339ac0a72 | ||
|
|
21181075b4 | ||
|
|
67f327f805 | ||
|
|
8f3ac9ac8b | ||
|
|
30d9ca2bde | ||
|
|
b591d2b501 | ||
|
|
ccd4a79b39 | ||
|
|
eb96f38298 | ||
|
|
f0149faf88 | ||
|
|
ac55ce989d | ||
|
|
7176e5ef07 | ||
|
|
5989e3f65d | ||
|
|
5e4d3e7b82 | ||
|
|
550df4cdd6 | ||
|
|
9ac2556285 | ||
|
|
b43a5498a1 | ||
|
|
f161609929 | ||
|
|
34be473b7c | ||
|
|
863a5bc4fa | ||
|
|
20845a739f | ||
|
|
8d1c06d141 | ||
|
|
bd7c189c12 | ||
|
|
5c3c6e7f06 | ||
|
|
234681306c | ||
|
|
2de81cfc62 | ||
|
|
9e844d974c | ||
|
|
7779974143 | ||
|
|
339f4bfd23 | ||
|
|
5d5d3c5858 | ||
|
|
6f42dd556d | ||
|
|
976ae91dcc | ||
|
|
5ce97eeda5 | ||
|
|
0d23ff92b0 | ||
|
|
87610a5102 | ||
|
|
93a746043c | ||
|
|
4316f1cd31 | ||
|
|
cfa7c4feb8 | ||
|
|
083b7b46d9 | ||
|
|
3c87d137a3 | ||
|
|
ebc5e26c2d | ||
|
|
a385dae1ae | ||
|
|
1367ccab93 | ||
|
|
22bf4bc080 | ||
|
|
1a7d6ed49a | ||
|
|
725d6d5fce | ||
|
|
a8de45ce28 | ||
|
|
18ddbae60e | ||
|
|
5c8dd6c3c8 | ||
|
|
97c3854c40 | ||
|
|
30c3047482 | ||
|
|
3c1aa9a4ad | ||
|
|
19d10291bf | ||
|
|
28218755a5 | ||
|
|
d8a70166d3 | ||
|
|
c112cf66fe | ||
|
|
00125e4688 | ||
|
|
3558404c03 | ||
|
|
0a6b54a8c4 | ||
|
|
93a92a00ee | ||
|
|
d9e8bf1807 | ||
|
|
54042e399b | ||
|
|
1d484dbe5f | ||
|
|
ab4006ee2c | ||
|
|
524e9b372e | ||
|
|
2c20fc2ebf | ||
|
|
2a79537ba1 | ||
|
|
9a5e0c59b0 | ||
|
|
6cd76d69c3 | ||
|
|
0388093f7a | ||
|
|
fca7ef2f7b | ||
|
|
8cab10214e | ||
|
|
a3039c4c67 | ||
|
|
62b0293963 | ||
|
|
31ab238306 | ||
|
|
19dca4bcc9 | ||
|
|
35a602baaf | ||
|
|
09254014b1 | ||
|
|
3c8bbeafc7 | ||
|
|
9a6221ea40 | ||
|
|
db50f52bbc | ||
|
|
9e4671a4b4 | ||
|
|
96a4d3f432 | ||
|
|
bf162e60f1 | ||
|
|
d8c0edcc81 | ||
|
|
9868333e8e | ||
|
|
a06e29fecb | ||
|
|
43670cbbd0 | ||
|
|
52647b9a5d | ||
|
|
c799301011 | ||
|
|
7732f375d2 | ||
|
|
69064395eb | ||
|
|
9a2c1090a6 | ||
|
|
dc6a33b716 | ||
|
|
5038a38e29 | ||
|
|
2cd9ad8ce6 | ||
|
|
63911d4165 | ||
|
|
8e33cc1ae1 | ||
|
|
ff81aff254 | ||
|
|
f0db7190ff | ||
|
|
d541a4bd29 | ||
|
|
64436e7752 | ||
|
|
77c17e1d92 | ||
|
|
90e1b1f0ea | ||
|
|
247a4bc751 | ||
|
|
70985170e5 | ||
|
|
d7f674ce96 | ||
|
|
8e8c63bd67 | ||
|
|
3e1be63b0f | ||
|
|
b9d09202c9 | ||
|
|
e8704433de | ||
|
|
b272a8881b | ||
|
|
ca3cdb4458 | ||
|
|
157ec210a7 | ||
|
|
e7454132a2 | ||
|
|
77e93e1b79 | ||
|
|
cb8d5ab183 | ||
|
|
fb234205c2 | ||
|
|
d0ae6dd401 | ||
|
|
2650c60374 | ||
|
|
bcf705b85e | ||
|
|
e23c260cb0 | ||
|
|
21a5a34041 | ||
|
|
d7b3ed08ab | ||
|
|
a1bd65550e | ||
|
|
fe8aca630c | ||
|
|
f729cf621a | ||
|
|
25e2be3efd | ||
|
|
f7134990bd | ||
|
|
0358522533 | ||
|
|
4bf57ef56f | ||
|
|
71a25a109a | ||
|
|
4b22c2406c | ||
|
|
15324c276f | ||
|
|
e2a95d4b50 | ||
|
|
e3a0e1881d | ||
|
|
b98c120fb8 | ||
|
|
031c292136 | ||
|
|
5d1a639afd | ||
|
|
e1b3c286ef | ||
|
|
f38851b73d | ||
|
|
b6434d9581 | ||
|
|
72ca311f17 | ||
|
|
c5455ceee5 | ||
|
|
5a3338323c | ||
|
|
8a4b86dac9 | ||
|
|
bc4bf71d8f | ||
|
|
fe358e24e3 | ||
|
|
44c1b06609 | ||
|
|
587d356d6e | ||
|
|
d2fb1522a3 | ||
|
|
ab3698e3a4 | ||
|
|
422e87badb | ||
|
|
2b140b9a34 | ||
|
|
c8d2275c06 | ||
|
|
e67507478a | ||
|
|
b0707a61e7 | ||
|
|
9eb037bc87 | ||
|
|
140510fedf | ||
|
|
b8facc0ea9 | ||
|
|
360abb070a | ||
|
|
3bf6fed7b3 | ||
|
|
2ae6fd9d1e | ||
|
|
d14d50beb6 | ||
|
|
74225544c6 | ||
|
|
cd54793913 | ||
|
|
b574c4ad51 | ||
|
|
5907cc0de5 | ||
|
|
2bea7f8d69 | ||
|
|
9fb5ddbb4c | ||
|
|
dda16bfea6 | ||
|
|
06535f25dc | ||
|
|
d9548c01af | ||
|
|
6b2d25580c | ||
|
|
4f34031534 | ||
|
|
7e65f4da82 | ||
|
|
0e52c30bb8 | ||
|
|
06f3cc33ba | ||
|
|
824546d343 | ||
|
|
5850d8530e | ||
|
|
0cf03518f3 | ||
|
|
603f5e69ee | ||
|
|
e76b722e28 | ||
|
|
07bb6fef01 | ||
|
|
c2bb00ca2f | ||
|
|
6122642b81 | ||
|
|
47035671e8 | ||
|
|
f7f192e12b | ||
|
|
f1d8f30342 | ||
|
|
90750f59c1 | ||
|
|
65b57f0c21 | ||
|
|
23af31cb1c | ||
|
|
c344b30fc4 | ||
|
|
d7bd023afa | ||
|
|
4d239b3038 | ||
|
|
81ccba202c | ||
|
|
c6bb00085f | ||
|
|
7891346a4f | ||
|
|
ee6f69a227 | ||
|
|
5e3b7a4247 | ||
|
|
093b831799 | ||
|
|
6f11a64af5 | ||
|
|
1a52700238 | ||
|
|
1d18f2031c | ||
|
|
d4a771a623 | ||
|
|
fa888a4ba1 | ||
|
|
d4180d35dd | ||
|
|
323bba99f1 | ||
|
|
8ef800f64f | ||
|
|
004c99ab2f | ||
|
|
fb5274145a | ||
|
|
41cd8f8e6d | ||
|
|
539dea6411 | ||
|
|
5502fd1054 | ||
|
|
a48d0a494f | ||
|
|
d3ff8ca00f | ||
|
|
fe50593c66 | ||
|
|
be354e85c9 | ||
|
|
64a9549225 | ||
|
|
71f5d5da36 | ||
|
|
b6731ea47c | ||
|
|
545300e474 | ||
|
|
a653d2f5e2 | ||
|
|
9f99ee61c7 | ||
|
|
10de5a3ec7 | ||
|
|
4a55b97d11 | ||
|
|
2e58bc3113 | ||
|
|
04a8439c39 | ||
|
|
571386cdf4 | ||
|
|
ca3edc3673 | ||
|
|
2f70c842b8 | ||
|
|
6b3f023d98 | ||
|
|
1da672df7d | ||
|
|
10848c2e9a | ||
|
|
25f7dbd3e9 | ||
|
|
c58d8af706 | ||
|
|
03d5ee6738 | ||
|
|
ea9d0c0263 | ||
|
|
950246b331 | ||
|
|
d9b344a247 | ||
|
|
f0a6bfa23c | ||
|
|
dab65e4ba6 | ||
|
|
785c01218f | ||
|
|
88f2a1d43a | ||
|
|
a8132470e4 | ||
|
|
1c2a2dde8e | ||
|
|
c0228d8ff2 | ||
|
|
088b6f0ea9 | ||
|
|
e25150296a | ||
|
|
ce5ecda534 | ||
|
|
840b41c450 | ||
|
|
15713219e5 | ||
|
|
b71b478a36 | ||
|
|
19caac69d8 | ||
|
|
974fc65e0f | ||
|
|
65f65ec4e4 | ||
|
|
72d5cdf9ab | ||
|
|
ab27fdc692 | ||
|
|
965af75d23 | ||
|
|
88c810ed09 | ||
|
|
6c9800bcc3 | ||
|
|
83de658ee4 | ||
|
|
0acc90759c | ||
|
|
e6aa2610bc | ||
|
|
98706d31dc | ||
|
|
00185a39d9 | ||
|
|
f092e69d12 | ||
|
|
ae7c999712 | ||
|
|
f3d62f1d3b | ||
|
|
9be37da077 | ||
|
|
e5267506e0 | ||
|
|
e121faffa1 | ||
|
|
0d42cdaffd | ||
|
|
530f8e5b26 | ||
|
|
fbab88b0e1 | ||
|
|
58f18d5b12 | ||
|
|
d20ca32440 | ||
|
|
fe640d764a | ||
|
|
f48fc0d8b1 | ||
|
|
16f1267c29 | ||
|
|
01c5b53ba1 | ||
|
|
047f1b9de9 | ||
|
|
b7b4faff96 | ||
|
|
67ea7ce0ab | ||
|
|
cee7bfa9f0 | ||
|
|
ad32f64ef6 | ||
|
|
8d6342c53d | ||
|
|
58162ec170 | ||
|
|
d802165e03 | ||
|
|
c1e57e49ae | ||
|
|
4bab6f9fdb | ||
|
|
afcd5420ee | ||
|
|
85e8f8eb6a | ||
|
|
635e053e6d | ||
|
|
77c6038711 | ||
|
|
a473830533 | ||
|
|
99390be127 | ||
|
|
c20f8eb5b3 | ||
|
|
1a145f68a7 | ||
|
|
5364474823 | ||
|
|
97b492756a | ||
|
|
5984bc2ad3 | ||
|
|
358b2ab4ba | ||
|
|
81f1311a60 | ||
|
|
f4b87e2967 | ||
|
|
60656b6255 | ||
|
|
e585a5d8a3 | ||
|
|
981cefe8d3 | ||
|
|
36a428b8fc | ||
|
|
d22cf1aed1 | ||
|
|
8e54babf10 | ||
|
|
e1a0af8745 | ||
|
|
16e9d658d5 | ||
|
|
342f4bc2e0 | ||
|
|
eac795abc3 | ||
|
|
4f60948bff | ||
|
|
c3bf1a7741 | ||
|
|
f6680a0051 | ||
|
|
7fc308ed26 | ||
|
|
7d0256c9fb | ||
|
|
0a993cd9d7 | ||
|
|
3e703cc281 | ||
|
|
aa3897a880 | ||
|
|
aa00999fca | ||
|
|
d869d8e86f | ||
|
|
b567cb57e1 | ||
|
|
05b30bf83e | ||
|
|
1268b41570 | ||
|
|
93fdb06d7d | ||
|
|
f9fbb57d31 | ||
|
|
f55bba7244 | ||
|
|
244ee673d6 | ||
|
|
a56575a6d2 | ||
|
|
7fe5eaf6b7 | ||
|
|
aa1f96c73b | ||
|
|
37f1337a0b | ||
|
|
78b57787fa | ||
|
|
767f286a9f | ||
|
|
ffaa4a8922 | ||
|
|
848728858c | ||
|
|
5e3c883f2c | ||
|
|
528f9cd583 | ||
|
|
8ead7783ab | ||
|
|
2a36ba9680 | ||
|
|
8eb16ba02d | ||
|
|
a6f2cc9cbf | ||
|
|
180c673c78 | ||
|
|
6985d2c914 | ||
|
|
5520ce3c4a | ||
|
|
9b3e0255f4 | ||
|
|
4ac530d289 | ||
|
|
5bdc6e53e5 | ||
|
|
dd0aa90aa1 | ||
|
|
1a3c0063a5 | ||
|
|
a13c461890 | ||
|
|
1f78b9c7af | ||
|
|
da8b08b5fe | ||
|
|
30da85c3d8 | ||
|
|
50727527bc | ||
|
|
36d74d2a97 | ||
|
|
a5588e4bb7 | ||
|
|
8af8c10559 | ||
|
|
d3c96ec2ee | ||
|
|
85220dd77d | ||
|
|
01f2c38ee7 | ||
|
|
25e398645f | ||
|
|
c4f2373ac2 | ||
|
|
2ac5ea42af | ||
|
|
d2b925c709 | ||
|
|
87e8430921 | ||
|
|
d380820f3a | ||
|
|
309425833b | ||
|
|
9bbb9a8f0a | ||
|
|
054c6eefdb | ||
|
|
674dd27649 | ||
|
|
adbe1d4f06 | ||
|
|
6a51b1d570 | ||
|
|
81a389151f | ||
|
|
625570e730 | ||
|
|
23c5a1e6e9 | ||
|
|
9f2dbc9df4 | ||
|
|
992b9c46dd | ||
|
|
aab1a67d05 | ||
|
|
79a1de2f17 | ||
|
|
b18732173a | ||
|
|
d9f1a55c90 | ||
|
|
d5ff7fda6e | ||
|
|
3d7e7c53c5 | ||
|
|
0c9acb0f62 | ||
|
|
2ac2985cf2 | ||
|
|
e628896c2b | ||
|
|
da8fd5b30a | ||
|
|
9615efd940 | ||
|
|
41046499c6 | ||
|
|
04f908a957 | ||
|
|
8da1dd2b45 | ||
|
|
6e5238d037 | ||
|
|
2b2d4bae4e | ||
|
|
2b4dd8b9af | ||
|
|
aa28e4e81f | ||
|
|
6da1a105cb | ||
|
|
6ca1e5c4b0 | ||
|
|
86230b9ac8 | ||
|
|
d3d37ad0ce | ||
|
|
6214148d35 | ||
|
|
a9e9f9afb0 | ||
|
|
1b0d064743 | ||
|
|
d2da41b0bd | ||
|
|
49908386ef | ||
|
|
7ad3e2b56b | ||
|
|
ba63111f45 | ||
|
|
53d4f82ce1 | ||
|
|
83917c4c30 | ||
|
|
6ccd9d6fa4 | ||
|
|
175f20a9dc | ||
|
|
1646bec1a4 | ||
|
|
dd04b6a873 | ||
|
|
a651572cfd | ||
|
|
b4a0004f44 | ||
|
|
51bd91edc0 | ||
|
|
8e56c93fef | ||
|
|
e790146627 | ||
|
|
fd7c1fe584 | ||
|
|
84c7e457e9 | ||
|
|
a65fa54514 | ||
|
|
20cbc1d145 | ||
|
|
7670dc7efc | ||
|
|
24ba60168d | ||
|
|
7f29b870e7 | ||
|
|
61b03b72b0 | ||
|
|
93c9c45580 | ||
|
|
29e0ff61d7 | ||
|
|
cfe54b201d | ||
|
|
c649610473 | ||
|
|
d6768cf921 | ||
|
|
60d8413940 | ||
|
|
48b9023de4 | ||
|
|
751503c434 | ||
|
|
7ba6067a37 | ||
|
|
1edbaa4e62 | ||
|
|
9848ad32fd | ||
|
|
2b801e2086 | ||
|
|
d2c2c46541 | ||
|
|
c18dfa058a | ||
|
|
12632f16b8 | ||
|
|
25934200de | ||
|
|
24ced90913 | ||
|
|
0dcc87bd21 | ||
|
|
20e8b67eb6 | ||
|
|
7e362e0c46 | ||
|
|
751208cedf | ||
|
|
53808f254e | ||
|
|
ff82e41404 | ||
|
|
96e5905bce | ||
|
|
133fda11f2 | ||
|
|
884f317d50 | ||
|
|
b02faf5641 | ||
|
|
21fae634a5 | ||
|
|
56937416a9 | ||
|
|
20b7f8a8e0 | ||
|
|
bf4231dd4b | ||
|
|
31803d10aa | ||
|
|
d95d169ac5 | ||
|
|
f499f71f64 | ||
|
|
356836ccbb | ||
|
|
03537a6be4 | ||
|
|
f5a49280c3 | ||
|
|
dcddb19e5b | ||
|
|
3c64c18bfc | ||
|
|
48ebb25c25 | ||
|
|
7062b216b8 | ||
|
|
99a73cb4fa | ||
|
|
48f19b5fde | ||
|
|
5d89fb8dfa | ||
|
|
4ae98f8b21 | ||
|
|
fcdf08e4d7 | ||
|
|
cc8c783bb2 | ||
|
|
30f5ccb80d | ||
|
|
01f811d546 | ||
|
|
31f674da3c | ||
|
|
926efed31c | ||
|
|
d842365e4c | ||
|
|
8726d2fe2e | ||
|
|
3e3667f254 | ||
|
|
496e485691 | ||
|
|
99a73c5991 | ||
|
|
d7607973fa | ||
|
|
e8e6368cc8 | ||
|
|
1f8ba53ca7 | ||
|
|
ff0d871612 | ||
|
|
39e360f93a | ||
|
|
4e8e298eb3 | ||
|
|
487ac9cd19 | ||
|
|
bef52570ae | ||
|
|
c65fd3a289 | ||
|
|
34401cf0c3 | ||
|
|
be12720eb7 | ||
|
|
9a23e1a9df | ||
|
|
52625de52c | ||
|
|
01f7e768f6 | ||
|
|
f37f872e5f | ||
|
|
51f546fe92 | ||
|
|
309877088d | ||
|
|
a58dd8f6ab | ||
|
|
28d61f0d7f | ||
|
|
5ca5884ad6 | ||
|
|
21dae4577a | ||
|
|
d63cb8b537 | ||
|
|
0d4b77a24b | ||
|
|
2b89d9b1db | ||
|
|
60ec79eac3 | ||
|
|
a540a68561 | ||
|
|
d1d23ec5e6 | ||
|
|
1771063fe2 | ||
|
|
552d8ca5f0 | ||
|
|
6831ee6f0a | ||
|
|
6dc1fc03c1 | ||
|
|
9017ec5865 | ||
|
|
3427174eb0 | ||
|
|
100ada0ed6 | ||
|
|
41fd380d1b | ||
|
|
b1d40efd99 | ||
|
|
3db1c1761e | ||
|
|
5bcec9289e | ||
|
|
157e42de22 | ||
|
|
642ee87fcc | ||
|
|
792b033255 | ||
|
|
0f6884421b | ||
|
|
d85a46380c | ||
|
|
fc43f3c730 | ||
|
|
61f07b0c4d | ||
|
|
bfc72c04fb | ||
|
|
2ba6bb21fb | ||
|
|
fe0fdf60b4 | ||
|
|
c3aaf005e2 | ||
|
|
f9326053b9 | ||
|
|
73ea15db8e | ||
|
|
611537eaed | ||
|
|
d5e9279c1d | ||
|
|
ba22fc8b78 | ||
|
|
a411c497ab | ||
|
|
0a191d6b09 | ||
|
|
dccfcd10f7 | ||
|
|
bb329d8a5c | ||
|
|
d6edaa0970 | ||
|
|
14c9c61275 | ||
|
|
27d52badb1 | ||
|
|
614c4d1876 | ||
|
|
37db5928b7 | ||
|
|
22a4eb6b27 | ||
|
|
1b086c928c | ||
|
|
9edba18489 | ||
|
|
53cb7e828b | ||
|
|
3d3bea618e | ||
|
|
32f96b5c73 | ||
|
|
e403576cf9 | ||
|
|
527154e6df | ||
|
|
429e15c4a6 | ||
|
|
df5dc1c9bb | ||
|
|
a62f590653 | ||
|
|
8dd1f3ffa5 | ||
|
|
7cc4d88726 | ||
|
|
5f9a61616b | ||
|
|
52e3364efa | ||
|
|
b7e926eef6 | ||
|
|
ce8bd20944 | ||
|
|
3e1ba6cc24 | ||
|
|
abd3d3946d | ||
|
|
f3837dd686 | ||
|
|
dfbf1b2205 | ||
|
|
8dc32aeedb | ||
|
|
3198522a7f | ||
|
|
a173324069 | ||
|
|
ffd1d95806 | ||
|
|
f91e1ae83f | ||
|
|
217a2d9ea5 | ||
|
|
4d982f5aca | ||
|
|
c02cbaecd8 | ||
|
|
5d61888657 | ||
|
|
6b6a82c147 | ||
|
|
107c0dd1a8 | ||
|
|
85c02dbe7b | ||
|
|
9cab88071b | ||
|
|
9ac4c730fb | ||
|
|
09b6e8e804 | ||
|
|
5b665226a2 | ||
|
|
82aa366adf | ||
|
|
cc9266e56c | ||
|
|
d5018e77a3 | ||
|
|
2f9ee88408 | ||
|
|
917fb328bb | ||
|
|
0a0cd4b9d3 | ||
|
|
dc3b54a681 | ||
|
|
6e074a196a | ||
|
|
3d39d035c1 | ||
|
|
ed7db8e489 | ||
|
|
26b3d15ea0 | ||
|
|
1bfb16592b | ||
|
|
8df4fd9e94 | ||
|
|
0fc83ba999 | ||
|
|
afbd0e77d0 | ||
|
|
3dd6cbc556 | ||
|
|
6ee2eb21dd | ||
|
|
b5216f6ec8 | ||
|
|
31df2dd9dd | ||
|
|
fee88d289d | ||
|
|
7526a89463 | ||
|
|
281a869ef6 | ||
|
|
6f978af77b | ||
|
|
79a641ccf1 | ||
|
|
c5b7eba457 | ||
|
|
786f4cd2c2 | ||
|
|
25f2b01a3c | ||
|
|
3163d016db | ||
|
|
0daa08416a | ||
|
|
f6eb000381 | ||
|
|
20e67bc5e6 | ||
|
|
31863c68d8 | ||
|
|
e46af913be | ||
|
|
8ebac18f50 | ||
|
|
537451f0b1 | ||
|
|
e009a910cc | ||
|
|
c41b9b7ddc | ||
|
|
b8bb24d4bf | ||
|
|
4d5eb4ce7d | ||
|
|
0356ba34a0 | ||
|
|
c5b9732aed | ||
|
|
e7ab8d476d | ||
|
|
6bc86a6baa | ||
|
|
b0434fa486 | ||
|
|
fcabf0ef0d | ||
|
|
f8e046bb33 | ||
|
|
1a22a507d6 | ||
|
|
36272c8136 | ||
|
|
77bf133cd2 | ||
|
|
aff95ee587 | ||
|
|
29537b9991 | ||
|
|
530e049d4a | ||
|
|
5891847ae4 | ||
|
|
a56c7e5f1a | ||
|
|
0f4efc018d | ||
|
|
5a5990be09 | ||
|
|
50bd4d2e4e | ||
|
|
b98b612204 | ||
|
|
028cca16e6 | ||
|
|
1a132e4fdb | ||
|
|
aa137d8be0 | ||
|
|
4bb6f23ae1 | ||
|
|
39a3cfd4d9 | ||
|
|
4b2168ab8e | ||
|
|
0544b164fc | ||
|
|
4e0d47f1dd | ||
|
|
d7fdb8e015 | ||
|
|
58f2b39bc8 | ||
|
|
89fbe4fdfa | ||
|
|
b85dccca92 | ||
|
|
d3d9b5401b | ||
|
|
a075d581ef | ||
|
|
a173ab1e31 | ||
|
|
114e4d3fe6 | ||
|
|
cd1207329b | ||
|
|
d5c7cd5e50 | ||
|
|
55237b094a | ||
|
|
45ffcdee7b | ||
|
|
b253308eee | ||
|
|
05b791a621 | ||
|
|
cc349e9a32 | ||
|
|
dfcf567de0 | ||
|
|
73ef06018e | ||
|
|
a338e0efd5 | ||
|
|
7383bd393e | ||
|
|
763d850a0e | ||
|
|
89d5127900 | ||
|
|
1fe626ec7c | ||
|
|
c5ed7e2a15 | ||
|
|
fc96f62794 | ||
|
|
d50a18d9eb | ||
|
|
f8ffb005c8 | ||
|
|
60f7756626 | ||
|
|
3ce99cf4e1 | ||
|
|
04f032d6e3 | ||
|
|
e6d232bfef | ||
|
|
18dea24df8 | ||
|
|
0adf93853d | ||
|
|
c526c71f56 | ||
|
|
a0d388875e | ||
|
|
5081ba6802 | ||
|
|
70049185a5 | ||
|
|
a1553dd12b | ||
|
|
e2412e3f21 | ||
|
|
58d497ab7a | ||
|
|
52cce2d710 | ||
|
|
099fa1df34 | ||
|
|
cf3d236b9f | ||
|
|
894fcd90e7 | ||
|
|
1d90d98e40 | ||
|
|
bddab5e489 | ||
|
|
4dd47fbc78 | ||
|
|
98ccad8105 | ||
|
|
de2213a621 | ||
|
|
583b8e3ade | ||
|
|
b5fffc71c9 | ||
|
|
0011903e23 | ||
|
|
9bc27561ec | ||
|
|
76100a6f08 | ||
|
|
38b83362b6 | ||
|
|
c13329c25a | ||
|
|
6798c177c6 | ||
|
|
1447fd0a12 | ||
|
|
8fbd79fa2e | ||
|
|
9d4638ef4c | ||
|
|
8f56f5cfcc | ||
|
|
60fd7e2268 | ||
|
|
cb21a5b309 | ||
|
|
1330c10fc8 | ||
|
|
be92d0b6a4 | ||
|
|
df4e79c06c | ||
|
|
7392e1af59 | ||
|
|
8c06b92225 | ||
|
|
34700d560f | ||
|
|
5e93dd6592 | ||
|
|
4edcc59c3d | ||
|
|
c023b1000e | ||
|
|
150e43f3fd | ||
|
|
b6d368d7a0 | ||
|
|
34e445a480 | ||
|
|
5086a1e825 | ||
|
|
38ce53bc85 | ||
|
|
89c11221ed | ||
|
|
025566b494 | ||
|
|
4f8380959c | ||
|
|
2db5de76fc | ||
|
|
2e51e207f9 | ||
|
|
cbc552e91e | ||
|
|
511ffc3b44 | ||
|
|
e36fd7d29f | ||
|
|
af9fe0a038 | ||
|
|
893e05540c | ||
|
|
b2a85bc12e | ||
|
|
721eb56d0c | ||
|
|
cc49f9b657 | ||
|
|
2491a67ebf | ||
|
|
1003b847b6 | ||
|
|
ad0a1bf70d | ||
|
|
b98c25c1fb | ||
|
|
5eb8e1eec8 | ||
|
|
d40897404b | ||
|
|
485528cffa | ||
|
|
d3ead7061e | ||
|
|
45d981caab | ||
|
|
ca01adb503 | ||
|
|
fceb5a75b0 | ||
|
|
bfd05d3d27 | ||
|
|
72fa3c0492 | ||
|
|
9458f7c7d0 | ||
|
|
a5ba69d68d | ||
|
|
8feaefadcf | ||
|
|
38fdd063d9 | ||
|
|
72c9604bcb | ||
|
|
55662eca69 | ||
|
|
9dc05a57ec | ||
|
|
7c89f9d18c | ||
|
|
8c259859ab | ||
|
|
297cebd833 | ||
|
|
e78b8c16be | ||
|
|
9c30e0210b | ||
|
|
6d7b26d4e0 | ||
|
|
eb2c083159 | ||
|
|
185f40eb8b | ||
|
|
3067705c10 | ||
|
|
8a13d344a8 | ||
|
|
271a839957 | ||
|
|
679b617649 | ||
|
|
95a34628a3 | ||
|
|
7e6fc79eb2 | ||
|
|
5347f460b4 | ||
|
|
cd69681ae5 | ||
|
|
5417a514e9 | ||
|
|
5e75a5c81c | ||
|
|
6f339939c4 | ||
|
|
6fa0bb991a | ||
|
|
5a9394c65f | ||
|
|
cb5bc242db | ||
|
|
2d77173dfa | ||
|
|
42b5b7d2dd | ||
|
|
db1b21b9aa | ||
|
|
7989a7f903 | ||
|
|
f9c8c4d216 | ||
|
|
4ed22ad932 | ||
|
|
666d9e88f5 | ||
|
|
14b30de407 | ||
|
|
27c64f7740 | ||
|
|
42bc552dd7 | ||
|
|
79ed9de4c1 | ||
|
|
0ae05fdf99 | ||
|
|
4a72bd7919 | ||
|
|
076eaba6e3 | ||
|
|
0ced060b87 | ||
|
|
2aa501bf3d | ||
|
|
046b348bd3 | ||
|
|
aa9b14aff4 | ||
|
|
7e6b7795f1 | ||
|
|
d6a2ab08ac | ||
|
|
f106da0d09 | ||
|
|
e0498ce54a | ||
|
|
0fcb368f47 | ||
|
|
9474b8cdac | ||
|
|
886861c9f4 | ||
|
|
08729315c6 | ||
|
|
53fb74b3f0 | ||
|
|
19876161c7 | ||
|
|
618a1c7119 | ||
|
|
1c4ef29962 | ||
|
|
f201bfb998 | ||
|
|
0d993947ee | ||
|
|
b61d554dc8 | ||
|
|
2bc73b4a27 | ||
|
|
3a73ae1683 | ||
|
|
9bf8e8573c | ||
|
|
e3a02ea5c7 | ||
|
|
35532d6b0a | ||
|
|
37260962e5 | ||
|
|
5ac974c9b2 | ||
|
|
339da1da3d | ||
|
|
058e72d29c | ||
|
|
eb2cf1698f | ||
|
|
16f0ece75b | ||
|
|
9a91da9ccd | ||
|
|
e39586c81d | ||
|
|
2d87bb92ed | ||
|
|
db0695e46a | ||
|
|
6e56070386 | ||
|
|
d177184777 | ||
|
|
0a004e0fce | ||
|
|
7ab921ff02 | ||
|
|
382d8478bf | ||
|
|
09597fe8dc | ||
|
|
aec50722fc | ||
|
|
6db2a58008 | ||
|
|
a1c42c2753 | ||
|
|
671faa4b99 | ||
|
|
58adff307f | ||
|
|
5d626ac561 | ||
|
|
11c3a9f60d | ||
|
|
130d2d8de0 | ||
|
|
ed0c80e1cb | ||
|
|
fec6674597 | ||
|
|
dab230845d | ||
|
|
21e9d5c5c3 | ||
|
|
a58ae0c5d0 | ||
|
|
bf8479bec6 | ||
|
|
50d0a2643b | ||
|
|
2c163d175f | ||
|
|
ddbfc40303 | ||
|
|
b88da83a12 | ||
|
|
e8f5a85ffd | ||
|
|
af7b96c14a | ||
|
|
3913c10afb | ||
|
|
8b22a4f4f8 | ||
|
|
6c9b10f73d | ||
|
|
17a58ee0a9 | ||
|
|
3b554c709b | ||
|
|
070e2a3c13 | ||
|
|
9d90cb6962 | ||
|
|
cd2a23384f | ||
|
|
9576860f8c | ||
|
|
6a16040462 | ||
|
|
ead8ac58c6 | ||
|
|
908a93a470 | ||
|
|
cc0ee3dc29 | ||
|
|
d76c923623 | ||
|
|
e812c35689 | ||
|
|
ea872f8098 | ||
|
|
246423b4b4 | ||
|
|
f76b3890ff | ||
|
|
38508c5a3f | ||
|
|
9f496e5efa | ||
|
|
41c01b523f | ||
|
|
cbcc6fc9f5 | ||
|
|
7cb557cba7 | ||
|
|
caf93cc408 | ||
|
|
e6a44bd8ac | ||
|
|
f475ec4ce6 | ||
|
|
24838a62b4 | ||
|
|
2a61ff0794 | ||
|
|
fb9eca4226 | ||
|
|
c082abfb65 | ||
|
|
1f662465c2 | ||
|
|
b6833f08df | ||
|
|
c8f01480d6 | ||
|
|
c388cbe8e4 | ||
|
|
6773a2b3bf | ||
|
|
59dfb1c175 | ||
|
|
345fd3b285 | ||
|
|
ddefab8d56 | ||
|
|
e0e79a2cb3 | ||
|
|
a89abb435f | ||
|
|
9b387e7682 | ||
|
|
51b69ef00b | ||
|
|
c31da9bc8f | ||
|
|
ca3cc5b23e | ||
|
|
3ba2842b53 | ||
|
|
7e2f3cff44 | ||
|
|
ec5560374c | ||
|
|
aab7102b9b | ||
|
|
3a4bdf1856 | ||
|
|
ff0d039a1f | ||
|
|
f4460894be | ||
|
|
3c788147ca | ||
|
|
805fa96951 | ||
|
|
7598612b86 | ||
|
|
44ba16a391 | ||
|
|
67b94acd42 | ||
|
|
fe76e0aea2 | ||
|
|
43f58d9f61 | ||
|
|
f39e40664f | ||
|
|
13e02bb179 | ||
|
|
39f0f000f8 | ||
|
|
6cd976d036 | ||
|
|
49b91235bb | ||
|
|
82ed1bc343 | ||
|
|
e451421db3 | ||
|
|
fec197ccac | ||
|
|
ccdf105759 | ||
|
|
d328f4c3b6 | ||
|
|
29e03ac851 | ||
|
|
4997f0fe57 | ||
|
|
c985ad7644 | ||
|
|
b9bf0b942c | ||
|
|
f2b4341ad6 | ||
|
|
11861fb8d7 | ||
|
|
e3d703b80f | ||
|
|
2ae7839b66 | ||
|
|
0d66362cee | ||
|
|
3ce85b2270 | ||
|
|
9ec4ae83af | ||
|
|
4f21344e87 | ||
|
|
71dcf8833c | ||
|
|
1ce6d8b627 | ||
|
|
d16095c856 | ||
|
|
9f56d9c807 | ||
|
|
6cd22e5786 | ||
|
|
b7249d66b3 | ||
|
|
2c81875019 | ||
|
|
5dd39bfca5 | ||
|
|
58c5373890 | ||
|
|
5d64012868 | ||
|
|
b6d2a12ceb | ||
|
|
06fe879745 | ||
|
|
17de9a37f1 | ||
|
|
d44571257a | ||
|
|
f068d1ba57 | ||
|
|
fac4428766 | ||
|
|
6fcf16b710 | ||
|
|
18f0b24a7f | ||
|
|
e4d2ba30b5 | ||
|
|
650c9d4e36 | ||
|
|
53d70fff01 | ||
|
|
53cde110b1 | ||
|
|
987cd9e78f | ||
|
|
ee68a76a19 | ||
|
|
8d7b7e5d5d | ||
|
|
b5c597b318 | ||
|
|
59f89dd3be | ||
|
|
f4e72f33c8 | ||
|
|
d00314c621 | ||
|
|
c809cc9273 | ||
|
|
f3254ff02d | ||
|
|
e9f7d033ff | ||
|
|
79808da760 | ||
|
|
1501786fd9 | ||
|
|
75d30b08fb | ||
|
|
c6cd8ae243 | ||
|
|
cc6252cdfa | ||
|
|
5563c66675 | ||
|
|
5fda7daf57 | ||
|
|
dd21a01dc4 | ||
|
|
8818f4ac5e | ||
|
|
adbd393c39 | ||
|
|
13eb461ec3 | ||
|
|
521632b3dc | ||
|
|
6d4eed3845 | ||
|
|
82ea7aec51 | ||
|
|
d474eeb424 | ||
|
|
5d6baacc56 | ||
|
|
46cf0a23d9 | ||
|
|
f02af701e5 | ||
|
|
5f826a0ab7 | ||
|
|
ba83dd56a1 | ||
|
|
84823ed828 | ||
|
|
3ade141829 | ||
|
|
30acc6f2f0 | ||
|
|
22ba02b22b | ||
|
|
b5d7cd55ce | ||
|
|
e4e22ed17e | ||
|
|
3691201b4f | ||
|
|
d0e22b2240 | ||
|
|
fb73979345 | ||
|
|
e17ad6a684 | ||
|
|
6dff42be09 | ||
|
|
ccf311c9c6 | ||
|
|
cd23d2eaa2 | ||
|
|
99ca0f3153 | ||
|
|
b06117f77a | ||
|
|
9c8e46dc22 | ||
|
|
ac088bae6a | ||
|
|
c3246ee8ba | ||
|
|
f406fcb843 | ||
|
|
c5c9ada7b0 | ||
|
|
6af49d41fd | ||
|
|
13fd742610 | ||
|
|
babbc5bb45 | ||
|
|
10bc981d0b | ||
|
|
9345e78779 | ||
|
|
ce8df65d7b | ||
|
|
e32c59f805 | ||
|
|
4a2bd1753a | ||
|
|
2c3e7a6f87 | ||
|
|
1c9c5a385d | ||
|
|
360b307f68 | ||
|
|
689dbb8fb6 | ||
|
|
24c609b6df | ||
|
|
fb1874165b | ||
|
|
55f68bb2b0 | ||
|
|
1da56e5290 | ||
|
|
8821715377 | ||
|
|
fe9959d4da | ||
|
|
40b21d7cbe | ||
|
|
bd1cd83d71 | ||
|
|
a2f2e6a4ff | ||
|
|
92f398a897 | ||
|
|
da98b07624 | ||
|
|
e58ee88a63 | ||
|
|
7ea328659f | ||
|
|
c7b8d09c7f | ||
|
|
92ea86dc36 | ||
|
|
ec47ab16ce | ||
|
|
c8f65c1530 | ||
|
|
a2b5b61e7f | ||
|
|
17c2a0d6f3 | ||
|
|
58f848fa29 | ||
|
|
6f75f5bd6a | ||
|
|
f34b04e555 | ||
|
|
d6bf9c9887 | ||
|
|
d017c5080a | ||
|
|
067ecb90b9 | ||
|
|
1792115b4d | ||
|
|
7182671f8f | ||
|
|
7d80983362 | ||
|
|
7ebb4fcedc | ||
|
|
016eef6a16 | ||
|
|
9174c06598 | ||
|
|
27ca697b43 | ||
|
|
1e2f421faa | ||
|
|
00ab6eb616 | ||
|
|
6ad5210216 | ||
|
|
9fee7be695 | ||
|
|
e8235b10c6 | ||
|
|
23971bae92 | ||
|
|
eff5016653 | ||
|
|
a9c737f911 | ||
|
|
f5093094eb | ||
|
|
15ec3cb3cd | ||
|
|
b4e0804b37 | ||
|
|
64c8fd3fa1 | ||
|
|
13421dc4aa | ||
|
|
0591980cbe | ||
|
|
d1f127d8ef | ||
|
|
19123b4c48 | ||
|
|
e097696390 | ||
|
|
9087f26537 | ||
|
|
8828dbf2e8 | ||
|
|
0d308ca30f | ||
|
|
2e90599283 | ||
|
|
9d1f8f6bfd | ||
|
|
6f8a4318c5 | ||
|
|
889485181e | ||
|
|
fda208f6b8 | ||
|
|
2e37523428 | ||
|
|
ddfc276688 | ||
|
|
5acd7cad9a | ||
|
|
e06d351f7a | ||
|
|
7625881cb3 | ||
|
|
6892d7189f | ||
|
|
6f94a2567b | ||
|
|
b3e34be972 | ||
|
|
25c1678004 | ||
|
|
9f27ddc256 | ||
|
|
edfcac32c3 | ||
|
|
afe86e0d68 | ||
|
|
a51d4afe3e | ||
|
|
6ed5dd7427 | ||
|
|
314ecc54fe | ||
|
|
2bc660e83c | ||
|
|
f832719ceb | ||
|
|
96e213c110 | ||
|
|
0c028e24b4 | ||
|
|
55e24548c3 | ||
|
|
912c29471a | ||
|
|
b8aeab0439 | ||
|
|
cfb883646f | ||
|
|
0b5ca25358 | ||
|
|
277df08676 | ||
|
|
607f263fbc | ||
|
|
3cb10f92af | ||
|
|
9955df896b | ||
|
|
a087fd71e4 | ||
|
|
d92ac2a6b2 | ||
|
|
afe3c5b6bb | ||
|
|
0e3d994b05 | ||
|
|
cd581d1d5a | ||
|
|
2d465ffd10 | ||
|
|
f420f9393a | ||
|
|
04bcf43649 | ||
|
|
874326a1ad | ||
|
|
c0d667106a | ||
|
|
e2cb3b97fd | ||
|
|
b98454b8b2 | ||
|
|
c8ad456fd6 | ||
|
|
8839eeb421 | ||
|
|
eab3d4811e | ||
|
|
e64c0f4e4e | ||
|
|
1857b7736f | ||
|
|
bde9c7eee3 | ||
|
|
0a92349f90 | ||
|
|
3f3ceb24c4 | ||
|
|
0fc3b58890 | ||
|
|
0570660d81 | ||
|
|
26b9592780 | ||
|
|
8b9dcfe635 | ||
|
|
5d94864b6c | ||
|
|
50d7b3df2b | ||
|
|
8215c85619 | ||
|
|
c43b5d670b | ||
|
|
b6ad37557f | ||
|
|
d266bf0184 | ||
|
|
5294e2b9b9 | ||
|
|
c5ab3f4e82 | ||
|
|
f29fc5822b | ||
|
|
eb9859ce75 | ||
|
|
53feb12ea0 | ||
|
|
b9746de52e | ||
|
|
03780ea105 | ||
|
|
422a75e4b8 | ||
|
|
5d7a6c0c46 | ||
|
|
1f0246f970 | ||
|
|
9d71093500 | ||
|
|
fd34f4b119 | ||
|
|
454d06c25c | ||
|
|
c174fe6199 | ||
|
|
d461aa3722 | ||
|
|
a23e1579e3 | ||
|
|
ab31f989db | ||
|
|
96ec75f7fe | ||
|
|
5ac5c021b8 | ||
|
|
0cf9e0698c | ||
|
|
dae33a31c0 | ||
|
|
15aee0de1a | ||
|
|
c158012655 | ||
|
|
c4f5a881e6 | ||
|
|
6dffe2ddd1 | ||
|
|
be3e8170de | ||
|
|
d19538af07 | ||
|
|
123778dec2 | ||
|
|
37aa88ba2a | ||
|
|
74b0a9c059 | ||
|
|
83af842a74 | ||
|
|
16c2588635 | ||
|
|
bf6a73fa3e | ||
|
|
ea7b65e2f2 | ||
|
|
92c21d7134 | ||
|
|
0035100186 | ||
|
|
9b40d93fc2 | ||
|
|
ceecd2ce41 | ||
|
|
5676cb0dd1 | ||
|
|
8cbae642cc | ||
|
|
6f8f1bf7af | ||
|
|
c622337802 | ||
|
|
f813d823a1 | ||
|
|
f68e64d738 | ||
|
|
46b91ddf57 | ||
|
|
09151785b3 | ||
|
|
b2f46c703d | ||
|
|
76cb3eb7d2 | ||
|
|
cd1ca36488 | ||
|
|
805122c789 | ||
|
|
095ff1cb4a | ||
|
|
50970b72d8 | ||
|
|
c44db0133f | ||
|
|
cd5fa128c5 | ||
|
|
ef9deeccd1 | ||
|
|
09fff39990 | ||
|
|
13ff1a9bf6 | ||
|
|
b4a26c496c | ||
|
|
43e5465592 | ||
|
|
3c49487424 | ||
|
|
25af6478c5 | ||
|
|
793b842f99 | ||
|
|
535c1fac87 | ||
|
|
3b1898b8e4 | ||
|
|
c105a8d42a | ||
|
|
1f8ce403dc | ||
|
|
0944ba120c | ||
|
|
5d2ee893c4 | ||
|
|
29e833dfef | ||
|
|
2f3b0481de | ||
|
|
9412fc8083 | ||
|
|
8e87b2176a | ||
|
|
d6a5266976 | ||
|
|
5b32101ef2 | ||
|
|
3cfbc0520a | ||
|
|
42c88aa3ca | ||
|
|
1d0975bac6 | ||
|
|
d687962b74 | ||
|
|
53e8e44a8b | ||
|
|
bbc973cc5f | ||
|
|
8c4fe6d249 | ||
|
|
278e70e533 | ||
|
|
13132c6b97 | ||
|
|
1d6524f299 | ||
|
|
5c04b3c480 | ||
|
|
8b14a46201 | ||
|
|
c1be1a362b | ||
|
|
97a20cac58 | ||
|
|
0f5b26c9cd | ||
|
|
314120212d | ||
|
|
5077a2a343 | ||
|
|
ab40d0b1a4 | ||
|
|
c4a6d04131 | ||
|
|
203fd861aa | ||
|
|
37a5c3b09f | ||
|
|
634abdbcea | ||
|
|
89731d4a7d | ||
|
|
2b9dd718ae | ||
|
|
50687e08cb | ||
|
|
ad62b93df9 | ||
|
|
a4cce9eb69 | ||
|
|
c10773503b | ||
|
|
fa53bb835c | ||
|
|
6776c1945d | ||
|
|
b2f54bac95 | ||
|
|
744df77691 | ||
|
|
8364f0404c | ||
|
|
1b75b34eb6 | ||
|
|
3d2df174d1 | ||
|
|
af92250c7e | ||
|
|
1414480d3a | ||
|
|
32244ac733 | ||
|
|
b80e091f46 | ||
|
|
f97966d63a | ||
|
|
132aa690d8 | ||
|
|
560f2c299a | ||
|
|
32e2f21e8d | ||
|
|
81d518438c | ||
|
|
b24aca6da2 | ||
|
|
e624ebec07 | ||
|
|
14a79a2ddf | ||
|
|
d6c14f40b2 | ||
|
|
f8044e0290 | ||
|
|
fbebb94cd6 | ||
|
|
30e45df8a5 | ||
|
|
e23dd3e3bb | ||
|
|
8921d52a82 | ||
|
|
51cb785695 | ||
|
|
0de021d427 | ||
|
|
08f37d478f | ||
|
|
41256e7369 | ||
|
|
2f2eab0e15 | ||
|
|
bbfc519ee5 | ||
|
|
0394adcf8d | ||
|
|
8eab69fc0b | ||
|
|
ffdb90f39a | ||
|
|
5eb7e46654 | ||
|
|
447e295947 | ||
|
|
daa38d2ff4 | ||
|
|
049808a34f | ||
|
|
daef78f538 | ||
|
|
5699cbb597 | ||
|
|
6dab133d9f | ||
|
|
d49c98188a | ||
|
|
065e5ccd1a | ||
|
|
27e9bfb5aa | ||
|
|
14e70ad689 | ||
|
|
02e316e772 | ||
|
|
2374eb4dca | ||
|
|
2eda01c703 | ||
|
|
2755171e08 | ||
|
|
e67655c31a | ||
|
|
c7b8a4e25c | ||
|
|
db11373351 | ||
|
|
59198e29f9 | ||
|
|
6e13d0985c | ||
|
|
3e5aa4b0f5 | ||
|
|
959ce4f985 | ||
|
|
14097e39cc | ||
|
|
44003449d5 | ||
|
|
17ac609d23 | ||
|
|
724b72bdaf | ||
|
|
4af85441db | ||
|
|
d800c23cec | ||
|
|
57f331e2ac | ||
|
|
67db8ddca8 | ||
|
|
06d6b0b205 | ||
|
|
13376efafc | ||
|
|
e6b2c27011 | ||
|
|
614c22fc1b | ||
|
|
8aa3afcfde | ||
|
|
847ed8ad39 | ||
|
|
b86eb69552 | ||
|
|
65d60f92f5 | ||
|
|
36579844d9 | ||
|
|
ce011501f9 | ||
|
|
b11061f99d | ||
|
|
2f67cdaf10 | ||
|
|
d1e03329c5 | ||
|
|
3c0048dd89 | ||
|
|
c0c0879924 | ||
|
|
82dc935a50 | ||
|
|
93067d0d63 | ||
|
|
0c94a6e2b0 | ||
|
|
5c2608b032 | ||
|
|
25af341954 | ||
|
|
d1d0b85d80 | ||
|
|
1e5bbe60f7 | ||
|
|
27617670f0 | ||
|
|
aae364b4c9 | ||
|
|
c077f05705 | ||
|
|
f81b136547 | ||
|
|
20ec80295d | ||
|
|
60a385d4a4 | ||
|
|
e51e01f4f0 | ||
|
|
befe72b9b9 | ||
|
|
9e878075ac | ||
|
|
cc684a3ebe | ||
|
|
1605e04d44 | ||
|
|
932f3930f4 | ||
|
|
676cc84c9e | ||
|
|
5fdf5438ea | ||
|
|
d95d48bbe6 | ||
|
|
5cc369c2b8 | ||
|
|
a4ac1977a4 | ||
|
|
457f2d1d51 | ||
|
|
3a3e4d4391 | ||
|
|
a9e189972a | ||
|
|
5bde8359e8 | ||
|
|
2d9190d264 | ||
|
|
6b90017efa | ||
|
|
6400ace901 | ||
|
|
70c8bf44b8 | ||
|
|
48f1ff87f8 | ||
|
|
2bc3f74df2 | ||
|
|
de91c95e8e | ||
|
|
ff9cb94f4f | ||
|
|
9fa489b7f2 | ||
|
|
7992f415fe | ||
|
|
2ae7f53b83 | ||
|
|
89ccdf92cd | ||
|
|
acc62abbd0 | ||
|
|
d13bbeb605 | ||
|
|
bcccf02020 | ||
|
|
82946d2914 | ||
|
|
9977543478 | ||
|
|
7215aee224 | ||
|
|
2c1eda66c4 | ||
|
|
adb7d614e6 | ||
|
|
ebe0c1d83a | ||
|
|
88afad3e46 | ||
|
|
ba593ccb26 | ||
|
|
81a4d89e94 | ||
|
|
6a496ef620 | ||
|
|
0ac6ffb3ef | ||
|
|
3e37903ffd | ||
|
|
e6b4530234 | ||
|
|
e97db785d6 | ||
|
|
51ed0d3f6f | ||
|
|
2a0e33876e | ||
|
|
d08c0703a0 | ||
|
|
b7dacb427d | ||
|
|
0211adbdb6 | ||
|
|
53c8b4249a | ||
|
|
f35b8b8db4 | ||
|
|
a4c19eee14 | ||
|
|
4e3662f318 | ||
|
|
c6351b5d00 | ||
|
|
f73abe6849 | ||
|
|
fa67d69585 | ||
|
|
917d82be0d | ||
|
|
1324b32665 | ||
|
|
844c083848 | ||
|
|
9db967be98 | ||
|
|
011f71a442 | ||
|
|
36198c525b | ||
|
|
3a07ec6c7d | ||
|
|
cd9e4b5b7f | ||
|
|
935eba2357 | ||
|
|
5d033fbd0a | ||
|
|
b4b8339d0d | ||
|
|
0a0291678e | ||
|
|
478af54cce | ||
|
|
dba5d020cd | ||
|
|
bb3dafa3b5 | ||
|
|
daf1e229f7 | ||
|
|
226de0a42d | ||
|
|
a6e00f6086 | ||
|
|
6ffcdc1166 | ||
|
|
860f834aad | ||
|
|
9dabcc8703 | ||
|
|
d3e52d9f9a | ||
|
|
b0ce1b81ba | ||
|
|
b80a0e1da5 | ||
|
|
37bdbdd990 | ||
|
|
0bc861db6e | ||
|
|
d98e475361 | ||
|
|
20388ece86 | ||
|
|
7b71e6fb5a | ||
|
|
b3042db755 | ||
|
|
852c1dc286 | ||
|
|
01ca61c7cc | ||
|
|
8edf299dd2 | ||
|
|
e0b5890ab5 | ||
|
|
887c29ddc4 | ||
|
|
983f35f32a | ||
|
|
c8d2097bae | ||
|
|
ab3bf61903 | ||
|
|
5a3a838fe5 | ||
|
|
5cd4ddaf08 | ||
|
|
08f1701e35 | ||
|
|
a9be5e7239 | ||
|
|
f1c5e64c23 | ||
|
|
722e73f309 | ||
|
|
2f90068661 | ||
|
|
e309b41972 | ||
|
|
c3fce7b77f | ||
|
|
105420f372 | ||
|
|
588955a987 | ||
|
|
7dc90c7097 | ||
|
|
ba53ccb6b3 | ||
|
|
c774455fc5 | ||
|
|
c19347a055 | ||
|
|
0f04f75fa3 | ||
|
|
652b761894 | ||
|
|
fdc6081244 | ||
|
|
11cffff943 | ||
|
|
908400bfc5 | ||
|
|
0c12e26026 | ||
|
|
e71cf672f1 | ||
|
|
40b4fa5443 | ||
|
|
e15316e825 | ||
|
|
72c753b93e | ||
|
|
22e4d11010 | ||
|
|
287b04e50a | ||
|
|
d2fe038caf | ||
|
|
321a3a55c7 | ||
|
|
eba13b8653 | ||
|
|
79414947ae | ||
|
|
0d044cdc1b | ||
|
|
1a424c124c | ||
|
|
1da5d12bdd | ||
|
|
57076f6ca4 | ||
|
|
9033ae6460 | ||
|
|
55bf243f16 | ||
|
|
d78ece658b | ||
|
|
3112096651 | ||
|
|
fa21acc470 | ||
|
|
193eddda5e | ||
|
|
b97ee67a4b | ||
|
|
a37828bafb | ||
|
|
488a6737b7 | ||
|
|
7905b50dcb | ||
|
|
6c4bac2ed8 | ||
|
|
6c8c41da98 | ||
|
|
0f3b80cddb | ||
|
|
1656f62a12 | ||
|
|
8c8fc749be | ||
|
|
8f9de17869 | ||
|
|
a5859b0b05 | ||
|
|
3db22a4e33 | ||
|
|
85a14b68b7 | ||
|
|
f60fd330cb | ||
|
|
132c32076a | ||
|
|
84aa69fb0d | ||
|
|
ee528bc426 | ||
|
|
5a5f5cb018 | ||
|
|
75e6e794fb | ||
|
|
ee50a4ccce | ||
|
|
31eb6a579a | ||
|
|
f918ea1ba7 | ||
|
|
d542b7b003 | ||
|
|
1c4948e1b0 | ||
|
|
d98beeec31 | ||
|
|
4d8a47800a | ||
|
|
4ecc7e1c93 | ||
|
|
4bf6930416 | ||
|
|
e2af2a27bf | ||
|
|
d41d6ed863 | ||
|
|
525344aa85 | ||
|
|
f9149b6cb6 | ||
|
|
76ed5c212c | ||
|
|
340b5590f1 | ||
|
|
2e2e720a2a | ||
|
|
fa4d58db52 | ||
|
|
ce1b30c229 | ||
|
|
94a52a8710 | ||
|
|
87b87199f2 | ||
|
|
c08985f7d1 | ||
|
|
e4c2891d4b | ||
|
|
0c4b8d45df | ||
|
|
fb3003f664 | ||
|
|
6fdfd83e6b | ||
|
|
8e3c2d8a26 | ||
|
|
fbd7e96680 | ||
|
|
8fd4d32408 | ||
|
|
1fcfb80bdd | ||
|
|
41c46c2279 | ||
|
|
8857b1f69e | ||
|
|
dd2cea4107 | ||
|
|
4c614ac768 | ||
|
|
36a87f5bf9 | ||
|
|
319b37af0e | ||
|
|
ff546358f3 | ||
|
|
ee23cc2527 | ||
|
|
e8d131ef96 | ||
|
|
1801a85966 | ||
|
|
4bde771970 | ||
|
|
1c60b3967d | ||
|
|
4cae48c8df | ||
|
|
616d232257 | ||
|
|
37e96ff6e1 | ||
|
|
0fa1c5b0a5 | ||
|
|
727d313c30 | ||
|
|
faae720c36 | ||
|
|
da84764e97 | ||
|
|
c74cd63389 | ||
|
|
0cc79e0564 | ||
|
|
52d140c337 | ||
|
|
720ced4c2e | ||
|
|
13eca0357f | ||
|
|
921a5b5bcc | ||
|
|
26495ddce9 | ||
|
|
e4613a60cf | ||
|
|
70475d08c0 | ||
|
|
a8ed1ec414 | ||
|
|
1b67c8493e | ||
|
|
3bd52678be | ||
|
|
5cc508393a | ||
|
|
63292c5826 | ||
|
|
d7984c7540 | ||
|
|
608191bd8c | ||
|
|
74a603dcd3 | ||
|
|
bff2192498 | ||
|
|
2de2d4bea7 | ||
|
|
86980c298e | ||
|
|
c9fbba22a2 | ||
|
|
7380de8ee3 | ||
|
|
115d069677 | ||
|
|
39acca4b43 | ||
|
|
de030c9932 | ||
|
|
fa5594e13f | ||
|
|
9165a000a3 | ||
|
|
e46e1d51c2 | ||
|
|
4d2ccfa028 | ||
|
|
e85830e313 | ||
|
|
4a19fa793e | ||
|
|
250ffc28a3 | ||
|
|
8c4db76c3a | ||
|
|
68274ee657 | ||
|
|
607b4c8414 | ||
|
|
31bd1e069c | ||
|
|
6c94fc4fd2 | ||
|
|
881fdb66ae | ||
|
|
e2509717b9 | ||
|
|
a4c8e945c7 | ||
|
|
656cf12cda | ||
|
|
ec44791aa3 | ||
|
|
f98a98718f | ||
|
|
42ca6c8bfc | ||
|
|
d87a652582 | ||
|
|
eb5efed421 | ||
|
|
e301d62332 | ||
|
|
5a9ef130ea | ||
|
|
8cc2298181 | ||
|
|
42e27d04c1 | ||
|
|
b601fd08ca | ||
|
|
22bec329c1 | ||
|
|
776560f8ce | ||
|
|
221cf6acb9 | ||
|
|
fa3b19000d | ||
|
|
6127b0baa6 | ||
|
|
90cd0c7efa | ||
|
|
0b68d1292d | ||
|
|
abc7d401e2 | ||
|
|
5a3803de39 | ||
|
|
0740c576a7 | ||
|
|
0bba101ff9 | ||
|
|
113afe860e | ||
|
|
48d5281e3a | ||
|
|
7082b0a59a | ||
|
|
696e80c62f | ||
|
|
d95e7ecfe1 | ||
|
|
d86a638099 | ||
|
|
ca328a6993 | ||
|
|
a41a19d14d | ||
|
|
5a5da817a1 | ||
|
|
7714d08e2e | ||
|
|
17895bd6fd | ||
|
|
8ab793a3a6 | ||
|
|
884a4fecd1 | ||
|
|
98797459f3 | ||
|
|
5f073ae220 | ||
|
|
63f8af8078 | ||
|
|
d5c625d87d | ||
|
|
c55041e9d4 | ||
|
|
8738a3a88c | ||
|
|
782e45e5b1 | ||
|
|
cabfc374eb | ||
|
|
3779c78c00 | ||
|
|
a27e178ac2 | ||
|
|
712a2c3742 | ||
|
|
a32816c644 | ||
|
|
6e7a7d127d | ||
|
|
3dd8e561b9 | ||
|
|
741084faf4 | ||
|
|
57ddbd282a | ||
|
|
94c5c9667c | ||
|
|
d13d32040c | ||
|
|
d0b179962b | ||
|
|
d7a3c7e555 | ||
|
|
557ae64d51 | ||
|
|
b7fbc77bab | ||
|
|
d1de958daa | ||
|
|
513b5aecf1 | ||
|
|
61e2cb56a4 | ||
|
|
e377abc18c | ||
|
|
2f21ca64e0 | ||
|
|
e011b767fa | ||
|
|
5f3bcbfded | ||
|
|
853784d382 | ||
|
|
5a4881c086 | ||
|
|
5dffa26711 | ||
|
|
1ad474f1a9 |
36
.coveragerc
Normal file
36
.coveragerc
Normal file
@@ -0,0 +1,36 @@
|
||||
# -*- conf -*-
|
||||
# .coveragerc to control coverage.py
|
||||
[run]
|
||||
parallel = True
|
||||
concurrency = multiprocessing
|
||||
branch = True
|
||||
source = lib
|
||||
omit =
|
||||
lib/spack/spack/test/*
|
||||
lib/spack/env/*
|
||||
lib/spack/docs/*
|
||||
lib/spack/external/*
|
||||
|
||||
[report]
|
||||
# Regexes for lines to exclude from consideration
|
||||
exclude_lines =
|
||||
# Have to re-enable the standard pragma
|
||||
pragma: no cover
|
||||
|
||||
# Don't complain about missing debug-only code:
|
||||
def __repr__
|
||||
if self\.debug
|
||||
|
||||
# Don't complain if tests don't hit defensive assertion code:
|
||||
raise AssertionError
|
||||
raise NotImplementedError
|
||||
|
||||
# Don't complain if non-runnable code isn't run:
|
||||
if 0:
|
||||
if False:
|
||||
if __name__ == .__main__.:
|
||||
|
||||
ignore_errors = True
|
||||
|
||||
[html]
|
||||
directory = htmlcov
|
||||
26
.flake8
Normal file
26
.flake8
Normal file
@@ -0,0 +1,26 @@
|
||||
# -*- conf -*-
|
||||
# flake8 settings for Spack.
|
||||
#
|
||||
# Below we describe which flake8 checks Spack ignores and what the
|
||||
# rationale is.
|
||||
#
|
||||
# Let people line things up nicely:
|
||||
# - E129: visually indented line with same indent as next logical line
|
||||
# - E221: multiple spaces before operator
|
||||
# - E241: multiple spaces after ','
|
||||
# - E272: multiple spaces before keyword
|
||||
#
|
||||
# Let people use terse Python features:
|
||||
# - E731 : lambda expressions
|
||||
#
|
||||
# Spack allows wildcard imports:
|
||||
# - F403: disable wildcard import
|
||||
#
|
||||
# These are required to get the package.py files to test clean.
|
||||
# - F405: `name` may be undefined, or undefined from star imports: `module`
|
||||
# - F821: undefined name `name` (needed for cmake, configure, etc.)
|
||||
# - F999: syntax error in doctest
|
||||
#
|
||||
[flake8]
|
||||
ignore = E129,E221,E241,E272,E731,F403,F405,F821,F999
|
||||
max-line-length = 79
|
||||
18
.gitignore
vendored
18
.gitignore
vendored
@@ -1,8 +1,24 @@
|
||||
/db
|
||||
/var/spack/stage
|
||||
/var/spack/cache
|
||||
/var/spack/repos/*/index.yaml
|
||||
/var/spack/repos/*/lock
|
||||
*.pyc
|
||||
/opt/
|
||||
/opt
|
||||
*~
|
||||
.DS_Store
|
||||
.idea
|
||||
/etc/spack/licenses
|
||||
/etc/spack/*.yaml
|
||||
/etc/spackconfig
|
||||
/share/spack/dotkit
|
||||
/share/spack/modules
|
||||
/share/spack/lmod
|
||||
/TAGS
|
||||
*.swp
|
||||
/htmlcov
|
||||
.coverage
|
||||
#*
|
||||
.#*
|
||||
/.cache
|
||||
/bin/spackc
|
||||
|
||||
56
.mailmap
Normal file
56
.mailmap
Normal file
@@ -0,0 +1,56 @@
|
||||
Abhinav Bhatele <bhatele@llnl.gov> Abhinav Bhatele <bhatele@gmail.com>
|
||||
Adam Moody <moody20@llnl.gov> Adam T. Moody <moody20@llnl.gov>
|
||||
Alfredo Gimenez <gimenez1@llnl.gov> Alfredo Gimenez <alfredo.gimenez@gmail.com>
|
||||
Alfredo Gimenez <gimenez1@llnl.gov> Alfredo Adolfo Gimenez <alfredo.gimenez@gmail.com>
|
||||
Andrew Williams <williamsa89@cardiff.ac.uk> Andrew Williams <andrew@alshain.org.uk>
|
||||
Ben Boeckel <ben.boeckel@kitware.com> Ben Boeckel <mathstuf@gmail.com>
|
||||
Ben Boeckel <ben.boeckel@kitware.com> Ben Boeckel <mathstuf@users.noreply.github.com>
|
||||
Benedikt Hegner <hegner@cern.ch> Benedikt Hegner <benedikt.hegner@cern.ch>
|
||||
Brett Viren <bv@bnl.gov> Brett Viren <brett.viren@gmail.com>
|
||||
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra324.llnl.gov>
|
||||
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra648.llnl.gov>
|
||||
David Poliakoff <poliakoff1@llnl.gov> David Poliakoff <david.poliakoff@gmail.com>
|
||||
Dhanannjay Deo <dhanannjay.deo@kitware.com> Dhanannjay 'Djay' Deo <dhanannjay.deo@kitware.com>
|
||||
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth F <elizabeth.fischer@columbia.edu>
|
||||
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth F <rpf2116@columbia.edu>
|
||||
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth Fischer <rpf2116@columbia.edu>
|
||||
Elizabeth Fischer <elizabeth.fischer@columbia.edu> citibeth <rpf2116@columbia.edu>
|
||||
Geoffrey Oxberry <oxberry1@llnl.gov> Geoffrey Oxberry <goxberry@gmail.com>
|
||||
Glenn Johnson <glenn-johnson@uiowa.edu> Glenn Johnson <gjohnson@argon-ohpc.hpc.uiowa.edu>
|
||||
Glenn Johnson <glenn-johnson@uiowa.edu> Glenn Johnson <glennpj@gmail.com>
|
||||
Gregory Becker <becker33@llnl.gov> Gregory Becker <becker33.llnl.gov>
|
||||
Gregory Becker <becker33@llnl.gov> becker33 <becker33.llnl.gov>
|
||||
Gregory Becker <becker33@llnl.gov> becker33 <becker33@llnl.gov>
|
||||
Gregory L. Lee <lee218@llnl.gov> Greg Lee <lee218@llnl.gov>
|
||||
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@cab687.llnl.gov>
|
||||
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@cab690.llnl.gov>
|
||||
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@catalyst159.llnl.gov>
|
||||
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@surface86.llnl.gov>
|
||||
Gregory L. Lee <lee218@llnl.gov> Gregory Lee <lee218@llnl.gov>
|
||||
Ian Lee <lee1001@llnl.gov> Ian Lee <IanLee1521@gmail.com>
|
||||
James Wynne III <wynnejr@ornl.gov> James Riley Wynne III <wynnejr@ornl.gov>
|
||||
James Wynne III <wynnejr@ornl.gov> James Wynne III <wynnejr@gpujake.com>
|
||||
Joachim Protze <protze@rz.rwth-aachen.de> jprotze <protze@rz.rwth-aachen.de>
|
||||
Kelly (KT) Thompson <kgt@lanl.gov> <kellyt@MENE.localdomain>
|
||||
Kelly (KT) Thompson <kgt@lanl.gov> Kelly Thompson <KineticTheory@users.noreply.github.com>
|
||||
Kevin Brandstatter <kjbrandstatter@gmail.com> Kevin Brandstatter <kbrandst@hawk.iit.edu>
|
||||
Luc Jaulmes <luc.jaulmes@bsc.es> Luc Jaulmes <jaulmes1@llnl.gov>
|
||||
Mario Melara <maamelara@gmail.com> Mario Melara <mamelara@genepool1.nersc.gov>
|
||||
Mark Miller <miller86@llnl.gov> miller86 <miller86@llnl.gov>
|
||||
Massimiliano Culpo <massimiliano.culpo@epfl.ch> Massimiliano Culpo <massimiliano.culpo@googlemail.com>
|
||||
Massimiliano Culpo <massimiliano.culpo@epfl.ch> alalazo <massimiliano.culpo@googlemail.com>
|
||||
Mayeul d'Avezac <m.davezac@ucl.ac.uk> Mayeul d'Avezac <mdavezac@gmail.com>
|
||||
Mitchell Devlin <mitchell.r.devlin@gmail.com> Mitchell Devlin <devlin@blogin4.lcrc.anl.gov>
|
||||
Nicolas Richart <nicolas.richart@epfl.ch> Nicolas <nrichart@users.noreply.github.com>
|
||||
Nicolas Richart <nicolas.richart@epfl.ch> Nicolas Richart <nrichart@users.noreply.github.com>
|
||||
Peter Scheibel <scheibel1@llnl.gov> scheibelp <scheibel1@llnl.gov>
|
||||
Robert D. French <frenchrd@ornl.gov> Robert D. French <robert@robertdfrench.me>
|
||||
Robert D. French <frenchrd@ornl.gov> Robert.French <frenchrd@ornl.gov>
|
||||
Robert D. French <frenchrd@ornl.gov> robertdfrench <frenchrd@ornl.gov>
|
||||
Saravan Pantham <saravan.pantham@gmail.com> Saravan Pantham <pantham1@surface86.llnl.gov>
|
||||
Stephen Herbein <sherbein@udel.edu> Stephen Herbein <stephen272@gmail.com>
|
||||
Todd Gamblin <tgamblin@llnl.gov> George Todd Gamblin <gamblin2@llnl.gov>
|
||||
Todd Gamblin <tgamblin@llnl.gov> Todd Gamblin <gamblin2@llnl.gov>
|
||||
Tom Scogland <tscogland@llnl.gov> Tom Scogland <scogland1@llnl.gov>
|
||||
Tom Scogland <tscogland@llnl.gov> Tom Scogland <tom.scogland@gmail.com>
|
||||
Tzanio Kolev <tzanio@llnl.gov> Tzanio <tzanio@llnl.gov>
|
||||
91
.travis.yml
Normal file
91
.travis.yml
Normal file
@@ -0,0 +1,91 @@
|
||||
#=============================================================================
|
||||
# Project settings
|
||||
#=============================================================================
|
||||
language: python
|
||||
|
||||
# Only build master and develop on push; do not build every branch.
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
|
||||
#=============================================================================
|
||||
# Build matrix
|
||||
#=============================================================================
|
||||
python:
|
||||
- 2.6
|
||||
- 2.7
|
||||
|
||||
env:
|
||||
- TEST_SUITE=unit
|
||||
- TEST_SUITE=flake8
|
||||
- TEST_SUITE=doc
|
||||
|
||||
matrix:
|
||||
# Flake8 and Sphinx no longer support Python 2.6, and one run is enough.
|
||||
exclude:
|
||||
- python: 2.6
|
||||
env: TEST_SUITE=flake8
|
||||
- python: 2.6
|
||||
env: TEST_SUITE=doc
|
||||
# Explicitly include an OS X build with homebrew's python.
|
||||
# Works around Python issues on Travis for OSX, described here:
|
||||
# http://blog.fizyk.net.pl/blog/running-python-tests-on-traviss-osx-workers.html
|
||||
include:
|
||||
- os: osx
|
||||
language: generic
|
||||
env: TEST_SUITE=unit
|
||||
|
||||
#=============================================================================
|
||||
# Environment
|
||||
#=============================================================================
|
||||
# Use new Travis infrastructure (Docker can't sudo yet)
|
||||
sudo: false
|
||||
|
||||
# Docs need graphviz to build
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- gfortran
|
||||
- graphviz
|
||||
- libyaml-dev
|
||||
|
||||
# Work around Travis's lack of support for Python on OSX
|
||||
before_install:
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions python > /dev/null || brew install python; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions gcc > /dev/null || brew install gcc; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then virtualenv venv; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then source venv/bin/activate; fi
|
||||
|
||||
# Install various dependencies
|
||||
install:
|
||||
- pip install --upgrade coveralls
|
||||
- pip install --upgrade flake8
|
||||
- pip install --upgrade sphinx
|
||||
- pip install --upgrade mercurial
|
||||
|
||||
before_script:
|
||||
# Need this for the git tests to succeed.
|
||||
- git config --global user.email "spack@example.com"
|
||||
- git config --global user.name "Test User"
|
||||
|
||||
# Need this to be able to compute the list of changed files
|
||||
- git fetch origin develop:develop
|
||||
|
||||
#=============================================================================
|
||||
# Building
|
||||
#=============================================================================
|
||||
script: share/spack/qa/run-$TEST_SUITE-tests
|
||||
|
||||
after_success:
|
||||
- if [[ $TEST_SUITE == unit && $TRAVIS_PYTHON_VERSION == 2.7 && $TRAVIS_OS_NAME == "linux" ]]; then coveralls; fi
|
||||
|
||||
#=============================================================================
|
||||
# Notifications
|
||||
#=============================================================================
|
||||
notifications:
|
||||
email:
|
||||
recipients: tgamblin@llnl.gov
|
||||
on_success: change
|
||||
on_failure: always
|
||||
112
LICENSE
112
LICENSE
@@ -1,76 +1,82 @@
|
||||
Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
||||
########################################################################
|
||||
GNU LESSER GENERAL PUBLIC LICENSE (Lesser GPL)
|
||||
Version 2.1, February 1999
|
||||
########################################################################
|
||||
Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
Produced at the Lawrence Livermore National Laboratory.
|
||||
|
||||
This file is part of Spack.
|
||||
Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
LLNL-CODE-647188
|
||||
|
||||
For details, see https://scalability-llnl.github.io/spack
|
||||
For details, see https://github.com/llnl/spack
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License (as published by
|
||||
the Free Software Foundation) version 2.1 dated February 1999.
|
||||
it under the terms of the GNU Lesser General Public License (as
|
||||
published by the Free Software Foundation) version 2.1, February 1999.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
conditions of the GNU General Public License for more details.
|
||||
conditions of the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
OUR NOTICE AND TERMS AND CONDITIONS OF THE GNU GENERAL PUBLIC LICENSE
|
||||
########################################################################
|
||||
LLNL NOTICE AND TERMS AND CONDITIONS OF THE GNU LGPL
|
||||
|
||||
Our Preamble Notice
|
||||
LLNL Preamble Notice
|
||||
|
||||
A. This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
Lawrence Livermore National Laboratory under Contract
|
||||
No. DE-AC52-07NA27344 with the DOE.
|
||||
A. This notice is required to be provided under LLNL's contract with
|
||||
the U.S. Department of Energy (DOE). This work was produced at the
|
||||
Lawrence Livermore National Laboratory under Contract
|
||||
No. DE-AC52-07NA27344 with the DOE.
|
||||
|
||||
B. Neither the United States Government nor Lawrence Livermore
|
||||
National Security, LLC nor any of their employees, makes any warranty,
|
||||
express or implied, or assumes any liability or responsibility for the
|
||||
accuracy, completeness, or usefulness of any information, apparatus,
|
||||
product, or process disclosed, or represents that its use would not
|
||||
infringe privately-owned rights.
|
||||
National Security, LLC nor any of their employees, makes any
|
||||
warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or
|
||||
represents that its use would not infringe privately-owned rights.
|
||||
|
||||
C. Also, reference herein to any specific commercial products,
|
||||
process, or services by trade name, trademark, manufacturer or
|
||||
otherwise does not necessarily constitute or imply its endorsement,
|
||||
recommendation, or favoring by the United States Government or
|
||||
Lawrence Livermore National Security, LLC. The views and opinions of
|
||||
authors expressed herein do not necessarily state or reflect those of
|
||||
the United States Government or Lawrence Livermore National Security,
|
||||
LLC, and shall not be used for advertising or product endorsement
|
||||
purposes.
|
||||
process, or services by trade name, trademark, manufacturer or
|
||||
otherwise does not necessarily constitute or imply its endorsement,
|
||||
recommendation, or favoring by the United States Government or
|
||||
Lawrence Livermore National Security, LLC. The views and opinions
|
||||
of authors expressed herein do not necessarily state or reflect
|
||||
those of the United States Government or Lawrence Livermore
|
||||
National Security, LLC, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follows.
|
||||
|
||||
GNU Lesser GPL terms and Conditions for Copying, Distribution, and
|
||||
Modification
|
||||
########################################################################
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called “this License”). Each
|
||||
licensee is addressed as “you”.
|
||||
this Lesser General Public License (also called "this License"). Each
|
||||
licensee is addressed as "you".
|
||||
|
||||
A “library” means a collection of software functions and/or data
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The “Library”, below, refers to any such software library or work
|
||||
which has been distributed under these terms. A “work based on the
|
||||
Library” means either the Library or any derivative work under
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term “modification”.)
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
“Source code” for a work means the preferred form of the work for
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control
|
||||
@@ -83,7 +89,7 @@ covered only if its contents constitute a work based on the Library
|
||||
it). Whether that is true depends on what the Library does and what
|
||||
the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library’s
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
@@ -170,17 +176,17 @@ source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a “work that uses the Library”. Such a work,
|
||||
linked with it, is called a "work that uses the Library". Such a work,
|
||||
in isolation, is not a derivative work of the Library, and therefore
|
||||
falls outside the scope of this License.
|
||||
|
||||
However, linking a “work that uses the Library” with the Library
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a “work that uses the
|
||||
library”. The executable is therefore covered by this License. Section
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License. Section
|
||||
6 states terms for distribution of such executables.
|
||||
|
||||
When a “work that uses the Library” uses material from a header file
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is
|
||||
not. Whether this is true is especially significant if the work can be
|
||||
@@ -200,10 +206,10 @@ distribute the object code for the work under the terms of Section
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or link
|
||||
a “work that uses the Library” with the Library to produce a work
|
||||
a "work that uses the Library" with the Library to produce a work
|
||||
containing portions of the Library, and distribute that work under
|
||||
terms of your choice, provided that the terms permit modification of
|
||||
the work for the customer’s own use and reverse engineering for
|
||||
the work for the customer's own use and reverse engineering for
|
||||
debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
@@ -218,7 +224,7 @@ a) Accompany the work with the complete corresponding machine-readable
|
||||
source code for the Library including whatever changes were used in
|
||||
the work (which must be distributed under Sections 1 and 2 above);
|
||||
and, if the work is an executable liked with the Library, with the
|
||||
complete machine-readable “work that uses the Library”, as object code
|
||||
complete machine-readable "work that uses the Library", as object code
|
||||
and/or source code, so that the user can modify the Library and then
|
||||
relink to produce a modified executable containing the modified
|
||||
Library. (It is understood that the user who changes the contents of
|
||||
@@ -227,7 +233,7 @@ recompile the application to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a copy
|
||||
of the library already present on the user’s computer system, rather
|
||||
of the library already present on the user's computer system, rather
|
||||
than copying library functions into the executable, and (2) will
|
||||
operate properly with a modified version of the library, if the user
|
||||
installs one, as long as the modified version is interface- compatible
|
||||
@@ -245,8 +251,8 @@ specified materials from the same place.
|
||||
e) Verify that the user has already received a copy of these materials
|
||||
or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the “work that uses the
|
||||
Library” must include any data and utility programs needed for
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
@@ -296,7 +302,7 @@ the Library or works based on it.
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients’ exercise of the rights granted
|
||||
restrictions on the recipients' exercise of the rights granted
|
||||
herein. You are not responsible for enforcing compliance by third
|
||||
parties with this License.
|
||||
|
||||
@@ -347,7 +353,7 @@ differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
“any later version”, you have the option of following the terms and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
@@ -367,7 +373,7 @@ NO WARRANTY
|
||||
1 BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
|
||||
WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
|
||||
PARTIES PROVIDE THE LIBRARY “AS IS” WITHOUT WARRANTY OF ANY KIND,
|
||||
PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND,
|
||||
EITHER EXPRESSED OR IMPLIED INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
|
||||
82
README.md
82
README.md
@@ -1,5 +1,8 @@
|
||||
Spack
|
||||
===========
|
||||

|
||||
============
|
||||
|
||||
[](https://travis-ci.org/LLNL/spack)
|
||||
[](https://coveralls.io/github/LLNL/spack?branch=develop)
|
||||
|
||||
Spack is a package management tool designed to support multiple
|
||||
versions and configurations of software on a wide variety of platforms
|
||||
@@ -13,26 +16,87 @@ can coexist on the same system.
|
||||
Most importantly, Spack is simple. It offers a simple spec syntax so
|
||||
that users can specify versions and configuration options
|
||||
concisely. Spack is also simple for package authors: package files are
|
||||
writtin in pure Python, and specs allow package authors to write a
|
||||
written in pure Python, and specs allow package authors to write a
|
||||
single build script for many different builds of the same package.
|
||||
|
||||
See the
|
||||
[Feature Overview](http://scalability-llnl.github.io/spack/features.html)
|
||||
[Feature Overview](http://spack.readthedocs.io/en/latest/features.html)
|
||||
for examples and highlights.
|
||||
|
||||
To install spack and install your first package:
|
||||
|
||||
$ git clone git@github.com:scalability-llnl/spack.git
|
||||
$ git clone https://github.com/llnl/spack.git
|
||||
$ cd spack/bin
|
||||
$ ./spack install libelf
|
||||
|
||||
Documentation
|
||||
----------------
|
||||
|
||||
[Full documentation](http://scalability-llnl.github.io/spack)
|
||||
for Spack is also available.
|
||||
[**Full documentation**](http://spack.readthedocs.io/) for Spack is
|
||||
the first place to look.
|
||||
|
||||
We've also got a [**Spack 101 Tutorial**](http://spack.readthedocs.io/en/latest/tutorial_sc16.html),
|
||||
so you can learn Spack yourself, or teach users at your own site.
|
||||
|
||||
See also:
|
||||
* [Technical paper](http://www.computer.org/csdl/proceedings/sc/2015/3723/00/2807623.pdf) and
|
||||
[slides](https://tgamblin.github.io/files/Gamblin-Spack-SC15-Talk.pdf) on Spack's design and implementation.
|
||||
* [Short presentation](https://tgamblin.github.io/files/Gamblin-Spack-Lightning-Talk-BOF-SC15.pdf) from the *Getting Scientific Software Installed* BOF session at Supercomputing 2015.
|
||||
|
||||
|
||||
Get Involved!
|
||||
------------------------
|
||||
|
||||
Spack is an open source project. Questions, discussion, and
|
||||
contributions are welcome. Contributions can be anything from new
|
||||
packages to bugfixes, or even new core features.
|
||||
|
||||
### Mailing list
|
||||
|
||||
If you are interested in contributing to spack, the first step is to
|
||||
join the mailing list. We're using a Google Group for this, and you
|
||||
can join it here:
|
||||
|
||||
* [Spack Google Group](https://groups.google.com/d/forum/spack)
|
||||
|
||||
### Contributions
|
||||
|
||||
Contributing to Spack is relatively easy. Just send us a
|
||||
[pull request](https://help.github.com/articles/using-pull-requests/).
|
||||
When you send your request, make ``develop`` the destination branch on the
|
||||
[Spack repository](https://github.com/LLNL/spack).
|
||||
|
||||
Your PR must pass Spack's unit tests and documentation tests, and must be
|
||||
[PEP 8](https://www.python.org/dev/peps/pep-0008/) compliant.
|
||||
We enforce these guidelines with [Travis CI](https://travis-ci.org/LLNL/spack).
|
||||
To run these tests locally, and for helpful tips on git, see our
|
||||
[Contribution Guide](http://spack.readthedocs.io/en/latest/contribution_guide.html).
|
||||
|
||||
Spack uses a rough approximation of the [Git
|
||||
Flow](http://nvie.com/posts/a-successful-git-branching-model/)
|
||||
branching model. The ``develop`` branch contains the latest
|
||||
contributions, and ``master`` is always tagged and points to the
|
||||
latest stable release.
|
||||
|
||||
|
||||
Authors
|
||||
----------------
|
||||
Spack was written by Todd Gamblin, tgamblin@llnl.gov.
|
||||
LLNL-CODE-647188
|
||||
Many thanks go to Spack's [contributors](https://github.com/llnl/spack/graphs/contributors).
|
||||
|
||||
Spack was originally written by Todd Gamblin, tgamblin@llnl.gov.
|
||||
|
||||
### Citing Spack
|
||||
|
||||
If you are referencing Spack in a publication, please cite the following paper:
|
||||
|
||||
* Todd Gamblin, Matthew P. LeGendre, Michael R. Collette, Gregory L. Lee,
|
||||
Adam Moody, Bronis R. de Supinski, and W. Scott Futral.
|
||||
[**The Spack Package Manager: Bringing Order to HPC Software Chaos**](http://www.computer.org/csdl/proceedings/sc/2015/3723/00/2807623.pdf).
|
||||
In *Supercomputing 2015 (SC’15)*, Austin, Texas, November 15-20 2015. LLNL-CONF-669890.
|
||||
|
||||
Release
|
||||
----------------
|
||||
Spack is released under an LGPL license. For more details see the
|
||||
LICENSE file.
|
||||
|
||||
``LLNL-CODE-647188``
|
||||
|
||||
123
bin/sbang
Executable file
123
bin/sbang
Executable file
@@ -0,0 +1,123 @@
|
||||
#!/bin/bash
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
#
|
||||
# `sbang`: Run scripts with long shebang lines.
|
||||
#
|
||||
# Many operating systems limit the length of shebang lines, making it
|
||||
# hard to use interpreters that are deep in the directory hierarchy.
|
||||
# `sbang` can run such scripts, either as a shebang interpreter, or
|
||||
# directly on the command line.
|
||||
#
|
||||
# Usage
|
||||
# -----------------------------
|
||||
# Suppose you have a script, long-shebang.sh, like this:
|
||||
#
|
||||
# 1 #!/very/long/path/to/some/interpreter
|
||||
# 2
|
||||
# 3 echo "success!"
|
||||
#
|
||||
# Invoking this script will result in an error on some OS's. On
|
||||
# Linux, you get this:
|
||||
#
|
||||
# $ ./long-shebang.sh
|
||||
# -bash: ./long: /very/long/path/to/some/interp: bad interpreter:
|
||||
# No such file or directory
|
||||
#
|
||||
# On Mac OS X, the system simply assumes the interpreter is the shell
|
||||
# and tries to run with it, which is likely not what you want.
|
||||
#
|
||||
#
|
||||
# `sbang` on the command line
|
||||
# -----------------------------
|
||||
# You can use `sbang` in two ways. The first is to use it directly,
|
||||
# from the command line, like this:
|
||||
#
|
||||
# $ sbang ./long-shebang.sh
|
||||
# success!
|
||||
#
|
||||
#
|
||||
# `sbang` as the interpreter
|
||||
# -----------------------------
|
||||
# You can also use `sbang` *as* the interpreter for your script. Put
|
||||
# `#!/bin/bash /path/to/sbang` on line 1, and move the original
|
||||
# shebang to line 2 of the script:
|
||||
#
|
||||
# 1 #!/bin/bash /path/to/sbang
|
||||
# 2 #!/long/path/to/real/interpreter with arguments
|
||||
# 3
|
||||
# 4 echo "success!"
|
||||
#
|
||||
# $ ./long-shebang.sh
|
||||
# success!
|
||||
#
|
||||
# On Linux, you could shorten line 1 to `#!/path/to/sbang`, but other
|
||||
# operating systems like Mac OS X require the interpreter to be a
|
||||
# binary, so it's best to use `sbang` as a `bash` argument.
|
||||
# Obviously, for this to work, `sbang` needs to have a short enough
|
||||
# path that *it* will run without hitting OS limits.
|
||||
#
|
||||
# For Lua, scripts the second line can't start with #!, as # is not
|
||||
# the comment character in lua (even though lua ignores #! on the
|
||||
# *first* line of a script). So, instrument a lua script like this,
|
||||
# using -- instead of # on the second line:
|
||||
#
|
||||
# 1 #!/bin/bash /path/to/sbang
|
||||
# 2 --!/long/path/to/lua with arguments
|
||||
# 3
|
||||
# 4 print "success!"
|
||||
#
|
||||
# How it works
|
||||
# -----------------------------
|
||||
# `sbang` is a very simple bash script. It looks at the first two
|
||||
# lines of a script argument and runs the last line starting with
|
||||
# `#!`, with the script as an argument. It also forwards arguments.
|
||||
#
|
||||
|
||||
# First argument is the script we want to actually run.
|
||||
script="$1"
|
||||
|
||||
# Search the first two lines of script for interpreters.
|
||||
lines=0
|
||||
while read line && ((lines < 2)) ; do
|
||||
if [[ "$line" = '#!'* ]]; then
|
||||
interpreter="${line#\#!}"
|
||||
elif [[ "$line" = '--!'*lua* ]]; then
|
||||
interpreter="${line#--!}"
|
||||
fi
|
||||
lines=$((lines+1))
|
||||
done < "$script"
|
||||
|
||||
# Invoke any interpreter found, or raise an error if none was found.
|
||||
if [[ -n "$interpreter" ]]; then
|
||||
if [[ "${interpreter##*/}" = "perl" ]]; then
|
||||
exec $interpreter -x "$@"
|
||||
else
|
||||
exec $interpreter "$@"
|
||||
fi
|
||||
else
|
||||
echo "error: sbang found no interpreter in $script"
|
||||
exit 1
|
||||
fi
|
||||
201
bin/spack
201
bin/spack
@@ -1,34 +1,37 @@
|
||||
#!/usr/bin/env python
|
||||
# flake8: noqa
|
||||
##############################################################################
|
||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://scalability-llnl.github.io/spack
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License (as published by
|
||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU General Public License for more details.
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
import sys
|
||||
if not sys.version_info[:2] >= (2,7):
|
||||
sys.exit("Spack requires Python 2.7. Version was %s." % sys.version_info)
|
||||
if (sys.version_info[0] > 2) or (sys.version_info[:2] < (2, 6)):
|
||||
v_info = sys.version_info[:3]
|
||||
sys.exit("Spack requires Python 2.6 or 2.7. "
|
||||
"This is Python %d.%d.%d." % v_info)
|
||||
|
||||
import os
|
||||
import argparse
|
||||
import inspect
|
||||
|
||||
# Find spack's location and its prefix.
|
||||
SPACK_FILE = os.path.realpath(os.path.expanduser(__file__))
|
||||
@@ -39,6 +42,34 @@ SPACK_PREFIX = os.path.dirname(os.path.dirname(SPACK_FILE))
|
||||
SPACK_LIB_PATH = os.path.join(SPACK_PREFIX, "lib", "spack")
|
||||
sys.path.insert(0, SPACK_LIB_PATH)
|
||||
|
||||
# Add external libs
|
||||
SPACK_EXTERNAL_LIBS = os.path.join(SPACK_LIB_PATH, "external")
|
||||
sys.path.insert(0, SPACK_EXTERNAL_LIBS)
|
||||
|
||||
# Quick and dirty check to clean orphaned .pyc files left over from
|
||||
# previous revisions. These files were present in earlier versions of
|
||||
# Spack, were removed, but shadow system modules that Spack still
|
||||
# imports. If we leave them, Spack will fail in mysterious ways.
|
||||
# TODO: more elegant solution for orphaned pyc files.
|
||||
orphaned_pyc_files = [
|
||||
os.path.join(SPACK_EXTERNAL_LIBS, 'functools.pyc'),
|
||||
os.path.join(SPACK_EXTERNAL_LIBS, 'ordereddict.pyc'),
|
||||
os.path.join(SPACK_LIB_PATH, 'spack', 'platforms', 'cray_xc.pyc'),
|
||||
os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'package-list.pyc'),
|
||||
os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'test-install.pyc'),
|
||||
os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'url-parse.pyc'),
|
||||
os.path.join(SPACK_LIB_PATH, 'spack', 'test', 'yaml.pyc')
|
||||
]
|
||||
|
||||
for pyc_file in orphaned_pyc_files:
|
||||
if not os.path.exists(pyc_file):
|
||||
continue
|
||||
try:
|
||||
os.remove(pyc_file)
|
||||
except OSError as e:
|
||||
print ("WARNING: Spack may fail mysteriously. "
|
||||
"Couldn't remove orphaned .pyc file: %s" % pyc_file)
|
||||
|
||||
# If there is no working directory, use the spack prefix.
|
||||
try:
|
||||
working_dir = os.getcwd()
|
||||
@@ -49,61 +80,133 @@ except OSError:
|
||||
# clean up the scope and start using spack package instead.
|
||||
del SPACK_FILE, SPACK_PREFIX, SPACK_LIB_PATH
|
||||
import llnl.util.tty as tty
|
||||
from llnl.util.tty.color import *
|
||||
import spack
|
||||
from spack.error import SpackError
|
||||
import argparse
|
||||
|
||||
# Command parsing
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Spack: the Supercomputing PACKage Manager.')
|
||||
formatter_class=argparse.RawTextHelpFormatter,
|
||||
description="Spack: the Supercomputing PACKage Manager." + colorize("""
|
||||
|
||||
spec expressions:
|
||||
PACKAGE [CONSTRAINTS]
|
||||
|
||||
CONSTRAINTS:
|
||||
@c{@version}
|
||||
@g{%compiler @compiler_version}
|
||||
@B{+variant}
|
||||
@r{-variant} or @r{~variant}
|
||||
@m{=architecture}
|
||||
[^DEPENDENCY [CONSTRAINTS] ...]"""))
|
||||
|
||||
parser.add_argument('-d', '--debug', action='store_true',
|
||||
help="Write out debug logs during compile")
|
||||
parser.add_argument('-D', '--pdb', action='store_true',
|
||||
help="Run spack under the pdb debugger")
|
||||
parser.add_argument('-k', '--insecure', action='store_true',
|
||||
help="Do not check ssl certificates when downloading.")
|
||||
parser.add_argument('-m', '--mock', action='store_true',
|
||||
help="Use mock packages instead of real ones.")
|
||||
parser.add_argument('-p', '--profile', action='store_true',
|
||||
help="Profile execution using cProfile.")
|
||||
parser.add_argument('-v', '--verbose', action='store_true',
|
||||
help="Print additional output during builds")
|
||||
parser.add_argument('-s', '--stacktrace', action='store_true',
|
||||
help="Add stacktrace information to all printed statements")
|
||||
parser.add_argument('-V', '--version', action='version',
|
||||
version="%s" % spack.spack_version)
|
||||
parser.add_argument('-v', '--verbose', action='store_true', dest='verbose',
|
||||
help="Print additional output during builds")
|
||||
parser.add_argument('-d', '--debug', action='store_true', dest='debug',
|
||||
help="Write out debug logs during compile")
|
||||
parser.add_argument('-k', '--insecure', action='store_true', dest='insecure',
|
||||
help="Do not check ssl certificates when downloading archives.")
|
||||
parser.add_argument('-m', '--mock', action='store_true', dest='mock',
|
||||
help="Use mock packages instead of real ones.")
|
||||
|
||||
# each command module implements a parser() function, to which we pass its
|
||||
# subparser for setup.
|
||||
subparsers = parser.add_subparsers(metavar='SUBCOMMAND', dest="command")
|
||||
|
||||
|
||||
import spack.cmd
|
||||
for cmd in spack.cmd.commands:
|
||||
module = spack.cmd.get_module(cmd)
|
||||
subparser = subparsers.add_parser(cmd, help=module.description)
|
||||
cmd_name = cmd.replace('_', '-')
|
||||
subparser = subparsers.add_parser(cmd_name, help=module.description)
|
||||
module.setup_parser(subparser)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Set up environment based on args.
|
||||
tty.set_verbose(args.verbose)
|
||||
tty.set_debug(args.debug)
|
||||
spack.debug = args.debug
|
||||
|
||||
spack.spack_working_dir = working_dir
|
||||
if args.mock:
|
||||
from spack.packages import PackageDB
|
||||
spack.db = PackageDB(spack.mock_packages_path)
|
||||
def _main(args, unknown_args):
|
||||
# Set up environment based on args.
|
||||
tty.set_verbose(args.verbose)
|
||||
tty.set_debug(args.debug)
|
||||
tty.set_stacktrace(args.stacktrace)
|
||||
spack.debug = args.debug
|
||||
|
||||
# If the user asked for it, don't check ssl certs.
|
||||
if args.insecure:
|
||||
tty.warn("You asked for --insecure, which does not check SSL certificates.")
|
||||
spack.curl.add_default_arg('-k')
|
||||
|
||||
# Try to load the particular command asked for and run it
|
||||
command = spack.cmd.get_command(args.command)
|
||||
try:
|
||||
command(parser, args)
|
||||
except SpackError, e:
|
||||
if spack.debug:
|
||||
# In debug mode, raise with a full stack trace.
|
||||
raise
|
||||
elif e.long_message:
|
||||
tty.die(e.message, e.long_message)
|
||||
else:
|
||||
tty.die(e.message)
|
||||
import spack.util.debug as debug
|
||||
debug.register_interrupt_handler()
|
||||
|
||||
except KeyboardInterrupt:
|
||||
tty.die("Keyboard interrupt.")
|
||||
# Run any available pre-run hooks
|
||||
spack.hooks.pre_run()
|
||||
|
||||
spack.spack_working_dir = working_dir
|
||||
if args.mock:
|
||||
from spack.repository import RepoPath
|
||||
spack.repo.swap(RepoPath(spack.mock_packages_path))
|
||||
|
||||
# If the user asked for it, don't check ssl certs.
|
||||
if args.insecure:
|
||||
tty.warn("You asked for --insecure. Will NOT check SSL certificates.")
|
||||
spack.insecure = True
|
||||
|
||||
# Try to load the particular command asked for and run it
|
||||
command = spack.cmd.get_command(args.command.replace('-', '_'))
|
||||
|
||||
# Allow commands to inject an optional argument and get unknown args
|
||||
# if they want to handle them.
|
||||
info = dict(inspect.getmembers(command))
|
||||
varnames = info['__code__'].co_varnames
|
||||
argcount = info['__code__'].co_argcount
|
||||
|
||||
# Actually execute the command
|
||||
try:
|
||||
if argcount == 3 and varnames[2] == 'unknown_args':
|
||||
return_val = command(parser, args, unknown_args)
|
||||
else:
|
||||
if unknown_args:
|
||||
tty.die('unrecognized arguments: %s' % ' '.join(unknown_args))
|
||||
return_val = command(parser, args)
|
||||
except SpackError as e:
|
||||
e.die()
|
||||
except KeyboardInterrupt:
|
||||
sys.stderr.write('\n')
|
||||
tty.die("Keyboard interrupt.")
|
||||
|
||||
# Allow commands to return values if they want to exit with some other code.
|
||||
if return_val is None:
|
||||
sys.exit(0)
|
||||
elif isinstance(return_val, int):
|
||||
sys.exit(return_val)
|
||||
else:
|
||||
tty.die("Bad return value from command %s: %s"
|
||||
% (args.command, return_val))
|
||||
|
||||
|
||||
def main(args):
|
||||
# Just print help and exit if run with no arguments at all
|
||||
if len(args) == 1:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
# actually parse the args.
|
||||
args, unknown = parser.parse_known_args()
|
||||
|
||||
if args.profile:
|
||||
import cProfile
|
||||
cProfile.runctx('_main(args, unknown)', globals(), locals(),
|
||||
sort='time')
|
||||
elif args.pdb:
|
||||
import pdb
|
||||
pdb.runctx('_main(args, unknown)', globals(), locals())
|
||||
else:
|
||||
_main(args, unknown)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main(sys.argv)
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
#!/bin/sh
|
||||
##############################################################################
|
||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://scalability-llnl.github.io/spack
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License (as published by
|
||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU General Public License for more details.
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
#
|
||||
# spack-python
|
||||
|
||||
68
etc/spack/defaults/config.yaml
Normal file
68
etc/spack/defaults/config.yaml
Normal file
@@ -0,0 +1,68 @@
|
||||
# -------------------------------------------------------------------------
|
||||
# This is the default spack configuration file.
|
||||
#
|
||||
# Settings here are versioned with Spack and are intended to provide
|
||||
# sensible defaults out of the box. Spack maintainers should edit this
|
||||
# file to keep it current.
|
||||
#
|
||||
# Users can override these settings by editing the following files.
|
||||
#
|
||||
# Per-spack-instance settings (overrides defaults):
|
||||
# $SPACK_ROOT/etc/spack/config.yaml
|
||||
#
|
||||
# Per-user settings (overrides default and site settings):
|
||||
# ~/.spack/config.yaml
|
||||
# -------------------------------------------------------------------------
|
||||
config:
|
||||
# This is the path to the root of the Spack install tree.
|
||||
# You can use $spack here to refer to the root of the spack instance.
|
||||
install_tree: $spack/opt/spack
|
||||
|
||||
|
||||
# Locations where different types of modules should be installed.
|
||||
module_roots:
|
||||
tcl: $spack/share/spack/modules
|
||||
lmod: $spack/share/spack/lmod
|
||||
dotkit: $spack/share/spack/dotkit
|
||||
|
||||
|
||||
# Temporary locations Spack can try to use for builds.
|
||||
#
|
||||
# Spack will use the first one it finds that exists and is writable.
|
||||
# You can use $tempdir to refer to the system default temp directory
|
||||
# (as returned by tempfile.gettempdir()).
|
||||
#
|
||||
# A value of $spack/var/spack/stage indicates that Spack should run
|
||||
# builds directly inside its install directory without staging them in
|
||||
# temporary space.
|
||||
#
|
||||
# The build stage can be purged with `spack purge --stage`.
|
||||
build_stage:
|
||||
- $tempdir
|
||||
- /nfs/tmp2/$user
|
||||
- $spack/var/spack/stage
|
||||
|
||||
|
||||
# Cache directory already downloaded source tarballs and archived
|
||||
# repositories. This can be purged with `spack purge --downloads`.
|
||||
source_cache: $spack/var/spack/cache
|
||||
|
||||
|
||||
# Cache directory for miscellaneous files, like the package index.
|
||||
# This can be purged with `spack purge --misc-cache`
|
||||
misc_cache: ~/.spack/cache
|
||||
|
||||
|
||||
# If this is false, tools like curl that use SSL will not verify
|
||||
# certifiates. (e.g., curl will use use the -k option)
|
||||
verify_ssl: true
|
||||
|
||||
|
||||
# If set to true, Spack will always check checksums after downloading
|
||||
# archives. If false, Spack skips the checksum step.
|
||||
checksum: true
|
||||
|
||||
|
||||
# If set to true, `spack install` and friends will NOT clean
|
||||
# potentially harmful variables from the build environment. Use wisely.
|
||||
dirty: false
|
||||
18
etc/spack/defaults/darwin/packages.yaml
Normal file
18
etc/spack/defaults/darwin/packages.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
# -------------------------------------------------------------------------
|
||||
# This file controls default concretization preferences for Spack.
|
||||
#
|
||||
# Settings here are versioned with Spack and are intended to provide
|
||||
# sensible defaults out of the box. Spack maintainers should edit this
|
||||
# file to keep it current.
|
||||
#
|
||||
# Users can override these settings by editing the following files.
|
||||
#
|
||||
# Per-spack-instance settings (overrides defaults):
|
||||
# $SPACK_ROOT/etc/spack/packages.yaml
|
||||
#
|
||||
# Per-user settings (overrides default and site settings):
|
||||
# ~/.spack/packages.yaml
|
||||
# -------------------------------------------------------------------------
|
||||
packages:
|
||||
all:
|
||||
compiler: [clang, gcc, intel]
|
||||
42
etc/spack/defaults/modules.yaml
Normal file
42
etc/spack/defaults/modules.yaml
Normal file
@@ -0,0 +1,42 @@
|
||||
# -------------------------------------------------------------------------
|
||||
# This is the default configuration for Spack's module file generation.
|
||||
#
|
||||
# Settings here are versioned with Spack and are intended to provide
|
||||
# sensible defaults out of the box. Spack maintainers should edit this
|
||||
# file to keep it current.
|
||||
#
|
||||
# Users can override these settings by editing the following files.
|
||||
#
|
||||
# Per-spack-instance settings (overrides defaults):
|
||||
# $SPACK_ROOT/etc/spack/modules.yaml
|
||||
#
|
||||
# Per-user settings (overrides default and site settings):
|
||||
# ~/.spack/modules.yaml
|
||||
# -------------------------------------------------------------------------
|
||||
modules:
|
||||
enable:
|
||||
- tcl
|
||||
- dotkit
|
||||
prefix_inspections:
|
||||
bin:
|
||||
- PATH
|
||||
man:
|
||||
- MANPATH
|
||||
share/man:
|
||||
- MANPATH
|
||||
share/aclocal:
|
||||
- ACLOCAL_PATH
|
||||
lib:
|
||||
- LIBRARY_PATH
|
||||
- LD_LIBRARY_PATH
|
||||
lib64:
|
||||
- LIBRARY_PATH
|
||||
- LD_LIBRARY_PATH
|
||||
include:
|
||||
- CPATH
|
||||
lib/pkgconfig:
|
||||
- PKG_CONFIG_PATH
|
||||
lib64/pkgconfig:
|
||||
- PKG_CONFIG_PATH
|
||||
'':
|
||||
- CMAKE_PREFIX_PATH
|
||||
23
etc/spack/defaults/packages.yaml
Normal file
23
etc/spack/defaults/packages.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
# -------------------------------------------------------------------------
|
||||
# This file controls default concretization preferences for Spack.
|
||||
#
|
||||
# Settings here are versioned with Spack and are intended to provide
|
||||
# sensible defaults out of the box. Spack maintainers should edit this
|
||||
# file to keep it current.
|
||||
#
|
||||
# Users can override these settings by editing the following files.
|
||||
#
|
||||
# Per-spack-instance settings (overrides defaults):
|
||||
# $SPACK_ROOT/etc/spack/packages.yaml
|
||||
#
|
||||
# Per-user settings (overrides default and site settings):
|
||||
# ~/.spack/packages.yaml
|
||||
# -------------------------------------------------------------------------
|
||||
packages:
|
||||
all:
|
||||
compiler: [gcc, intel, pgi, clang, xl, nag]
|
||||
providers:
|
||||
mpi: [openmpi, mpich]
|
||||
blas: [openblas]
|
||||
lapack: [openblas]
|
||||
pil: [py-pillow]
|
||||
14
etc/spack/defaults/repos.yaml
Normal file
14
etc/spack/defaults/repos.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
# -------------------------------------------------------------------------
|
||||
# This is the default spack repository configuration. It includes the
|
||||
# builtin spack package repository.
|
||||
#
|
||||
# Users can override these settings by editing the following files.
|
||||
#
|
||||
# Per-spack-instance settings (overrides defaults):
|
||||
# $SPACK_ROOT/etc/spack/repos.yaml
|
||||
#
|
||||
# Per-user settings (overrides default and site settings):
|
||||
# ~/.spack/repos.yaml
|
||||
# -------------------------------------------------------------------------
|
||||
repos:
|
||||
- $spack/var/spack/repos/builtin
|
||||
3
lib/spack/docs/.gitignore
vendored
3
lib/spack/docs/.gitignore
vendored
@@ -1,2 +1,5 @@
|
||||
package_list.rst
|
||||
command_index.rst
|
||||
spack*.rst
|
||||
modules.rst
|
||||
_build
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
SPHINXOPTS = -E
|
||||
JOBS ?= $(shell python -c 'import multiprocessing; print multiprocessing.cpu_count()')
|
||||
SPHINXBUILD = sphinx-build -j $(JOBS)
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
export PYTHONPATH = ../../spack
|
||||
export PYTHONPATH := ../../spack:$(PYTHONPATH)
|
||||
APIDOC_FILES = spack*.rst
|
||||
|
||||
# Internal variables.
|
||||
@@ -36,12 +37,25 @@ gh-pages: _build/html
|
||||
touch .nojekyll && \
|
||||
git init && \
|
||||
git add . && \
|
||||
git commit -m "Initial commit" && \
|
||||
git commit -m "Spack Documentation" && \
|
||||
git push -f $$root master:gh-pages && \
|
||||
rm -rf .git
|
||||
|
||||
# This version makes gh-pages into a single page that redirects
|
||||
# to spack.readthedocs.io
|
||||
gh-pages-redirect:
|
||||
root="$$(git rev-parse --show-toplevel)" && \
|
||||
cd _gh_pages_redirect && \
|
||||
rm -rf .git && \
|
||||
git init && \
|
||||
git add . && \
|
||||
git commit -m "Spack Documentation" && \
|
||||
git push -f $$root master:gh-pages && \
|
||||
rm -rf .git
|
||||
|
||||
upload:
|
||||
rsync -avz --rsh=ssh --delete _build/html/ cab:/usr/global/web-pages/lc/www/adept/docs/spack
|
||||
git push -f github gh-pages
|
||||
|
||||
apidoc:
|
||||
sphinx-apidoc -T -o . $(PYTHONPATH)/spack
|
||||
@@ -69,9 +83,10 @@ help:
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
clean:
|
||||
-rm -f package_list.rst command_index.rst modules.rst
|
||||
-rm -rf $(BUILDDIR)/* $(APIDOC_FILES)
|
||||
|
||||
html: apidoc
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
10
lib/spack/docs/_gh_pages_redirect/index.html
Normal file
10
lib/spack/docs/_gh_pages_redirect/index.html
Normal file
@@ -0,0 +1,10 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0; url=http://spack.readthedocs.io/" />
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
This page has moved to <a href="http://spack.readthedocs.io/">http://spack.readthedocs.io/</a>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -5,7 +5,7 @@
|
||||
"""
|
||||
import os
|
||||
|
||||
VERSION = (0, 1, 5)
|
||||
VERSION = (0, 1, 8)
|
||||
|
||||
__version__ = ".".join(str(v) for v in VERSION)
|
||||
__version_full__ = __version__
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="{{ pathto(master_doc) }}">Docs</a> »</li>
|
||||
<li><a href="">{{ title }}</a></li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
{% if display_github %}
|
||||
<a href="https://github.com/{{ github_user }}/{{ github_repo }}/blob/{{ github_version }}{{ conf_py_path }}{{ pagename }}.rst" class="icon icon-github"> Edit on GitHub</a>
|
||||
{% elif display_bitbucket %}
|
||||
<a href="https://bitbucket.org/{{ bitbucket_user }}/{{ bitbucket_repo }}/src/{{ bitbucket_version}}{{ conf_py_path }}{{ pagename }}.rst'" class="icon icon-bitbucket"> Edit on Bitbucket</a>
|
||||
{% elif show_source and has_source and sourcename %}
|
||||
<a href="{{ pathto('_sources/' + sourcename, true)|e }}" rel="nofollow"> View page source</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
|
||||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="{{ pathto(master_doc) }}">Docs</a> »</li>
|
||||
{% for doc in parents %}
|
||||
<li><a href="{{ doc.link|e }}">{{ doc.title }}</a> »</li>
|
||||
{% endfor %}
|
||||
<li>{{ title }}</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
{% if pagename != "search" %}
|
||||
{% if display_github %}
|
||||
<a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/blob/{{ github_version }}{{ conf_py_path }}{{ pagename }}{{ source_suffix }}" class="fa fa-github"> Edit on GitHub</a>
|
||||
{% elif display_bitbucket %}
|
||||
<a href="https://bitbucket.org/{{ bitbucket_user }}/{{ bitbucket_repo }}/src/{{ bitbucket_version}}{{ conf_py_path }}{{ pagename }}{{ source_suffix }}" class="fa fa-bitbucket"> Edit on Bitbucket</a>
|
||||
{% elif show_source and source_url_prefix %}
|
||||
<a href="{{ source_url_prefix }}{{ pagename }}{{ source_suffix }}">View page source</a>
|
||||
{% elif show_source and has_source and sourcename %}
|
||||
<a href="{{ pathto('_sources/' + sourcename, true)|e }}" rel="nofollow"> View page source</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
|
||||
@@ -1,28 +1,40 @@
|
||||
<footer>
|
||||
{% if next or prev %}
|
||||
<div class="rst-footer-buttons">
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||||
{% if next %}
|
||||
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}"/>Next <span class="icon icon-circle-arrow-right"></span></a>
|
||||
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||||
{% endif %}
|
||||
{% if prev %}
|
||||
<a href="{{ prev.link|e }}" class="btn btn-neutral" title="{{ prev.title|striptags|e }}"><span class="icon icon-circle-arrow-left"></span> Previous</a>
|
||||
<a href="{{ prev.link|e }}" class="btn btn-neutral" title="{{ prev.title|striptags|e }}" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<hr/>
|
||||
|
||||
<p>
|
||||
© Copyright 2013,
|
||||
<a href="https://scalability.llnl.gov/">Lawrence Livermore National Laboratory</a>.
|
||||
<br/>
|
||||
Written by Todd Gamblin, <a href="mailto:tgamblin@llnl.gov">tgamblin@llnl.gov</a>, LLNL-CODE-647188
|
||||
<br/>
|
||||
<div role="contentinfo">
|
||||
<p>
|
||||
{%- if show_copyright %}
|
||||
{%- if hasdoc('copyright') %}
|
||||
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
|
||||
{%- else %}
|
||||
{% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||
<br/>
|
||||
Written by Todd Gamblin (<a href="mailto:tgamblin@llnl.gov">tgamblin@llnl.gov</a>) and
|
||||
many contributors. LLNL-CODE-647188.
|
||||
|
||||
{%- if last_updated %}
|
||||
<br/>
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{%- if show_sphinx %}
|
||||
{% trans %}Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>{% endtrans %}.
|
||||
{%- endif %}
|
||||
|
||||
{% trans %}<br/><a href="https://www.github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="http://readthedocs.org">Read the Docs</a>{% endtrans %}
|
||||
</p>
|
||||
|
||||
</footer>
|
||||
|
||||
107
lib/spack/docs/_themes/sphinx_rtd_theme/layout.html
vendored
107
lib/spack/docs/_themes/sphinx_rtd_theme/layout.html
vendored
@@ -12,6 +12,7 @@
|
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
{{ metatags }}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
{% block htmltitle %}
|
||||
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||
@@ -23,40 +24,28 @@
|
||||
{% endif %}
|
||||
|
||||
{# CSS #}
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
|
||||
|
||||
{# JS #}
|
||||
{# OPENSEARCH #}
|
||||
{% if not embedded %}
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT:'{{ url_root }}',
|
||||
VERSION:'{{ release|e }}',
|
||||
COLLAPSE_INDEX:false,
|
||||
FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
|
||||
HAS_SOURCE: {{ has_source|lower }}
|
||||
};
|
||||
</script>
|
||||
{%- for scriptfile in script_files %}
|
||||
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
|
||||
{%- endfor %}
|
||||
|
||||
{% if use_opensearch %}
|
||||
<link rel="search" type="application/opensearchdescription+xml" title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}" href="{{ pathto('_static/opensearch.xml', 1) }}"/>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{# RTD hosts these file themselves, so just load on non RTD builds #}
|
||||
{# RTD hosts this file, so just load on non RTD builds #}
|
||||
{% if not READTHEDOCS %}
|
||||
<link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
|
||||
<script type="text/javascript" src="_static/js/theme.js"></script>
|
||||
{% endif %}
|
||||
|
||||
{% for cssfile in css_files %}
|
||||
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||
{% endfor %}
|
||||
|
||||
{% for cssfile in extra_css_files %}
|
||||
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||
{% endfor %}
|
||||
|
||||
{%- block linktags %}
|
||||
{%- if hasdoc('about') %}
|
||||
<link rel="author" title="{{ _('About these documents') }}"
|
||||
@@ -85,29 +74,47 @@
|
||||
{%- endblock %}
|
||||
{%- block extrahead %} {% endblock %}
|
||||
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
|
||||
{# Keep modernizr in head - http://modernizr.com/docs/#installing #}
|
||||
<script src="_static/js/modernizr.min.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
<body class="wy-body-for-nav" role="document">
|
||||
|
||||
<div class="wy-grid-for-nav">
|
||||
|
||||
{# SIDE NAV, TOGGLES ON MOBILE #}
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-nav-search">
|
||||
<a href="{{ pathto(master_doc) }}" class="icon icon-home"> {{ project }}</a>
|
||||
{% block sidebartitle %}
|
||||
|
||||
{% if logo and theme_logo_only %}
|
||||
<a href="{{ pathto(master_doc) }}">
|
||||
{% else %}
|
||||
<a href="{{ pathto(master_doc) }}" class="icon icon-home"> {{ project }}
|
||||
{% endif %}
|
||||
|
||||
{% if logo %}
|
||||
{# Not strictly valid HTML, but it's the only way to display/scale it properly, without weird scripting or heaps of work #}
|
||||
<img src="{{ pathto('_static/' + logo, 1) }}" class="logo" />
|
||||
{% endif %}
|
||||
</a>
|
||||
|
||||
{% include "searchbox.html" %}
|
||||
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix">
|
||||
{% set toctree = toctree(maxdepth=2, collapse=False, includehidden=True) %}
|
||||
{% if toctree %}
|
||||
{{ toctree }}
|
||||
{% else %}
|
||||
<!-- Local TOC -->
|
||||
<div class="local-toc">{{ toc }}</div>
|
||||
{% endif %}
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||
{% block menu %}
|
||||
{% set toctree = toctree(maxdepth=4, collapse=False, includehidden=True) %}
|
||||
{% if toctree %}
|
||||
{{ toctree }}
|
||||
{% else %}
|
||||
<!-- Local TOC -->
|
||||
<div class="local-toc">{{ toc }}</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
@@ -115,8 +122,8 @@
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||
|
||||
{# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
|
||||
<nav class="wy-nav-top">
|
||||
<i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
|
||||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="{{ pathto(master_doc) }}">{{ project }}</a>
|
||||
</nav>
|
||||
|
||||
@@ -125,7 +132,9 @@
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
{% include "breadcrumbs.html" %}
|
||||
{% block body %}{% endblock %}
|
||||
<div role="main" class="document">
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
{% include "footer.html" %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -134,5 +143,39 @@
|
||||
|
||||
</div>
|
||||
{% include "versions.html" %}
|
||||
|
||||
{% if not embedded %}
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT:'{{ url_root }}',
|
||||
VERSION:'{{ release|e }}',
|
||||
COLLAPSE_INDEX:false,
|
||||
FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
|
||||
HAS_SOURCE: {{ has_source|lower }}
|
||||
};
|
||||
</script>
|
||||
{%- for scriptfile in script_files %}
|
||||
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
|
||||
{%- endfor %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{# RTD hosts this file, so just load on non RTD builds #}
|
||||
{% if not READTHEDOCS %}
|
||||
<script type="text/javascript" src="{{ pathto('_static/js/theme.js', 1) }}"></script>
|
||||
{% endif %}
|
||||
|
||||
{# STICKY NAVIGATION #}
|
||||
{% if theme_sticky_navigation %}
|
||||
<script type="text/javascript">
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.StickyNav.enable();
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{%- block footer %} {% endblock %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
{%- extends "layout.html" %}
|
||||
{% set title = _('Search') %}
|
||||
{% set script_files = script_files + ['_static/searchtools.js'] %}
|
||||
{% block extrahead %}
|
||||
{% block footer %}
|
||||
<script type="text/javascript">
|
||||
jQuery(function() { Search.loadIndex("{{ pathto('searchindex.js', 1) }}"); });
|
||||
</script>
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
<form id ="rtd-search-form" class="wy-form" action="{{ pathto('search') }}" method="get">
|
||||
<input type="text" name="q" placeholder="Search docs" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
{%- if builder != 'singlehtml' %}
|
||||
<div role="search">
|
||||
<form id="rtd-search-form" class="wy-form" action="{{ pathto('search') }}" method="get">
|
||||
<input type="text" name="q" placeholder="Search docs" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
{%- endif %}
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
.font-smooth,.icon:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:fontawesome-webfont;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#fontawesome-webfont") format("svg")}.icon:before{display:inline-block;font-family:fontawesome-webfont;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .icon{display:inline-block;text-decoration:inherit}li .icon{display:inline-block}li .icon-large:before,li .icon-large:before{width:1.875em}ul.icons{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.icons li .icon{width:0.8em}ul.icons li .icon-large:before,ul.icons li .icon-large:before{vertical-align:baseline}.icon-book:before{content:"\f02d"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}
|
||||
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}
|
||||
/*# sourceMappingURL=badge_only.css.map */
|
||||
|
||||
7
lib/spack/docs/_themes/sphinx_rtd_theme/static/css/badge_only.css.map
vendored
Normal file
7
lib/spack/docs/_themes/sphinx_rtd_theme/static/css/badge_only.css.map
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"mappings": "CAyDA,SAAY,EACV,qBAAsB,EAAE,UAAW,EAqDrC,QAAS,EARP,IAAK,EAAE,AAAC,EACR,+BAAS,EAEP,MAAO,EAAE,IAAK,EACd,MAAO,EAAE,CAAE,EACb,cAAO,EACL,IAAK,EAAE,GAAI,EC1Gb,SAkBC,EAjBC,UAAW,ECFJ,UAAW,EDGlB,UAAW,EAHqC,KAAM,EAItD,SAAU,EAJsD,KAAM,EAapE,EAAG,EAAE,qCAAwB,EAC7B,EAAG,EAAE,0PAAyE,ECZpF,SAAU,EACR,MAAO,EAAE,WAAY,EACrB,UAAW,EAAE,UAAW,EACxB,SAAU,EAAE,KAAM,EAClB,UAAW,EAAE,KAAM,EACnB,UAAW,EAAE,AAAC,EACd,cAAe,EAAE,MAAO,EAG1B,IAAK,EACH,MAAO,EAAE,WAAY,EACrB,cAAe,EAAE,MAAO,EAIxB,KAAG,EACD,MAAO,EAAE,WAAY,EACvB,sCAAiB,EAGf,IAAK,EAAE,MAAY,EAEvB,KAAM,EACJ,cAAe,EAAE,GAAI,EACrB,UAAW,EAAE,EAAG,EAChB,UAAW,EAAE,KAAM,EAEjB,YAAG,EACD,IAAK,EAAE,IAAI,EACb,oDAAiB,EAGf,aAAc,EAAE,OAAQ,EAG9B,cAAe,EACb,MAAO,EAAE,EAAO,EAElB,gBAAiB,EACf,MAAO,EAAE,EAAO,EAElB,oBAAqB,EACnB,MAAO,EAAE,EAAO,EAElB,sBAAuB,EACrB,MAAO,EAAE,EAAO,EAElB,kBAAmB,EACjB,MAAO,EAAE,EAAO,EAElB,oBAAqB,EACnB,MAAO,EAAE,EAAO,EAElB,oBAAqB,EACnB,MAAO,EAAE,EAAO,EAElB,sBAAuB,EACrB,MAAO,EAAE,EAAO,EAElB,qBAAsB,EACpB,MAAO,EAAE,EAAO,EAElB,uBAAwB,EACtB,MAAO,EAAE,EAAO,ECnElB,YAAa,EACX,OAAQ,EAAE,IAAK,EACf,KAAM,EAAE,AAAC,EACT,GAAI,EAAE,AAAC,EACP,IAAK,EC6E+B,IAAK,ED5EzC,IAAK,ECE+B,MAAyB,EDD7D,SAAU,EAAE,MAAkC,EAC9C,SAAU,EAAE,iBAAiC,EAC7C,UAAW,EEAyB,sDAAM,EFC1C,MAAO,EC+E6B,EAAG,ED9EvC,cAAC,EACC,IAAK,ECqE6B,MAAW,EDpE7C,cAAe,EAAE,GAAI,EACvB,6BAAgB,EACd,MAAO,EAAE,GAAI,EACf,iCAAoB,EAClB,MAAO,EAAE,GAAqB,EAC9B,eAAgB,EAAE,MAAkC,EACpD,MAAO,EAAE,IAAK,EACd,SAAU,EAAE,IAAK,EACjB,QAAS,EAAE,EAAG,EACd,KAAM,EAAE,MAAO,EACf,IAAK,ECiD6B,MAAM,EJgC1C,IAAK,EAAE,AAAC,EACR,iFAAS,EAEP,MAAO,EAAE,IAAK,EACd,MAAO,EAAE,CAAE,EACb,uCAAO,EACL,IAAK,EAAE,GAAI,EGrFX,qCAAG,EACD,IAAK,EClB2B,MAAyB,EDmB3D,0CAAQ,EACN,IAAK,EAAE,GAAI,EACb,4CAAU,EACR,IAAK,EAAE,GAAI,EACb,iDAAiB,EACf,eAAgB,ECQgB,MAAI,EDPpC,IAAK,EC0B2B,GAAM,EDzBxC,wDAAwB,EACtB,eAAgB,ECXgB,MAAO,EDYvC,IAAK,ECzB2B,GAAI,ED0BxC,yCAA8B,EAC5B,MAAO,EAAE,IAAK,EAChB,gCAAmB,EACjB,QAAS,EAAE,EAAG,EACd,MAAO,EAAE,GAAqB,EAC9B,IAAK,ECE6B,GAAwB,EDD1D,MAAO,EAAE,GAAI,EACb,mCAAE,EACA,MAAO,EAAE,IAAK,EACd,KAAM,EAAE,EAAG,EACX,KAAM,EAAE,AAAC,EACT,KAAM,EAAE,KAAM,EACd,MAAO,EAAE,AAAC,EACV,SAAU,EAAE,gBAA6C,EAC3D,mCAAE,EACA,MAAO,EAAE,WAAY,EACrB,KAAM,EAAE,AAAC,EACT,qCAAC,EACC,MAAO,EAAE,WAAY,EACrB,MAAO,EAAE,EAAqB,EAC9B,IAAK,ECjDyB,MAAyB,EDkD7D,sBAAW,EACT,IAAK,EAAE,GAAI,EACX,KAAM,EAAE,GAAI,EACZ,IAAK,EAAE,GAAI,EACX,GAAI,EAAE,GAAI,EACV,KAAM,EAAE,GAAI,EACZ,QAAS,ECkByB,IAAK,EDjBvC,iCAAU,EACR,IAAK,EAAE,GAAI,EACb,+BAAQ,EACN,IAAK,EAAE,GAAI,EACb,oDAA+B,EAC7B,SAAU,EAAE,IAAK,EACjB,6DAAQ,EACN,IAAK,EAAE,GAAI,EACb,+DAAU,EACR,IAAK,EAAE,GAAI,EACf,2CAAoB,EAClB,IAAK,EAAE,GAAI,EACX,KAAM,EAAE,GAAI,EACZ,UAAW,EAAE,GAAI,EACjB,MAAO,EAAE,IAAuB,EAChC,MAAO,EAAE,IAAK,EACd,SAAU,EAAE,KAAM,EGhDpB,mCAAsB,EHmDxB,YAAa,EACX,IAAK,EAAE,EAAG,EACV,MAAO,EAAE,GAAI,EACb,kBAAO,EACL,MAAO,EAAE,IAAK,EAClB,EAAG,EACD,IAAK,EAAE,GAAI,EACX,KAAM,EAAE,GAAI",
|
||||
"sources": ["../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/bourbon/dist/css3/_font-face.scss","../../../sass/_theme_badge_fa.sass","../../../sass/_theme_badge.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss"],
|
||||
"names": [],
|
||||
"file": "badge_only.css"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
7
lib/spack/docs/_themes/sphinx_rtd_theme/static/css/theme.css.map
vendored
Normal file
7
lib/spack/docs/_themes/sphinx_rtd_theme/static/css/theme.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/FontAwesome.otf
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/FontAwesome.otf
vendored
Normal file
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/Inconsolata-Bold.ttf
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/Inconsolata-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/Inconsolata.ttf
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/Inconsolata.ttf
vendored
Normal file
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/Lato-Bold.ttf
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/Lato-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/Lato-Regular.ttf
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/Lato-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/RobotoSlab-Bold.ttf
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/RobotoSlab-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/RobotoSlab-Regular.ttf
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/RobotoSlab-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.eot
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.eot
vendored
Normal file
Binary file not shown.
31
lib/spack/docs/_themes/sphinx_rtd_theme/static/font/fontawesome_webfont.svg → lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.svg
vendored
Executable file → Normal file
31
lib/spack/docs/_themes/sphinx_rtd_theme/static/font/fontawesome_webfont.svg → lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.svg
vendored
Executable file → Normal file
@@ -280,8 +280,8 @@
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M896 608v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h224q14 0 23 -9t9 -23zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28 t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68zM1152 928v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704q93 0 158.5 -65.5t65.5 -158.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M928 1152q93 0 158.5 -65.5t65.5 -158.5v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68z M864 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
@@ -310,7 +310,7 @@
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1708 881l-188 -881h-304l181 849q4 21 1 43q-4 20 -16 35q-10 14 -28 24q-18 9 -40 9h-197l-205 -960h-303l204 960h-304l-205 -960h-304l272 1280h1139q157 0 245 -118q86 -116 52 -281z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
|
||||
<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
@@ -342,7 +342,7 @@
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
|
||||
<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1664 352v-32q0 -132 -94 -226t-226 -94h-128q-132 0 -226 94t-94 226v480h-224q-2 -102 -14.5 -190.5t-30.5 -156t-48.5 -126.5t-57 -99.5t-67.5 -77.5t-69.5 -58.5t-74 -44t-69 -32t-65.5 -25.5q-4 -2 -32 -13q-8 -2 -12 -2q-22 0 -30 20l-71 178q-5 13 0 25t17 17 q7 3 20 7.5t18 6.5q31 12 46.5 18.5t44.5 20t45.5 26t42 32.5t40.5 42.5t34.5 53.5t30.5 68.5t22.5 83.5t17 103t6.5 123h-256q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h1216q14 0 23 -9t9 -23v-160q0 -14 -9 -23t-23 -9h-224v-512q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v64q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1280 1376v-160q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h960q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
|
||||
@@ -390,10 +390,25 @@
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M805 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM453 1176v-344q0 -179 -89.5 -326t-234.5 -217q-129 152 -129 351q0 200 129.5 352t323.5 184zM958 991q-128 -152 -128 -351q0 -201 128 -351q-145 70 -234.5 218t-89.5 328 v341q196 -33 324 -185zM1638 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM1286 1176v-344q0 -179 -91 -326t-237 -217v0q133 154 133 351q0 195 -133 351q129 151 328 185zM1920 640q0 -201 -129 -351q-145 70 -234.5 218 t-89.5 328v341q194 -32 323.5 -184t129.5 -352z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
|
||||
<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
|
||||
<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
</font>
|
||||
</defs></svg>
|
||||
|
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 197 KiB |
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/font/fontawesome_webfont.ttf → lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf
vendored
Executable file → Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/font/fontawesome_webfont.ttf → lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf
vendored
Executable file → Normal file
Binary file not shown.
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff
vendored
Normal file
BIN
lib/spack/docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff
vendored
Normal file
Binary file not shown.
4
lib/spack/docs/_themes/sphinx_rtd_theme/static/js/modernizr.min.js
vendored
Normal file
4
lib/spack/docs/_themes/sphinx_rtd_theme/static/js/modernizr.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1,16 +1,113 @@
|
||||
$( document ).ready(function() {
|
||||
// Shift nav in mobile when clicking the menu.
|
||||
$("[data-toggle='wy-nav-top']").click(function() {
|
||||
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
// Close menu when you click a link.
|
||||
$(".wy-menu-vertical .current ul li a").click(function() {
|
||||
$("[data-toggle='wy-nav-shift']").removeClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
$("[data-toggle='rst-current-version']").click(function() {
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift-up");
|
||||
});
|
||||
$("table.docutils:not(.field-list").wrap("<div class='wy-table-responsive'></div>");
|
||||
function toggleCurrent (elem) {
|
||||
var parent_li = elem.closest('li');
|
||||
parent_li.siblings('li.current').removeClass('current');
|
||||
parent_li.siblings().find('li.current').removeClass('current');
|
||||
parent_li.find('> ul li.current').removeClass('current');
|
||||
parent_li.toggleClass('current');
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// Shift nav in mobile when clicking the menu.
|
||||
$(document).on('click', "[data-toggle='wy-nav-top']", function() {
|
||||
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
// Nav menu link click operations
|
||||
$(document).on('click', ".wy-menu-vertical .current ul li a", function() {
|
||||
var target = $(this);
|
||||
// Close menu when you click a link.
|
||||
$("[data-toggle='wy-nav-shift']").removeClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
// Handle dynamic display of l3 and l4 nav lists
|
||||
toggleCurrent(target);
|
||||
if (typeof(window.SphinxRtdTheme) != 'undefined') {
|
||||
window.SphinxRtdTheme.StickyNav.hashChange();
|
||||
}
|
||||
});
|
||||
$(document).on('click', "[data-toggle='rst-current-version']", function() {
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift-up");
|
||||
});
|
||||
// Make tables responsive
|
||||
$("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
|
||||
|
||||
// Add expand links to all parents of nested ul
|
||||
$('.wy-menu-vertical ul').siblings('a').each(function () {
|
||||
var link = $(this);
|
||||
expand = $('<span class="toctree-expand"></span>');
|
||||
expand.on('click', function (ev) {
|
||||
toggleCurrent(link);
|
||||
ev.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
link.prepend(expand);
|
||||
});
|
||||
});
|
||||
|
||||
// Sphinx theme state
|
||||
window.SphinxRtdTheme = (function (jquery) {
|
||||
var stickyNav = (function () {
|
||||
var navBar,
|
||||
win,
|
||||
winScroll = false,
|
||||
linkScroll = false,
|
||||
winPosition = 0,
|
||||
enable = function () {
|
||||
init();
|
||||
reset();
|
||||
win.on('hashchange', reset);
|
||||
|
||||
// Set scrolling
|
||||
win.on('scroll', function () {
|
||||
if (!linkScroll) {
|
||||
winScroll = true;
|
||||
}
|
||||
});
|
||||
setInterval(function () {
|
||||
if (winScroll) {
|
||||
winScroll = false;
|
||||
var newWinPosition = win.scrollTop(),
|
||||
navPosition = navBar.scrollTop(),
|
||||
newNavPosition = navPosition + (newWinPosition - winPosition);
|
||||
navBar.scrollTop(newNavPosition);
|
||||
winPosition = newWinPosition;
|
||||
}
|
||||
}, 25);
|
||||
},
|
||||
init = function () {
|
||||
navBar = jquery('nav.wy-nav-side:first');
|
||||
win = jquery(window);
|
||||
},
|
||||
reset = function () {
|
||||
// Get anchor from URL and open up nested nav
|
||||
var anchor = encodeURI(window.location.hash);
|
||||
if (anchor) {
|
||||
try {
|
||||
var link = $('.wy-menu-vertical')
|
||||
.find('[href="' + anchor + '"]');
|
||||
$('.wy-menu-vertical li.toctree-l1 li.current')
|
||||
.removeClass('current');
|
||||
link.closest('li.toctree-l2').addClass('current');
|
||||
link.closest('li.toctree-l3').addClass('current');
|
||||
link.closest('li.toctree-l4').addClass('current');
|
||||
}
|
||||
catch (err) {
|
||||
console.log("Error expanding nav for anchor", err);
|
||||
}
|
||||
}
|
||||
},
|
||||
hashChange = function () {
|
||||
linkScroll = true;
|
||||
win.one('hashchange', function () {
|
||||
linkScroll = false;
|
||||
});
|
||||
};
|
||||
jquery(init);
|
||||
return {
|
||||
enable: enable,
|
||||
hashChange: hashChange
|
||||
};
|
||||
}());
|
||||
return {
|
||||
StickyNav: stickyNav
|
||||
};
|
||||
}($));
|
||||
|
||||
@@ -5,3 +5,5 @@ stylesheet = css/theme.css
|
||||
[options]
|
||||
typekit_id = hiw1hhg
|
||||
analytics_id =
|
||||
sticky_navigation = False
|
||||
logo_only =
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{% if READTHEDOCS %}
|
||||
{# Add rst-badge after rst-versions for small badge style. #}
|
||||
<div class="rst-versions" data-toggle="rst-versions">
|
||||
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
|
||||
<span class="rst-current-version" data-toggle="rst-current-version">
|
||||
<span class="icon icon-book"> Read the Docs</span>
|
||||
v: {{ current_version }}
|
||||
<span class="icon icon-caret-down"></span>
|
||||
<span class="fa fa-book"> Read the Docs</span>
|
||||
v: {{ current_version }}
|
||||
<span class="fa fa-caret-down"></span>
|
||||
</span>
|
||||
<div class="rst-other-versions">
|
||||
<dl>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
168
lib/spack/docs/build_settings.rst
Normal file
168
lib/spack/docs/build_settings.rst
Normal file
@@ -0,0 +1,168 @@
|
||||
.. _build-settings:
|
||||
|
||||
======================================
|
||||
Build customization
|
||||
======================================
|
||||
|
||||
Spack allows you to customize how your software is built through the
|
||||
``packages.yaml`` file. Using it, you can make Spack prefer particular
|
||||
implementations of virtual dependencies (e.g., compilers, MPI, or BLAS),
|
||||
or you can make it prefer to build with particular compilers. You can
|
||||
also tell Spack to use *external* installations of certain software.
|
||||
|
||||
At a high level, the ``packages.yaml`` file is structured like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
package1:
|
||||
# settings for package1
|
||||
package2:
|
||||
# settings for package2
|
||||
# ...
|
||||
all:
|
||||
# settings that apply to all packages.
|
||||
|
||||
So you can either set build preferences *specifically* for one package,
|
||||
or you can specify that certain settings should apply to all packages.
|
||||
The types of settings you can customize are described in detail below.
|
||||
|
||||
Spack's build defaults are in the default
|
||||
``etc/spack/defaults/packages.yaml`` file. You can override them in
|
||||
``~/.spack/packages.yaml`` or ``etc/spack/packages.yaml``. For more
|
||||
details on how this works, see :ref:`configuration-scopes`
|
||||
|
||||
.. _sec-external-packages:
|
||||
|
||||
-----------------
|
||||
External Packages
|
||||
-----------------
|
||||
|
||||
Spack can be configured to use externally-installed
|
||||
packages rather than building its own packages. This may be desirable
|
||||
if machines ship with system packages, such as a customized MPI
|
||||
that should be used instead of Spack building its own MPI.
|
||||
|
||||
External packages are configured through the ``packages.yaml`` file found
|
||||
in a Spack installation's ``etc/spack/`` or a user's ``~/.spack/``
|
||||
directory. Here's an example of an external configuration:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
openmpi:
|
||||
paths:
|
||||
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7: /opt/openmpi-1.4.3
|
||||
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug
|
||||
openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel
|
||||
|
||||
This example lists three installations of OpenMPI, one built with gcc,
|
||||
one built with gcc and debug information, and another built with Intel.
|
||||
If Spack is asked to build a package that uses one of these MPIs as a
|
||||
dependency, it will use the the pre-installed OpenMPI in
|
||||
the given directory. Packages.yaml can also be used to specify modules
|
||||
|
||||
Each ``packages.yaml`` begins with a ``packages:`` token, followed
|
||||
by a list of package names. To specify externals, add a ``paths`` or ``modules``
|
||||
token under the package name, which lists externals in a
|
||||
``spec: /path`` or ``spec: module-name`` format. Each spec should be as
|
||||
well-defined as reasonably possible. If a
|
||||
package lacks a spec component, such as missing a compiler or
|
||||
package version, then Spack will guess the missing component based
|
||||
on its most-favored packages, and it may guess incorrectly.
|
||||
|
||||
Each package version and compilers listed in an external should
|
||||
have entries in Spack's packages and compiler configuration, even
|
||||
though the package and compiler may not every be built.
|
||||
|
||||
The packages configuration can tell Spack to use an external location
|
||||
for certain package versions, but it does not restrict Spack to using
|
||||
external packages. In the above example, if an OpenMPI 1.8.4 became
|
||||
available Spack may choose to start building and linking with that version
|
||||
rather than continue using the pre-installed OpenMPI versions.
|
||||
|
||||
To prevent this, the ``packages.yaml`` configuration also allows packages
|
||||
to be flagged as non-buildable. The previous example could be modified to
|
||||
be:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
openmpi:
|
||||
paths:
|
||||
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7: /opt/openmpi-1.4.3
|
||||
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug
|
||||
openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel
|
||||
buildable: False
|
||||
|
||||
The addition of the ``buildable`` flag tells Spack that it should never build
|
||||
its own version of OpenMPI, and it will instead always rely on a pre-built
|
||||
OpenMPI. Similar to ``paths``, ``buildable`` is specified as a property under
|
||||
a package name.
|
||||
|
||||
If an external module is specified as not buildable, then Spack will load the
|
||||
external module into the build environment which can be used for linking.
|
||||
|
||||
The ``buildable`` does not need to be paired with external packages.
|
||||
It could also be used alone to forbid packages that may be
|
||||
buggy or otherwise undesirable.
|
||||
|
||||
|
||||
.. _concretization-preferences:
|
||||
|
||||
--------------------------
|
||||
Concretization Preferences
|
||||
--------------------------
|
||||
|
||||
Spack can be configured to prefer certain compilers, package
|
||||
versions, depends_on, and variants during concretization.
|
||||
The preferred configuration can be controlled via the
|
||||
``~/.spack/packages.yaml`` file for user configuations, or the
|
||||
``etc/spack/packages.yaml`` site configuration.
|
||||
|
||||
Here's an example packages.yaml file that sets preferred packages:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
opencv:
|
||||
compiler: [gcc@4.9]
|
||||
variants: +debug
|
||||
gperftools:
|
||||
version: [2.2, 2.4, 2.3]
|
||||
all:
|
||||
compiler: [gcc@4.4.7, gcc@4.6:, intel, clang, pgi]
|
||||
providers:
|
||||
mpi: [mvapich, mpich, openmpi]
|
||||
|
||||
At a high level, this example is specifying how packages should be
|
||||
concretized. The opencv package should prefer using gcc 4.9 and
|
||||
be built with debug options. The gperftools package should prefer version
|
||||
2.2 over 2.4. Every package on the system should prefer mvapich for
|
||||
its MPI and gcc 4.4.7 (except for opencv, which overrides this by preferring gcc 4.9).
|
||||
These options are used to fill in implicit defaults. Any of them can be overwritten
|
||||
on the command line if explicitly requested.
|
||||
|
||||
Each packages.yaml file begins with the string ``packages:`` and
|
||||
package names are specified on the next level. The special string ``all``
|
||||
applies settings to each package. Underneath each package name is
|
||||
one or more components: ``compiler``, ``variants``, ``version``,
|
||||
or ``providers``. Each component has an ordered list of spec
|
||||
``constraints``, with earlier entries in the list being preferred over
|
||||
later entries.
|
||||
|
||||
Sometimes a package installation may have constraints that forbid
|
||||
the first concretization rule, in which case Spack will use the first
|
||||
legal concretization rule. Going back to the example, if a user
|
||||
requests gperftools 2.3 or later, then Spack will install version 2.4
|
||||
as the 2.4 version of gperftools is preferred over 2.3.
|
||||
|
||||
An explicit concretization rule in the preferred section will always
|
||||
take preference over unlisted concretizations. In the above example,
|
||||
xlc isn't listed in the compiler list. Every listed compiler from
|
||||
gcc to pgi will thus be preferred over the xlc compiler.
|
||||
|
||||
The syntax for the ``provider`` section differs slightly from other
|
||||
concretization rules. A provider lists a value that packages may
|
||||
``depend_on`` (e.g, mpi) and a list of rules for fulfilling that
|
||||
dependency.
|
||||
9
lib/spack/docs/command_index.in
Normal file
9
lib/spack/docs/command_index.in
Normal file
@@ -0,0 +1,9 @@
|
||||
=============
|
||||
Command Index
|
||||
=============
|
||||
|
||||
This is an alphabetical list of commands with links to the places they
|
||||
appear in the documentation.
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
@@ -1,26 +1,27 @@
|
||||
# flake8: noqa
|
||||
##############################################################################
|
||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://scalability-llnl.github.io/spack
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License (as published by
|
||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU General Public License for more details.
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
@@ -35,22 +36,87 @@
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys, os
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
from glob import glob
|
||||
from sphinx.apidoc import main as sphinx_apidoc
|
||||
|
||||
# -- Spack customizations -----------------------------------------------------
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
sys.path.insert(0, os.path.abspath('exts'))
|
||||
sys.path.insert(0, os.path.abspath('../external'))
|
||||
sys.path.append(os.path.abspath('..'))
|
||||
|
||||
# Add the Spack bin directory to the path so that we can use its output in docs.
|
||||
os.environ['SPACK_ROOT'] = '../../..'
|
||||
os.environ['PATH'] += os.pathsep + '$SPACK_ROOT/bin'
|
||||
spack_root = '../../..'
|
||||
os.environ['SPACK_ROOT'] = spack_root
|
||||
os.environ['PATH'] += '%s%s/bin' % (os.pathsep, spack_root)
|
||||
|
||||
# Get the spack version for use in the docs
|
||||
spack_version = subprocess.Popen(
|
||||
[spack_root + '/bin/spack', '-V'],
|
||||
stderr=subprocess.PIPE).communicate()[1].strip().split('.')
|
||||
|
||||
# Set an environment variable so that colify will print output like it would to
|
||||
# a terminal.
|
||||
os.environ['COLIFY_TTY'] = 'true'
|
||||
os.environ['COLUMNS'] = '80'
|
||||
os.environ['LINES'] = '25'
|
||||
os.environ['COLIFY_SIZE'] = '25x120'
|
||||
|
||||
#
|
||||
# Generate package list using spack command
|
||||
#
|
||||
with open('package_list.rst', 'w') as plist_file:
|
||||
subprocess.Popen(
|
||||
[spack_root + '/bin/spack', 'list', '--format=rst'], stdout=plist_file)
|
||||
|
||||
#
|
||||
# Find all the `cmd-spack-*` references and add them to a command index
|
||||
#
|
||||
command_names = []
|
||||
for filename in glob('*rst'):
|
||||
with open(filename) as f:
|
||||
for line in f:
|
||||
match = re.match('.. _(cmd-spack-.*):', line)
|
||||
if match:
|
||||
command_names.append(match.group(1).strip())
|
||||
|
||||
shutil.copy('command_index.in', 'command_index.rst')
|
||||
with open('command_index.rst', 'a') as index:
|
||||
index.write('\n')
|
||||
for cmd in sorted(command_names):
|
||||
index.write(' * :ref:`%s`\n' % cmd)
|
||||
|
||||
|
||||
# Run sphinx-apidoc
|
||||
sphinx_apidoc(['-T', '-o', '.', '../spack'])
|
||||
os.remove('modules.rst')
|
||||
|
||||
#
|
||||
# Exclude everything in spack.__all__ from indexing. All of these
|
||||
# symbols are imported from elsewhere in spack; their inclusion in
|
||||
# __all__ simply allows package authors to use `from spack import *`.
|
||||
# Excluding them ensures they're only documented in their "real" module.
|
||||
#
|
||||
# This also avoids issues where some of these symbols shadow core spack
|
||||
# modules. Sphinx will complain about duplicate docs when this happens.
|
||||
#
|
||||
import fileinput, spack
|
||||
handling_spack = False
|
||||
for line in fileinput.input('spack.rst', inplace=1):
|
||||
if handling_spack:
|
||||
if not line.startswith(' :noindex:'):
|
||||
print ' :noindex: %s' % ' '.join(spack.__all__)
|
||||
handling_spack = False
|
||||
|
||||
if line.startswith('.. automodule::'):
|
||||
handling_spack = (line == '.. automodule:: spack\n')
|
||||
|
||||
print line,
|
||||
|
||||
# Enable todo items
|
||||
todo_include_todos = True
|
||||
@@ -83,23 +149,23 @@
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Spack'
|
||||
copyright = u'2013, Lawrence Livermore National Laboratory'
|
||||
copyright = u'2013-2015, Lawrence Livermore National Laboratory.'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '1.0'
|
||||
version = '.'.join(spack_version[:2])
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '1.0'
|
||||
release = '.'.join(spack_version[:2])
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
@@ -145,7 +211,7 @@
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#html_theme_options = []
|
||||
html_theme_options = { 'logo_only' : True }
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
html_theme_path = ["_themes"]
|
||||
@@ -159,12 +225,12 @@
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
html_logo = '../../../share/spack/logo/spack-logo-white-text-48.png'
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
html_favicon = '../../../share/spack/logo/favicon.ico'
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
@@ -199,7 +265,7 @@
|
||||
#html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
#html_show_sphinx = False
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#html_show_copyright = True
|
||||
|
||||
149
lib/spack/docs/config_yaml.rst
Normal file
149
lib/spack/docs/config_yaml.rst
Normal file
@@ -0,0 +1,149 @@
|
||||
.. _config-yaml:
|
||||
|
||||
====================================
|
||||
Basic settings in ``config.yaml``
|
||||
====================================
|
||||
|
||||
Spack's basic configuration options are set in ``config.yaml``. You can
|
||||
see the default settings by looking at
|
||||
``etc/spack/defaults/config.yaml``:
|
||||
|
||||
.. literalinclude:: ../../../etc/spack/defaults/config.yaml
|
||||
:language: yaml
|
||||
|
||||
These settings can be overridden in ``etc/spack/config.yaml`` or
|
||||
``~/.spack/config.yaml``. See :ref:`configuration-scopes` for details.
|
||||
|
||||
.. _config-file-variables:
|
||||
|
||||
------------------------------
|
||||
Config file variables
|
||||
------------------------------
|
||||
|
||||
You may notice some variables prefixed with ``$`` in the settings above.
|
||||
Spack understands several variables that can be used in values of
|
||||
configuration parameters. They are:
|
||||
|
||||
* ``$spack``: path to the prefix of this spack installation
|
||||
* ``$tempdir``: default system temporary directory (as specified in
|
||||
Python's `tempfile.tempdir
|
||||
<https://docs.python.org/2/library/tempfile.html#tempfile.tempdir>`_
|
||||
variable.
|
||||
* ``$user``: name of the current user
|
||||
|
||||
Note that, as with shell variables, you can write these as ``$varname``
|
||||
or with braces to distinguish the variable from surrounding characters:
|
||||
``${varname}``.
|
||||
|
||||
--------------------
|
||||
``install_tree``
|
||||
--------------------
|
||||
|
||||
The location where Spack will install packages and their dependencies.
|
||||
Default is ``$spack/opt/spack``.
|
||||
|
||||
--------------------
|
||||
``module_roots``
|
||||
--------------------
|
||||
|
||||
Controls where Spack installs generated module files. You can customize
|
||||
the location for each type of module. e.g.:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
module_roots:
|
||||
tcl: $spack/share/spack/modules
|
||||
lmod: $spack/share/spack/lmod
|
||||
dotkit: $spack/share/spack/dotkit
|
||||
|
||||
See :ref:`modules` for details.
|
||||
|
||||
--------------------
|
||||
``build_stage``
|
||||
--------------------
|
||||
|
||||
Spack is designed to run out of a user home directories, and on many
|
||||
systems the home directory a (slow) network filesystem. On most systems,
|
||||
building in a temporary filesystem results in faster builds than building
|
||||
in the home directory. Usually, there is also more space available in
|
||||
the temporary location than in the home directory. So, Spack tries to
|
||||
create build stages in temporary space.
|
||||
|
||||
By default, Spack's ``build_stage`` is configured like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
build_stage:
|
||||
- $tempdir
|
||||
- /nfs/tmp2/$user
|
||||
- $spack/var/spack/stage
|
||||
|
||||
This is an ordered list of paths that Spack should search when trying to
|
||||
find a temporary directory for the build stage. The list is searched in
|
||||
order, and Spack will use the first directory to which it has write access.
|
||||
See :ref:`config-file-variables` for more on ``$tempdir`` and ``$spack``.
|
||||
|
||||
When Spack builds a package, it creates a temporary directory within the
|
||||
``build_stage``, and it creates a symbolic link to that directory in
|
||||
``$spack/var/spack/stage``. This is used totrack the stage.
|
||||
|
||||
After a package is successfully installed, Spack deletes the temporary
|
||||
directory it used to build. Unsuccessful builds are not deleted, but you
|
||||
can manually purge them with :ref:`spack purge --stage
|
||||
<cmd-spack-purge>`.
|
||||
|
||||
.. note::
|
||||
|
||||
The last item in the list is ``$spack/var/spack/stage``. If this is the
|
||||
only writable directory in the ``build_stage`` list, Spack will build
|
||||
*directly* in ``$spack/var/spack/stage`` and will not link to temporary
|
||||
space.
|
||||
|
||||
--------------------
|
||||
``source_cache``
|
||||
--------------------
|
||||
|
||||
Location to cache downloaded tarballs and repositories. By default these
|
||||
are stored in ``$spack/var/spack/cache``. These are stored indefinitely
|
||||
by default. Can be purged with :ref:`spack purge --downloads
|
||||
<cmd-spack-purge>`.
|
||||
|
||||
--------------------
|
||||
``misc_cache``
|
||||
--------------------
|
||||
|
||||
Temporary directory to store long-lived cache files, such as indices of
|
||||
packages available in repositories. Defaults to ``~/.spack/cache``. Can
|
||||
be purged with :ref:`spack purge --misc-cache <cmd-spack-purge>`.
|
||||
|
||||
--------------------
|
||||
``verify_ssl``
|
||||
--------------------
|
||||
|
||||
When set to ``true`` (default) Spack will verify certificates of remote
|
||||
hosts when making ``ssl`` connections. Set to ``false`` to disable, and
|
||||
tools like ``curl`` will use their ``--insecure`` options. Disabling
|
||||
this can expose you to attacks. Use at your own risk.
|
||||
|
||||
--------------------
|
||||
``checksum``
|
||||
--------------------
|
||||
|
||||
When set to ``true``, Spack verifies downloaded source code using a
|
||||
checksum, and will refuse to build packages that it cannot verify. Set
|
||||
to ``false`` to disable these checks. Disabling this can expose you to
|
||||
attacks. Use at your own risk.
|
||||
|
||||
--------------------
|
||||
``dirty``
|
||||
--------------------
|
||||
|
||||
By default, Spack unsets variables in your environment that can change
|
||||
the way packages build. This includes ``LD_LIBRARY_PATH``, ``CPATH``,
|
||||
``LIBRARY_PATH``, ``DYLD_LIBRARY_PATH``, and others.
|
||||
|
||||
By default, builds are ``clean``, but on some machines, compilers and
|
||||
other tools may need custom ``LD_LIBRARY_PATH`` setings to run. You can
|
||||
set ``dirty`` to ``true`` to skip the cleaning step and make all builds
|
||||
"dirty" by default. Be aware that this will reduce the reproducibility
|
||||
of builds.
|
||||
253
lib/spack/docs/configuration.rst
Normal file
253
lib/spack/docs/configuration.rst
Normal file
@@ -0,0 +1,253 @@
|
||||
.. _configuration:
|
||||
|
||||
==============================
|
||||
Configuration Files in Spack
|
||||
==============================
|
||||
|
||||
Spack has many configuration files. Here is a quick list of them, in
|
||||
case you want to skip directly to specific docs:
|
||||
|
||||
* :ref:`compilers.yaml <compiler-config>`
|
||||
* :ref:`config.yaml <config-yaml>`
|
||||
* :ref:`mirrors.yaml <mirrors>`
|
||||
* :ref:`modules.yaml <modules>`
|
||||
* :ref:`packages.yaml <build-settings>`
|
||||
* :ref:`repos.yaml <repositories>`
|
||||
|
||||
-------------------------
|
||||
YAML Format
|
||||
-------------------------
|
||||
|
||||
Spack configuration files are written in YAML. We chose YAML because
|
||||
it's human readable, but also versatile in that it supports dictionaries,
|
||||
lists, and nested sections. For more details on the format, see `yaml.org
|
||||
<http://yaml.org>`_ and `libyaml <http://pyyaml.org/wiki/LibYAML>`_.
|
||||
Here is an example ``config.yaml`` file:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
config:
|
||||
install_tree: $spack/opt/spack
|
||||
module_roots:
|
||||
lmod: $spack/share/spack/lmod
|
||||
build_stage:
|
||||
- $tempdir
|
||||
- /nfs/tmp2/$user
|
||||
|
||||
Each spack configuration files is nested under a top-level section
|
||||
corresponding to its name. So, ``config.yaml`` starts with ``config:``,
|
||||
and ``mirrors.yaml`` starts with ``mirrors:``, etc.
|
||||
|
||||
.. _configuration-scopes:
|
||||
|
||||
-------------------------
|
||||
Configuration Scopes
|
||||
-------------------------
|
||||
|
||||
Spack pulls configuration data from files in several directories. There
|
||||
are three configuration scopes. From lowest to highest:
|
||||
|
||||
1. **defaults**: Stored in ``$(prefix)/etc/spack/defaults/``. These are
|
||||
the "factory" settings. Users should generally not modify the settings
|
||||
here, but should override them in other configuration scopes. The
|
||||
defaults here will change from version to version of Spack.
|
||||
|
||||
2. **site**: Stored in ``$(prefix)/etc/spack/``. Settings here affect
|
||||
only *this instance* of Spack, and they override defaults. The site
|
||||
scope can can be used for per-project settings (one spack instance per
|
||||
project) or for site-wide settings on a multi-user machine (e.g., for
|
||||
a common spack instance).
|
||||
|
||||
3. **user**: Stored in the home directory: ``~/.spack/``. These settings
|
||||
affect all instances of Spack and take the highest precedence.
|
||||
|
||||
Each configuration directory may contain several configuration files,
|
||||
such as ``config.yaml``, ``compilers.yaml``, or ``mirrors.yaml``. When
|
||||
configurations conflict, settings from higher-precedence scopes override
|
||||
lower-precedence settings.
|
||||
|
||||
Commands that modify scopes (e.g., ``spack compilers``, ``spack repo``,
|
||||
etc.) take a ``--scope=<name>`` parameter that you can use to control
|
||||
which scope is modified. By default they modify the highest-precedence
|
||||
scope.
|
||||
|
||||
.. _platform-scopes:
|
||||
|
||||
-------------------------
|
||||
Platform-specific scopes
|
||||
-------------------------
|
||||
|
||||
For each scope above, there can *also* be platform-specific settings.
|
||||
For example, on Blue Gene/Q machines, Spack needs to know the location of
|
||||
cross-compilers for the compute nodes. This configuration is in
|
||||
``etc/spack/defaults/bgq/compilers.yaml``. It will take precedence over
|
||||
settings in the ``defaults`` scope, but can still be overridden by
|
||||
settings in ``site``, ``site/bgq``, ``user``, or ``user/bgq``. So, the
|
||||
full scope precedence is:
|
||||
|
||||
1. ``defaults``
|
||||
2. ``defaults/<platform>``
|
||||
3. ``site``
|
||||
4. ``site/<platform>``
|
||||
5. ``user``
|
||||
6. ``user/<platform>``
|
||||
|
||||
You can get the name to use for ``<platform>`` by running ``spack arch
|
||||
--platform``.
|
||||
|
||||
-------------------------
|
||||
Scope precedence
|
||||
-------------------------
|
||||
|
||||
When spack queries for configuration parameters, it searches in
|
||||
higher-precedence scopes first. So, settings in a higher-precedence file
|
||||
can override those with the same key in a lower-precedence one. For
|
||||
list-valued settings, Spack *prepends* higher-precedence settings to
|
||||
lower-precedence settings. Completely ignoring higher-level configuration
|
||||
options is supported with the ``::`` notation for keys (see
|
||||
:ref:`config-overrides` below).
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Simple keys
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Let's look at an example of overriding a single key in a Spack file. If
|
||||
your configurations look like this:
|
||||
|
||||
**defaults** scope:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
config:
|
||||
install_tree: $spack/opt/spack
|
||||
module_roots:
|
||||
lmod: $spack/share/spack/lmod
|
||||
build_stage:
|
||||
- $tempdir
|
||||
- /nfs/tmp2/$user
|
||||
|
||||
**site** scope:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
config:
|
||||
install_tree: /some/other/directory
|
||||
|
||||
Spack will only override ``install_tree`` in the ``config`` section, and
|
||||
will take the site preferences for other settings. You can see the
|
||||
final, combined configuration with the ``spack config get <configtype>``
|
||||
command:
|
||||
|
||||
.. code-block:: console
|
||||
:emphasize-lines: 3
|
||||
|
||||
$ spack config get config
|
||||
config:
|
||||
install_tree: /some/other/directory
|
||||
module_roots:
|
||||
lmod: $spack/share/spack/lmod
|
||||
build_stage:
|
||||
- $tempdir
|
||||
- /nfs/tmp2/$user
|
||||
$ _
|
||||
|
||||
.. _config-overrides:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Overriding entire sections
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Above, the site ``config.yaml`` only overrides specific settings in the
|
||||
default ``config.yaml``. Sometimes, it is useful to *completely*
|
||||
override lower-precedence settings. To do this, you can use *two* colons
|
||||
at the end of a key in a configuration file. For example, if the
|
||||
**site** ``config.yaml`` above looks like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 1
|
||||
|
||||
config::
|
||||
install_tree: /some/other/directory
|
||||
|
||||
Spack will ignore all lower-precedence configuration under the
|
||||
``config::`` section:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack config get config
|
||||
config:
|
||||
install_tree: /some/other/directory
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
List-valued settings
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Let's revisit the ``config.yaml`` example one more time. The
|
||||
``build_stage`` setting's value is an ordered list of directories:
|
||||
|
||||
**defaults**
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
build_stage:
|
||||
- $tempdir
|
||||
- /nfs/tmp2/$user
|
||||
|
||||
Suppose the user configuration adds its *own* list of ``build_stage``
|
||||
paths:
|
||||
|
||||
**user**
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
build_stage:
|
||||
- /lustre-scratch/$user
|
||||
- ~/mystage
|
||||
|
||||
Spack will first look at the paths in the site ``config.yaml``, then the
|
||||
paths in the user's ``~/.spack/config.yaml``. The list in the
|
||||
higher-precedence scope is *prepended* to the defaults. ``spack config
|
||||
get config`` shows the result:
|
||||
|
||||
.. code-block:: console
|
||||
:emphasize-lines: 7-10
|
||||
|
||||
$ spack config get config
|
||||
config:
|
||||
install_tree: /some/other/directory
|
||||
module_roots:
|
||||
lmod: $spack/share/spack/lmod
|
||||
build_stage:
|
||||
- /lustre-scratch/$user
|
||||
- ~/mystage
|
||||
- $tempdir
|
||||
- /nfs/tmp2/$user
|
||||
$ _
|
||||
|
||||
As in :ref:`config-overrides`, the higher-precedence scope can
|
||||
*completely* override the lower-precedence scope using `::`. So if the
|
||||
user config looked like this:
|
||||
|
||||
**user**
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 1
|
||||
|
||||
build_stage::
|
||||
- /lustre-scratch/$user
|
||||
- ~/mystage
|
||||
|
||||
The merged configuration would look like this:
|
||||
|
||||
.. code-block:: console
|
||||
:emphasize-lines: 7-8
|
||||
|
||||
$ spack config get config
|
||||
config:
|
||||
install_tree: /some/other/directory
|
||||
module_roots:
|
||||
lmod: $spack/share/spack/lmod
|
||||
build_stage:
|
||||
- /lustre-scratch/$user
|
||||
- ~/mystage
|
||||
$ _
|
||||
522
lib/spack/docs/contribution_guide.rst
Normal file
522
lib/spack/docs/contribution_guide.rst
Normal file
@@ -0,0 +1,522 @@
|
||||
.. _contribution-guide:
|
||||
|
||||
==================
|
||||
Contribution Guide
|
||||
==================
|
||||
|
||||
This guide is intended for developers or administrators who want to
|
||||
contribute a new package, feature, or bugfix to Spack.
|
||||
It assumes that you have at least some familiarity with Git VCS and Github.
|
||||
The guide will show a few examples of contributing workflows and discuss
|
||||
the granularity of pull-requests (PRs). It will also discuss the tests your
|
||||
PR must pass in order to be accepted into Spack.
|
||||
|
||||
First, what is a PR? Quoting `Bitbucket's tutorials <https://www.atlassian.com/git/tutorials/making-a-pull-request/>`_:
|
||||
|
||||
Pull requests are a mechanism for a developer to notify team members that
|
||||
they have **completed a feature**. The pull request is more than just a
|
||||
notification—it’s a dedicated forum for discussing the proposed feature.
|
||||
|
||||
Important is **completed feature**. The changes one proposes in a PR should
|
||||
correspond to one feature/bugfix/extension/etc. One can create PRs with
|
||||
changes relevant to different ideas, however reviewing such PRs becomes tedious
|
||||
and error prone. If possible, try to follow the **one-PR-one-package/feature** rule.
|
||||
|
||||
Spack uses a rough approximation of the `Git Flow <http://nvie.com/posts/a-successful-git-branching-model/>`_
|
||||
branching model. The develop branch contains the latest contributions, and
|
||||
master is always tagged and points to the latest stable release. Therefore, when
|
||||
you send your request, make ``develop`` the destination branch on the
|
||||
`Spack repository <https://github.com/LLNL/spack>`_.
|
||||
|
||||
----------------------
|
||||
Continuous Integration
|
||||
----------------------
|
||||
|
||||
Spack uses `Travis CI <https://travis-ci.org/LLNL/spack>`_ for Continuous Integration
|
||||
testing. This means that every time you submit a pull request, a series of tests will
|
||||
be run to make sure you didn't accidentally introduce any bugs into Spack. Your PR
|
||||
will not be accepted until it passes all of these tests. While you can certainly wait
|
||||
for the results of these tests after submitting a PR, we recommend that you run them
|
||||
locally to speed up the review process.
|
||||
|
||||
If you take a look in ``$SPACK_ROOT/.travis.yml``, you'll notice that we test
|
||||
against Python 2.6 and 2.7. We currently perform 3 types of tests:
|
||||
|
||||
^^^^^^^^^^
|
||||
Unit Tests
|
||||
^^^^^^^^^^
|
||||
|
||||
Unit tests ensure that core Spack features like fetching or spec resolution are
|
||||
working as expected. If your PR only adds new packages or modifies existing ones,
|
||||
there's very little chance that your changes could cause the unit tests to fail.
|
||||
However, if you make changes to Spack's core libraries, you should run the unit
|
||||
tests to make sure you didn't break anything.
|
||||
|
||||
Since they test things like fetching from VCS repos, the unit tests require
|
||||
`git <https://git-scm.com/>`_, `mercurial <https://www.mercurial-scm.org/>`_,
|
||||
and `subversion <https://subversion.apache.org/>`_ to run. Make sure these are
|
||||
installed on your system and can be found in your ``PATH``. All of these can be
|
||||
installed with Spack or with your system package manager.
|
||||
|
||||
To run *all* of the unit tests, use:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack test
|
||||
|
||||
These tests may take several minutes to complete. If you know you are only
|
||||
modifying a single Spack feature, you can run a single unit test at a time:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack test architecture
|
||||
|
||||
This allows you to develop iteratively: make a change, test that change, make
|
||||
another change, test that change, etc. To get a list of all available unit
|
||||
tests, run:
|
||||
|
||||
.. command-output:: spack test --collect-only
|
||||
|
||||
Unit tests are crucial to making sure bugs aren't introduced into Spack. If you
|
||||
are modifying core Spack libraries or adding new functionality, please consider
|
||||
adding new unit tests or strengthening existing tests.
|
||||
|
||||
.. note::
|
||||
|
||||
There is also a ``run-unit-tests`` script in ``share/spack/qa`` that
|
||||
runs the unit tests. Afterwards, it reports back to Coverage with the
|
||||
percentage of Spack that is covered by unit tests. This script is
|
||||
designed for Travis CI. If you want to run the unit tests yourself, we
|
||||
suggest you use ``spack test``.
|
||||
|
||||
^^^^^^^^^^^^
|
||||
Flake8 Tests
|
||||
^^^^^^^^^^^^
|
||||
|
||||
Spack uses `Flake8 <http://flake8.pycqa.org/en/latest/>`_ to test for
|
||||
`PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_ conformance. PEP 8 is
|
||||
a series of style guides for Python that provide suggestions for everything
|
||||
from variable naming to indentation. In order to limit the number of PRs that
|
||||
were mostly style changes, we decided to enforce PEP 8 conformance. Your PR
|
||||
needs to comply with PEP 8 in order to be accepted.
|
||||
|
||||
Testing for PEP 8 compliance is easy. Simply run the ``spack flake8``
|
||||
command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack flake8
|
||||
|
||||
``spack flake8`` has a couple advantages over running ``flake8`` by hand:
|
||||
|
||||
#. It only tests files that you have modified since branching off of
|
||||
``develop``.
|
||||
|
||||
#. It works regardless of what directory you are in.
|
||||
|
||||
#. It automatically adds approved exemptions from the ``flake8``
|
||||
checks. For example, URLs are often longer than 80 characters, so we
|
||||
exempt them from line length checks. We also exempt lines that start
|
||||
with "homepage", "url", "version", "variant", "depends_on", and
|
||||
"extends" in ``package.py`` files.
|
||||
|
||||
More approved flake8 exemptions can be found
|
||||
`here <https://github.com/LLNL/spack/blob/develop/.flake8>`_.
|
||||
|
||||
If all is well, you'll see something like this:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ run-flake8-tests
|
||||
Dependencies found.
|
||||
=======================================================
|
||||
flake8: running flake8 code checks on spack.
|
||||
|
||||
Modified files:
|
||||
|
||||
var/spack/repos/builtin/packages/hdf5/package.py
|
||||
var/spack/repos/builtin/packages/hdf/package.py
|
||||
var/spack/repos/builtin/packages/netcdf/package.py
|
||||
=======================================================
|
||||
Flake8 checks were clean.
|
||||
|
||||
However, if you aren't compliant with PEP 8, flake8 will complain:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
var/spack/repos/builtin/packages/netcdf/package.py:26: [F401] 'os' imported but unused
|
||||
var/spack/repos/builtin/packages/netcdf/package.py:61: [E303] too many blank lines (2)
|
||||
var/spack/repos/builtin/packages/netcdf/package.py:106: [E501] line too long (92 > 79 characters)
|
||||
Flake8 found errors.
|
||||
|
||||
Most of the error messages are straightforward, but if you don't understand what
|
||||
they mean, just ask questions about them when you submit your PR. The line numbers
|
||||
will change if you add or delete lines, so simply run ``run-flake8-tests`` again
|
||||
to update them.
|
||||
|
||||
.. tip::
|
||||
|
||||
Try fixing flake8 errors in reverse order. This eliminates the need for
|
||||
multiple runs of ``flake8`` just to re-compute line numbers and makes it
|
||||
much easier to fix errors directly off of the Travis output.
|
||||
|
||||
.. warning::
|
||||
|
||||
Flake8 requires setuptools in order to run. If you installed ``py-flake8``
|
||||
with Spack, make sure to add ``py-setuptools`` to your ``PYTHONPATH``.
|
||||
Otherwise, you will get an error message like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Traceback (most recent call last):
|
||||
File: "/usr/bin/flake8", line 5, in <module>
|
||||
from pkg_resources import load_entry_point
|
||||
ImportError: No module named pkg_resources
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
Documentation Tests
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Spack uses `Sphinx <http://www.sphinx-doc.org/en/stable/>`_ to build its
|
||||
documentation. In order to prevent things like broken links and missing imports,
|
||||
we added documentation tests that build the documentation and fail if there
|
||||
are any warning or error messages.
|
||||
|
||||
Building the documentation requires several dependencies, all of which can be
|
||||
installed with Spack:
|
||||
|
||||
* sphinx
|
||||
* graphviz
|
||||
* git
|
||||
* mercurial
|
||||
* subversion
|
||||
|
||||
.. warning::
|
||||
|
||||
Sphinx has `several required dependencies <https://github.com/LLNL/spack/blob/develop/var/spack/repos/builtin/packages/py-sphinx/package.py>`_.
|
||||
If you installed ``py-sphinx`` with Spack, make sure to add all of these
|
||||
dependencies to your ``PYTHONPATH``. The easiest way to do this is to run
|
||||
``spack activate py-sphinx`` so that all of the dependencies are symlinked
|
||||
to a central location. If you see an error message like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Traceback (most recent call last):
|
||||
File: "/usr/bin/flake8", line 5, in <module>
|
||||
from pkg_resources import load_entry_point
|
||||
ImportError: No module named pkg_resources
|
||||
|
||||
that means Sphinx couldn't find setuptools in your ``PYTHONPATH``.
|
||||
|
||||
Once all of the dependencies are installed, you can try building the documentation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd "$SPACK_ROOT/lib/spack/docs"
|
||||
$ make clean
|
||||
$ make
|
||||
|
||||
If you see any warning or error messages, you will have to correct those before
|
||||
your PR is accepted.
|
||||
|
||||
.. note::
|
||||
|
||||
There is also a ``run-doc-tests`` script in the Quality Assurance directory.
|
||||
The only difference between running this script and running ``make`` by hand
|
||||
is that the script will exit immediately if it encounters an error or warning.
|
||||
This is necessary for Travis CI. If you made a lot of documentation tests, it
|
||||
is much quicker to run ``make`` by hand so that you can see all of the warnings
|
||||
at once.
|
||||
|
||||
If you are editing the documentation, you should obviously be running the
|
||||
documentation tests. But even if you are simply adding a new package, your
|
||||
changes could cause the documentation tests to fail:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
package_list.rst:8745: WARNING: Block quote ends without a blank line; unexpected unindent.
|
||||
|
||||
At first, this error message will mean nothing to you, since you didn't edit
|
||||
that file. Until you look at line 8745 of the file in question:
|
||||
|
||||
.. code-block:: rst
|
||||
|
||||
Description:
|
||||
NetCDF is a set of software libraries and self-describing, machine-
|
||||
independent data formats that support the creation, access, and sharing
|
||||
of array-oriented scientific data.
|
||||
|
||||
Our documentation includes :ref:`a list of all Spack packages <package-list>`.
|
||||
If you add a new package, its docstring is added to this page. The problem in
|
||||
this case was that the docstring looked like:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
class Netcdf(Package):
|
||||
"""
|
||||
NetCDF is a set of software libraries and self-describing,
|
||||
machine-independent data formats that support the creation,
|
||||
access, and sharing of array-oriented scientific data.
|
||||
"""
|
||||
|
||||
Docstrings cannot start with a newline character, or else Sphinx will complain.
|
||||
Instead, they should look like:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
class Netcdf(Package):
|
||||
"""NetCDF is a set of software libraries and self-describing,
|
||||
machine-independent data formats that support the creation,
|
||||
access, and sharing of array-oriented scientific data."""
|
||||
|
||||
Documentation changes can result in much more obfuscated warning messages.
|
||||
If you don't understand what they mean, feel free to ask when you submit
|
||||
your PR.
|
||||
|
||||
-------------
|
||||
Git Workflows
|
||||
-------------
|
||||
|
||||
Spack is still in the beta stages of development. Most of our users run off of
|
||||
the develop branch, and fixes and new features are constantly being merged. So
|
||||
how do you keep up-to-date with upstream while maintaining your own local
|
||||
differences and contributing PRs to Spack?
|
||||
|
||||
^^^^^^^^^
|
||||
Branching
|
||||
^^^^^^^^^
|
||||
|
||||
The easiest way to contribute a pull request is to make all of your changes on
|
||||
new branches. Make sure your ``develop`` is up-to-date and create a new branch
|
||||
off of it:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git checkout develop
|
||||
$ git pull upstream develop
|
||||
$ git branch <descriptive_branch_name>
|
||||
$ git checkout <descriptive_branch_name>
|
||||
|
||||
Here we assume that the local ``develop`` branch tracks the upstream develop
|
||||
branch of Spack. This is not a requirement and you could also do the same with
|
||||
remote branches. But for some it is more convenient to have a local branch that
|
||||
tracks upstream.
|
||||
|
||||
Normally we prefer that commits pertaining to a package ``<package-name>`` have
|
||||
a message ``<package-name>: descriptive message``. It is important to add
|
||||
descriptive message so that others, who might be looking at your changes later
|
||||
(in a year or maybe two), would understand the rationale behind them.
|
||||
|
||||
Now, you can make your changes while keeping the ``develop`` branch pure.
|
||||
Edit a few files and commit them by running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git add <files_to_be_part_of_the_commit>
|
||||
$ git commit --message <descriptive_message_of_this_particular_commit>
|
||||
|
||||
Next, push it to your remote fork and create a PR:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git push origin <descriptive_branch_name> --set-upstream
|
||||
|
||||
GitHub provides a `tutorial <https://help.github.com/articles/about-pull-requests/>`_
|
||||
on how to file a pull request. When you send the request, make ``develop`` the
|
||||
destination branch.
|
||||
|
||||
If you need this change immediately and don't have time to wait for your PR to
|
||||
be merged, you can always work on this branch. But if you have multiple PRs,
|
||||
another option is to maintain a Frankenstein branch that combines all of your
|
||||
other branches:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git co develop
|
||||
$ git branch <your_modified_develop_branch>
|
||||
$ git checkout <your_modified_develop_branch>
|
||||
$ git merge <descriptive_branch_name>
|
||||
|
||||
This can be done with each new PR you submit. Just make sure to keep this local
|
||||
branch up-to-date with upstream ``develop`` too.
|
||||
|
||||
^^^^^^^^^^^^^^
|
||||
Cherry-Picking
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
What if you made some changes to your local modified develop branch and already
|
||||
committed them, but later decided to contribute them to Spack? You can use
|
||||
cherry-picking to create a new branch with only these commits.
|
||||
|
||||
First, check out your local modified develop branch:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git checkout <your_modified_develop_branch>
|
||||
|
||||
Now, get the hashes of the commits you want from the output of:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git log
|
||||
|
||||
Next, create a new branch off of upstream ``develop`` and copy the commits
|
||||
that you want in your PR:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git checkout develop
|
||||
$ git pull upstream develop
|
||||
$ git branch <descriptive_branch_name>
|
||||
$ git checkout <descriptive_branch_name>
|
||||
$ git cherry-pick <hash>
|
||||
$ git push origin <descriptive_branch_name> --set-upstream
|
||||
|
||||
Now you can create a PR from the web-interface of GitHub. The net result is as
|
||||
follows:
|
||||
|
||||
#. You patched your local version of Spack and can use it further.
|
||||
#. You "cherry-picked" these changes in a stand-alone branch and submitted it
|
||||
as a PR upstream.
|
||||
|
||||
Should you have several commits to contribute, you could follow the same
|
||||
procedure by getting hashes of all of them and cherry-picking to the PR branch.
|
||||
|
||||
.. note::
|
||||
|
||||
It is important that whenever you change something that might be of
|
||||
importance upstream, create a pull request as soon as possible. Do not wait
|
||||
for weeks/months to do this, because:
|
||||
|
||||
#. you might forget why you modified certain files
|
||||
#. it could get difficult to isolate this change into a stand-alone clean PR.
|
||||
|
||||
^^^^^^^^
|
||||
Rebasing
|
||||
^^^^^^^^
|
||||
|
||||
Other developers are constantly making contributions to Spack, possibly on the
|
||||
same files that your PR changed. If their PR is merged before yours, it can
|
||||
create a merge conflict. This means that your PR can no longer be automatically
|
||||
merged without a chance of breaking your changes. In this case, you will be
|
||||
asked to rebase on top of the latest upstream ``develop``.
|
||||
|
||||
First, make sure your develop branch is up-to-date:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git checkout develop
|
||||
$ git pull upstream develop
|
||||
|
||||
Now, we need to switch to the branch you submitted for your PR and rebase it
|
||||
on top of develop:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git checkout <descriptive_branch_name>
|
||||
$ git rebase develop
|
||||
|
||||
Git will likely ask you to resolve conflicts. Edit the file that it says can't
|
||||
be merged automatically and resolve the conflict. Then, run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git add <file_that_could_not_be_merged>
|
||||
$ git rebase --continue
|
||||
|
||||
You may have to repeat this process multiple times until all conflicts are resolved.
|
||||
Once this is done, simply force push your rebased branch to your remote fork:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git push --force origin <descriptive_branch_name>
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Rebasing with cherry-pick
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You can also perform a rebase using ``cherry-pick``. First, create a temporary
|
||||
backup branch:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git checkout <descriptive_branch_name>
|
||||
$ git branch tmp
|
||||
|
||||
If anything goes wrong, you can always go back to your ``tmp`` branch.
|
||||
Now, look at the logs and save the hashes of any commits you would like to keep:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git log
|
||||
|
||||
Next, go back to the original branch and reset it to ``develop``.
|
||||
Before doing so, make sure that you local ``develop`` branch is up-to-date
|
||||
with upstream:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git checkout develop
|
||||
$ git pull upstream develop
|
||||
$ git checkout <descriptive_branch_name>
|
||||
$ git reset --hard develop
|
||||
|
||||
Now you can cherry-pick relevant commits:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git cherry-pick <hash1>
|
||||
$ git cherry-pick <hash2>
|
||||
|
||||
Push the modified branch to your fork:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git push --force origin <descriptive_branch_name>
|
||||
|
||||
If everything looks good, delete the backup branch:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git branch --delete --force tmp
|
||||
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
Re-writing History
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Sometimes you may end up on a branch that has diverged so much from develop
|
||||
that it cannot easily be rebased. If the current commits history is more of
|
||||
an experimental nature and only the net result is important, you may rewrite
|
||||
the history.
|
||||
|
||||
First, merge upstream ``develop`` and reset you branch to it. On the branch
|
||||
in question, run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git merge develop
|
||||
$ git reset develop
|
||||
|
||||
At this point your branch will point to the same commit as develop and
|
||||
thereby the two are indistinguishable. However, all the files that were
|
||||
previously modified will stay as such. In other words, you do not lose the
|
||||
changes you made. Changes can be reviewed by looking at diffs:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git status
|
||||
$ git diff
|
||||
|
||||
The next step is to rewrite the history by adding files and creating commits:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git add <files_to_be_part_of_commit>
|
||||
$ git commit --message <descriptive_message>
|
||||
|
||||
After all changed files are committed, you can push the branch to your fork
|
||||
and create a PR:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git push origin --set-upstream
|
||||
@@ -1,27 +1,29 @@
|
||||
.. _developer_guide:
|
||||
|
||||
===============
|
||||
Developer Guide
|
||||
=====================
|
||||
===============
|
||||
|
||||
This guide is intended for people who want to work on Spack itself.
|
||||
If you just want to develop pacakges, see the :ref:`packaging-guide`.
|
||||
If you just want to develop packages, see the :ref:`packaging-guide`.
|
||||
|
||||
It is assumed that you've read the :ref:`basic-usage` and
|
||||
:ref:`packaging-guide` sections, and that you're familiar with the
|
||||
concepts discussed there. If you're not, we recommend reading those
|
||||
first.
|
||||
|
||||
--------
|
||||
Overview
|
||||
-----------------------
|
||||
--------
|
||||
|
||||
Spack is designed with three separate roles in mind:
|
||||
|
||||
#. **Users**, who need to install software *without* knowing all the
|
||||
details about how it is built.
|
||||
#. **Packagers** who know how a particular software package is
|
||||
built and encode this information in package files.
|
||||
#. **Developers** who work on Spack, add new features, and try to
|
||||
make the jobs of packagers and users easier.
|
||||
#. **Users**, who need to install software *without* knowing all the
|
||||
details about how it is built.
|
||||
#. **Packagers** who know how a particular software package is
|
||||
built and encode this information in package files.
|
||||
#. **Developers** who work on Spack, add new features, and try to
|
||||
make the jobs of packagers and users easier.
|
||||
|
||||
Users could be end users installing software in their home directory,
|
||||
or administrators installing software to a shared directory on a
|
||||
@@ -41,20 +43,20 @@ specification.
|
||||
|
||||
This gets us to the two key concepts in Spack's software design:
|
||||
|
||||
#. **Specs**: expressions for describing builds of software, and
|
||||
#. **Packages**: Python modules that build software according to a
|
||||
spec.
|
||||
#. **Specs**: expressions for describing builds of software, and
|
||||
#. **Packages**: Python modules that build software according to a
|
||||
spec.
|
||||
|
||||
A package is a template for building particular software, and a spec
|
||||
as a descriptor for one or more instances of that template. Users
|
||||
express the configuration they want using a spec, and a package turns
|
||||
the spec into a complete build.
|
||||
|
||||
The obvious difficulty with this design is that users underspecify
|
||||
The obvious difficulty with this design is that users under-specify
|
||||
what they want. To build a software package, the package object needs
|
||||
a *complete* specification. In Spack, if a spec describes only one
|
||||
instance of a package, then we say it is **concrete**. If a spec
|
||||
could describes many instances, (i.e. it is underspecified in one way
|
||||
could describes many instances, (i.e. it is under-specified in one way
|
||||
or another), then we say it is **abstract**.
|
||||
|
||||
Spack's job is to take an *abstract* spec from the user, find a
|
||||
@@ -63,73 +65,87 @@ building the software off to the package object. The rest of this
|
||||
document describes all the pieces that come together to make that
|
||||
happen.
|
||||
|
||||
|
||||
-------------------
|
||||
Directory Structure
|
||||
-------------------------
|
||||
-------------------
|
||||
|
||||
So that you can familiarize yourself with the project, we'll start
|
||||
with a high level view of Spack's directory structure::
|
||||
with a high level view of Spack's directory structure:
|
||||
|
||||
spack/ <- installation root
|
||||
bin/
|
||||
spack <- main spack executable
|
||||
var/
|
||||
spack/ <- build & stage directories
|
||||
opt/
|
||||
spack/ <- packages are installed here
|
||||
lib/
|
||||
spack/
|
||||
docs/ <- source for this documentation
|
||||
env/ <- compiler wrappers for build environment
|
||||
.. code-block:: none
|
||||
|
||||
spack/ <- spack module; contains Python code
|
||||
cmd/ <- each file in here is a spack subcommand
|
||||
compilers/ <- compiler description files
|
||||
packages/ <- each file in here is a spack package
|
||||
test/ <- unit test modules
|
||||
util/ <- common code
|
||||
spack/ <- installation root
|
||||
bin/
|
||||
spack <- main spack executable
|
||||
|
||||
etc/
|
||||
spack/ <- Spack config files.
|
||||
Can be overridden by files in ~/.spack.
|
||||
|
||||
var/
|
||||
spack/ <- build & stage directories
|
||||
repos/ <- contains package repositories
|
||||
builtin/ <- pkg repository that comes with Spack
|
||||
repo.yaml <- descriptor for the builtin repository
|
||||
packages/ <- directories under here contain packages
|
||||
cache/ <- saves resources downloaded during installs
|
||||
|
||||
opt/
|
||||
spack/ <- packages are installed here
|
||||
|
||||
lib/
|
||||
spack/
|
||||
docs/ <- source for this documentation
|
||||
env/ <- compiler wrappers for build environment
|
||||
|
||||
external/ <- external libs included in Spack distro
|
||||
llnl/ <- some general-use libraries
|
||||
|
||||
spack/ <- spack module; contains Python code
|
||||
cmd/ <- each file in here is a spack subcommand
|
||||
compilers/ <- compiler description files
|
||||
test/ <- unit test modules
|
||||
util/ <- common code
|
||||
|
||||
Spack is designed so that it could live within a `standard UNIX
|
||||
directory hierarchy <http://linux.die.net/man/7/hier>`_, so ``lib``,
|
||||
``var``, and ``opt`` all contain a ``spack`` subdirectory in case
|
||||
Spack is installed alongside other software. Most of the insteresting
|
||||
parts of Spack live in ``lib/spack``. Files under ``var`` are created
|
||||
as needed, so there is no ``var`` directory when you initially clone
|
||||
Spack from the repository.
|
||||
Spack is installed alongside other software. Most of the interesting
|
||||
parts of Spack live in ``lib/spack``.
|
||||
|
||||
Spack has *one* directory layout and there is no install process.
|
||||
version and the source code. Most Python programs don't look like
|
||||
this (they use distutils, ``setup.py``, etc.) but we wanted to make
|
||||
Spack *very* easy to use. The simple layout spares users from the
|
||||
need to install Spack into a Python environment. Many users don't
|
||||
have write access to a Python installation, and installing an entire
|
||||
new instance of Python to bootstrap Spack would be very complicated.
|
||||
Most Python programs don't look like this (they use distutils, ``setup.py``,
|
||||
etc.) but we wanted to make Spack *very* easy to use. The simple layout
|
||||
spares users from the need to install Spack into a Python environment.
|
||||
Many users don't have write access to a Python installation, and installing
|
||||
an entire new instance of Python to bootstrap Spack would be very complicated.
|
||||
Users should not have to install install a big, complicated package to
|
||||
use the thing that's supposed to spare them from the details of big,
|
||||
complicated packages. The end result is that Spack works out of the
|
||||
box: clone it and add ``bin`` to your PATH and you're ready to go.
|
||||
|
||||
|
||||
--------------
|
||||
Code Structure
|
||||
-------------------------
|
||||
--------------
|
||||
|
||||
This section gives an overview of the various Python modules in Spack,
|
||||
grouped by functionality.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Package-related modules
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:mod:`spack.package`
|
||||
Contains the :class:`Package <spack.package.Package>` class, which
|
||||
is the superclass for all packages in Spack. Methods on ``Package``
|
||||
implement all phases of the :ref:`package lifecycle
|
||||
<pacakge-lifecycle>` and manage the build process.
|
||||
<package-lifecycle>` and manage the build process.
|
||||
|
||||
:mod:`spack.packages`
|
||||
Contains all of the packages in Spack and methods for managing them.
|
||||
Functions like :func:`packages.get <spack.packages.get>` and
|
||||
:func:`class_name_for_package_name
|
||||
<packages.class_name_for_package_name>` handle mapping packge module
|
||||
<packages.class_name_for_package_name>` handle mapping package module
|
||||
names to class names and dynamically instantiating packages by name
|
||||
from module files.
|
||||
|
||||
@@ -144,9 +160,9 @@ Package-related modules
|
||||
decorator, which allows :ref:`multimethods <multimethods>` in
|
||||
packages.
|
||||
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
Spec-related modules
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:mod:`spack.spec`
|
||||
Contains :class:`Spec <spack.spec.Spec>` and :class:`SpecParser
|
||||
@@ -194,9 +210,9 @@ Spec-related modules
|
||||
Not yet implemented. Should eventually have architecture
|
||||
descriptions for cross-compiling.
|
||||
|
||||
|
||||
^^^^^^^^^^^^^^^^^
|
||||
Build environment
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
:mod:`spack.stage`
|
||||
Handles creating temporary directories for builds.
|
||||
@@ -210,15 +226,17 @@ Build environment
|
||||
Create more implementations of this to change the hierarchy and
|
||||
naming scheme in ``$spack_prefix/opt``
|
||||
|
||||
^^^^^^^^^^^^^^^^^
|
||||
Spack Subcommands
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
:mod:`spack.cmd`
|
||||
Each module in this package implements a Spack subcommand. See
|
||||
:ref:`writing commands <writing-commands>` for details.
|
||||
|
||||
^^^^^^^^^^
|
||||
Unit tests
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
^^^^^^^^^^
|
||||
|
||||
:mod:`spack.test`
|
||||
Implements Spack's test suite. Add a module and put its name in
|
||||
@@ -228,78 +246,100 @@ Unit tests
|
||||
This is a fake package hierarchy used to mock up packages for
|
||||
Spack's test suite.
|
||||
|
||||
^^^^^^^^^^^^^
|
||||
Other Modules
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
:mod:`spack.globals`
|
||||
Includes global settings for Spack. the default policy classes for
|
||||
things like :ref:`temporary space <temp-space>` and
|
||||
:ref:`concretization <concretization-policies>`.
|
||||
|
||||
:mod:`spack.tty`
|
||||
Basic output functions for all of the messages Spack writes to the
|
||||
terminal.
|
||||
|
||||
:mod:`spack.color`
|
||||
Implements a color formatting syntax used by ``spack.tty``.
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
:mod:`spack.url`
|
||||
URL parsing, for deducing names and versions of packages from
|
||||
tarball URLs.
|
||||
|
||||
:mod:`spack.util`
|
||||
In this package are a number of utility modules for the rest of
|
||||
Spack.
|
||||
|
||||
:mod:`spack.error`
|
||||
:class:`SpackError <spack.error.SpackError>`, the base class for
|
||||
Spack's exception hierarchy.
|
||||
|
||||
:mod:`llnl.util.tty`
|
||||
Basic output functions for all of the messages Spack writes to the
|
||||
terminal.
|
||||
|
||||
:mod:`llnl.util.tty.color`
|
||||
Implements a color formatting syntax used by ``spack.tty``.
|
||||
|
||||
:mod:`llnl.util`
|
||||
In this package are a number of utility modules for the rest of
|
||||
Spack.
|
||||
|
||||
------------
|
||||
Spec objects
|
||||
-------------------------
|
||||
------------
|
||||
|
||||
---------------
|
||||
Package objects
|
||||
-------------------------
|
||||
|
||||
|
||||
Most spack commands
|
||||
look something like this:
|
||||
|
||||
#. Parse an abstract spec (or specs) from the command line,
|
||||
#. *Normalize* the spec based on information in package files,
|
||||
#. *Concretize* the spec according to some customizable policies,
|
||||
#. Instantiate a package based on the spec, and
|
||||
#. Call methods (e.g., ``install()``) on the package object.
|
||||
---------------
|
||||
|
||||
Most spack commands look something like this:
|
||||
|
||||
#. Parse an abstract spec (or specs) from the command line,
|
||||
#. *Normalize* the spec based on information in package files,
|
||||
#. *Concretize* the spec according to some customizable policies,
|
||||
#. Instantiate a package based on the spec, and
|
||||
#. Call methods (e.g., ``install()``) on the package object.
|
||||
|
||||
The information in Package files is used at all stages in this
|
||||
process.
|
||||
|
||||
Conceptually, packages are overloaded. They contain:
|
||||
|
||||
Conceptually, packages are overloaded. They contain
|
||||
|
||||
-------------
|
||||
Stage objects
|
||||
-------------------------
|
||||
-------------
|
||||
|
||||
.. _writing-commands:
|
||||
|
||||
----------------
|
||||
Writing commands
|
||||
-------------------------
|
||||
----------------
|
||||
|
||||
----------
|
||||
Unit tests
|
||||
-------------------------
|
||||
----------
|
||||
|
||||
------------
|
||||
Unit testing
|
||||
-------------------------
|
||||
|
||||
------------
|
||||
|
||||
------------------
|
||||
Developer commands
|
||||
-------------------------
|
||||
------------------
|
||||
|
||||
^^^^^^^^^^^^^
|
||||
``spack doc``
|
||||
~~~~~~~~~~~~~~~~~
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
^^^^^^^^^^^^^^
|
||||
``spack test``
|
||||
~~~~~~~~~~~~~~~~~
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
---------
|
||||
Profiling
|
||||
---------
|
||||
|
||||
Spack has some limited built-in support for profiling, and can report
|
||||
statistics using standard Python timing tools. To use this feature,
|
||||
supply ``--profile`` to Spack on the command line, before any subcommands.
|
||||
|
||||
.. _spack-p:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
``spack --profile``
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``spack --profile`` output looks like this:
|
||||
|
||||
.. command-output:: spack --profile graph dyninst
|
||||
:ellipsis: 25
|
||||
|
||||
The bottom of the output shows the top most time consuming functions,
|
||||
slowest on top. The profiling support is from Python's built-in tool,
|
||||
`cProfile
|
||||
<https://docs.python.org/2/library/profile.html#module-cProfile>`_.
|
||||
|
||||
@@ -1,27 +1,3 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://scalability-llnl.github.io/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License (as published by
|
||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
sphinxcontrib
|
||||
|
||||
@@ -1,27 +1,3 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://scalability-llnl.github.io/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License (as published by
|
||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2010, 2011, 2012, Sebastian Wiesner <lunaryorn@gmail.com>
|
||||
# All rights reserved.
|
||||
|
||||
@@ -1,29 +1,32 @@
|
||||
================
|
||||
Feature Overview
|
||||
==================
|
||||
================
|
||||
|
||||
This is a high-level overview of features that make Spack different
|
||||
from other `package managers
|
||||
<http://en.wikipedia.org/wiki/Package_management_system>`_ and `port
|
||||
systems <http://en.wikipedia.org/wiki/Ports_collection>`_.
|
||||
|
||||
---------------------------
|
||||
Simple package installation
|
||||
----------------------------
|
||||
---------------------------
|
||||
|
||||
Installing the default version of a package is simple. This will install
|
||||
the latest version of the ``mpileaks`` package and all of its dependencies:
|
||||
|
||||
.. code-block:: sh
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install mpileaks
|
||||
|
||||
--------------------------------
|
||||
Custom versions & configurations
|
||||
-------------------------------------------
|
||||
--------------------------------
|
||||
|
||||
Spack allows installation to be customized. Users can specify the
|
||||
version, build compiler, compile-time options, and cross-compile
|
||||
platform, all on the command line.
|
||||
|
||||
.. code-block:: sh
|
||||
.. code-block:: console
|
||||
|
||||
# Install a particular version by appending @
|
||||
$ spack install mpileaks@1.1.2
|
||||
@@ -31,46 +34,55 @@ platform, all on the command line.
|
||||
# Specify a compiler (and its version), with %
|
||||
$ spack install mpileaks@1.1.2 %gcc@4.7.3
|
||||
|
||||
# Add special compile-time options with +
|
||||
# Add special compile-time options by name
|
||||
$ spack install mpileaks@1.1.2 %gcc@4.7.3 debug=True
|
||||
|
||||
# Add special boolean compile-time options with +
|
||||
$ spack install mpileaks@1.1.2 %gcc@4.7.3 +debug
|
||||
|
||||
# Cross-compile for a different architecture with =
|
||||
$ spack install mpileaks@1.1.2 =bgqos_0
|
||||
# Add compiler flags using the conventional names
|
||||
$ spack install mpileaks@1.1.2 %gcc@4.7.3 cppflags="-O3 -floop-block"
|
||||
|
||||
Users can specify as many or few options as they care about. Spack
|
||||
will fill in the unspecified values with sensible defaults.
|
||||
# Cross-compile for a different architecture with arch=
|
||||
$ spack install mpileaks@1.1.2 arch=bgqos_0
|
||||
|
||||
Users can specify as many or few options as they care about. Spack
|
||||
will fill in the unspecified values with sensible defaults. The two listed
|
||||
syntaxes for variants are identical when the value is boolean.
|
||||
|
||||
----------------------
|
||||
Customize dependencies
|
||||
-------------------------------------
|
||||
----------------------
|
||||
|
||||
Spack allows *dependencies* of a particular installation to be
|
||||
customized extensively. Suppose that ``mpileaks`` depends indirectly
|
||||
on ``libelf`` and ``libdwarf``. Using ``^``, users can add custom
|
||||
configurations for the dependencies:
|
||||
|
||||
.. code-block:: sh
|
||||
.. code-block:: console
|
||||
|
||||
# Install mpileaks and link it with specific versions of libelf and libdwarf
|
||||
$ spack install mpileaks@1.1.2 %gcc@4.7.3 +debug ^libelf@0.8.12 ^libdwarf@20130729+debug
|
||||
|
||||
|
||||
------------------------
|
||||
Non-destructive installs
|
||||
-------------------------------------
|
||||
------------------------
|
||||
|
||||
Spack installs every unique package/dependency configuration into its
|
||||
own prefix, so new installs will not break existing ones.
|
||||
|
||||
-------------------------------
|
||||
Packages can peacefully coexist
|
||||
-------------------------------------
|
||||
-------------------------------
|
||||
|
||||
Spack avoids library misconfiguration by using ``RPATH`` to link
|
||||
dependencies. When a user links a library or runs a program, it is
|
||||
tied to the dependencies it was built with, so there is no need to
|
||||
manipulate ``LD_LIBRARY_PATH`` at runtime.
|
||||
|
||||
-------------------------
|
||||
Creating packages is easy
|
||||
-------------------------------------
|
||||
-------------------------
|
||||
|
||||
To create a new packages, all Spack needs is a URL for the source
|
||||
archive. The ``spack create`` command will create a boilerplate
|
||||
@@ -79,7 +91,7 @@ in pure Python.
|
||||
|
||||
For example, this command:
|
||||
|
||||
.. code-block:: sh
|
||||
.. code-block:: console
|
||||
|
||||
$ spack create http://www.mr511.de/software/libelf-0.8.13.tar.gz
|
||||
|
||||
@@ -89,21 +101,31 @@ creates a simple python file:
|
||||
|
||||
from spack import *
|
||||
|
||||
|
||||
class Libelf(Package):
|
||||
homepage = "http://www.example.com/"
|
||||
"""FIXME: Put a proper description of your package here."""
|
||||
|
||||
# FIXME: Add a proper url for your package's homepage here.
|
||||
homepage = "http://www.example.com"
|
||||
url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
|
||||
|
||||
versions = { '0.8.13' : '4136d7b4c04df68b686570afa26988ac' }
|
||||
version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
|
||||
|
||||
def install(self, prefix):
|
||||
configure("--prefix=%s" % prefix)
|
||||
# FIXME: Add dependencies if required.
|
||||
# depends_on('foo')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# FIXME: Modify the configure line to suit your build system here.
|
||||
configure('--prefix={0}'.format(prefix))
|
||||
|
||||
# FIXME: Add logic to build and install here.
|
||||
make()
|
||||
make("install")
|
||||
make('install')
|
||||
|
||||
It doesn't take much python coding to get from there to a working
|
||||
package:
|
||||
|
||||
.. literalinclude:: ../../../var/spack/packages/libelf/package.py
|
||||
.. literalinclude:: ../../../var/spack/repos/builtin/packages/libelf/package.py
|
||||
:lines: 25-
|
||||
|
||||
Spack also provides wrapper functions around common commands like
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,8 +3,9 @@
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
===================
|
||||
Spack Documentation
|
||||
=================================
|
||||
===================
|
||||
|
||||
Spack is a package management tool designed to support multiple
|
||||
versions and configurations of software on a wide variety of platforms
|
||||
@@ -18,38 +19,58 @@ configurations can coexist on the same system.
|
||||
Most importantly, Spack is *simple*. It offers a simple *spec* syntax
|
||||
so that users can specify versions and configuration options
|
||||
concisely. Spack is also simple for package authors: package files
|
||||
are writtin in pure Python, and specs allow package authors to write a
|
||||
single build script for many different builds of the same package.
|
||||
are written in pure Python, and specs allow package authors to
|
||||
maintain a single file for many different builds of the same package.
|
||||
|
||||
See the :doc:`features` for examples and highlights.
|
||||
|
||||
Get spack from the `github repository
|
||||
<https://github.com/scalability-llnl/spack>`_ and install your first
|
||||
<https://github.com/llnl/spack>`_ and install your first
|
||||
package:
|
||||
|
||||
.. code-block:: sh
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone git@github.com:scalability-llnl/spack.git
|
||||
$ git clone https://github.com/llnl/spack.git
|
||||
$ cd spack/bin
|
||||
$ ./spack install libelf
|
||||
|
||||
If you're new to spack and want to start using it, see :doc:`getting_started`,
|
||||
or refer to the full manual below.
|
||||
|
||||
Table of Contents
|
||||
---------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Basics
|
||||
|
||||
features
|
||||
getting_started
|
||||
basic_usage
|
||||
workflows
|
||||
tutorial_sc16
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Reference
|
||||
|
||||
configuration
|
||||
config_yaml
|
||||
build_settings
|
||||
mirrors
|
||||
module_file_support
|
||||
repositories
|
||||
command_index
|
||||
package_list
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Contributing
|
||||
|
||||
contribution_guide
|
||||
packaging_guide
|
||||
site_configuration
|
||||
developer_guide
|
||||
API Docs <spack>
|
||||
|
||||
==================
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
|
||||
245
lib/spack/docs/mirrors.rst
Normal file
245
lib/spack/docs/mirrors.rst
Normal file
@@ -0,0 +1,245 @@
|
||||
.. _mirrors:
|
||||
|
||||
=======
|
||||
Mirrors
|
||||
=======
|
||||
|
||||
Some sites may not have access to the internet for fetching packages.
|
||||
These sites will need a local repository of tarballs from which they
|
||||
can get their files. Spack has support for this with *mirrors*. A
|
||||
mirror is a URL that points to a directory, either on the local
|
||||
filesystem or on some server, containing tarballs for all of Spack's
|
||||
packages.
|
||||
|
||||
Here's an example of a mirror's directory structure:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
mirror/
|
||||
cmake/
|
||||
cmake-2.8.10.2.tar.gz
|
||||
dyninst/
|
||||
dyninst-8.1.1.tgz
|
||||
dyninst-8.1.2.tgz
|
||||
libdwarf/
|
||||
libdwarf-20130126.tar.gz
|
||||
libdwarf-20130207.tar.gz
|
||||
libdwarf-20130729.tar.gz
|
||||
libelf/
|
||||
libelf-0.8.12.tar.gz
|
||||
libelf-0.8.13.tar.gz
|
||||
libunwind/
|
||||
libunwind-1.1.tar.gz
|
||||
mpich/
|
||||
mpich-3.0.4.tar.gz
|
||||
mvapich2/
|
||||
mvapich2-1.9.tgz
|
||||
|
||||
The structure is very simple. There is a top-level directory. The
|
||||
second level directories are named after packages, and the third level
|
||||
contains tarballs for each package, named after each package.
|
||||
|
||||
.. note::
|
||||
|
||||
Archives are **not** named exactly the way they were in the package's fetch
|
||||
URL. They have the form ``<name>-<version>.<extension>``, where
|
||||
``<name>`` is Spack's name for the package, ``<version>`` is the
|
||||
version of the tarball, and ``<extension>`` is whatever format the
|
||||
package's fetch URL contains.
|
||||
|
||||
In order to make mirror creation reasonably fast, we copy the
|
||||
tarball in its original format to the mirror directory, but we do
|
||||
not standardize on a particular compression algorithm, because this
|
||||
would potentially require expanding and re-compressing each archive.
|
||||
|
||||
.. _cmd-spack-mirror:
|
||||
|
||||
----------------
|
||||
``spack mirror``
|
||||
----------------
|
||||
|
||||
Mirrors are managed with the ``spack mirror`` command. The help for
|
||||
``spack mirror`` looks like this:
|
||||
|
||||
.. command-output:: spack help mirror
|
||||
|
||||
The ``create`` command actually builds a mirror by fetching all of its
|
||||
packages from the internet and checksumming them.
|
||||
|
||||
The other three commands are for managing mirror configuration. They
|
||||
control the URL(s) from which Spack downloads its packages.
|
||||
|
||||
.. _spack-mirror-create:
|
||||
|
||||
-----------------------
|
||||
``spack mirror create``
|
||||
-----------------------
|
||||
|
||||
You can create a mirror using the ``spack mirror create`` command, assuming
|
||||
you're on a machine where you can access the internet.
|
||||
|
||||
The command will iterate through all of Spack's packages and download
|
||||
the safe ones into a directory structure like the one above. Here is
|
||||
what it looks like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack mirror create libelf libdwarf
|
||||
==> Created new mirror in spack-mirror-2014-06-24
|
||||
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.13.tar.gz
|
||||
########################################################## 81.6%
|
||||
==> Checksum passed for libelf@0.8.13
|
||||
==> Added libelf@0.8.13
|
||||
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.12.tar.gz
|
||||
###################################################################### 98.6%
|
||||
==> Checksum passed for libelf@0.8.12
|
||||
==> Added libelf@0.8.12
|
||||
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130207.tar.gz
|
||||
###################################################################### 97.3%
|
||||
==> Checksum passed for libdwarf@20130207
|
||||
==> Added libdwarf@20130207
|
||||
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130126.tar.gz
|
||||
######################################################## 78.9%
|
||||
==> Checksum passed for libdwarf@20130126
|
||||
==> Added libdwarf@20130126
|
||||
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130729.tar.gz
|
||||
############################################################# 84.7%
|
||||
==> Added libdwarf@20130729
|
||||
==> Added spack-mirror-2014-06-24/libdwarf/libdwarf-20130729.tar.gz to mirror
|
||||
==> Added python@2.7.8.
|
||||
==> Successfully updated mirror in spack-mirror-2015-02-24.
|
||||
Archive stats:
|
||||
0 already present
|
||||
5 added
|
||||
0 failed to fetch.
|
||||
|
||||
Once this is done, you can tar up the ``spack-mirror-2014-06-24`` directory and
|
||||
copy it over to the machine you want it hosted on.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
Custom package sets
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Normally, ``spack mirror create`` downloads all the archives it has
|
||||
checksums for. If you want to only create a mirror for a subset of
|
||||
packages, you can do that by supplying a list of package specs on the
|
||||
command line after ``spack mirror create``. For example, this
|
||||
command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack mirror create libelf@0.8.12: boost@1.44:
|
||||
|
||||
Will create a mirror for libelf versions greater than or equal to
|
||||
0.8.12 and boost versions greater than or equal to 1.44.
|
||||
|
||||
^^^^^^^^^^^^
|
||||
Mirror files
|
||||
^^^^^^^^^^^^
|
||||
|
||||
If you have a *very* large number of packages you want to mirror, you
|
||||
can supply a file with specs in it, one per line:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cat specs.txt
|
||||
libdwarf
|
||||
libelf@0.8.12:
|
||||
boost@1.44:
|
||||
boost@1.39.0
|
||||
...
|
||||
$ spack mirror create --file specs.txt
|
||||
...
|
||||
|
||||
This is useful if there is a specific suite of software managed by
|
||||
your site.
|
||||
|
||||
.. _spack-mirror-add:
|
||||
|
||||
--------------------
|
||||
``spack mirror add``
|
||||
--------------------
|
||||
|
||||
Once you have a mirror, you need to let spack know about it. This is
|
||||
relatively simple. First, figure out the URL for the mirror. If it's
|
||||
a file, you can use a file URL like this one:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
file://~/spack-mirror-2014-06-24
|
||||
|
||||
That points to the directory on the local filesystem. If it were on a
|
||||
web server, you could use a URL like this one:
|
||||
|
||||
https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24
|
||||
|
||||
Spack will use the URL as the root for all of the packages it fetches.
|
||||
You can tell your Spack installation to use that mirror like this:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack mirror add local_filesystem file://~/spack-mirror-2014-06-24
|
||||
|
||||
Each mirror has a name so that you can refer to it again later.
|
||||
|
||||
.. _spack-mirror-list:
|
||||
|
||||
---------------------
|
||||
``spack mirror list``
|
||||
---------------------
|
||||
|
||||
To see all the mirrors Spack knows about, run ``spack mirror list``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack mirror list
|
||||
local_filesystem file://~/spack-mirror-2014-06-24
|
||||
|
||||
.. _spack-mirror-remove:
|
||||
|
||||
-----------------------
|
||||
``spack mirror remove``
|
||||
-----------------------
|
||||
|
||||
To remove a mirror by name, run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack mirror remove local_filesystem
|
||||
$ spack mirror list
|
||||
==> No mirrors configured.
|
||||
|
||||
-----------------
|
||||
Mirror precedence
|
||||
-----------------
|
||||
|
||||
Adding a mirror really adds a line in ``~/.spack/mirrors.yaml``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
mirrors:
|
||||
local_filesystem: file://~/spack-mirror-2014-06-24
|
||||
remote_server: https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24
|
||||
|
||||
If you want to change the order in which mirrors are searched for
|
||||
packages, you can edit this file and reorder the sections. Spack will
|
||||
search the topmost mirror first and the bottom-most mirror last.
|
||||
|
||||
.. _caching:
|
||||
|
||||
-------------------
|
||||
Local Default Cache
|
||||
-------------------
|
||||
|
||||
Spack caches resources that are downloaded as part of installs. The cache is
|
||||
a valid spack mirror: it uses the same directory structure and naming scheme
|
||||
as other Spack mirrors (so it can be copied anywhere and referenced with a URL
|
||||
like other mirrors). The mirror is maintained locally (within the Spack
|
||||
installation directory) at :file:`var/spack/cache/`. It is always enabled (and
|
||||
is always searched first when attempting to retrieve files for an installation)
|
||||
but can be cleared with :ref:`purge <cmd-spack-purge>`; the cache directory can also
|
||||
be deleted manually without issue.
|
||||
|
||||
Caching includes retrieved tarball archives and source control repositories, but
|
||||
only resources with an associated digest or commit ID (e.g. a revision number
|
||||
for SVN) will be cached.
|
||||
682
lib/spack/docs/module_file_support.rst
Normal file
682
lib/spack/docs/module_file_support.rst
Normal file
@@ -0,0 +1,682 @@
|
||||
.. _modules:
|
||||
|
||||
=======
|
||||
Modules
|
||||
=======
|
||||
|
||||
The use of module systems to manage user environment in a controlled way
|
||||
is a common practice at HPC centers that is often embraced also by individual
|
||||
programmers on their development machines. To support this common practice
|
||||
Spack provides integration with `Environment Modules
|
||||
<http://modules.sourceforge.net/>`_ , `LMod
|
||||
<http://lmod.readthedocs.io/en/latest/>`_ and `Dotkit <https://computing.llnl.gov/?set=jobs&page=dotkit>`_ by:
|
||||
|
||||
* generating module files after a successful installation
|
||||
* providing commands that can leverage the spec syntax to manipulate modules
|
||||
|
||||
In the following you will see how to activate shell support for commands in Spack
|
||||
that requires it, and discover what benefits this may bring with respect to deal
|
||||
directly with automatically generated module files.
|
||||
|
||||
.. note::
|
||||
|
||||
If your machine does not already have a module system installed,
|
||||
we advise you to use either Environment Modules or LMod. See :ref:`InstallEnvironmentModules`
|
||||
for more details.
|
||||
|
||||
.. _shell-support:
|
||||
|
||||
-------------
|
||||
Shell support
|
||||
-------------
|
||||
|
||||
You can enable shell support by sourcing the appropriate setup file
|
||||
in the ``$SPACK_ROOT/share/spack`` directory.
|
||||
For ``bash`` or ``ksh`` users:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ . ${SPACK_ROOT}/share/spack/setup-env.sh
|
||||
|
||||
For ``csh`` and ``tcsh`` instead:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source $SPACK_ROOT/share/spack/setup-env.csh
|
||||
|
||||
|
||||
.. note::
|
||||
You can put the source line in your ``.bashrc`` or ``.cshrc`` to
|
||||
have Spack's shell support available on the command line at any login.
|
||||
|
||||
|
||||
----------------------------
|
||||
Using module files via Spack
|
||||
----------------------------
|
||||
|
||||
If you have shell support enabled you should be able to run either
|
||||
``module avail`` or ``use -l spack`` to see what module/dotkit files have
|
||||
been installed. Here is sample output of those programs, showing lots
|
||||
of installed packages.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module avail
|
||||
|
||||
------- ~/spack/share/spack/modules/linux-debian7-x86_64 --------
|
||||
adept-utils@1.0%gcc@4.4.7-5adef8da libelf@0.8.13%gcc@4.4.7
|
||||
automaded@1.0%gcc@4.4.7-d9691bb0 libelf@0.8.13%intel@15.0.0
|
||||
boost@1.55.0%gcc@4.4.7 mpc@1.0.2%gcc@4.4.7-559607f5
|
||||
callpath@1.0.1%gcc@4.4.7-5dce4318 mpfr@3.1.2%gcc@4.4.7
|
||||
dyninst@8.1.2%gcc@4.4.7-b040c20e mpich@3.0.4%gcc@4.4.7
|
||||
gcc@4.9.1%gcc@4.4.7-93ab98c5 mpich@3.0.4%gcc@4.9.0
|
||||
gmp@6.0.0a%gcc@4.4.7 mrnet@4.1.0%gcc@4.4.7-72b7881d
|
||||
graphlib@2.0.0%gcc@4.4.7 netgauge@2.4.6%gcc@4.9.0-27912b7b
|
||||
launchmon@1.0.1%gcc@4.4.7 stat@2.1.0%gcc@4.4.7-51101207
|
||||
libNBC@1.1.1%gcc@4.9.0-27912b7b sundials@2.5.0%gcc@4.9.0-27912b7b
|
||||
libdwarf@20130729%gcc@4.4.7-b52fac98
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ use -l spack
|
||||
|
||||
spack ----------
|
||||
adept-utils@1.0%gcc@4.4.7-5adef8da - adept-utils @1.0
|
||||
automaded@1.0%gcc@4.4.7-d9691bb0 - automaded @1.0
|
||||
boost@1.55.0%gcc@4.4.7 - boost @1.55.0
|
||||
callpath@1.0.1%gcc@4.4.7-5dce4318 - callpath @1.0.1
|
||||
dyninst@8.1.2%gcc@4.4.7-b040c20e - dyninst @8.1.2
|
||||
gmp@6.0.0a%gcc@4.4.7 - gmp @6.0.0a
|
||||
libNBC@1.1.1%gcc@4.9.0-27912b7b - libNBC @1.1.1
|
||||
libdwarf@20130729%gcc@4.4.7-b52fac98 - libdwarf @20130729
|
||||
libelf@0.8.13%gcc@4.4.7 - libelf @0.8.13
|
||||
libelf@0.8.13%intel@15.0.0 - libelf @0.8.13
|
||||
mpc@1.0.2%gcc@4.4.7-559607f5 - mpc @1.0.2
|
||||
mpfr@3.1.2%gcc@4.4.7 - mpfr @3.1.2
|
||||
mpich@3.0.4%gcc@4.4.7 - mpich @3.0.4
|
||||
mpich@3.0.4%gcc@4.9.0 - mpich @3.0.4
|
||||
netgauge@2.4.6%gcc@4.9.0-27912b7b - netgauge @2.4.6
|
||||
sundials@2.5.0%gcc@4.9.0-27912b7b - sundials @2.5.0
|
||||
|
||||
The names here should look familiar, they're the same ones from
|
||||
``spack find``. You *can* use the names here directly. For example,
|
||||
you could type either of these commands to load the callpath module:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ use callpath@1.0.1%gcc@4.4.7-5dce4318
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module load callpath@1.0.1%gcc@4.4.7-5dce4318
|
||||
|
||||
.. _cmd-spack-load:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
``spack load / unload``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Neither of these is particularly pretty, easy to remember, or
|
||||
easy to type. Luckily, Spack has its own interface for using modules
|
||||
and dotkits. You can use the same spec syntax you're used to:
|
||||
|
||||
========================= ==========================
|
||||
Environment Modules Dotkit
|
||||
========================= ==========================
|
||||
``spack load <spec>`` ``spack use <spec>``
|
||||
``spack unload <spec>`` ``spack unuse <spec>``
|
||||
========================= ==========================
|
||||
|
||||
And you can use the same shortened names you use everywhere else in
|
||||
Spack. For example, this will add the ``mpich`` package built with
|
||||
``gcc`` to your path:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install mpich %gcc@4.4.7
|
||||
|
||||
# ... wait for install ...
|
||||
|
||||
$ spack use mpich %gcc@4.4.7
|
||||
Prepending: mpich@3.0.4%gcc@4.4.7 (ok)
|
||||
$ which mpicc
|
||||
~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpich@3.0.4/bin/mpicc
|
||||
|
||||
Or, similarly with modules, you could type:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack load mpich %gcc@4.4.7
|
||||
|
||||
These commands will add appropriate directories to your ``PATH``,
|
||||
``MANPATH``, ``CPATH``, and ``LD_LIBRARY_PATH``. When you no longer
|
||||
want to use a package, you can type unload or unuse similarly:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack unload mpich %gcc@4.4.7 # modules
|
||||
$ spack unuse mpich %gcc@4.4.7 # dotkit
|
||||
|
||||
.. note::
|
||||
|
||||
These ``use``, ``unuse``, ``load``, and ``unload`` subcommands are
|
||||
only available if you have enabled Spack's shell support *and* you
|
||||
have dotkit or modules installed on your machine.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
Ambiguous module names
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
If a spec used with load/unload or use/unuse is ambiguous (i.e. more
|
||||
than one installed package matches it), then Spack will warn you:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack load libelf
|
||||
==> Error: Multiple matches for spec libelf. Choose one:
|
||||
libelf@0.8.13%gcc@4.4.7 arch=linux-debian7-x86_64
|
||||
libelf@0.8.13%intel@15.0.0 arch=linux-debian7-x86_64
|
||||
|
||||
You can either type the ``spack load`` command again with a fully
|
||||
qualified argument, or you can add just enough extra constraints to
|
||||
identify one package. For example, above, the key differentiator is
|
||||
that one ``libelf`` is built with the Intel compiler, while the other
|
||||
used ``gcc``. You could therefore just type:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack load libelf %intel
|
||||
|
||||
To identify just the one built with the Intel compiler.
|
||||
|
||||
.. _extensions:
|
||||
|
||||
.. _cmd-spack-module-loads:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
``spack module loads``
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In some cases, it is desirable to load not just a module, but also all
|
||||
the modules it depends on. This is not required for most modules
|
||||
because Spack builds binaries with RPATH support. However, not all
|
||||
packages use RPATH to find their dependencies: this can be true in
|
||||
particular for Python extensions, which are currently *not* built with
|
||||
RPATH.
|
||||
|
||||
Scripts to load modules recursively may be made with the command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module loads --dependencies <spec>
|
||||
|
||||
An equivalent alternative is:
|
||||
|
||||
.. code-block :: console
|
||||
|
||||
$ source <( spack module loads --dependencies <spec> )
|
||||
|
||||
.. warning::
|
||||
|
||||
The ``spack load`` command does not currently accept the
|
||||
``--dependencies`` flag. Use ``spack module loads`` instead, for
|
||||
now.
|
||||
|
||||
.. See #1662
|
||||
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Module Commands for Shell Scripts
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Although Spack is flexible, the ``module`` command is much faster.
|
||||
This could become an issue when emitting a series of ``spack load``
|
||||
commands inside a shell script. By adding the ``--shell`` flag,
|
||||
``spack module find`` may also be used to generate code that can be
|
||||
cut-and-pasted into a shell script. For example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module loads --dependencies py-numpy git
|
||||
# bzip2@1.0.6%gcc@4.9.3=linux-x86_64
|
||||
module load bzip2-1.0.6-gcc-4.9.3-ktnrhkrmbbtlvnagfatrarzjojmkvzsx
|
||||
# ncurses@6.0%gcc@4.9.3=linux-x86_64
|
||||
module load ncurses-6.0-gcc-4.9.3-kaazyneh3bjkfnalunchyqtygoe2mncv
|
||||
# zlib@1.2.8%gcc@4.9.3=linux-x86_64
|
||||
module load zlib-1.2.8-gcc-4.9.3-v3ufwaahjnviyvgjcelo36nywx2ufj7z
|
||||
# sqlite@3.8.5%gcc@4.9.3=linux-x86_64
|
||||
module load sqlite-3.8.5-gcc-4.9.3-a3eediswgd5f3rmto7g3szoew5nhehbr
|
||||
# readline@6.3%gcc@4.9.3=linux-x86_64
|
||||
module load readline-6.3-gcc-4.9.3-se6r3lsycrwxyhreg4lqirp6xixxejh3
|
||||
# python@3.5.1%gcc@4.9.3=linux-x86_64
|
||||
module load python-3.5.1-gcc-4.9.3-5q5rsrtjld4u6jiicuvtnx52m7tfhegi
|
||||
# py-setuptools@20.5%gcc@4.9.3=linux-x86_64
|
||||
module load py-setuptools-20.5-gcc-4.9.3-4qr2suj6p6glepnedmwhl4f62x64wxw2
|
||||
# py-nose@1.3.7%gcc@4.9.3=linux-x86_64
|
||||
module load py-nose-1.3.7-gcc-4.9.3-pwhtjw2dvdvfzjwuuztkzr7b4l6zepli
|
||||
# openblas@0.2.17%gcc@4.9.3+shared=linux-x86_64
|
||||
module load openblas-0.2.17-gcc-4.9.3-pw6rmlom7apfsnjtzfttyayzc7nx5e7y
|
||||
# py-numpy@1.11.0%gcc@4.9.3+blas+lapack=linux-x86_64
|
||||
module load py-numpy-1.11.0-gcc-4.9.3-mulodttw5pcyjufva4htsktwty4qd52r
|
||||
# curl@7.47.1%gcc@4.9.3=linux-x86_64
|
||||
module load curl-7.47.1-gcc-4.9.3-ohz3fwsepm3b462p5lnaquv7op7naqbi
|
||||
# autoconf@2.69%gcc@4.9.3=linux-x86_64
|
||||
module load autoconf-2.69-gcc-4.9.3-bkibjqhgqm5e3o423ogfv2y3o6h2uoq4
|
||||
# cmake@3.5.0%gcc@4.9.3~doc+ncurses+openssl~qt=linux-x86_64
|
||||
module load cmake-3.5.0-gcc-4.9.3-x7xnsklmgwla3ubfgzppamtbqk5rwn7t
|
||||
# expat@2.1.0%gcc@4.9.3=linux-x86_64
|
||||
module load expat-2.1.0-gcc-4.9.3-6pkz2ucnk2e62imwakejjvbv6egncppd
|
||||
# git@2.8.0-rc2%gcc@4.9.3+curl+expat=linux-x86_64
|
||||
module load git-2.8.0-rc2-gcc-4.9.3-3bib4hqtnv5xjjoq5ugt3inblt4xrgkd
|
||||
|
||||
The script may be further edited by removing unnecessary modules.
|
||||
|
||||
|
||||
^^^^^^^^^^^^^^^
|
||||
Module Prefixes
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
On some systems, modules are automatically prefixed with a certain
|
||||
string; ``spack module loads`` needs to know about that prefix when it
|
||||
issues ``module load`` commands. Add the ``--prefix`` option to your
|
||||
``spack module loads`` commands if this is necessary.
|
||||
|
||||
For example, consider the following on one system:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module avail
|
||||
linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y
|
||||
|
||||
$ spack module loads antlr # WRONG!
|
||||
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
|
||||
module load antlr-2.7.7-gcc-5.3.0-bdpl46y
|
||||
|
||||
$ spack module loads --prefix linux-SuSE11-x86_64/ antlr
|
||||
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
|
||||
module load linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y
|
||||
|
||||
----------------------------
|
||||
Auto-generating Module Files
|
||||
----------------------------
|
||||
|
||||
Module files are generated by post-install hooks after the successful
|
||||
installation of a package. The following table summarizes the essential
|
||||
information associated with the different file formats
|
||||
that can be generated by Spack:
|
||||
|
||||
+-----------------------------+--------------------+-------------------------------+----------------------+
|
||||
| | **Hook name** | **Default root directory** | **Compatible tools** |
|
||||
+=============================+====================+===============================+======================+
|
||||
| **Dotkit** | ``dotkit`` | share/spack/dotkit | DotKit |
|
||||
+-----------------------------+--------------------+-------------------------------+----------------------+
|
||||
| **TCL - Non-Hierarchical** | ``tcl`` | share/spack/modules | Env. Modules/LMod |
|
||||
+-----------------------------+--------------------+-------------------------------+----------------------+
|
||||
| **Lua - Hierarchical** | ``lmod`` | share/spack/lmod | LMod |
|
||||
+-----------------------------+--------------------+-------------------------------+----------------------+
|
||||
|
||||
|
||||
Though Spack ships with sensible defaults for the generation of module files,
|
||||
one can customize many aspects of it to accommodate package or site specific needs.
|
||||
These customizations are enabled by either:
|
||||
|
||||
1. overriding certain callback APIs in the Python packages
|
||||
2. writing specific rules in the ``modules.yaml`` configuration file
|
||||
|
||||
The former method fits best cases that are site independent, e.g. injecting variables
|
||||
from language interpreters into their extensions. The latter instead permits to
|
||||
fine tune the content, naming and creation of module files to meet site specific conventions.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
``Package`` file API
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
There are two methods that can be overridden in any ``package.py`` to affect the
|
||||
content of generated module files. The first one is:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
"""Set up the compile and runtime environments for a package."""
|
||||
pass
|
||||
|
||||
and can alter the content of *the same package where it is overridden*
|
||||
by adding actions to ``run_env``. The second method is:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||
"""Set up the environment of packages that depend on this one"""
|
||||
pass
|
||||
|
||||
and has similar effects on module file of dependees. Even in this case
|
||||
``run_env`` must be filled with the desired list of environment modifications.
|
||||
|
||||
.. note::
|
||||
The ``r`` package and callback APIs
|
||||
A typical example in which overriding both methods prove to be useful
|
||||
is given by the ``r`` package. This package installs libraries and headers
|
||||
in non-standard locations and it is possible to prepend the appropriate directory
|
||||
to the corresponding environment variables:
|
||||
|
||||
================== =================================
|
||||
LIBRARY_PATH ``self.prefix/rlib/R/lib``
|
||||
LD_LIBRARY_PATH ``self.prefix/rlib/R/lib``
|
||||
CPATH ``self.prefix/rlib/R/include``
|
||||
================== =================================
|
||||
|
||||
with the following snippet:
|
||||
|
||||
.. literalinclude:: ../../../var/spack/repos/builtin/packages/r/package.py
|
||||
:pyobject: R.setup_environment
|
||||
|
||||
The ``r`` package also knows which environment variable should be modified
|
||||
to make language extensions provided by other packages available, and modifies
|
||||
it appropriately in the override of the second method:
|
||||
|
||||
.. literalinclude:: ../../../var/spack/repos/builtin/packages/r/package.py
|
||||
:lines: 128-129,146-151
|
||||
|
||||
.. _modules-yaml:
|
||||
|
||||
---------------------------------
|
||||
Configuration in ``modules.yaml``
|
||||
---------------------------------
|
||||
|
||||
The name of the configuration file that controls module generation behavior
|
||||
is ``modules.yaml``. The default configuration:
|
||||
|
||||
.. literalinclude:: ../../../etc/spack/defaults/modules.yaml
|
||||
:language: yaml
|
||||
|
||||
activates generation for ``tcl`` and ``dotkit`` module files and inspects
|
||||
the installation folder of each package for the presence of a set of subdirectories
|
||||
(``bin``, ``man``, ``share/man``, etc.). If any is found its full path is prepended
|
||||
to the environment variables listed below the folder name.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Activation of other systems
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Any other module file generator shipped with Spack can be activated adding it to the
|
||||
list under the ``enable`` key in the module file. Currently the only generator that
|
||||
is not activated by default is ``lmod``, which produces hierarchical lua module files.
|
||||
For each module system that can be enabled a finer configuration is possible.
|
||||
|
||||
Directives that are aimed at driving the generation of a particular type of module files
|
||||
should be listed under a top level key that corresponds to the generator being
|
||||
customized:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
enable:
|
||||
- tcl
|
||||
- dotkit
|
||||
- lmod
|
||||
tcl:
|
||||
# contains environment modules specific customizations
|
||||
dotkit:
|
||||
# contains dotkit specific customizations
|
||||
lmod:
|
||||
# contains lmod specific customizations
|
||||
|
||||
All these module sections allow for both:
|
||||
|
||||
1. global directives that usually affect the whole layout of modules or the naming scheme
|
||||
2. directives that affect only a set of packages and modify their content
|
||||
|
||||
For the latter point in particular it is possible to use anonymous specs
|
||||
to select an appropriate set of packages on which the modifications should be applied.
|
||||
|
||||
.. _anonymous_specs:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Selection by anonymous specs
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The procedure to select packages using anonymous specs is a natural
|
||||
extension of using them to install packages, the only difference being
|
||||
that specs in this case **are not required to have a root package**.
|
||||
Consider for instance this snippet:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
# The keyword `all` selects every package
|
||||
all:
|
||||
environment:
|
||||
set:
|
||||
BAR: 'bar'
|
||||
# This anonymous spec selects any package that
|
||||
# depends on openmpi. The double colon at the
|
||||
# end clears the set of rules that matched so far.
|
||||
^openmpi::
|
||||
environment:
|
||||
set:
|
||||
BAR: 'baz'
|
||||
# Selects any zlib package
|
||||
zlib:
|
||||
environment:
|
||||
prepend_path:
|
||||
LD_LIBRARY_PATH: 'foo'
|
||||
# Selects zlib compiled with gcc@4.8
|
||||
zlib%gcc@4.8:
|
||||
environment:
|
||||
unset:
|
||||
- FOOBAR
|
||||
|
||||
During module file generation, the configuration above will instruct
|
||||
Spack to set the environment variable ``BAR=bar`` for every module,
|
||||
unless the associated spec satisfies ``^openmpi`` in which case ``BAR=baz``.
|
||||
In addition in any spec that satisfies ``zlib`` the value ``foo`` will be
|
||||
prepended to ``LD_LIBRARY_PATH`` and in any spec that satisfies ``zlib%gcc@4.8``
|
||||
the variable ``FOOBAR`` will be unset.
|
||||
|
||||
.. note::
|
||||
Order does matter
|
||||
The modifications associated with the ``all`` keyword are always evaluated
|
||||
first, no matter where they appear in the configuration file. All the other
|
||||
spec constraints are instead evaluated top to bottom.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Blacklist or whitelist the generation of specific module files
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Anonymous specs are also used to prevent module files from being written or
|
||||
to force them to be written. A common case for that at HPC centers is to hide
|
||||
from users all of the software that needs to be built with system compilers.
|
||||
Suppose for instance to have ``gcc@4.4.7`` provided by your system. Then
|
||||
with a configuration file like this one:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
whitelist: ['gcc', 'llvm'] # Whitelist will have precedence over blacklist
|
||||
blacklist: ['%gcc@4.4.7'] # Assuming gcc@4.4.7 is the system compiler
|
||||
|
||||
you will skip the generation of module files for any package that
|
||||
is compiled with ``gcc@4.4.7``, with the exception of any ``gcc``
|
||||
or any ``llvm`` installation.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Customize the naming scheme
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The names of environment modules generated by spack are not always easy to
|
||||
fully comprehend due to the long hash in the name. There are two module
|
||||
configuration options to help with that. The first is a global setting to
|
||||
adjust the hash length. It can be set anywhere from 0 to 32 and has a default
|
||||
length of 7. This is the representation of the hash in the module file name and
|
||||
does not affect the size of the package hash. Be aware that the smaller the
|
||||
hash length the more likely naming conflicts will occur. The following snippet
|
||||
shows how to set hash length in the module file names:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
hash_length: 7
|
||||
|
||||
To help make module names more readable, and to help alleviate name conflicts
|
||||
with a short hash, one can use the ``suffixes`` option in the modules
|
||||
configuration file. This option will add strings to modules that match a spec.
|
||||
For instance, the following config options,
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
all:
|
||||
suffixes:
|
||||
^python@2.7.12: 'python-2.7.12'
|
||||
^openblas: 'openblas'
|
||||
|
||||
will add a ``python-2.7.12`` version string to any packages compiled with
|
||||
python matching the spec, ``python@2.7.12``. This is useful to know which
|
||||
version of python a set of python extensions is associated with. Likewise, the
|
||||
``openblas`` string is attached to any program that has openblas in the spec,
|
||||
most likely via the ``+blas`` variant specification.
|
||||
|
||||
.. note::
|
||||
TCL module files
|
||||
A modification that is specific to ``tcl`` module files is the possibility
|
||||
to change the naming scheme of modules.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
|
||||
all:
|
||||
conflict: ['${PACKAGE}', 'intel/14.0.1']
|
||||
|
||||
will create module files that will conflict with ``intel/14.0.1`` and with the
|
||||
base directory of the same module, effectively preventing the possibility to
|
||||
load two or more versions of the same software at the same time. The tokens
|
||||
that are available for use in this directive are the same understood by
|
||||
the ``Spec.format`` method.
|
||||
|
||||
|
||||
.. note::
|
||||
LMod hierarchical module files
|
||||
When ``lmod`` is activated Spack will generate a set of hierarchical lua module
|
||||
files that are understood by LMod. The generated hierarchy always contains the
|
||||
three layers ``Core`` / ``Compiler`` / ``MPI`` but can be further extended to
|
||||
any other virtual dependency present in Spack. A case that could be useful in
|
||||
practice is for instance:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
enable:
|
||||
- lmod
|
||||
lmod:
|
||||
core_compilers: ['gcc@4.8']
|
||||
hierarchical_scheme: ['lapack']
|
||||
|
||||
that will generate a hierarchy in which the ``lapack`` layer is treated as the ``mpi``
|
||||
one. This allows a site to build the same libraries or applications against different
|
||||
implementations of ``mpi`` and ``lapack``, and let LMod switch safely from one to the
|
||||
other.
|
||||
|
||||
.. warning::
|
||||
Deep hierarchies and ``lmod spider``
|
||||
For hierarchies that are deeper than three layers ``lmod spider`` may have some issues.
|
||||
See `this discussion on the LMod project <https://github.com/TACC/Lmod/issues/114>`_.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Filter out environment modifications
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Modifications to certain environment variables in module files are generated by
|
||||
default, for instance by prefix inspections in the default configuration file.
|
||||
There are cases though where some of these modifications are unwanted.
|
||||
Suppose you need to avoid having ``CPATH`` and ``LIBRARY_PATH``
|
||||
modified by your ``dotkit`` modules:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
dotkit:
|
||||
all:
|
||||
filter:
|
||||
# Exclude changes to any of these variables
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
|
||||
The configuration above will generate dotkit module files that will not contain
|
||||
modifications to either ``CPATH`` or ``LIBRARY_PATH`` and environment module
|
||||
files that instead will contain these modifications.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
Autoload dependencies
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In some cases it can be useful to have module files directly autoload
|
||||
their dependencies. This may be the case for Python extensions, if not
|
||||
activated using ``spack activate``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
^python:
|
||||
autoload: 'direct'
|
||||
|
||||
The configuration file above will produce module files that will
|
||||
automatically load their direct dependencies. The allowed values for the
|
||||
``autoload`` statement are either ``none``, ``direct`` or ``all``.
|
||||
|
||||
.. note::
|
||||
TCL prerequisites
|
||||
In the ``tcl`` section of the configuration file it is possible to use
|
||||
the ``prerequisites`` directive that accepts the same values as
|
||||
``autoload``. It will produce module files that have a ``prereq``
|
||||
statement instead of automatically loading other modules.
|
||||
|
||||
------------------------
|
||||
Maintaining Module Files
|
||||
------------------------
|
||||
|
||||
Spack not only provides great flexibility in the generation of module files
|
||||
and in the customization of both their layout and content, but also ships with
|
||||
a tool to ease the burden of their maintenance in production environments.
|
||||
This tool is the ``spack module`` command:
|
||||
|
||||
.. command-output:: spack module --help
|
||||
|
||||
.. _cmd-spack-module-refresh:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
``spack module refresh``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The command that regenerates module files to update their content or
|
||||
their layout is ``module refresh``:
|
||||
|
||||
.. command-output:: spack module refresh --help
|
||||
|
||||
A set of packages can be selected using anonymous specs for the optional
|
||||
``constraint`` positional argument. The argument ``--module-type`` identifies
|
||||
the type of module files to refresh. Optionally the entire tree can be deleted
|
||||
before regeneration if the change in layout is radical.
|
||||
|
||||
.. _cmd-spack-module-rm:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
``spack module rm``
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
If instead what you need is just to delete a few module files, then the right
|
||||
command is ``module rm``:
|
||||
|
||||
.. command-output:: spack module rm --help
|
||||
|
||||
.. note::
|
||||
We care about your module files!
|
||||
Every modification done on modules
|
||||
that are already existing will ask for a confirmation by default. If
|
||||
the command is used in a script it is possible though to pass the
|
||||
``-y`` argument, that will skip this safety measure.
|
||||
File diff suppressed because it is too large
Load Diff
456
lib/spack/docs/repositories.rst
Normal file
456
lib/spack/docs/repositories.rst
Normal file
@@ -0,0 +1,456 @@
|
||||
.. _repositories:
|
||||
|
||||
=============================
|
||||
Package Repositories
|
||||
=============================
|
||||
|
||||
Spack comes with over 1,000 built-in package recipes in
|
||||
``var/spack/repos/builtin/``. This is a **package repository** -- a
|
||||
directory that Spack searches when it needs to find a package by name.
|
||||
You may need to maintain packages for restricted, proprietary or
|
||||
experimental software separately from the built-in repository. Spack
|
||||
allows you to configure local repositories using either the
|
||||
``repos.yaml`` or the ``spack repo`` command.
|
||||
|
||||
A package repository a directory structured like this::
|
||||
|
||||
repo/
|
||||
repo.yaml
|
||||
packages/
|
||||
hdf5/
|
||||
package.py
|
||||
mpich/
|
||||
package.py
|
||||
mpich-1.9-bugfix.patch
|
||||
trilinos/
|
||||
package.py
|
||||
...
|
||||
|
||||
The top-level ``repo.yaml`` file contains configuration metadata for the
|
||||
repository, and the ``packages`` directory contains subdirectories for
|
||||
each package in the repository. Each package directory contains a
|
||||
``package.py`` file and any patches or other files needed to build the
|
||||
package.
|
||||
|
||||
Package repositories allow you to:
|
||||
|
||||
1. Maintain your own packages separately from Spack;
|
||||
|
||||
2. Share your packages (e.g. by hosting them in a shared file system),
|
||||
without committing them to the built-in Spack package repository; and
|
||||
|
||||
3. Override built-in Spack packages with your own implementation.
|
||||
|
||||
Packages in a separate repository can also *depend on* built-in Spack
|
||||
packages. So, you can leverage existing recipes without re-implementing
|
||||
them in your own repository.
|
||||
|
||||
---------------------
|
||||
``repos.yaml``
|
||||
---------------------
|
||||
|
||||
Spack uses the ``repos.yaml`` file in ``~/.spack`` (and :ref:`elsewhere
|
||||
<configuration>`) to find repositories. Note that the ``repos.yaml``
|
||||
configuration file is distinct from the ``repo.yaml`` file in each
|
||||
repository. For more on the YAML format, and on how configuration file
|
||||
precedence works in Spack, see :ref:`configuration <configuration>`.
|
||||
|
||||
The default ``etc/spack/defaults/repos.yaml`` file looks like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
repos:
|
||||
- $spack/var/spack/repos/builtin
|
||||
|
||||
The file starts with ``repos:`` and contains a single ordered list of
|
||||
paths to repositories. Each path is on a separate line starting with
|
||||
``-``. You can add a repository by inserting another path into the list:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
repos:
|
||||
- /opt/local-repo
|
||||
- $spack/var/spack/repos/builtin
|
||||
|
||||
When Spack interprets a spec, e.g. ``mpich`` in ``spack install mpich``,
|
||||
it searches these repositories in order (first to last) to resolve each
|
||||
package name. In this example, Spack will look for the following
|
||||
packages and use the first valid file:
|
||||
|
||||
1. ``/opt/local-repo/packages/mpich/package.py``
|
||||
2. ``$spack/var/spack/repos/builtin/packages/mpich/package.py``
|
||||
|
||||
.. note::
|
||||
|
||||
Currently, Spack can only use repositories in the file system. We plan
|
||||
to eventually support URLs in ``repos.yaml``, so that you can easily
|
||||
point to remote package repositories, but that is not yet implemented.
|
||||
|
||||
---------------------
|
||||
Namespaces
|
||||
---------------------
|
||||
|
||||
Every repository in Spack has an associated **namespace** defined in its
|
||||
top-level ``repo.yaml`` file. If you look at
|
||||
``var/spack/repos/builtin/repo.yaml`` in the built-in repository, you'll
|
||||
see that its namespace is ``builtin``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cat var/spack/repos/builtin/repo.yaml
|
||||
repo:
|
||||
namespace: builtin
|
||||
|
||||
Spack records the repository namespace of each installed package. For
|
||||
example, if you install the ``mpich`` package from the ``builtin`` repo,
|
||||
Spack records its fully qualified name as ``builtin.mpich``. This
|
||||
accomplishes two things:
|
||||
|
||||
1. You can have packages with the same name from different namespaces
|
||||
installed at once.
|
||||
|
||||
1. You can easily determine which repository a package came from after it
|
||||
is installed (more :ref:`below <namespace-example>`).
|
||||
|
||||
.. note::
|
||||
|
||||
It may seem redundant for a repository to have both a namespace and a
|
||||
path, but repository *paths* may change over time, or, as mentioned
|
||||
above, a locally hosted repository path may eventually be hosted at
|
||||
some remote URL.
|
||||
|
||||
Namespaces are designed to allow *package authors* to associate a
|
||||
unique identifier with their packages, so that the package can be
|
||||
identified even if the repository moves. This is why the namespace is
|
||||
determined by the ``repo.yaml`` file in the repository rather than the
|
||||
local ``repos.yaml`` configuration: the *repository maintainer* sets
|
||||
the name.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Uniqueness
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You should choose a namespace that uniquely identifies your package
|
||||
repository. For example, if you make a repository for packages written
|
||||
by your organization, you could use your organization's name. You can
|
||||
also nest namespaces using periods, so you could identify a repository by
|
||||
a sub-organization. For example, LLNL might use a namespace for its
|
||||
internal repositories like ``llnl``. Packages from the Physical & Life
|
||||
Sciences directorate (PLS) might use the ``llnl.pls`` namespace, and
|
||||
packages created by the Computation directorate might use ``llnl.comp``.
|
||||
|
||||
Spack cannot ensure that every repository is named uniquely, but it will
|
||||
prevent you from registering two repositories with the same namespace at
|
||||
the same time. If you try to add a repository that has the same name as
|
||||
an existing one, e.g. ``builtin``, Spack will print a warning message.
|
||||
|
||||
.. _namespace-example:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Namespace example
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Suppose that LLNL maintains its own version of ``mpich``, separate from
|
||||
Spack's built-in ``mpich`` package, and suppose you've installed both
|
||||
LLNL's and Spack's ``mpich`` packages. If you just use ``spack find``,
|
||||
you won't see a difference between these two packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack find
|
||||
==> 2 installed packages.
|
||||
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
|
||||
mpich@3.2 mpich@3.2
|
||||
|
||||
However, if you use ``spack find -N``, Spack will display the packages
|
||||
with their namespaces:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack find -N
|
||||
==> 2 installed packages.
|
||||
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
|
||||
builtin.mpich@3.2 llnl.comp.mpich@3.2
|
||||
|
||||
Now you know which one is LLNL's special version, and which one is the
|
||||
built-in Spack package. As you might guess, packages that are identical
|
||||
except for their namespace will still have different hashes:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack find -lN
|
||||
==> 2 installed packages.
|
||||
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
|
||||
c35p3gc builtin.mpich@3.2 itoqmox llnl.comp.mpich@3.2
|
||||
|
||||
All Spack commands that take a package :ref:`spec <sec-specs>` can also
|
||||
accept a fully qualified spec with a namespace. This means you can use
|
||||
the namespace to be more specific when designating, e.g., which package
|
||||
you want to uninstall:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
spack uninstall llnl.comp.mpich
|
||||
|
||||
----------------------------
|
||||
Overriding built-in packages
|
||||
----------------------------
|
||||
|
||||
Spack's search semantics mean that you can make your own implementation
|
||||
of a built-in Spack package (like ``mpich``), put it in a repository, and
|
||||
use it to override the built-in package. As long as the repository
|
||||
containing your ``mpich`` is earlier any other in ``repos.yaml``, any
|
||||
built-in package that depends on ``mpich`` will be use the one in your
|
||||
repository.
|
||||
|
||||
Suppose you have three repositories: the builtin Spack repo
|
||||
(``builtin``), a shared repo for your institution (e.g., ``llnl``), and a
|
||||
repo containing your own prototype packages (``proto``). Suppose they
|
||||
contain packages as follows:
|
||||
|
||||
+--------------+------------------------------------+-----------------------------+
|
||||
| Namespace | Path to repo | Packages |
|
||||
+==============+====================================+=============================+
|
||||
| ``proto`` | ``~/proto`` | ``mpich`` |
|
||||
+--------------+------------------------------------+-----------------------------+
|
||||
| ``llnl`` | ``/usr/local/llnl`` | ``hdf5`` |
|
||||
+--------------+------------------------------------+-----------------------------+
|
||||
| ``builtin`` | ``$spack/var/spack/repos/builtin`` | ``mpich``, ``hdf5``, others |
|
||||
+--------------+------------------------------------+-----------------------------+
|
||||
|
||||
Suppose that ``hdf5`` depends on ``mpich``. You can override the
|
||||
built-in ``hdf5`` by adding the ``llnl`` repo to ``repos.yaml``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
repos:
|
||||
- /usr/local/llnl
|
||||
- $spack/var/spack/repos/builtin
|
||||
|
||||
``spack install hdf5`` will install ``llnl.hdf5 ^builtin.mpich``.
|
||||
|
||||
If, instead, ``repos.yaml`` looks like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
repos:
|
||||
- ~/proto
|
||||
- /usr/local/llnl
|
||||
- $spack/var/spack/repos/builtin
|
||||
|
||||
``spack install hdf5`` will install ``llnl.hdf5 ^proto.mpich``.
|
||||
|
||||
Any unqualified package name will be resolved by searching ``repos.yaml``
|
||||
from the first entry to the last. You can force a particular
|
||||
repository's package by using a fully qualified name. For example, if
|
||||
your ``repos.yaml`` is as above, and you want ``builtin.mpich`` instead
|
||||
of ``proto.mpich``, you can write::
|
||||
|
||||
spack install hdf5 ^builtin.mpich
|
||||
|
||||
which will install ``llnl.hdf5 ^builtin.mpich``.
|
||||
|
||||
Similarly, you can force the ``builtin.hdf5`` like this::
|
||||
|
||||
spack install builtin.hdf5 ^builtin.mpich
|
||||
|
||||
This will not search ``repos.yaml`` at all, as the ``builtin`` repo is
|
||||
specified in both cases. It will install ``builtin.hdf5
|
||||
^builtin.mpich``.
|
||||
|
||||
If you want to see which repositories will be used in a build *before*
|
||||
you install it, you can use ``spack spec -N``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack spec -N hdf5
|
||||
Input spec
|
||||
--------------------------------
|
||||
hdf5
|
||||
|
||||
Normalized
|
||||
--------------------------------
|
||||
hdf5
|
||||
^zlib@1.1.2:
|
||||
|
||||
Concretized
|
||||
--------------------------------
|
||||
builtin.hdf5@1.10.0-patch1%clang@7.0.2-apple+cxx~debug+fortran+mpi+shared~szip~threadsafe arch=darwin-elcapitan-x86_64
|
||||
^builtin.openmpi@2.0.1%clang@7.0.2-apple~mxm~pmi~psm~psm2~slurm~sqlite3~thread_multiple~tm~verbs+vt arch=darwin-elcapitan-x86_64
|
||||
^builtin.hwloc@1.11.4%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
|
||||
^builtin.libpciaccess@0.13.4%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
|
||||
^builtin.libtool@2.4.6%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
|
||||
^builtin.m4@1.4.17%clang@7.0.2-apple+sigsegv arch=darwin-elcapitan-x86_64
|
||||
^builtin.libsigsegv@2.10%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
|
||||
^builtin.pkg-config@0.29.1%clang@7.0.2-apple+internal_glib arch=darwin-elcapitan-x86_64
|
||||
^builtin.util-macros@1.19.0%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
|
||||
^builtin.zlib@1.2.8%clang@7.0.2-apple+pic arch=darwin-elcapitan-x86_64
|
||||
|
||||
.. warning::
|
||||
|
||||
You *can* use a fully qualified package name in a ``depends_on``
|
||||
directive in a ``package.py`` file, like so::
|
||||
|
||||
depends_on('proto.hdf5')
|
||||
|
||||
This is *not* recommended, as it makes it very difficult for
|
||||
multiple repos to be composed and shared. A ``package.py`` like this
|
||||
will fail if the ``proto`` repository is not registered in
|
||||
``repos.yaml``.
|
||||
|
||||
.. _cmd-spack-repo:
|
||||
|
||||
--------------------------
|
||||
``spack repo``
|
||||
--------------------------
|
||||
|
||||
Spack's :ref:`configuration system <configuration>` allows repository
|
||||
settings to come from ``repos.yaml`` files in many locations. If you
|
||||
want to see the repositories registered as a result of all configuration
|
||||
files, use ``spack repo list``.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
``spack repo list``
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack repo list
|
||||
==> 2 package repositories.
|
||||
myrepo ~/myrepo
|
||||
builtin ~/spack/var/spack/repos/builtin
|
||||
|
||||
Each repository is listed with its associated namespace. To get the raw,
|
||||
merged YAML from all configuration files, use ``spack config get repos``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack config get repos
|
||||
repos:srepos:
|
||||
- ~/myrepo
|
||||
- $spack/var/spack/repos/builtin
|
||||
|
||||
mNote that, unlike ``spack repo list``, this does not include the
|
||||
namespace, which is read from each repo's ``repo.yaml``.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
``spack repo create``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
To make your own repository, you don't need to construct a directory
|
||||
yourself; you can use the ``spack repo create`` command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack repo create myrepo
|
||||
==> Created repo with namespace 'myrepo'.
|
||||
==> To register it with spack, run this command:
|
||||
spack repo add ~/myrepo
|
||||
|
||||
$ ls myrepo
|
||||
packages/ repo.yaml
|
||||
|
||||
$ cat myrepo/repo.yaml
|
||||
repo:
|
||||
namespace: 'myrepo'
|
||||
|
||||
By default, the namespace of a new repo matches its directory's name.
|
||||
You can supply a custom namespace with a second argument, e.g.:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack repo create myrepo llnl.comp
|
||||
==> Created repo with namespace 'llnl.comp'.
|
||||
==> To register it with spack, run this command:
|
||||
spack repo add ~/myrepo
|
||||
|
||||
$ cat myrepo/repo.yaml
|
||||
repo:
|
||||
namespace: 'llnl.comp'
|
||||
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
``spack repo add``
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Once your repository is created, you can register it with Spack with
|
||||
``spack repo add``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack repo add ./myrepo
|
||||
==> Added repo with namespace 'llnl.comp'.
|
||||
|
||||
$ spack repo list
|
||||
==> 2 package repositories.
|
||||
llnl.comp ~/myrepo
|
||||
builtin ~/spack/var/spack/repos/builtin
|
||||
|
||||
This simply adds the repo to your ``repos.yaml`` file.
|
||||
|
||||
Once a repository is registered like this, you should be able to see its
|
||||
packages' names in the output of ``spack list``, and you should be able
|
||||
to build them using ``spack install <name>`` as you would with any
|
||||
built-in package.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
``spack repo remove``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You can remove an already-registered repository with ``spack repo rm``.
|
||||
This will work whether you pass the repository's namespace *or* its
|
||||
path.
|
||||
|
||||
By namespace:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack repo rm llnl.comp
|
||||
==> Removed repository ~/myrepo with namespace 'llnl.comp'.
|
||||
|
||||
$ spack repo list
|
||||
==> 1 package repository.
|
||||
builtin ~/spack/var/spack/repos/builtin
|
||||
|
||||
By path:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack repo rm ~/myrepo
|
||||
==> Removed repository ~/myrepo
|
||||
|
||||
$ spack repo list
|
||||
==> 1 package repository.
|
||||
builtin ~/spack/var/spack/repos/builtin
|
||||
|
||||
--------------------------------
|
||||
Repo namespaces and Python
|
||||
--------------------------------
|
||||
|
||||
You may have noticed that namespace notation for repositories is similar
|
||||
to the notation for namespaces in Python. As it turns out, you *can*
|
||||
treat Spack repositories like Python packages; this is how they are
|
||||
implemented.
|
||||
|
||||
You could, for example, extend a ``builtin`` package in your own
|
||||
repository:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from spack.pkg.builtin.mpich import Mpich
|
||||
|
||||
class MyPackage(Mpich):
|
||||
...
|
||||
|
||||
Spack repo namespaces are actually Python namespaces tacked on under
|
||||
``spack.pkg``. The search semantics of ``repos.yaml`` are actually
|
||||
implemented using Python's built-in `sys.path
|
||||
<https://docs.python.org/2/library/sys.html#sys.path>`_ search. The
|
||||
:py:mod:`spack.repository` module implements a custom `Python importer
|
||||
<https://docs.python.org/2/library/imp.html>`_.
|
||||
|
||||
.. warning::
|
||||
|
||||
The mechanism for extending packages is not yet extensively tested,
|
||||
and extending packages across repositories imposes inter-repo
|
||||
dependencies, which may be hard to manage. Use this feature at your
|
||||
own risk, but let us know if you have a use case for it.
|
||||
@@ -1,329 +0,0 @@
|
||||
.. _site-configuration:
|
||||
|
||||
Site-specific configuration
|
||||
===================================
|
||||
|
||||
.. _mirrors:
|
||||
|
||||
Mirrors
|
||||
----------------------------
|
||||
|
||||
Some sites may not have access to the internet for fetching packages.
|
||||
These sites will need a local repository of tarballs from which they
|
||||
can get their files. Spack has support for this with *mirrors*. A
|
||||
mirror is a URL that points to a directory, either on the local
|
||||
filesystem or on some server, containing tarballs for all of Spack's
|
||||
packages.
|
||||
|
||||
Here's an example of a mirror's directory structure::
|
||||
|
||||
mirror/
|
||||
cmake/
|
||||
cmake-2.8.10.2.tar.gz
|
||||
dyninst/
|
||||
DyninstAPI-8.1.1.tgz
|
||||
DyninstAPI-8.1.2.tgz
|
||||
libdwarf/
|
||||
libdwarf-20130126.tar.gz
|
||||
libdwarf-20130207.tar.gz
|
||||
libdwarf-20130729.tar.gz
|
||||
libelf/
|
||||
libelf-0.8.12.tar.gz
|
||||
libelf-0.8.13.tar.gz
|
||||
libunwind/
|
||||
libunwind-1.1.tar.gz
|
||||
mpich/
|
||||
mpich-3.0.4.tar.gz
|
||||
mvapich2/
|
||||
mvapich2-1.9.tgz
|
||||
|
||||
The structure is very simple. There is a top-level directory. The
|
||||
second level directories are named after packages, and the third level
|
||||
contains tarballs for each package, named as they were in the
|
||||
package's fetch URL.
|
||||
|
||||
``spack mirror``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Mirrors are managed with the ``spack mirror`` command. The help for
|
||||
``spack mirror`` looks like this::
|
||||
|
||||
$ spack mirror -h
|
||||
usage: spack mirror [-h] SUBCOMMAND ...
|
||||
|
||||
positional arguments:
|
||||
SUBCOMMAND
|
||||
create Create a directory to be used as a spack mirror, and fill
|
||||
it with package archives.
|
||||
add Add a mirror to Spack.
|
||||
remove Remove a mirror by name.
|
||||
list Print out available mirrors to the console.
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
The ``create`` command actually builds a mirror by fetching all of its
|
||||
packages from the internet and checksumming them.
|
||||
|
||||
The other three commands are for managing mirror configuration. They
|
||||
control the URL(s) from which Spack downloads its packages.
|
||||
|
||||
|
||||
``spack mirror create``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can create a mirror using the ``spack mirror create`` command, assuming
|
||||
you're on a machine where you can access the internet.
|
||||
|
||||
The command will iterate through all of Spack's packages and download
|
||||
the safe ones into a directory structure like the one above. Here is
|
||||
what it looks like:
|
||||
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ spack mirror create libelf libdwarf
|
||||
==> Created new mirror in spack-mirror-2014-06-24
|
||||
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.13.tar.gz
|
||||
########################################################## 81.6%
|
||||
==> Checksum passed for libelf@0.8.13
|
||||
==> Added spack-mirror-2014-06-24/libelf/libelf-0.8.13.tar.gz to mirror
|
||||
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.12.tar.gz
|
||||
###################################################################### 98.6%
|
||||
==> Checksum passed for libelf@0.8.12
|
||||
==> Added spack-mirror-2014-06-24/libelf/libelf-0.8.12.tar.gz to mirror
|
||||
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130207.tar.gz
|
||||
###################################################################### 97.3%
|
||||
==> Checksum passed for libdwarf@20130207
|
||||
==> Added spack-mirror-2014-06-24/libdwarf/libdwarf-20130207.tar.gz to mirror
|
||||
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130126.tar.gz
|
||||
######################################################## 78.9%
|
||||
==> Checksum passed for libdwarf@20130126
|
||||
==> Added spack-mirror-2014-06-24/libdwarf/libdwarf-20130126.tar.gz to mirror
|
||||
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130729.tar.gz
|
||||
############################################################# 84.7%
|
||||
==> Checksum passed for libdwarf@20130729
|
||||
==> Added spack-mirror-2014-06-24/libdwarf/libdwarf-20130729.tar.gz to mirror
|
||||
|
||||
Once this is done, you can tar up the ``spack-mirror-2014-06-24`` directory and
|
||||
copy it over to the machine you want it hosted on.
|
||||
|
||||
Custom package sets
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Normally, ``spack mirror create`` downloads all the archives it has
|
||||
checksums for. If you want to only create a mirror for a subset of
|
||||
packages, you can do that by supplying a list of package specs on the
|
||||
command line after ``spack mirror create``. For example, this
|
||||
command::
|
||||
|
||||
$ spack mirror create libelf@0.8.12: boost@1.44:
|
||||
|
||||
Will create a mirror for libelf versions greater than or equal to
|
||||
0.8.12 and boost versions greater than or equal to 1.44.
|
||||
|
||||
Mirror files
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
If you have a *very* large number of packages you want to mirror, you
|
||||
can supply a file with specs in it, one per line::
|
||||
|
||||
$ cat specs.txt
|
||||
libdwarf
|
||||
libelf@0.8.12:
|
||||
boost@1.44:
|
||||
boost@1.39.0
|
||||
...
|
||||
$ spack mirror create -f specs.txt
|
||||
...
|
||||
|
||||
This is useful if there is a specific suite of software managed by
|
||||
your site.
|
||||
|
||||
|
||||
``spack mirror add``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Once you have a mirrror, you need to let spack know about it. This is
|
||||
relatively simple. First, figure out the URL for the mirror. If it's
|
||||
a file, you can use a file URL like this one::
|
||||
|
||||
file:///Users/gamblin2/spack-mirror-2014-06-24
|
||||
|
||||
That points to the directory on the local filesystem. If it were on a
|
||||
web server, you could use a URL like this one:
|
||||
|
||||
https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24
|
||||
|
||||
Spack will use the URL as the root for all of the packages it fetches.
|
||||
You can tell your Spack installation to use that mirror like this:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ spack mirror add local_filesystem file:///Users/gamblin2/spack-mirror-2014-06-24
|
||||
|
||||
Each mirror has a name so that you can refer to it again later.
|
||||
|
||||
``spack mirror list``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you want to see all the mirrors Spack knows about you can run ``spack mirror list``::
|
||||
|
||||
$ spack mirror list
|
||||
local_filesystem file:///Users/gamblin2/spack-mirror-2014-06-24
|
||||
|
||||
``spack mirror remove``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
And, if you want to remove a mirror, just remove it by name::
|
||||
|
||||
$ spack mirror remove local_filesystem
|
||||
$ spack mirror list
|
||||
==> No mirrors configured.
|
||||
|
||||
Mirror precedence
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Adding a mirror really just adds a section in ``~/.spackconfig``::
|
||||
|
||||
[mirror "local_filesystem"]
|
||||
url = file:///Users/gamblin2/spack-mirror-2014-06-24
|
||||
[mirror "remote_server"]
|
||||
url = https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24
|
||||
|
||||
If you want to change the order in which mirrors are searched for
|
||||
packages, you can edit this file and reorder the sections. Spack will
|
||||
search the topmost mirror first and the bottom-most mirror last.
|
||||
|
||||
|
||||
.. _temp-space:
|
||||
|
||||
Temporary space
|
||||
----------------------------
|
||||
|
||||
.. warning:: Temporary space configuration will be moved to configuration files.
|
||||
The intructions here are old and refer to ``__init__.py``
|
||||
|
||||
By default, Spack will try to do all of its building in temporary
|
||||
space. There are two main reasons for this. First, Spack is designed
|
||||
to run out of a user's home directory, and on may systems the home
|
||||
directory is network mounted and potentially not a very fast
|
||||
filesystem. We create build stages in a temporary directory to avoid
|
||||
this. Second, many systems impose quotas on home directories, and
|
||||
``/tmp`` or similar directories often have more available space. This
|
||||
helps conserve space for installations in users' home directories.
|
||||
|
||||
You can customize temporary directories by editing
|
||||
``lib/spack/spack/__init__.py``. Specifically, find this part of the file:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Whether to build in tmp space or directly in the stage_path.
|
||||
# If this is true, then spack will make stage directories in
|
||||
# a tmp filesystem, and it will symlink them into stage_path.
|
||||
use_tmp_stage = True
|
||||
|
||||
# Locations to use for staging and building, in order of preference
|
||||
# Use a %u to add a username to the stage paths here, in case this
|
||||
# is a shared filesystem. Spack will use the first of these paths
|
||||
# that it can create.
|
||||
tmp_dirs = ['/nfs/tmp2/%u/spack-stage',
|
||||
'/var/tmp/%u/spack-stage',
|
||||
'/tmp/%u/spack-stage']
|
||||
|
||||
The ``use_tmp_stage`` variable controls whether Spack builds
|
||||
**directly** inside the ``var/spack/`` directory. Normally, Spack
|
||||
will try to find a temporary directory for a build, then it *symlinks*
|
||||
that temporary directory into ``var/spack/`` so that you can keep
|
||||
track of what temporary directories Spack is using.
|
||||
|
||||
The ``tmp_dirs`` variable is a list of paths Spack should search when
|
||||
trying to find a temporary directory. They can optionally contain a
|
||||
``%u``, which will substitute the current user's name into the path.
|
||||
The list is searched in order, and Spack will create a temporary stage
|
||||
in the first directory it finds to which it has write access. Add
|
||||
more elements to the list to indicate where your own site's temporary
|
||||
directory is.
|
||||
|
||||
|
||||
.. _concretization-policies:
|
||||
|
||||
Concretization policies
|
||||
----------------------------
|
||||
|
||||
When a user asks for a package like ``mpileaks`` to be installed,
|
||||
Spack has to make decisions like what version should be installed,
|
||||
what compiler to use, and how its dependencies should be configured.
|
||||
This process is called *concretization*, and it's covered in detail in
|
||||
:ref:`its own section <abstract-and-concrete>`.
|
||||
|
||||
The default concretization policies are in the
|
||||
:py:mod:`spack.concretize` module, specifically in the
|
||||
:py:class:`spack.concretize.DefaultConcretizer` class. These are the
|
||||
important methods used in the concretization process:
|
||||
|
||||
* :py:meth:`concretize_version(self, spec) <spack.concretize.DefaultConcretizer.concretize_version>`
|
||||
* :py:meth:`concretize_architecture(self, spec) <spack.concretize.DefaultConcretizer.concretize_architecture>`
|
||||
* :py:meth:`concretize_compiler(self, spec) <spack.concretize.DefaultConcretizer.concretize_compiler>`
|
||||
* :py:meth:`choose_provider(self, spec, providers) <spack.concretize.DefaultConcretizer.choose_provider>`
|
||||
|
||||
The first three take a :py:class:`Spec <spack.spec.Spec>` object and
|
||||
modify it by adding constraints for the version. For example, if the
|
||||
input spec had a version range like `1.0:5.0.3`, then the
|
||||
``concretize_version`` method should set the spec's version to a
|
||||
*single* version in that range. Likewise, ``concretize_architecture``
|
||||
selects an architecture when the input spec does not have one, and
|
||||
``concretize_compiler`` needs to set both a concrete compiler and a
|
||||
concrete compiler version.
|
||||
|
||||
``choose_provider()`` affects how concrete implementations are chosen
|
||||
based on a virtual dependency spec. The input spec is some virtual
|
||||
dependency and the ``providers`` index is a :py:class:`ProviderIndex
|
||||
<spack.packages.ProviderIndex>` object. The ``ProviderIndex`` maps
|
||||
the virtual spec to specs for possible implementations, and
|
||||
``choose_provider()`` should simply choose one of these. The
|
||||
``concretize_*`` methods will be called on the chosen implementation
|
||||
later, so there is no need to fully concretize the spec when returning
|
||||
it.
|
||||
|
||||
The ``DefaultConcretizer`` is intendend to provide sensible defaults
|
||||
for each policy, but there are certain choices that it can't know
|
||||
about. For example, one site might prefer ``OpenMPI`` over ``MPICH``,
|
||||
or another might prefer an old version of some packages. These types
|
||||
of special cases can be integrated with custom concretizers.
|
||||
|
||||
Writing a custom concretizer
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To write your own concretizer, you need only subclass
|
||||
``DefaultConcretizer`` and override the methods you want to change.
|
||||
For example, you might write a class like this to change *only* the
|
||||
``concretize_version()`` behavior:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from spack.concretize import DefaultConcretizer
|
||||
|
||||
class MyConcretizer(DefaultConcretizer):
|
||||
def concretize_version(self, spec):
|
||||
# implement custom logic here.
|
||||
|
||||
Once you have written your custom concretizer, you can make Spack use
|
||||
it by editing ``globals.py``. Find this part of the file:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
#
|
||||
# This controls how things are concretized in spack.
|
||||
# Replace it with a subclass if you want different
|
||||
# policies.
|
||||
#
|
||||
concretizer = DefaultConcretizer()
|
||||
|
||||
Set concretizer to *your own* class instead of the default:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
concretizer = MyConcretizer()
|
||||
|
||||
The next time you run Spack, your changes should take effect.
|
||||
63
lib/spack/docs/tutorial/examples/0.package.py
Normal file
63
lib/spack/docs/tutorial/examples/0.package.py
Normal file
@@ -0,0 +1,63 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
#
|
||||
# This is a template package file for Spack. We've put "FIXME"
|
||||
# next to all the things you'll want to change. Once you've handled
|
||||
# them, you can save this file and test your package like this:
|
||||
#
|
||||
# spack install mpileaks
|
||||
#
|
||||
# You can edit this file again by typing:
|
||||
#
|
||||
# spack edit mpileaks
|
||||
#
|
||||
# See the Spack documentation for more information on packaging.
|
||||
# If you submit this package back to Spack as a pull request,
|
||||
# please first remove this boilerplate and all FIXME comments.
|
||||
#
|
||||
from spack import *
|
||||
|
||||
|
||||
class Mpileaks(AutotoolsPackage):
|
||||
"""FIXME: Put a proper description of your package here."""
|
||||
|
||||
# FIXME: Add a proper url for your package's homepage here.
|
||||
homepage = "http://www.example.com"
|
||||
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
|
||||
|
||||
version('1.0', '8838c574b39202a57d7c2d68692718aa')
|
||||
|
||||
# FIXME: Add dependencies if required.
|
||||
# depends_on('m4', type='build')
|
||||
# depends_on('autoconf', type='build')
|
||||
# depends_on('automake', type='build')
|
||||
# depends_on('libtool', type='build')
|
||||
# depends_on('foo')
|
||||
|
||||
def configure_args(self):
|
||||
# FIXME: Add arguments other than --prefix
|
||||
# FIXME: If not needed delete the function
|
||||
args = []
|
||||
return args
|
||||
48
lib/spack/docs/tutorial/examples/1.package.py
Normal file
48
lib/spack/docs/tutorial/examples/1.package.py
Normal file
@@ -0,0 +1,48 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class Mpileaks(AutotoolsPackage):
|
||||
"""Tool to detect and report MPI objects like MPI_Requests and
|
||||
MPI_Datatypes."""
|
||||
|
||||
homepage = "https://github.com/hpc/mpileaks"
|
||||
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
|
||||
|
||||
version('1.0', '8838c574b39202a57d7c2d68692718aa')
|
||||
|
||||
# FIXME: Add dependencies if required.
|
||||
# depends_on('m4', type='build')
|
||||
# depends_on('autoconf', type='build')
|
||||
# depends_on('automake', type='build')
|
||||
# depends_on('libtool', type='build')
|
||||
# depends_on('foo')
|
||||
|
||||
def configure_args(self):
|
||||
# FIXME: Add arguments other than --prefix
|
||||
# FIXME: If not needed delete the function
|
||||
args = []
|
||||
return args
|
||||
45
lib/spack/docs/tutorial/examples/2.package.py
Normal file
45
lib/spack/docs/tutorial/examples/2.package.py
Normal file
@@ -0,0 +1,45 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class Mpileaks(AutotoolsPackage):
|
||||
"""Tool to detect and report MPI objects like MPI_Requests and
|
||||
MPI_Datatypes."""
|
||||
|
||||
homepage = "https://github.com/hpc/mpileaks"
|
||||
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
|
||||
|
||||
version('1.0', '8838c574b39202a57d7c2d68692718aa')
|
||||
|
||||
depends_on('mpi')
|
||||
depends_on('adept-utils')
|
||||
depends_on('callpath')
|
||||
|
||||
def configure_args(self):
|
||||
# FIXME: Add arguments other than --prefix
|
||||
# FIXME: If not needed delete the function
|
||||
args = []
|
||||
return args
|
||||
43
lib/spack/docs/tutorial/examples/3.package.py
Normal file
43
lib/spack/docs/tutorial/examples/3.package.py
Normal file
@@ -0,0 +1,43 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class Mpileaks(AutotoolsPackage):
|
||||
"""Tool to detect and report MPI objects like MPI_Requests and
|
||||
MPI_Datatypes."""
|
||||
homepage = "https://github.com/hpc/mpileaks"
|
||||
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
|
||||
|
||||
version('1.0', '8838c574b39202a57d7c2d68692718aa')
|
||||
|
||||
depends_on('mpi')
|
||||
depends_on('adept-utils')
|
||||
depends_on('callpath')
|
||||
|
||||
def configure_args(self):
|
||||
args = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
|
||||
'--with-callpath=%s' % self.spec['callpath'].prefix]
|
||||
return args
|
||||
50
lib/spack/docs/tutorial/examples/4.package.py
Normal file
50
lib/spack/docs/tutorial/examples/4.package.py
Normal file
@@ -0,0 +1,50 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class Mpileaks(AutotoolsPackage):
|
||||
"""Tool to detect and report MPI objects like MPI_Requests and
|
||||
MPI_Datatypes."""
|
||||
|
||||
homepage = "https://github.com/hpc/mpileaks"
|
||||
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
|
||||
|
||||
version('1.0', '8838c574b39202a57d7c2d68692718aa')
|
||||
|
||||
variant('stackstart', default=0, description='Specify the number of stack frames to truncate.')
|
||||
|
||||
depends_on('mpi')
|
||||
depends_on('adept-utils')
|
||||
depends_on('callpath')
|
||||
|
||||
def configure_args(self):
|
||||
args = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
|
||||
'--with-callpath=%s' % self.spec['callpath'].prefix]
|
||||
stackstart = int(self.spec.variants['stackstart'].value)
|
||||
if stackstart:
|
||||
args.extend(['--with-stack-start-c=%s' % stackstart,
|
||||
'--with-stack-start-fortran=%s' % stackstart])
|
||||
return args
|
||||
BIN
lib/spack/docs/tutorial/sc16-tutorial-slide-preview.png
Normal file
BIN
lib/spack/docs/tutorial/sc16-tutorial-slide-preview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 70 KiB |
48
lib/spack/docs/tutorial_sc16.rst
Normal file
48
lib/spack/docs/tutorial_sc16.rst
Normal file
@@ -0,0 +1,48 @@
|
||||
.. _spack-101:
|
||||
|
||||
=============================
|
||||
Tutorial: Spack 101
|
||||
=============================
|
||||
|
||||
This is a 3-hour introduction to Spack with lectures and live demos. It
|
||||
was presented as a tutorial at `Supercomputing 2016
|
||||
<http://sc16.supercomputing.org>`_. You can use these materials to teach
|
||||
a course on Spack at your own site, or you can just skip ahead and read
|
||||
the live demo scripts to see how Spack is used in practice.
|
||||
|
||||
.. _sc16-slides:
|
||||
|
||||
.. rubric:: Slides
|
||||
|
||||
.. figure:: tutorial/sc16-tutorial-slide-preview.png
|
||||
:target: http://llnl.github.io/spack/files/Spack-SC16-Tutorial.pdf
|
||||
:height: 72px
|
||||
:align: left
|
||||
:alt: Slide Preview
|
||||
|
||||
`Download Slides <http://llnl.github.io/spack/files/Spack-SC16-Tutorial.pdf>`_.
|
||||
|
||||
**Full citation:** Todd Gamblin, Massimiliano Culpo, Gregory Becker, Matt
|
||||
Legendre, Greg Lee, Elizabeth Fischer, and Benedikt Hegner.
|
||||
`Managing HPC Software Complexity with Spack
|
||||
<http://sc16.supercomputing.org/presentation/?id=tut166&sess=sess209>`_.
|
||||
Tutorial presented at Supercomputing 2016. November 13, 2016, Salt Lake
|
||||
City, UT, USA.
|
||||
|
||||
.. _sc16-live-demos:
|
||||
|
||||
.. rubric:: Live Demos
|
||||
|
||||
These scripts will take you step-by-step through basic Spack tasks. They
|
||||
correspond to sections in the slides above.
|
||||
|
||||
1. :ref:`basics-tutorial`
|
||||
2. :ref:`packaging-tutorial`
|
||||
3. :ref:`modules-tutorial`
|
||||
|
||||
Full contents:
|
||||
|
||||
.. toctree::
|
||||
tutorial_sc16_spack_basics
|
||||
tutorial_sc16_packaging
|
||||
tutorial_sc16_modules
|
||||
982
lib/spack/docs/tutorial_sc16_modules.rst
Normal file
982
lib/spack/docs/tutorial_sc16_modules.rst
Normal file
@@ -0,0 +1,982 @@
|
||||
.. _modules-tutorial:
|
||||
|
||||
=============================
|
||||
Module Configuration Tutorial
|
||||
=============================
|
||||
|
||||
This tutorial will guide you through the customization of both
|
||||
content and naming of module files generated by Spack.
|
||||
|
||||
Starting from the default Spack settings you will add an increasing
|
||||
number of directives to the ``modules.yaml`` configuration file to
|
||||
satisfy a number of constraints that mimic those that you may encounter
|
||||
in a typical production environment at HPC sites.
|
||||
|
||||
Even though the focus will be for the most part on customizing
|
||||
TCL non-hierarchical module files, everything
|
||||
you'll see applies also to other kinds of module files generated by Spack.
|
||||
|
||||
The generation of Lua hierarchical
|
||||
module files will be addressed at the end of the tutorial,
|
||||
and you'll see that with minor modifications
|
||||
to an existing ``modules.yaml`` written for TCL
|
||||
non-hierarchical modules you'll get almost
|
||||
for free the possibility to try a hierarchical layout.
|
||||
|
||||
Let's start!
|
||||
|
||||
.. _module_file_tutorial_prerequisites:
|
||||
|
||||
-------------
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
Before proceeding further ensure:
|
||||
|
||||
- you have LMod or Environment Modules available
|
||||
- have :ref:`shell support <shell-support>` activated in Spack
|
||||
|
||||
If you need to install Lmod or Environment module you can refer
|
||||
to the documentation :ref:`here <InstallEnvironmentModules>`.
|
||||
|
||||
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
Add a new compiler
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Spack automatically scans the environment to search for available
|
||||
compilers on first use. On a Ubuntu 14.04 a fresh clone will show
|
||||
something like this:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ uname -a
|
||||
Linux nuvolari 4.4.0-45-generic #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
|
||||
|
||||
$ spack compilers
|
||||
==> Available compilers
|
||||
-- gcc ----------------------------------------------------------
|
||||
gcc@4.8
|
||||
|
||||
For the purpose of building a limited set of packages with some features
|
||||
that will help showcasing the capabilities of
|
||||
module customization the first thing we need is to build a new compiler:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install gcc@6.2.0
|
||||
# ...
|
||||
# Wait a long time
|
||||
# ...
|
||||
|
||||
Then we can use shell support for modules to add it to the list of known compilers:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# The name of the generated module may vary
|
||||
$ module load gcc-6.2.0-gcc-4.8-twd5nqg
|
||||
|
||||
$ spack compiler add
|
||||
==> Added 1 new compiler to ~/.spack/linux/compilers.yaml
|
||||
gcc@6.2.0
|
||||
|
||||
$ spack compilers
|
||||
==> Available compilers
|
||||
-- gcc ----------------------------------------------------------
|
||||
gcc@6.2.0 gcc@4.8
|
||||
|
||||
Note that the final 7 digits hash at the end of the generated module may vary depending
|
||||
on architecture or package version.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Build software that will be used in the tutorial
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Next you should install a few modules that will be used in the tutorial:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install netlib-scalapack ^openmpi ^openblas
|
||||
# ...
|
||||
|
||||
The packages you need to install are:
|
||||
|
||||
- ``netlib-scalapack ^openmpi ^openblas``
|
||||
- ``netlib-scalapack ^mpich ^openblas``
|
||||
- ``netlib-scalapack ^openmpi ^netlib-lapack``
|
||||
- ``netlib-scalapack ^mpich ^netlib-lapack``
|
||||
- ``py-scipy ^openblas``
|
||||
|
||||
In the end your environment should look something like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module avail
|
||||
|
||||
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
|
||||
binutils-2.27-gcc-4.8-dz3xevw libpciaccess-0.13.4-gcc-6.2.0-eo2siet lzo-2.09-gcc-6.2.0-jcngz72 netlib-scalapack-2.0.2-gcc-6.2.0-wnimqhw python-2.7.12-gcc-6.2.0-qu7rc5p
|
||||
bzip2-1.0.6-gcc-6.2.0-csoc2mq libsigsegv-2.10-gcc-4.8-avb6azw m4-1.4.17-gcc-4.8-iggewke netlib-scalapack-2.0.2-gcc-6.2.0-wojunhq sqlite-3.8.5-gcc-6.2.0-td3zfe7
|
||||
cmake-3.5.2-gcc-6.2.0-6poypqg libsigsegv-2.10-gcc-6.2.0-g3qpmbi m4-1.4.17-gcc-6.2.0-lhgqa6s nettle-3.2-gcc-6.2.0-djdthlh tcl-8.6.5-gcc-4.8-atddxu7
|
||||
curl-7.50.3-gcc-6.2.0-2ffacqm libtool-2.4.6-gcc-6.2.0-kiepac6 mpc-1.0.3-gcc-4.8-lylv7lk openblas-0.2.19-gcc-6.2.0-js33umc util-macros-1.19.0-gcc-6.2.0-uoukuqk
|
||||
expat-2.2.0-gcc-6.2.0-bxqnjar libxml2-2.9.4-gcc-6.2.0-3k4ykbe mpfr-3.1.4-gcc-4.8-bldfx3w openmpi-2.0.1-gcc-6.2.0-s3qbtby xz-5.2.2-gcc-6.2.0-t5lk6in
|
||||
gcc-6.2.0-gcc-4.8-twd5nqg lmod-6.4.5-gcc-4.8-7v7bh7b mpich-3.2-gcc-6.2.0-5n5xoep openssl-1.0.2j-gcc-6.2.0-hibnfda zlib-1.2.8-gcc-4.8-bds4ies
|
||||
gmp-6.1.1-gcc-4.8-uq52e2n lua-5.3.2-gcc-4.8-xozf2hx ncurses-6.0-gcc-4.8-u62fit4 pkg-config-0.29.1-gcc-6.2.0-rslsgcs zlib-1.2.8-gcc-6.2.0-asydrba
|
||||
gmp-6.1.1-gcc-6.2.0-3cfh3hi lua-luafilesystem-1_6_3-gcc-4.8-sbzejlz ncurses-6.0-gcc-6.2.0-7tb426s py-nose-1.3.7-gcc-6.2.0-4gl5c42
|
||||
hwloc-1.11.4-gcc-6.2.0-3ostwel lua-luaposix-33.4.0-gcc-4.8-xf7y2p5 netlib-lapack-3.6.1-gcc-6.2.0-mirer2l py-numpy-1.11.1-gcc-6.2.0-i3rpk4e
|
||||
isl-0.14-gcc-4.8-cq73t5m lz4-131-gcc-6.2.0-cagoem4 netlib-scalapack-2.0.2-gcc-6.2.0-6bqlxqy py-scipy-0.18.1-gcc-6.2.0-e6uljfi
|
||||
libarchive-3.2.1-gcc-6.2.0-2b54aos lzma-4.32.7-gcc-6.2.0-sfmeynw netlib-scalapack-2.0.2-gcc-6.2.0-hpqb3dp py-setuptools-25.2.0-gcc-6.2.0-hkqauaa
|
||||
|
||||
------------------------------------------------
|
||||
Filter unwanted modifications to the environment
|
||||
------------------------------------------------
|
||||
|
||||
The non-hierarchical TCL module files that have been generated so far
|
||||
follow the default rules for module generation, which are given
|
||||
:ref:`here <modules-yaml>` in the reference part of the manual. Taking a
|
||||
look at the ``gcc`` module you'll see something like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module show gcc-6.2.0-gcc-4.8-twd5nqg
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc-6.2.0-gcc-4.8-twd5nqg:
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
whatis("gcc @6.2.0 ")
|
||||
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
|
||||
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
|
||||
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
|
||||
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
|
||||
prepend_path("LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
|
||||
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
|
||||
prepend_path("CPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/include")
|
||||
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
|
||||
Fortran, and Java.
|
||||
]])
|
||||
|
||||
As expected, a few environment variables representing paths will be modified
|
||||
by the modules according to the default prefix inspection rules.
|
||||
|
||||
Consider now the case that your site has decided that e.g. ``CPATH`` and
|
||||
``LIBRARY_PATH`` modifications should not be present in module files. What you can
|
||||
do to abide by the rules is to create a configuration file ``~/.spack/modules.yaml``
|
||||
with the following content:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
all:
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
|
||||
Next you should regenerate all the module files:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module refresh --module-type tcl
|
||||
==> You are about to regenerate tcl module files for:
|
||||
|
||||
-- linux-Ubuntu14-x86_64 / gcc@4.8 ------------------------------
|
||||
dz3xevw binutils@2.27 uq52e2n gmp@6.1.1 avb6azw libsigsegv@2.10 xozf2hx lua@5.3.2 xf7y2p5 lua-luaposix@33.4.0 lylv7lk mpc@1.0.3 u62fit4 ncurses@6.0 bds4ies zlib@1.2.8
|
||||
twd5nqg gcc@6.2.0 cq73t5m isl@0.14 7v7bh7b lmod@6.4.5 sbzejlz lua-luafilesystem@1_6_3 iggewke m4@1.4.17 bldfx3w mpfr@3.1.4 atddxu7 tcl@8.6.5
|
||||
|
||||
...
|
||||
|
||||
==> Do you want to proceed ? [y/n]
|
||||
y
|
||||
==> Regenerating tcl module files
|
||||
|
||||
If you take a look now at the module for ``gcc`` you'll see that the unwanted
|
||||
paths have disappeared:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module show gcc-6.2.0-gcc-4.8-twd5nqg
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc-6.2.0-gcc-4.8-twd5nqg:
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
whatis("gcc @6.2.0 ")
|
||||
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
|
||||
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
|
||||
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
|
||||
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
|
||||
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
|
||||
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
|
||||
Fortran, and Java.
|
||||
]])
|
||||
|
||||
----------------------------------------------
|
||||
Prevent some module files from being generated
|
||||
----------------------------------------------
|
||||
|
||||
Another common request at many sites is to avoid exposing software that
|
||||
is only needed as an intermediate step when building a newer stack.
|
||||
Let's try to prevent the generation of
|
||||
module files for anything that is compiled with ``gcc@4.8`` (the OS provided compiler).
|
||||
|
||||
To do this you should add a ``blacklist`` keyword to the configuration file:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 3,4
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
|
||||
and regenerate the module files:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module refresh --module-type tcl --delete-tree
|
||||
==> You are about to regenerate tcl module files for:
|
||||
|
||||
-- linux-Ubuntu14-x86_64 / gcc@4.8 ------------------------------
|
||||
dz3xevw binutils@2.27 uq52e2n gmp@6.1.1 avb6azw libsigsegv@2.10 xozf2hx lua@5.3.2 xf7y2p5 lua-luaposix@33.4.0 lylv7lk mpc@1.0.3 u62fit4 ncurses@6.0 bds4ies zlib@1.2.8
|
||||
twd5nqg gcc@6.2.0 cq73t5m isl@0.14 7v7bh7b lmod@6.4.5 sbzejlz lua-luafilesystem@1_6_3 iggewke m4@1.4.17 bldfx3w mpfr@3.1.4 atddxu7 tcl@8.6.5
|
||||
|
||||
-- linux-Ubuntu14-x86_64 / gcc@6.2.0 ----------------------------
|
||||
csoc2mq bzip2@1.0.6 2b54aos libarchive@3.2.1 sfmeynw lzma@4.32.7 wnimqhw netlib-scalapack@2.0.2 s3qbtby openmpi@2.0.1 hkqauaa py-setuptools@25.2.0
|
||||
6poypqg cmake@3.5.2 eo2siet libpciaccess@0.13.4 jcngz72 lzo@2.09 6bqlxqy netlib-scalapack@2.0.2 hibnfda openssl@1.0.2j qu7rc5p python@2.7.12
|
||||
2ffacqm curl@7.50.3 g3qpmbi libsigsegv@2.10 lhgqa6s m4@1.4.17 wojunhq netlib-scalapack@2.0.2 rslsgcs pkg-config@0.29.1 td3zfe7 sqlite@3.8.5
|
||||
bxqnjar expat@2.2.0 kiepac6 libtool@2.4.6 5n5xoep mpich@3.2 hpqb3dp netlib-scalapack@2.0.2 4gl5c42 py-nose@1.3.7 uoukuqk util-macros@1.19.0
|
||||
3cfh3hi gmp@6.1.1 3k4ykbe libxml2@2.9.4 7tb426s ncurses@6.0 djdthlh nettle@3.2 i3rpk4e py-numpy@1.11.1 t5lk6in xz@5.2.2
|
||||
3ostwel hwloc@1.11.4 cagoem4 lz4@131 mirer2l netlib-lapack@3.6.1 js33umc openblas@0.2.19 e6uljfi py-scipy@0.18.1 asydrba zlib@1.2.8
|
||||
|
||||
==> Do you want to proceed ? [y/n]
|
||||
y
|
||||
|
||||
$ module avail
|
||||
|
||||
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
|
||||
bzip2-1.0.6-gcc-6.2.0-csoc2mq libsigsegv-2.10-gcc-6.2.0-g3qpmbi ncurses-6.0-gcc-6.2.0-7tb426s openmpi-2.0.1-gcc-6.2.0-s3qbtby sqlite-3.8.5-gcc-6.2.0-td3zfe7
|
||||
cmake-3.5.2-gcc-6.2.0-6poypqg libtool-2.4.6-gcc-6.2.0-kiepac6 netlib-lapack-3.6.1-gcc-6.2.0-mirer2l openssl-1.0.2j-gcc-6.2.0-hibnfda util-macros-1.19.0-gcc-6.2.0-uoukuqk
|
||||
curl-7.50.3-gcc-6.2.0-2ffacqm libxml2-2.9.4-gcc-6.2.0-3k4ykbe netlib-scalapack-2.0.2-gcc-6.2.0-6bqlxqy pkg-config-0.29.1-gcc-6.2.0-rslsgcs xz-5.2.2-gcc-6.2.0-t5lk6in
|
||||
expat-2.2.0-gcc-6.2.0-bxqnjar lz4-131-gcc-6.2.0-cagoem4 netlib-scalapack-2.0.2-gcc-6.2.0-hpqb3dp py-nose-1.3.7-gcc-6.2.0-4gl5c42 zlib-1.2.8-gcc-6.2.0-asydrba
|
||||
gmp-6.1.1-gcc-6.2.0-3cfh3hi lzma-4.32.7-gcc-6.2.0-sfmeynw netlib-scalapack-2.0.2-gcc-6.2.0-wnimqhw py-numpy-1.11.1-gcc-6.2.0-i3rpk4e
|
||||
hwloc-1.11.4-gcc-6.2.0-3ostwel lzo-2.09-gcc-6.2.0-jcngz72 netlib-scalapack-2.0.2-gcc-6.2.0-wojunhq py-scipy-0.18.1-gcc-6.2.0-e6uljfi
|
||||
libarchive-3.2.1-gcc-6.2.0-2b54aos m4-1.4.17-gcc-6.2.0-lhgqa6s nettle-3.2-gcc-6.2.0-djdthlh py-setuptools-25.2.0-gcc-6.2.0-hkqauaa
|
||||
libpciaccess-0.13.4-gcc-6.2.0-eo2siet mpich-3.2-gcc-6.2.0-5n5xoep openblas-0.2.19-gcc-6.2.0-js33umc python-2.7.12-gcc-6.2.0-qu7rc5p
|
||||
|
||||
This time it is convenient to pass the option ``--delete-tree`` to the command that
|
||||
regenerates the module files to instruct it to delete the existing tree and regenerate
|
||||
a new one instead of overwriting the files in the existing directory.
|
||||
|
||||
If you pay careful attention you'll see though that we went too far in blacklisting modules:
|
||||
the module for ``gcc@6.2.0`` disappeared as it was bootstrapped with ``gcc@4.8``. To specify
|
||||
exceptions to the blacklist rules you can use ``whitelist``:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 3,4
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
|
||||
``whitelist`` rules always have precedence over ``blacklist`` rules. If you regenerate the modules again:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module refresh --module-type tcl -y
|
||||
|
||||
you'll see that now the module for ``gcc@6.2.0`` has reappeared:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module avail gcc-6.2.0-gcc-4.8-twd5nqg
|
||||
|
||||
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
|
||||
gcc-6.2.0-gcc-4.8-twd5nqg
|
||||
|
||||
-------------------------
|
||||
Change module file naming
|
||||
-------------------------
|
||||
|
||||
The next step in making module files more user-friendly is to
|
||||
improve their naming scheme.
|
||||
To reduce the length of the hash or remove it altogether you can
|
||||
use the ``hash_length`` keyword in the configuration file:
|
||||
|
||||
.. TODO: give reasons to remove hashes if they are not evident enough?
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 3
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
hash_length: 0
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
|
||||
If you try to regenerate the module files now you will get an error:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module refresh --module-type tcl --delete-tree -y
|
||||
==> Error: Name clashes detected in module files:
|
||||
|
||||
file : ~/spack/share/spack/modules/linux-Ubuntu14-x86_64/netlib-scalapack-2.0.2-gcc-6.2.0
|
||||
spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
|
||||
spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
|
||||
spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
|
||||
spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
|
||||
|
||||
==> Error: Operation aborted
|
||||
|
||||
.. note::
|
||||
We try to check for errors upfront!
|
||||
In Spack we check for errors upfront whenever possible, so don't worry about your module files:
|
||||
as a name clash was detected nothing has been changed on disk.
|
||||
|
||||
The problem here is that without
|
||||
the hashes the four different flavors of ``netlib-scalapack`` map to the same module file
|
||||
name. We have the possibility to add suffixes to differentiate them:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 9-11,14-17
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
hash_length: 0
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
suffixes:
|
||||
'^openblas': openblas
|
||||
'^netlib-lapack': netlib
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
netlib-scalapack:
|
||||
suffixes:
|
||||
'^openmpi': openmpi
|
||||
'^mpich': mpich
|
||||
|
||||
As you can see it is possible to specify rules that applies only to a
|
||||
restricted set of packages using :ref:`anonymous specs <anonymous_specs>`.
|
||||
Regenerating module files now we obtain:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module refresh --module-type tcl --delete-tree -y
|
||||
==> Regenerating tcl module files
|
||||
$ module avail
|
||||
|
||||
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
|
||||
bzip2-1.0.6-gcc-6.2.0 libpciaccess-0.13.4-gcc-6.2.0 mpich-3.2-gcc-6.2.0 openblas-0.2.19-gcc-6.2.0 python-2.7.12-gcc-6.2.0
|
||||
cmake-3.5.2-gcc-6.2.0 libsigsegv-2.10-gcc-6.2.0 ncurses-6.0-gcc-6.2.0 openmpi-2.0.1-gcc-6.2.0 sqlite-3.8.5-gcc-6.2.0
|
||||
curl-7.50.3-gcc-6.2.0 libtool-2.4.6-gcc-6.2.0 netlib-lapack-3.6.1-gcc-6.2.0 openssl-1.0.2j-gcc-6.2.0 util-macros-1.19.0-gcc-6.2.0
|
||||
expat-2.2.0-gcc-6.2.0 libxml2-2.9.4-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-netlib-mpich pkg-config-0.29.1-gcc-6.2.0 xz-5.2.2-gcc-6.2.0
|
||||
gcc-6.2.0-gcc-4.8 lz4-131-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-netlib-openmpi py-nose-1.3.7-gcc-6.2.0 zlib-1.2.8-gcc-6.2.0
|
||||
gmp-6.1.1-gcc-6.2.0 lzma-4.32.7-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-openblas-mpich py-numpy-1.11.1-gcc-6.2.0-openblas
|
||||
hwloc-1.11.4-gcc-6.2.0 lzo-2.09-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-openblas-openmpi py-scipy-0.18.1-gcc-6.2.0-openblas
|
||||
libarchive-3.2.1-gcc-6.2.0 m4-1.4.17-gcc-6.2.0 nettle-3.2-gcc-6.2.0 py-setuptools-25.2.0-gcc-6.2.0
|
||||
|
||||
Finally we can set a ``naming_scheme`` to prevent users from loading
|
||||
modules that refer to different flavors of the same library/application:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 4,10,11
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
hash_length: 0
|
||||
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
conflict:
|
||||
- '${PACKAGE}'
|
||||
suffixes:
|
||||
'^openblas': openblas
|
||||
'^netlib-lapack': netlib
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
netlib-scalapack:
|
||||
suffixes:
|
||||
'^openmpi': openmpi
|
||||
'^mpich': mpich
|
||||
|
||||
The final result should look like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module avail
|
||||
|
||||
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
|
||||
bzip2/1.0.6-gcc-6.2.0 libpciaccess/0.13.4-gcc-6.2.0 mpich/3.2-gcc-6.2.0 openblas/0.2.19-gcc-6.2.0 python/2.7.12-gcc-6.2.0
|
||||
cmake/3.5.2-gcc-6.2.0 libsigsegv/2.10-gcc-6.2.0 ncurses/6.0-gcc-6.2.0 openmpi/2.0.1-gcc-6.2.0 sqlite/3.8.5-gcc-6.2.0
|
||||
curl/7.50.3-gcc-6.2.0 libtool/2.4.6-gcc-6.2.0 netlib-lapack/3.6.1-gcc-6.2.0 openssl/1.0.2j-gcc-6.2.0 util-macros/1.19.0-gcc-6.2.0
|
||||
expat/2.2.0-gcc-6.2.0 libxml2/2.9.4-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-netlib-mpich pkg-config/0.29.1-gcc-6.2.0 xz/5.2.2-gcc-6.2.0
|
||||
gcc/6.2.0-gcc-4.8 lz4/131-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-netlib-openmpi py-nose/1.3.7-gcc-6.2.0 zlib/1.2.8-gcc-6.2.0
|
||||
gmp/6.1.1-gcc-6.2.0 lzma/4.32.7-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-openblas-mpich py-numpy/1.11.1-gcc-6.2.0-openblas
|
||||
hwloc/1.11.4-gcc-6.2.0 lzo/2.09-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-openblas-openmpi (D) py-scipy/0.18.1-gcc-6.2.0-openblas
|
||||
libarchive/3.2.1-gcc-6.2.0 m4/1.4.17-gcc-6.2.0 nettle/3.2-gcc-6.2.0 py-setuptools/25.2.0-gcc-6.2.0
|
||||
|
||||
.. note::
|
||||
TCL specific directive
|
||||
The directives ``naming_scheme`` and ``conflict`` are TCL specific and do not apply
|
||||
to the ``dotkit`` or ``lmod`` sections in the configuration file.
|
||||
|
||||
------------------------------------
|
||||
Add custom environment modifications
|
||||
------------------------------------
|
||||
|
||||
At many sites it is customary to set an environment variable in a
|
||||
package's module file that points to the folder in which the package
|
||||
is installed. You can achieve this with Spack by adding an
|
||||
``environment`` directive to the configuration file:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 17-19
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
hash_length: 0
|
||||
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
conflict:
|
||||
- '${PACKAGE}'
|
||||
suffixes:
|
||||
'^openblas': openblas
|
||||
'^netlib-lapack': netlib
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
environment:
|
||||
set:
|
||||
'${PACKAGE}_ROOT': '${PREFIX}'
|
||||
netlib-scalapack:
|
||||
suffixes:
|
||||
'^openmpi': openmpi
|
||||
'^mpich': mpich
|
||||
|
||||
There are many variable tokens available to use in the ``environment``
|
||||
and ``naming_scheme`` directives, such as ``${PACKAGE}``,
|
||||
``${VERSION}``, etc. (see the :meth:`~spack.spec.Spec.format` API
|
||||
documentation for the complete list).
|
||||
|
||||
Regenerating the module files should result in something like:
|
||||
|
||||
.. code-block:: console
|
||||
:emphasize-lines: 14
|
||||
|
||||
$ spack module refresh -y --module-type tcl
|
||||
==> Regenerating tcl module files
|
||||
|
||||
$ module show gcc
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc/6.2.0-gcc-4.8:
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
whatis("gcc @6.2.0 ")
|
||||
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
|
||||
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
|
||||
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
|
||||
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
|
||||
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
|
||||
setenv("GCC_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u")
|
||||
conflict("gcc")
|
||||
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
|
||||
Fortran, and Java.
|
||||
]])
|
||||
|
||||
As you see the ``gcc`` module has the environment variable ``GCC_ROOT`` set.
|
||||
|
||||
Sometimes it's also useful to apply environment modifications selectively and target
|
||||
only certain packages. You can, for instance set the common variables ``CC``, ``CXX``,
|
||||
etc. in the ``gcc`` module file and apply other custom modifications to the
|
||||
``openmpi`` modules as follows:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 20-32
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
hash_length: 0
|
||||
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
conflict:
|
||||
- '${PACKAGE}'
|
||||
suffixes:
|
||||
'^openblas': openblas
|
||||
'^netlib-lapack': netlib
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
environment:
|
||||
set:
|
||||
'${PACKAGE}_ROOT': '${PREFIX}'
|
||||
gcc:
|
||||
environment:
|
||||
set:
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
FC: gfortran
|
||||
F90: gfortran
|
||||
F77: gfortran
|
||||
openmpi:
|
||||
environment:
|
||||
set:
|
||||
SLURM_MPI_TYPE: pmi2
|
||||
OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
|
||||
netlib-scalapack:
|
||||
suffixes:
|
||||
'^openmpi': openmpi
|
||||
'^mpich': mpich
|
||||
|
||||
This time we will be more selective and regenerate only the ``gcc`` and
|
||||
``openmpi`` module files:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module refresh -y --module-type tcl gcc
|
||||
==> Regenerating tcl module files
|
||||
|
||||
$ spack module refresh -y --module-type tcl openmpi
|
||||
==> Regenerating tcl module files
|
||||
|
||||
$ module show gcc
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc/6.2.0-gcc-4.8:
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
whatis("gcc @6.2.0 ")
|
||||
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
|
||||
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
|
||||
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
|
||||
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
|
||||
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
|
||||
setenv("GCC_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u")
|
||||
setenv("CC","gcc")
|
||||
setenv("CXX","g++")
|
||||
setenv("F90","gfortran")
|
||||
setenv("FC","gfortran")
|
||||
setenv("F77","gfortran")
|
||||
conflict("gcc")
|
||||
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
|
||||
Fortran, and Java.
|
||||
]])
|
||||
|
||||
$ module show openmpi
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/openmpi/2.0.1-gcc-6.2.0:
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
whatis("openmpi @2.0.1 ")
|
||||
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/bin")
|
||||
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/")
|
||||
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/lib")
|
||||
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/lib/pkgconfig")
|
||||
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/share/man")
|
||||
setenv("SLURM_MPI_TYPE","pmi2")
|
||||
setenv("OMPI_MCA_BTL_OPENIB_WARN_DEFAULT_GID_PREFIX","0")
|
||||
setenv("OPENMPI_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w")
|
||||
conflict("openmpi")
|
||||
help([[The Open MPI Project is an open source Message Passing Interface
|
||||
implementation that is developed and maintained by a consortium of
|
||||
academic, research, and industry partners. Open MPI is therefore able to
|
||||
combine the expertise, technologies, and resources from all across the
|
||||
High Performance Computing community in order to build the best MPI
|
||||
library available. Open MPI offers advantages for system and software
|
||||
vendors, application developers and computer science researchers.
|
||||
]])
|
||||
|
||||
|
||||
---------------------
|
||||
Autoload dependencies
|
||||
---------------------
|
||||
|
||||
Spack can also generate module files that contain code to load the
|
||||
dependencies automatically. You can, for instance generate python
|
||||
modules that load their dependencies by adding the ``autoload``
|
||||
directive and assigning it the value ``direct``:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 37,38
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
hash_length: 0
|
||||
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
conflict:
|
||||
- '${PACKAGE}'
|
||||
suffixes:
|
||||
'^openblas': openblas
|
||||
'^netlib-lapack': netlib
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
environment:
|
||||
set:
|
||||
'${PACKAGE}_ROOT': '${PREFIX}'
|
||||
gcc:
|
||||
environment:
|
||||
set:
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
FC: gfortran
|
||||
F90: gfortran
|
||||
F77: gfortran
|
||||
openmpi:
|
||||
environment:
|
||||
set:
|
||||
SLURM_MPI_TYPE: pmi2
|
||||
OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
|
||||
netlib-scalapack:
|
||||
suffixes:
|
||||
'^openmpi': openmpi
|
||||
'^mpich': mpich
|
||||
^python:
|
||||
autoload: 'direct'
|
||||
|
||||
and regenerating the module files for every package that depends on ``python``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module refresh -y --module-type tcl ^python
|
||||
==> Regenerating tcl module files
|
||||
|
||||
Now the ``py-scipy`` module will be:
|
||||
|
||||
.. code-block:: tcl
|
||||
|
||||
#%Module1.0
|
||||
## Module file created by spack (https://github.com/LLNL/spack) on 2016-11-02 20:53:21.283547
|
||||
##
|
||||
## py-scipy@0.18.1%gcc@6.2.0 arch=linux-Ubuntu14-x86_64-e6uljfi
|
||||
##
|
||||
module-whatis "py-scipy @0.18.1"
|
||||
|
||||
proc ModulesHelp { } {
|
||||
puts stderr "SciPy (pronounced "Sigh Pie") is a Scientific Library for Python. It"
|
||||
puts stderr "provides many user-friendly and efficient numerical routines such as"
|
||||
puts stderr "routines for numerical integration and optimization."
|
||||
}
|
||||
|
||||
if ![ is-loaded python/2.7.12-gcc-6.2.0 ] {
|
||||
puts stderr "Autoloading python/2.7.12-gcc-6.2.0"
|
||||
module load python/2.7.12-gcc-6.2.0
|
||||
}
|
||||
|
||||
if ![ is-loaded openblas/0.2.19-gcc-6.2.0 ] {
|
||||
puts stderr "Autoloading openblas/0.2.19-gcc-6.2.0"
|
||||
module load openblas/0.2.19-gcc-6.2.0
|
||||
}
|
||||
|
||||
if ![ is-loaded py-numpy/1.11.1-gcc-6.2.0-openblas ] {
|
||||
puts stderr "Autoloading py-numpy/1.11.1-gcc-6.2.0-openblas"
|
||||
module load py-numpy/1.11.1-gcc-6.2.0-openblas
|
||||
}
|
||||
|
||||
prepend-path CMAKE_PREFIX_PATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/"
|
||||
prepend-path LD_LIBRARY_PATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/lib"
|
||||
prepend-path PYTHONPATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/lib/python2.7/site-packages"
|
||||
setenv PY_SCIPY_ROOT "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh"
|
||||
conflict py-scipy
|
||||
|
||||
and will contain code to autoload all the dependencies:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module load py-scipy
|
||||
Autoloading python/2.7.12-gcc-6.2.0
|
||||
Autoloading openblas/0.2.19-gcc-6.2.0
|
||||
Autoloading py-numpy/1.11.1-gcc-6.2.0-openblas
|
||||
|
||||
-----------------------------
|
||||
Lua hierarchical module files
|
||||
-----------------------------
|
||||
|
||||
In the final part of this tutorial you will modify ``modules.yaml`` to generate
|
||||
Lua hierarchical module files. You will see that most of the directives used before
|
||||
are also valid in the ``lmod`` context.
|
||||
|
||||
^^^^^^^^^^^^^^^^^
|
||||
Core/Compiler/MPI
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. warning::
|
||||
Only LMod supports Lua hierarchical module files
|
||||
For this part of the tutorial you need to be using LMod to
|
||||
manage your environment.
|
||||
|
||||
The most common hierarchy is the so called ``Core/Compiler/MPI``. To have an idea
|
||||
how a hierarchy is organized you may refer to the
|
||||
`Lmod guide <https://www.tacc.utexas.edu/research-development/tacc-projects/lmod/user-guide/module-hierarchy>`_.
|
||||
Since ``lmod`` is not enabled by default, you need to add it to the list of
|
||||
enabled module file generators. The other things you need to do are:
|
||||
|
||||
- change the ``tcl`` tag to ``lmod``
|
||||
- remove ``tcl`` specific directives (``naming_scheme`` and ``conflict``)
|
||||
- set which compilers are considered ``core``
|
||||
- remove the ``mpi`` related suffixes (as they will be substituted by hierarchies)
|
||||
|
||||
After modifications the configuration file will be:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 2-6
|
||||
|
||||
modules:
|
||||
enable::
|
||||
- lmod
|
||||
lmod:
|
||||
core_compilers:
|
||||
- 'gcc@4.8'
|
||||
hash_length: 0
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
all:
|
||||
suffixes:
|
||||
'^openblas': openblas
|
||||
'^netlib-lapack': netlib
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
environment:
|
||||
set:
|
||||
'${PACKAGE}_ROOT': '${PREFIX}'
|
||||
gcc:
|
||||
environment:
|
||||
set:
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
FC: gfortran
|
||||
F90: gfortran
|
||||
F77: gfortran
|
||||
openmpi:
|
||||
environment:
|
||||
set:
|
||||
SLURM_MPI_TYPE: pmi2
|
||||
OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
|
||||
|
||||
|
||||
.. note::
|
||||
The double colon
|
||||
The double colon after ``enable`` is intentional and it serves the
|
||||
purpose of overriding the default list of enabled generators so
|
||||
that only ``lmod`` will be active (see :ref:`the reference
|
||||
manual <config-overrides>` for a more detailed explanation of
|
||||
config scopes).
|
||||
|
||||
The directive ``core_compilers`` accepts a list of compilers : everything built
|
||||
using these compilers will create a module in the ``Core`` part of the hierarchy. It is
|
||||
common practice to put the OS provided compilers in the list and only build common utilities
|
||||
and other compilers in ``Core``.
|
||||
|
||||
If you regenerate the module files
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack module refresh --module-type lmod --delete-tree -y
|
||||
|
||||
and update ``MODULEPATH`` to point to the ``Core`` folder, and
|
||||
list the available modules, you'll see:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module unuse ~/spack/share/spack/modules/linux-Ubuntu14-x86_64
|
||||
$ module use ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core
|
||||
$ module avail
|
||||
|
||||
----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
|
||||
gcc/6.2.0
|
||||
|
||||
The only module visible now is ``gcc``. Loading that you will make
|
||||
visible the ``Compiler`` part of the software stack that was built with ``gcc/6.2.0``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module load gcc
|
||||
$ module avail
|
||||
|
||||
-------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
|
||||
binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j py-scipy/0.18.1-openblas util-macros/1.19.0
|
||||
bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 py-setuptools/25.2.0 xz/5.2.2
|
||||
bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 openblas/0.2.19 py-nose/1.3.7 python/2.7.12 zlib/1.2.8
|
||||
cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 py-numpy/1.11.1-openblas sqlite/3.8.5
|
||||
|
||||
----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
|
||||
gcc/6.2.0 (L)
|
||||
|
||||
The same holds true for the ``MPI`` part of the stack, that you can enable by loading
|
||||
either ``mpich`` or ``openmpi``. The nice features of LMod will become evident
|
||||
once you'll try switching among different stacks:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module load mpich
|
||||
$ module avail
|
||||
|
||||
----------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/mpich/3.2-5n5xoep/gcc/6.2.0 ------------------------------------------------------------
|
||||
netlib-scalapack/2.0.2-netlib netlib-scalapack/2.0.2-openblas (D)
|
||||
|
||||
-------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
|
||||
binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j py-scipy/0.18.1-openblas util-macros/1.19.0
|
||||
bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 py-setuptools/25.2.0 xz/5.2.2
|
||||
bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 (L) openblas/0.2.19 py-nose/1.3.7 python/2.7.12 zlib/1.2.8
|
||||
cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 py-numpy/1.11.1-openblas sqlite/3.8.5
|
||||
|
||||
----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
|
||||
gcc/6.2.0 (L)
|
||||
|
||||
$ module load openblas netlib-scalapack/2.0.2-openblas
|
||||
$ module list
|
||||
|
||||
Currently Loaded Modules:
|
||||
1) gcc/6.2.0 2) mpich/3.2 3) openblas/0.2.19 4) netlib-scalapack/2.0.2-openblas
|
||||
|
||||
$ module load openmpi
|
||||
|
||||
Lmod is automatically replacing "mpich/3.2" with "openmpi/2.0.1"
|
||||
|
||||
|
||||
Due to MODULEPATH changes the following have been reloaded:
|
||||
1) netlib-scalapack/2.0.2-openblas
|
||||
|
||||
This layout is already a great improvement over the usual non-hierarchical layout,
|
||||
but it still has an asymmetry: ``LAPACK`` providers are semantically the same as ``MPI``
|
||||
providers, but they are still not part of the hierarchy. We'll see a possible solution
|
||||
next.
|
||||
|
||||
.. Activate lmod and turn the previous modifications into lmod:
|
||||
Add core compilers
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Extend the hierarchy to other virtual providers
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. warning::
|
||||
This is an experimental feature
|
||||
Having a hierarchy deeper than ``Core``/``Compiler``/``MPI`` is an experimental
|
||||
feature, still not fully supported by ``module spider``,
|
||||
see `here <https://github.com/TACC/Lmod/issues/114>`_. Furthermore its use
|
||||
with hierarchies more complex than ``Core``/``Compiler``/``MPI``/``LAPACK``
|
||||
has not been thoroughly tested in production environments.
|
||||
|
||||
Spack permits you to generate Lua hierarchical module files where users
|
||||
can add an arbitrary list of virtual providers to the triplet
|
||||
``Core``/``Compiler``/``MPI``. A configuration file like:
|
||||
|
||||
.. code-block:: yaml
|
||||
:emphasize-lines: 7,8
|
||||
|
||||
modules:
|
||||
enable::
|
||||
- lmod
|
||||
lmod:
|
||||
core_compilers:
|
||||
- 'gcc@4.8'
|
||||
hierarchical_scheme:
|
||||
- lapack
|
||||
hash_length: 0
|
||||
whitelist:
|
||||
- gcc
|
||||
blacklist:
|
||||
- '%gcc@4.8'
|
||||
- readline
|
||||
all:
|
||||
filter:
|
||||
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
|
||||
environment:
|
||||
set:
|
||||
'${PACKAGE}_ROOT': '${PREFIX}'
|
||||
gcc:
|
||||
environment:
|
||||
set:
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
FC: gfortran
|
||||
F90: gfortran
|
||||
F77: gfortran
|
||||
openmpi:
|
||||
environment:
|
||||
set:
|
||||
SLURM_MPI_TYPE: pmi2
|
||||
OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
|
||||
|
||||
will add ``lapack`` providers to the mix. After the usual regeneration of module files:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module purge
|
||||
$ spack module refresh --module-type lmod --delete-tree -y
|
||||
==> Regenerating lmod module files
|
||||
|
||||
you will have something like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module load gcc
|
||||
$ module load openblas
|
||||
$ module load openmpi
|
||||
$ module avail
|
||||
|
||||
--------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/openblas/0.2.19-js33umc/openmpi/2.0.1-s3qbtby/gcc/6.2.0 ----------------------------------------------
|
||||
netlib-scalapack/2.0.2
|
||||
|
||||
-------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/openblas/0.2.19-js33umc/gcc/6.2.0 ---------------------------------------------------------
|
||||
py-numpy/1.11.1 py-scipy/0.18.1
|
||||
|
||||
-------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
|
||||
binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j python/2.7.12 zlib/1.2.8
|
||||
bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 sqlite/3.8.5
|
||||
bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 openblas/0.2.19 (L) py-nose/1.3.7 util-macros/1.19.0
|
||||
cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 (L) py-setuptools/25.2.0 xz/5.2.2
|
||||
|
||||
----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
|
||||
gcc/6.2.0 (L)
|
||||
|
||||
Now both the ``MPI`` and the ``LAPACK`` providers are handled by LMod as hierarchies:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ module load py-numpy netlib-scalapack
|
||||
$ module load mpich
|
||||
|
||||
Lmod is automatically replacing "openmpi/2.0.1" with "mpich/3.2"
|
||||
|
||||
|
||||
Due to MODULEPATH changes the following have been reloaded:
|
||||
1) netlib-scalapack/2.0.2
|
||||
|
||||
$ module load netlib-lapack
|
||||
|
||||
Lmod is automatically replacing "openblas/0.2.19" with "netlib-lapack/3.6.1"
|
||||
|
||||
|
||||
Inactive Modules:
|
||||
1) py-numpy
|
||||
|
||||
Due to MODULEPATH changes the following have been reloaded:
|
||||
1) netlib-scalapack/2.0.2
|
||||
|
||||
making the use of tags to differentiate them unnecessary.
|
||||
Note that because we only compiled ``py-numpy`` with ``openblas`` the module
|
||||
is made inactive when we switch the ``LAPACK`` provider. The user
|
||||
environment will now be consistent by design!
|
||||
462
lib/spack/docs/tutorial_sc16_packaging.rst
Normal file
462
lib/spack/docs/tutorial_sc16_packaging.rst
Normal file
@@ -0,0 +1,462 @@
|
||||
.. _packaging-tutorial:
|
||||
|
||||
=========================
|
||||
Package Creation Tutorial
|
||||
=========================
|
||||
|
||||
This tutorial will walk you through the steps behind building a simple
|
||||
package installation script. We'll focus building an mpileaks package,
|
||||
which is a MPI debugging tool. By creating a package file we're
|
||||
essentially giving Spack a recipe for how to build a particular piece of
|
||||
software. We're describing some of the software's dependencies, where to
|
||||
find the package, what commands and options are used to build the package
|
||||
from source, and more. Once we've specified a package's recipe, we can
|
||||
ask Spack to build that package in many different ways.
|
||||
|
||||
This tutorial assumes you have a basic familiarity with some of the Spack
|
||||
commands, and that you have a working version of Spack installed. If
|
||||
not, we suggest looking at Spack's *Getting Started* guide. This
|
||||
tutorial also assumes you have at least a beginner's-level familiarity
|
||||
with Python.
|
||||
|
||||
Also note that this document is a tutorial. It can help you get started
|
||||
with packaging, but is not intended to be complete. See Spack's
|
||||
:ref:`packaging-guide` for more complete documentation on this topic.
|
||||
|
||||
---------------
|
||||
Getting Started
|
||||
---------------
|
||||
|
||||
A few things before we get started:
|
||||
|
||||
- We'll refer to the Spack installation location via the environment
|
||||
variable ``SPACK_ROOT``. You should point ``SPACK_ROOT`` at wherever
|
||||
you have Spack installed.
|
||||
- Add ``$SPACK_ROOT/bin`` to your ``PATH`` before you start.
|
||||
- Make sure your ``EDITOR`` environment variable is set to some text
|
||||
editor you like.
|
||||
- We'll be writing Python code as part of this tutorial. You can find
|
||||
successive versions of the Python code in
|
||||
``$SPACK_ROOT/lib/spack/docs/tutorial/examples``.
|
||||
|
||||
-------------------------
|
||||
Creating the Package File
|
||||
-------------------------
|
||||
|
||||
Spack comes with a handy command to create a new package: ``spack create``
|
||||
|
||||
This command is given the location of a package's source code, downloads
|
||||
the code, and sets up some basic packaging infrastructure for you. The
|
||||
mpileaks source code can be found on GitHub, and here's what happens when
|
||||
we run ``spack create`` on it:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack create -f https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
|
||||
==> This looks like a URL for mpileaks version 1.0
|
||||
==> Creating template for package mpileaks
|
||||
==> Downloading...
|
||||
==> Fetching https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
|
||||
###################################################################################### 100.0%
|
||||
|
||||
And Spack should spawn a text editor with this file:
|
||||
|
||||
.. literalinclude:: tutorial/examples/0.package.py
|
||||
:language: python
|
||||
|
||||
Spack has created this file in
|
||||
``$SPACK_ROOT/var/spack/repos/builtin/packages/mpileaks/package.py``. Take a
|
||||
moment to look over the file. There's a few placeholders that Spack has
|
||||
created, which we'll fill in as part of this tutorial:
|
||||
|
||||
- We'll document some information about this package in the comments.
|
||||
- We'll fill in the dependency list for this package.
|
||||
- We'll fill in some of the configuration arguments needed to build this
|
||||
package.
|
||||
|
||||
For the moment, exit your editor and let's see what happens when we try
|
||||
to build this package:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install mpileaks
|
||||
==> Installing mpileaks
|
||||
==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
|
||||
==> Staging archive: /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-hufwhwpq5benv3sslie6ryflk5s6nm35/mpileaks-1.0.tar.gz
|
||||
==> Created stage in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-hufwhwpq5benv3sslie6ryflk5s6nm35
|
||||
==> Ran patch() for mpileaks
|
||||
==> Building mpileaks [AutotoolsPackage]
|
||||
==> Executing phase : 'autoreconf'
|
||||
==> Executing phase : 'configure'
|
||||
==> Error: ProcessError: Command exited with status 1:
|
||||
'./configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-hufwhwpq5benv3sslie6ryflk5s6nm35'
|
||||
/usr/workspace/wsa/legendre/spack/lib/spack/spack/build_systems/autotools.py:150, in configure:
|
||||
145 def configure(self, spec, prefix):
|
||||
146 """Runs configure with the arguments specified in `configure_args`
|
||||
147 and an appropriately set prefix
|
||||
148 """
|
||||
149 options = ['--prefix={0}'.format(prefix)] + self.configure_args()
|
||||
>> 150 inspect.getmodule(self).configure(*options)
|
||||
|
||||
See build log for details:
|
||||
/tmp/legendre/spack-stage/spack-stage-8HVzqu/mpileaks-1.0/spack-build.out
|
||||
|
||||
This obviously didn't work; we need to fill in the package-specific
|
||||
information. Specifically, Spack didn't try to build any of mpileaks'
|
||||
dependencies, nor did it use the proper configure arguments. Let's start
|
||||
fixing things
|
||||
|
||||
---------------------
|
||||
Package Documentation
|
||||
---------------------
|
||||
|
||||
We can bring the ``package.py`` file back into our ``EDITOR`` with the
|
||||
``spack edit`` command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack edit mpileaks
|
||||
|
||||
Let's remove some of the ``FIXME`` comments, and add links to the mpileaks
|
||||
homepage and document what mpileaks does. I'm also going to cut out the
|
||||
Copyright clause at this point to keep this tutorial document shorter,
|
||||
but you shouldn't do that normally. The results of these changes can be
|
||||
found in ``$SPACK_ROOT/lib/spack/docs/tutorial/examples/1.package.py``
|
||||
and are below. Make these changes to your ``package.py``:
|
||||
|
||||
.. literalinclude:: tutorial/examples/1.package.py
|
||||
:lines: 25-
|
||||
:language: python
|
||||
|
||||
We've filled in the comment that describes what this package does and
|
||||
added a link to the web site. That won't help us build yet, but it will
|
||||
allow Spack to provide some documentation on this package to other users:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack info mpileaks
|
||||
AutotoolsPackage: mpileaks
|
||||
Homepage: https://github.com/hpc/mpileaks
|
||||
|
||||
Safe versions:
|
||||
1.0 https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
|
||||
|
||||
Variants:
|
||||
None
|
||||
|
||||
Installation Phases:
|
||||
autoreconf configure build install
|
||||
|
||||
Build Dependencies:
|
||||
None
|
||||
|
||||
Link Dependencies:
|
||||
None
|
||||
|
||||
Run Dependencies:
|
||||
None
|
||||
|
||||
Virtual Packages:
|
||||
None
|
||||
|
||||
Description:
|
||||
Tool to detect and report MPI objects like MPI_Requests and
|
||||
MPI_Datatypes
|
||||
|
||||
As we fill in more information about this package the ``spack info`` command
|
||||
will become more informative. Now let's start making this package build.
|
||||
|
||||
------------
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
The mpileaks packages depends on three other package: ``MPI``,
|
||||
``adept-utils``, and ``callpath``. Let's add those via the
|
||||
``depends_on`` command in our ``package.py`` (this version is in
|
||||
``$SPACK_ROOT/lib/spack/docs/tutorial/examples/2.package.py``):
|
||||
|
||||
.. literalinclude:: tutorial/examples/2.package.py
|
||||
:lines: 25-
|
||||
:language: python
|
||||
|
||||
Now when we go to build mpileaks, Spack will fetch and build these
|
||||
dependencies before building mpileaks. Note that the mpi dependency is a
|
||||
different kind of beast than the adept-utils and callpath dependencies;
|
||||
there is no mpi package available in Spack. Instead mpi is a virtual
|
||||
dependency. Spack may satisfy that dependency by installing packages
|
||||
such as ``openmpi`` or ``mvapich``. See the :ref:`packaging-guide` for more
|
||||
information on virtual dependencies.
|
||||
|
||||
Now when we try to install this package a lot more happens:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install mpileaks
|
||||
==> Installing mpileaks
|
||||
==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
|
||||
==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
|
||||
==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
|
||||
==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
|
||||
==> Already staged mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
|
||||
==> Already patched mpileaks
|
||||
==> Building mpileaks [AutotoolsPackage]
|
||||
==> Executing phase : 'autoreconf'
|
||||
==> Executing phase : 'configure'
|
||||
==> Error: ProcessError: Command exited with status 1:
|
||||
'./configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk'
|
||||
/usr/workspace/wsa/legendre/spack/lib/spack/spack/build_systems/autotools.py:150, in configure:
|
||||
145 def configure(self, spec, prefix):
|
||||
146 """Runs configure with the arguments specified in `configure_args`
|
||||
147 and an appropriately set prefix
|
||||
148 """
|
||||
149 options = ['--prefix={0}'.format(prefix)] + self.configure_args()
|
||||
>> 150 inspect.getmodule(self).configure(*options)
|
||||
|
||||
See build log for details:
|
||||
/tmp/legendre/spack-stage/spack-stage-7V5yyk/mpileaks-1.0/spack-build.out
|
||||
|
||||
Note that this command may take a while to run and produce more output if
|
||||
you don't have an MPI already installed or configured in Spack.
|
||||
|
||||
Now Spack has identified and made sure all of our dependencies have been
|
||||
built. It found the ``openmpi`` package that will satisfy our ``mpi``
|
||||
dependency, and the ``callpath`` and ``adept-utils`` package to satisfy our
|
||||
concrete dependencies.
|
||||
|
||||
------------------------
|
||||
Debugging Package Builds
|
||||
------------------------
|
||||
|
||||
Our ``mpileaks`` package is still not building. It may be obvious to
|
||||
many of you that we're still missing the configure options. But let's
|
||||
pretend we're not all intelligent developers and use this opportunity
|
||||
spend some time debugging. We a few options that can tell us about
|
||||
what's going wrong:
|
||||
|
||||
As per the error message, Spack has given us a ``spack-build.out`` debug log:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
==> './configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk'
|
||||
checking metadata... no
|
||||
checking installation directory variables... yes
|
||||
checking for a BSD-compatible install... /usr/bin/install -c
|
||||
checking whether build environment is sane... yes
|
||||
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
|
||||
checking for gawk... gawk
|
||||
checking whether make sets $(MAKE)... yes
|
||||
checking for gcc... /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc
|
||||
checking for C compiler default output file name... a.out
|
||||
checking whether the C compiler works... yes
|
||||
checking whether we are cross compiling... no
|
||||
checking for suffix of executables...
|
||||
checking for suffix of object files... o
|
||||
checking whether we are using the GNU C compiler... yes
|
||||
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc accepts -g... yes
|
||||
checking for /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
|
||||
checking for style of include used by make... GNU
|
||||
checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc... gcc3
|
||||
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
|
||||
checking whether we are using the GNU C++ compiler... yes
|
||||
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++ accepts -g... yes
|
||||
checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++... gcc3
|
||||
checking for /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc... /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc
|
||||
Checking whether /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc responds to '-showme:compile'... yes
|
||||
configure: error: unable to locate ``adept-utils`` installation
|
||||
|
||||
This gives us the output from the build, and it's fairly obvious that
|
||||
mpileaks isn't finding its ``adept-utils`` package. Spack has
|
||||
automatically added the include and library directories of
|
||||
``adept-utils`` to the compiler's search path, but some packages like
|
||||
mpileaks can sometimes be picky and still want things spelled out on
|
||||
their command line. But let's continue to pretend we're not brilliant
|
||||
developers, and explore some other debugging paths:
|
||||
|
||||
We can also enter the build area and try to manually run the build:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack env mpileaks bash
|
||||
$ spack cd mpileaks
|
||||
|
||||
The ``spack env`` command spawned a new shell that contains the same
|
||||
environment that Spack used to build the mpileaks package (you can
|
||||
substitute bash for your favorite shell). The ``spack cd`` command
|
||||
changed our working dirctory to the last attempted build for mpileaks.
|
||||
From here we can manually re-run the build:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./configure
|
||||
checking metadata... no
|
||||
checking installation directory variables... yes
|
||||
checking for a BSD-compatible install... /usr/bin/install -c
|
||||
checking whether build environment is sane... yes
|
||||
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
|
||||
checking for gawk... gawk
|
||||
checking whether make sets $(MAKE)... yes
|
||||
checking for gcc... /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc
|
||||
checking for C compiler default output file name... a.out
|
||||
checking whether the C compiler works... yes
|
||||
checking whether we are cross compiling... no
|
||||
checking for suffix of executables...
|
||||
checking for suffix of object files... o
|
||||
checking whether we are using the GNU C compiler... yes
|
||||
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc accepts -g... yes
|
||||
checking for /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
|
||||
checking for style of include used by make... GNU
|
||||
checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc... gcc3
|
||||
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
|
||||
checking whether we are using the GNU C++ compiler... yes
|
||||
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++ accepts -g... yes
|
||||
checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++... gcc3
|
||||
checking for /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc... /usr/workspace/wsa /legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc
|
||||
Checking whether /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc responds to '-showme:compile'... yes
|
||||
configure: error: unable to locate adept-utils installation
|
||||
|
||||
We're seeing the same error, but now we're in a shell where we can run
|
||||
the command ourselves and debug as needed. We could, for example, run
|
||||
``./configure --help`` to see what options we can use to specify
|
||||
dependencies.
|
||||
|
||||
We can use the ``exit`` command to leave the shell spawned by ``spack
|
||||
env``.
|
||||
|
||||
------------------------------
|
||||
Specifying Configure Arguments
|
||||
------------------------------
|
||||
|
||||
Let's add the configure arguments to the mpileaks' ``package.py``. This
|
||||
version can be found in
|
||||
``$SPACK_ROOT/lib/spack/docs/tutorial/examples/3.package.py``:
|
||||
|
||||
.. literalinclude:: tutorial/examples/3.package.py
|
||||
:lines: 25-
|
||||
:language: python
|
||||
|
||||
This is all we need for working mpileaks! If we install now we'll see:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install mpileaks
|
||||
spack install mpileaks
|
||||
==> Installing mpileaks
|
||||
==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
|
||||
==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
|
||||
==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
|
||||
==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
|
||||
==> Already staged mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
|
||||
==> Already patched mpileaks
|
||||
==> Building mpileaks [AutotoolsPackage]
|
||||
==> Executing phase : 'autoreconf'
|
||||
==> Executing phase : 'configure'
|
||||
==> Executing phase : 'build'
|
||||
==> Executing phase : 'install'
|
||||
==> Successfully installed mpileaks
|
||||
Fetch: 0.00s. Build: 14.08s. Total: 14.08s.
|
||||
[+] /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
|
||||
|
||||
We took a few shortcuts for this package that are worth highlighting.
|
||||
Spack automatically detected that mpileaks was an Autotools-based package
|
||||
when we ran ``spack create``. If this had been a CMake-based package we
|
||||
would have been filling in a ``cmake_args`` function instead of
|
||||
``configure_args``. If Spack hadn't been able to detect the build
|
||||
system, we'd be filling in a generic install method that would manually
|
||||
be calling build commands, such as is found in the ``zlib`` package:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def install(self, spec, prefix):
|
||||
configure('--prefix={0}'.format(prefix))
|
||||
make()
|
||||
make('install')
|
||||
|
||||
--------
|
||||
Variants
|
||||
--------
|
||||
|
||||
We have a successful mpileaks build, but let's take some time to improve
|
||||
it. ``mpileaks`` has a build-time option to truncate parts of the stack
|
||||
that it walks. Let's add a variant to allow users to set this when they
|
||||
build in Spack.
|
||||
|
||||
To do this, we'll add a variant to our package, as per the following (see
|
||||
``$SPACK_ROOT/lib/spack/docs/tutorial/examples/4.package.py``):
|
||||
|
||||
.. literalinclude:: tutorial/examples/4.package.py
|
||||
:lines: 25-
|
||||
:language: python
|
||||
|
||||
We've added the variant ``stackstart``, and given it a default value of
|
||||
``0``. If we install now we can see the stackstart variant added to the
|
||||
configure line (output truncated for length):
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install --verbose mpileaks stackstart=4
|
||||
==> Installing mpileaks
|
||||
==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
|
||||
==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
|
||||
==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
|
||||
==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
|
||||
==> Staging archive: /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7/mpileaks-1.0.tar.gz
|
||||
==> Created stage in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7
|
||||
==> Ran patch() for mpileaks
|
||||
==> Building mpileaks [AutotoolsPackage]
|
||||
==> Executing phase : 'autoreconf'
|
||||
==> Executing phase : 'configure'
|
||||
==> './configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7' '--with-adept-utils=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz' '--with-callpath=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube' '--with-stack-start-c=4' '--with-stack-start-fortran=4'
|
||||
|
||||
---------------
|
||||
The Spec Object
|
||||
---------------
|
||||
|
||||
This tutorial has glossed over a few important features, which weren't
|
||||
too relevant for mpileaks but may be useful for other packages. There
|
||||
were several places we references the ``self.spec`` object. This is a
|
||||
powerful class for querying information about what we're building. For
|
||||
example, you could use the spec to query information about how a
|
||||
package's dependencies were built, or what compiler was being used, or
|
||||
what version of a package is being installed. Full documentation can be
|
||||
found in the :ref:`packaging-guide`, but here's some quick snippets with
|
||||
common queries:
|
||||
|
||||
- Am I building ``mpileaks`` version ``1.1`` or greater?
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
if self.spec.satisfies('@1.1:'):
|
||||
# Do things needed for 1.1+
|
||||
|
||||
- Is ``openmpi`` the MPI I'm building with?
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
if self.spec['mpi'].name == 'openmpi':
|
||||
# Do openmpi things
|
||||
|
||||
- Am I building with ``gcc`` version less than ``5.0.0``:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
if self.spec.satisfies('%gcc@:5.0.0'):
|
||||
# Add arguments specific to gcc's earlier than 5.0.0
|
||||
|
||||
- Am I built with the ``debug`` variant:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
if self.spec.satisfies('+debug'):
|
||||
# Add -g option to configure flags
|
||||
|
||||
- Is my ``dyninst`` dependency greater than version ``8.0``?
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
if self.spec['dyninst'].satisfies('@8.0:'):
|
||||
# Use newest dyninst options
|
||||
|
||||
More examples can be found in the thousands of packages already added to
|
||||
Spack in ``$SPACK_ROOT/var/spack/repos/builtin/packages``.
|
||||
|
||||
Good Luck!
|
||||
1255
lib/spack/docs/tutorial_sc16_spack_basics.rst
Normal file
1255
lib/spack/docs/tutorial_sc16_spack_basics.rst
Normal file
File diff suppressed because it is too large
Load Diff
1198
lib/spack/docs/workflows.rst
Normal file
1198
lib/spack/docs/workflows.rst
Normal file
File diff suppressed because it is too large
Load Diff
456
lib/spack/env/cc
vendored
456
lib/spack/env/cc
vendored
@@ -1,140 +1,362 @@
|
||||
#!/usr/bin/env python
|
||||
import sys
|
||||
if not sys.version_info[:2] >= (2,7):
|
||||
sys.exit("Spack requires Python 2.7. Version was %s." % sys.version_info)
|
||||
#!/bin/bash
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
#
|
||||
# Spack compiler wrapper script.
|
||||
#
|
||||
# Compiler commands go through this compiler wrapper in Spack builds.
|
||||
# The compiler wrapper is a thin layer around the standard compilers.
|
||||
# It enables several key pieces of functionality:
|
||||
#
|
||||
# 1. It allows Spack to swap compilers into and out of builds easily.
|
||||
# 2. It adds several options to the compile line so that spack
|
||||
# packages can find their dependencies at build time and run time:
|
||||
# -I arguments for dependency /include directories.
|
||||
# -L arguments for dependency /lib directories.
|
||||
# -Wl,-rpath arguments for dependency /lib directories.
|
||||
#
|
||||
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import argparse
|
||||
from contextlib import closing
|
||||
# This is an array of environment variables that need to be set before
|
||||
# the script runs. They are set by routines in spack.build_environment
|
||||
# as part of spack.package.Package.do_install().
|
||||
parameters=(
|
||||
SPACK_PREFIX
|
||||
SPACK_ENV_PATH
|
||||
SPACK_DEBUG_LOG_DIR
|
||||
SPACK_COMPILER_SPEC
|
||||
SPACK_CC_RPATH_ARG
|
||||
SPACK_CXX_RPATH_ARG
|
||||
SPACK_F77_RPATH_ARG
|
||||
SPACK_FC_RPATH_ARG
|
||||
SPACK_SHORT_SPEC
|
||||
)
|
||||
|
||||
# Import spack parameters through the build environment.
|
||||
spack_lib = os.environ.get("SPACK_LIB")
|
||||
if not spack_lib:
|
||||
print "Spack compiler must be run from spack!"
|
||||
sys.exit(1)
|
||||
# The compiler input variables are checked for sanity later:
|
||||
# SPACK_CC, SPACK_CXX, SPACK_F77, SPACK_FC
|
||||
# The default compiler flags are passed from these variables:
|
||||
# SPACK_CFLAGS, SPACK_CXXFLAGS, SPACK_FCFLAGS, SPACK_FFLAGS,
|
||||
# SPACK_LDFLAGS, SPACK_LDLIBS
|
||||
# Debug env var is optional; set to true for debug logging:
|
||||
# SPACK_DEBUG
|
||||
# Test command is used to unit test the compiler script.
|
||||
# SPACK_TEST_COMMAND
|
||||
# Dependencies can be empty for pkgs with no deps:
|
||||
# SPACK_DEPENDENCIES
|
||||
|
||||
# Grab a minimal set of spack packages
|
||||
sys.path.append(spack_lib)
|
||||
from spack.compilation import *
|
||||
import llnl.util.tty as tty
|
||||
# die()
|
||||
# Prints a message and exits with error 1.
|
||||
function die {
|
||||
echo "$@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
spack_prefix = get_env_var("SPACK_PREFIX")
|
||||
spack_debug = get_env_flag("SPACK_DEBUG")
|
||||
spack_deps = get_path("SPACK_DEPENDENCIES")
|
||||
spack_env_path = get_path("SPACK_ENV_PATH")
|
||||
spack_debug_log_dir = get_env_var("SPACK_DEBUG_LOG_DIR")
|
||||
spack_spec = get_env_var("SPACK_SPEC")
|
||||
for param in ${parameters[@]}; do
|
||||
if [[ -z ${!param} ]]; then
|
||||
die "Spack compiler must be run from Spack! Input '$param' is missing."
|
||||
fi
|
||||
done
|
||||
|
||||
compiler_spec = get_env_var("SPACK_COMPILER_SPEC")
|
||||
spack_cc = get_env_var("SPACK_CC", required=False)
|
||||
spack_cxx = get_env_var("SPACK_CXX", required=False)
|
||||
spack_f77 = get_env_var("SPACK_F77", required=False)
|
||||
spack_fc = get_env_var("SPACK_FC", required=False)
|
||||
# Figure out the type of compiler, the language, and the mode so that
|
||||
# the compiler script knows what to do.
|
||||
#
|
||||
# Possible languages are C, C++, Fortran 77, and Fortran 90.
|
||||
# 'command' is set based on the input command to $SPACK_[CC|CXX|F77|F90]
|
||||
#
|
||||
# 'mode' is set to one of:
|
||||
# vcheck version check
|
||||
# cpp preprocess
|
||||
# cc compile
|
||||
# as assemble
|
||||
# ld link
|
||||
# ccld compile & link
|
||||
|
||||
# Figure out what type of operation we're doing
|
||||
command = os.path.basename(sys.argv[0])
|
||||
command=$(basename "$0")
|
||||
comp="CC"
|
||||
case "$command" in
|
||||
cpp)
|
||||
mode=cpp
|
||||
;;
|
||||
cc|c89|c99|gcc|clang|icc|pgcc|xlc)
|
||||
command="$SPACK_CC"
|
||||
language="C"
|
||||
comp="CC"
|
||||
lang_flags=C
|
||||
;;
|
||||
c++|CC|g++|clang++|icpc|pgc++|xlc++)
|
||||
command="$SPACK_CXX"
|
||||
language="C++"
|
||||
comp="CXX"
|
||||
lang_flags=CXX
|
||||
;;
|
||||
ftn|f90|fc|f95|gfortran|ifort|pgfortran|xlf90|nagfor)
|
||||
command="$SPACK_FC"
|
||||
language="Fortran 90"
|
||||
comp="FC"
|
||||
lang_flags=F
|
||||
;;
|
||||
f77|gfortran|ifort|pgfortran|xlf|nagfor|ftn)
|
||||
command="$SPACK_F77"
|
||||
language="Fortran 77"
|
||||
comp="F77"
|
||||
lang_flags=F
|
||||
;;
|
||||
ld)
|
||||
mode=ld
|
||||
;;
|
||||
*)
|
||||
die "Unkown compiler: $command"
|
||||
;;
|
||||
esac
|
||||
|
||||
cpp, cc, ccld, ld, version_check = range(5)
|
||||
# If any of the arguments below are present, then the mode is vcheck.
|
||||
# In vcheck mode, nothing is added in terms of extra search paths or
|
||||
# libraries.
|
||||
if [[ -z $mode ]]; then
|
||||
for arg in "$@"; do
|
||||
if [[ $arg == -v || $arg == -V || $arg == --version || $arg == -dumpversion ]]; then
|
||||
mode=vcheck
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if command == 'cpp':
|
||||
mode = cpp
|
||||
elif command == 'ld':
|
||||
mode = ld
|
||||
elif '-E' in sys.argv:
|
||||
mode = cpp
|
||||
elif '-c' in sys.argv:
|
||||
mode = cc
|
||||
else:
|
||||
mode = ccld
|
||||
# Finish setting up the mode.
|
||||
if [[ -z $mode ]]; then
|
||||
mode=ccld
|
||||
for arg in "$@"; do
|
||||
if [[ $arg == -E ]]; then
|
||||
mode=cpp
|
||||
break
|
||||
elif [[ $arg == -S ]]; then
|
||||
mode=as
|
||||
break
|
||||
elif [[ $arg == -c ]]; then
|
||||
mode=cc
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Set up rpath variable according to language.
|
||||
eval rpath=\$SPACK_${comp}_RPATH_ARG
|
||||
|
||||
if command in ('cc', 'gcc', 'c89', 'c99', 'clang'):
|
||||
command = spack_cc
|
||||
language = "C"
|
||||
elif command in ('c++', 'CC', 'g++', 'clang++'):
|
||||
command = spack_cxx
|
||||
language = "C++"
|
||||
elif command in ('f77'):
|
||||
command = spack_f77
|
||||
language = "Fortran 77"
|
||||
elif command in ('fc', 'f90', 'f95'):
|
||||
command = spack_fc
|
||||
language = "Fortran 90"
|
||||
elif command in ('ld', 'cpp'):
|
||||
pass # leave it the same. TODO: what's the right thing?
|
||||
else:
|
||||
raise Exception("Unknown compiler: %s" % command)
|
||||
# Dump the version and exit if we're in testing mode.
|
||||
if [[ $SPACK_TEST_COMMAND == dump-mode ]]; then
|
||||
echo "$mode"
|
||||
exit
|
||||
fi
|
||||
|
||||
if command is None:
|
||||
print "ERROR: Compiler '%s' does not support compiling %s programs." % (
|
||||
compiler_spec, language)
|
||||
sys.exit(1)
|
||||
# Check that at least one of the real commands was actually selected,
|
||||
# otherwise we don't know what to execute.
|
||||
if [[ -z $command ]]; then
|
||||
die "ERROR: Compiler '$SPACK_COMPILER_SPEC' does not support compiling $language programs."
|
||||
fi
|
||||
|
||||
version_args = ['-V', '-v', '--version', '-dumpversion']
|
||||
if any(arg in sys.argv for arg in version_args):
|
||||
mode = version_check
|
||||
#
|
||||
# Set paths as defined in the 'environment' section of the compiler config
|
||||
# names are stored in SPACK_ENV_TO_SET
|
||||
# values are stored in SPACK_ENV_SET_<varname>
|
||||
#
|
||||
IFS=':' read -ra env_set_varnames <<< "$SPACK_ENV_TO_SET"
|
||||
for varname in "${env_set_varnames[@]}"; do
|
||||
spack_varname="SPACK_ENV_SET_$varname"
|
||||
export $varname=${!spack_varname}
|
||||
unset $spack_varname
|
||||
done
|
||||
|
||||
# Parse out the includes, libs, etc. so we can adjust them if need be.
|
||||
parser = argparse.ArgumentParser(add_help=False)
|
||||
parser.add_argument("-I", action='append', default=[], dest='include_path')
|
||||
parser.add_argument("-L", action='append', default=[], dest='lib_path')
|
||||
parser.add_argument("-l", action='append', default=[], dest='libs')
|
||||
#
|
||||
# Filter '.' and Spack environment directories out of PATH so that
|
||||
# this script doesn't just call itself
|
||||
#
|
||||
IFS=':' read -ra env_path <<< "$PATH"
|
||||
IFS=':' read -ra spack_env_dirs <<< "$SPACK_ENV_PATH"
|
||||
spack_env_dirs+=("" ".")
|
||||
PATH=""
|
||||
for dir in "${env_path[@]}"; do
|
||||
addpath=true
|
||||
for env_dir in "${spack_env_dirs[@]}"; do
|
||||
if [[ $dir == $env_dir ]]; then
|
||||
addpath=false
|
||||
break
|
||||
fi
|
||||
done
|
||||
if $addpath; then
|
||||
PATH="${PATH:+$PATH:}$dir"
|
||||
fi
|
||||
done
|
||||
export PATH
|
||||
|
||||
options, other_args = parser.parse_known_args()
|
||||
rpaths, other_args = parse_rpaths(other_args)
|
||||
if [[ $mode == vcheck ]]; then
|
||||
exec ${command} "$@"
|
||||
fi
|
||||
|
||||
# Add dependencies' include and lib paths to our compiler flags.
|
||||
def add_if_dir(path_list, directory, index=None):
|
||||
if os.path.isdir(directory):
|
||||
if index is None:
|
||||
path_list.append(directory)
|
||||
else:
|
||||
path_list.insert(index, directory)
|
||||
# Darwin's linker has a -r argument that merges object files together.
|
||||
# It doesn't work with -rpath.
|
||||
# This variable controls whether they are added.
|
||||
add_rpaths=true
|
||||
if [[ ($mode == ld || $mode == ccld) && "$SPACK_SHORT_SPEC" =~ "darwin" ]]; then
|
||||
for arg in "$@"; do
|
||||
if [[ ($arg == -r && $mode == ld) || ($arg == -Wl,-r && $mode == ccld) ]]; then
|
||||
add_rpaths=false
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
for dep_dir in spack_deps:
|
||||
add_if_dir(options.include_path, os.path.join(dep_dir, "include"))
|
||||
add_if_dir(options.lib_path, os.path.join(dep_dir, "lib"))
|
||||
add_if_dir(options.lib_path, os.path.join(dep_dir, "lib64"))
|
||||
# Save original command for debug logging
|
||||
input_command="$@"
|
||||
args=("$@")
|
||||
|
||||
# Add our modified arguments to it.
|
||||
arguments = ['-I%s' % path for path in options.include_path]
|
||||
arguments += other_args
|
||||
arguments += ['-L%s' % path for path in options.lib_path]
|
||||
arguments += ['-l%s' % path for path in options.libs]
|
||||
# Prepend cppflags, cflags, cxxflags, fcflags, fflags, and ldflags
|
||||
|
||||
# Add rpaths to install dir and its dependencies. We add both lib and lib64
|
||||
# here because we don't know which will be created.
|
||||
rpaths.extend(options.lib_path)
|
||||
rpaths.append('%s/lib' % spack_prefix)
|
||||
rpaths.append('%s/lib64' % spack_prefix)
|
||||
if mode == ccld:
|
||||
arguments += ['-Wl,-rpath,%s' % p for p in rpaths]
|
||||
elif mode == ld:
|
||||
pairs = [('-rpath', '%s' % p) for p in rpaths]
|
||||
arguments += [item for sublist in pairs for item in sublist]
|
||||
# Add ldflags
|
||||
case "$mode" in
|
||||
ld|ccld)
|
||||
args=(${SPACK_LDFLAGS[@]} "${args[@]}") ;;
|
||||
esac
|
||||
|
||||
# Unset some pesky environment variables
|
||||
for var in ["LD_LIBRARY_PATH", "LD_RUN_PATH", "DYLD_LIBRARY_PATH"]:
|
||||
if var in os.environ:
|
||||
os.environ.pop(var)
|
||||
# Add compiler flags.
|
||||
case "$mode" in
|
||||
cc|ccld)
|
||||
# Add c, cxx, fc, and f flags
|
||||
case $lang_flags in
|
||||
C)
|
||||
args=(${SPACK_CFLAGS[@]} "${args[@]}") ;;
|
||||
CXX)
|
||||
args=(${SPACK_CXXFLAGS[@]} "${args[@]}") ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
# Ensure that the delegated command doesn't just call this script again.
|
||||
remove_paths = ['.'] + spack_env_path
|
||||
path = [p for p in get_path("PATH") if p not in remove_paths]
|
||||
os.environ["PATH"] = ":".join(path)
|
||||
# Add cppflags
|
||||
case "$mode" in
|
||||
cpp|as|cc|ccld)
|
||||
args=(${SPACK_CPPFLAGS[@]} "${args[@]}") ;;
|
||||
esac
|
||||
|
||||
full_command = [command] + arguments
|
||||
case "$mode" in cc|ccld)
|
||||
# Add fortran flags
|
||||
case $lang_flags in
|
||||
F)
|
||||
args=(${SPACK_FFLAGS[@]} "${args[@]}") ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
if spack_debug:
|
||||
input_log = os.path.join(spack_debug_log_dir, 'spack-cc-%s.in.log' % spack_spec)
|
||||
output_log = os.path.join(spack_debug_log_dir, 'spack-cc-%s.out.log' % spack_spec)
|
||||
with closing(open(input_log, 'a')) as log:
|
||||
args = [os.path.basename(sys.argv[0])] + sys.argv[1:]
|
||||
log.write("%s\n" % " ".join(arg.replace(' ', r'\ ') for arg in args))
|
||||
with closing(open(output_log, 'a')) as log:
|
||||
log.write("%s\n" % " ".join(full_command))
|
||||
# Read spack dependencies from the path environment variable
|
||||
IFS=':' read -ra deps <<< "$SPACK_DEPENDENCIES"
|
||||
for dep in "${deps[@]}"; do
|
||||
# Prepend include directories
|
||||
if [[ -d $dep/include ]]; then
|
||||
if [[ $mode == cpp || $mode == cc || $mode == as || $mode == ccld ]]; then
|
||||
args=("-I$dep/include" "${args[@]}")
|
||||
fi
|
||||
fi
|
||||
|
||||
rcode = subprocess.call(full_command)
|
||||
sys.exit(rcode)
|
||||
# Prepend lib and RPATH directories
|
||||
if [[ -d $dep/lib ]]; then
|
||||
if [[ $mode == ccld ]]; then
|
||||
if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then
|
||||
$add_rpaths && args=("$rpath$dep/lib" "${args[@]}")
|
||||
fi
|
||||
if [[ $SPACK_LINK_DEPS == *$dep* ]]; then
|
||||
args=("-L$dep/lib" "${args[@]}")
|
||||
fi
|
||||
elif [[ $mode == ld ]]; then
|
||||
if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then
|
||||
$add_rpaths && args=("-rpath" "$dep/lib" "${args[@]}")
|
||||
fi
|
||||
if [[ $SPACK_LINK_DEPS == *$dep* ]]; then
|
||||
args=("-L$dep/lib" "${args[@]}")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Prepend lib64 and RPATH directories
|
||||
if [[ -d $dep/lib64 ]]; then
|
||||
if [[ $mode == ccld ]]; then
|
||||
if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then
|
||||
$add_rpaths && args=("$rpath$dep/lib64" "${args[@]}")
|
||||
fi
|
||||
if [[ $SPACK_LINK_DEPS == *$dep* ]]; then
|
||||
args=("-L$dep/lib64" "${args[@]}")
|
||||
fi
|
||||
elif [[ $mode == ld ]]; then
|
||||
if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then
|
||||
$add_rpaths && args=("-rpath" "$dep/lib64" "${args[@]}")
|
||||
fi
|
||||
if [[ $SPACK_LINK_DEPS == *$dep* ]]; then
|
||||
args=("-L$dep/lib64" "${args[@]}")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Include all -L's and prefix/whatever dirs in rpath
|
||||
if [[ $mode == ccld ]]; then
|
||||
$add_rpaths && args=("$rpath$SPACK_PREFIX/lib64" "${args[@]}")
|
||||
$add_rpaths && args=("$rpath$SPACK_PREFIX/lib" "${args[@]}")
|
||||
elif [[ $mode == ld ]]; then
|
||||
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib64" "${args[@]}")
|
||||
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib" "${args[@]}")
|
||||
fi
|
||||
|
||||
# Set extra RPATHs
|
||||
IFS=':' read -ra extra_rpaths <<< "$SPACK_COMPILER_EXTRA_RPATHS"
|
||||
for extra_rpath in "${extra_rpaths[@]}"; do
|
||||
if [[ $mode == ccld ]]; then
|
||||
$add_rpaths && args=("$rpath$extra_rpath" "${args[@]}")
|
||||
elif [[ $mode == ld ]]; then
|
||||
$add_rpaths && args=("-rpath" "$extra_rpath" "${args[@]}")
|
||||
fi
|
||||
done
|
||||
|
||||
# Add SPACK_LDLIBS to args
|
||||
case "$mode" in
|
||||
ld|ccld)
|
||||
args=("${args[@]}" ${SPACK_LDLIBS[@]}) ;;
|
||||
esac
|
||||
|
||||
full_command=("$command" "${args[@]}")
|
||||
|
||||
# In test command mode, write out full command for Spack tests.
|
||||
if [[ $SPACK_TEST_COMMAND == dump-args ]]; then
|
||||
echo "${full_command[@]}"
|
||||
exit
|
||||
elif [[ -n $SPACK_TEST_COMMAND ]]; then
|
||||
die "ERROR: Unknown test command"
|
||||
fi
|
||||
|
||||
#
|
||||
# Write the input and output commands to debug logs if it's asked for.
|
||||
#
|
||||
if [[ $SPACK_DEBUG == TRUE ]]; then
|
||||
input_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.in.log"
|
||||
output_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.out.log"
|
||||
echo "[$mode] $command $input_command" >> "$input_log"
|
||||
echo "[$mode] ${full_command[@]}" >> "$output_log"
|
||||
fi
|
||||
|
||||
exec "${full_command[@]}"
|
||||
|
||||
1
lib/spack/env/clang
vendored
1
lib/spack/env/clang
vendored
@@ -1 +0,0 @@
|
||||
cc
|
||||
1
lib/spack/env/clang++
vendored
1
lib/spack/env/clang++
vendored
@@ -1 +0,0 @@
|
||||
cc
|
||||
1
lib/spack/env/clang/clang
vendored
Symbolic link
1
lib/spack/env/clang/clang
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/clang/clang++
vendored
Symbolic link
1
lib/spack/env/clang/clang++
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/clang/gfortran
vendored
Symbolic link
1
lib/spack/env/clang/gfortran
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/cray/CC
vendored
Symbolic link
1
lib/spack/env/cray/CC
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/cray/cc
vendored
Symbolic link
1
lib/spack/env/cray/cc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/cray/ftn
vendored
Symbolic link
1
lib/spack/env/cray/ftn
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/craype/CC
vendored
Symbolic link
1
lib/spack/env/craype/CC
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/craype/cc
vendored
Symbolic link
1
lib/spack/env/craype/cc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/craype/ftn
vendored
Symbolic link
1
lib/spack/env/craype/ftn
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/g++
vendored
1
lib/spack/env/g++
vendored
@@ -1 +0,0 @@
|
||||
cc
|
||||
1
lib/spack/env/gcc
vendored
1
lib/spack/env/gcc
vendored
@@ -1 +0,0 @@
|
||||
cc
|
||||
1
lib/spack/env/gcc/g++
vendored
Symbolic link
1
lib/spack/env/gcc/g++
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/gcc/gcc
vendored
Symbolic link
1
lib/spack/env/gcc/gcc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/gcc/gfortran
vendored
Symbolic link
1
lib/spack/env/gcc/gfortran
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/intel/icc
vendored
Symbolic link
1
lib/spack/env/intel/icc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/intel/icpc
vendored
Symbolic link
1
lib/spack/env/intel/icpc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/intel/ifort
vendored
Symbolic link
1
lib/spack/env/intel/ifort
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/nag/nagfor
vendored
Symbolic link
1
lib/spack/env/nag/nagfor
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/pgi/pgc++
vendored
Symbolic link
1
lib/spack/env/pgi/pgc++
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/pgi/pgcc
vendored
Symbolic link
1
lib/spack/env/pgi/pgcc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/pgi/pgfortran
vendored
Symbolic link
1
lib/spack/env/pgi/pgfortran
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/xl/xlc
vendored
Symbolic link
1
lib/spack/env/xl/xlc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user