Compare commits
861 Commits
hdf5-1_0_0
...
hdf5-1_2_0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1607517ff2 | ||
|
|
a166cd45e3 | ||
|
|
2f43dfaddd | ||
|
|
0b826837c0 | ||
|
|
9b042ac7f2 | ||
|
|
2dba34824f | ||
|
|
d70b72d630 | ||
|
|
e186d84c5f | ||
|
|
2640adf89b | ||
|
|
75d0ccdb1b | ||
|
|
624719c924 | ||
|
|
306b310366 | ||
|
|
3bdafe922a | ||
|
|
650e29cff6 | ||
|
|
1b20703c20 | ||
|
|
8ecbdd7050 | ||
|
|
2343e9f61e | ||
|
|
1893820e08 | ||
|
|
9a98a588d8 | ||
|
|
f5e406b3aa | ||
|
|
d16874dcad | ||
|
|
a2850083e7 | ||
|
|
970c3a06b9 | ||
|
|
98a9636474 | ||
|
|
d619a1d3e6 | ||
|
|
95064e6f60 | ||
|
|
ccc388ba1c | ||
|
|
a129c4d54e | ||
|
|
2e69c87e6b | ||
|
|
37a03d1e32 | ||
|
|
13b67571be | ||
|
|
fdc6caec28 | ||
|
|
6a6f846c01 | ||
|
|
76ca6e67a7 | ||
|
|
cc2be92e78 | ||
|
|
a7488d696f | ||
|
|
2133b0120f | ||
|
|
b004a76a47 | ||
|
|
191943c2c2 | ||
|
|
da39dd94dc | ||
|
|
903bc4b955 | ||
|
|
43af17182c | ||
|
|
f623908727 | ||
|
|
169f7d9622 | ||
|
|
0aad682d19 | ||
|
|
9039c9ecd9 | ||
|
|
21403c5ec4 | ||
|
|
78f622071f | ||
|
|
b1a4689964 | ||
|
|
7d7c7af92d | ||
|
|
fd376ba048 | ||
|
|
debc8037fb | ||
|
|
40abc59350 | ||
|
|
8c11a3a87c | ||
|
|
7f0f77be1e | ||
|
|
99cd249d1b | ||
|
|
c04c1b6abf | ||
|
|
c4c6318e6a | ||
|
|
ace37763c3 | ||
|
|
aa8fd173a8 | ||
|
|
c78a6aedaf | ||
|
|
0350710f5b | ||
|
|
941cf3a134 | ||
|
|
f11cb6763b | ||
|
|
71500ff8e1 | ||
|
|
c858b61346 | ||
|
|
998991d13d | ||
|
|
15c5400284 | ||
|
|
ab16b9fab7 | ||
|
|
8baa675250 | ||
|
|
ca9f4c3888 | ||
|
|
99478cd128 | ||
|
|
aa3c4b36cd | ||
|
|
45d2895bfa | ||
|
|
a7042d4493 | ||
|
|
a4cd66d5e5 | ||
|
|
8de95dd697 | ||
|
|
06c7d8fbbf | ||
|
|
b5690a0af3 | ||
|
|
231e8a2e96 | ||
|
|
004cf630d5 | ||
|
|
dfbdfb60a2 | ||
|
|
a594d02131 | ||
|
|
4fce9ceeb9 | ||
|
|
1c0597aa74 | ||
|
|
7a659a4d50 | ||
|
|
740b5058c5 | ||
|
|
73dfd4d282 | ||
|
|
401b37c1c3 | ||
|
|
8b287dfa64 | ||
|
|
1c5f6ffb70 | ||
|
|
52bb2a205d | ||
|
|
da12109cfa | ||
|
|
855d10e8ee | ||
|
|
0ccd32fd68 | ||
|
|
a45d0d96a2 | ||
|
|
6337d6e6a1 | ||
|
|
b487ccb9ee | ||
|
|
50133e2ff4 | ||
|
|
a556665ad1 | ||
|
|
725578538a | ||
|
|
6c9b3a99d4 | ||
|
|
531fda4d78 | ||
|
|
263bfa76ef | ||
|
|
d6ba8a5095 | ||
|
|
55b5e0fe94 | ||
|
|
0780cc508e | ||
|
|
40aa67003b | ||
|
|
bcc9f5ad96 | ||
|
|
93a359dd57 | ||
|
|
fd02ea947d | ||
|
|
bbe6a75cd0 | ||
|
|
9c71da9893 | ||
|
|
e69fe58b23 | ||
|
|
ba3276554c | ||
|
|
7b77b1e571 | ||
|
|
f1a1ae37ff | ||
|
|
675c9b0fad | ||
|
|
c752adc4ac | ||
|
|
006e67409b | ||
|
|
58eb9c4aa0 | ||
|
|
8532eb342e | ||
|
|
6881c423a1 | ||
|
|
ea77993266 | ||
|
|
5bfee94f46 | ||
|
|
b98fcbf592 | ||
|
|
2a10e682a1 | ||
|
|
df96f4362a | ||
|
|
50f41a8185 | ||
|
|
8374f82883 | ||
|
|
2ce9e72bfb | ||
|
|
c1bcb2f367 | ||
|
|
3a32a5e973 | ||
|
|
a7c167e389 | ||
|
|
58b40b848c | ||
|
|
2d82003556 | ||
|
|
4635285d64 | ||
|
|
14364b9257 | ||
|
|
93a6938cef | ||
|
|
e352d29757 | ||
|
|
5992a71fe0 | ||
|
|
e1c88c9c18 | ||
|
|
b48d0a56ee | ||
|
|
bad98b7028 | ||
|
|
de0d96dd53 | ||
|
|
3779274df6 | ||
|
|
01191731a6 | ||
|
|
8bb58b4399 | ||
|
|
009a989c32 | ||
|
|
b583a01f5b | ||
|
|
7bbb6d9f79 | ||
|
|
abdbd8f0bd | ||
|
|
85d15667be | ||
|
|
f94d9d48ca | ||
|
|
ac830927fb | ||
|
|
9282a3e357 | ||
|
|
20811af57b | ||
|
|
b6096d832c | ||
|
|
315ea1e460 | ||
|
|
bf3e459324 | ||
|
|
5742d7fa04 | ||
|
|
fe3079f7e2 | ||
|
|
bae358243c | ||
|
|
19d46ed16f | ||
|
|
b6ffdf65b9 | ||
|
|
744b73521a | ||
|
|
253cbe6d9c | ||
|
|
39d4289d7b | ||
|
|
d3968c738f | ||
|
|
ba25e1770b | ||
|
|
3245cbdf45 | ||
|
|
72a1a02b83 | ||
|
|
647016dad2 | ||
|
|
5d27980756 | ||
|
|
6476ddbc60 | ||
|
|
0b99b3751f | ||
|
|
eca82b725b | ||
|
|
1de32d9f71 | ||
|
|
8fc87f2267 | ||
|
|
3967b1f5db | ||
|
|
51aa1eb2b5 | ||
|
|
81b282b663 | ||
|
|
c13ce10093 | ||
|
|
ba73d2e4cb | ||
|
|
c529ab9cc4 | ||
|
|
ca309999ba | ||
|
|
aaeeddb432 | ||
|
|
a3d84da7df | ||
|
|
2ea07058c9 | ||
|
|
35747cccd7 | ||
|
|
7d0a135c73 | ||
|
|
cc2184b6ef | ||
|
|
2be6b9f63c | ||
|
|
2afd49c4c7 | ||
|
|
18d325e35f | ||
|
|
2443c16bf0 | ||
|
|
127b3b1b63 | ||
|
|
4ad5b162e4 | ||
|
|
e19b78295b | ||
|
|
5e37f08253 | ||
|
|
81dc6e53f8 | ||
|
|
da9c719938 | ||
|
|
72ec46e181 | ||
|
|
2f23391566 | ||
|
|
343d0ff396 | ||
|
|
07ff900c26 | ||
|
|
97496e9b60 | ||
|
|
2dc738a321 | ||
|
|
a66c628b3c | ||
|
|
893504e2a8 | ||
|
|
62f0caf0a5 | ||
|
|
129f93d069 | ||
|
|
f1a01e0f25 | ||
|
|
877a437ad6 | ||
|
|
d6823ceb08 | ||
|
|
e987b73f58 | ||
|
|
53da2a393f | ||
|
|
bf25eab2f2 | ||
|
|
a648d47c90 | ||
|
|
87f0d37a76 | ||
|
|
d6eb4d281f | ||
|
|
acbad9533e | ||
|
|
daf4ab5586 | ||
|
|
3cdcd9dc88 | ||
|
|
fbd8281631 | ||
|
|
a1e8b8b62e | ||
|
|
f03f167b5a | ||
|
|
d534a4dd0d | ||
|
|
94dd2f5b3d | ||
|
|
fa6c38d72f | ||
|
|
4e904eb4a3 | ||
|
|
314fe09f32 | ||
|
|
78aecae8b5 | ||
|
|
6b3dba1c92 | ||
|
|
9711f1be9a | ||
|
|
fd88ed61a8 | ||
|
|
760403e137 | ||
|
|
ed9118ff7a | ||
|
|
f46440f305 | ||
|
|
1b071c8e4d | ||
|
|
68985e9d3c | ||
|
|
924cb75ba8 | ||
|
|
1991756aec | ||
|
|
6adb975282 | ||
|
|
de64ec3976 | ||
|
|
e941becbea | ||
|
|
6e854491cb | ||
|
|
43c356f93d | ||
|
|
77d7a3328b | ||
|
|
fe83d5e288 | ||
|
|
9ec8530823 | ||
|
|
92cc3fe39f | ||
|
|
31ac744586 | ||
|
|
9526d48dba | ||
|
|
9bbc5746cc | ||
|
|
6d36b8d9e2 | ||
|
|
84fe71eb14 | ||
|
|
bc351e9510 | ||
|
|
6f849488bc | ||
|
|
e5376cafb4 | ||
|
|
5e31902765 | ||
|
|
ddb367a335 | ||
|
|
f003dead4d | ||
|
|
804fae33ce | ||
|
|
7f5466dc35 | ||
|
|
c278fb73f7 | ||
|
|
6c43ecc0bd | ||
|
|
ed27d0459b | ||
|
|
a74acc88b0 | ||
|
|
c5c14c8bdf | ||
|
|
7fac298167 | ||
|
|
6cfb1f9320 | ||
|
|
aec7b7dc70 | ||
|
|
39880ddfdf | ||
|
|
8f0f2e4405 | ||
|
|
035c00dcef | ||
|
|
019daa1b2e | ||
|
|
13c9a30beb | ||
|
|
8473025b45 | ||
|
|
625542cdc8 | ||
|
|
b93c9e2cf9 | ||
|
|
19e5077f7f | ||
|
|
826dbc8146 | ||
|
|
4ec2ca72ba | ||
|
|
5a12356ecd | ||
|
|
d8d31596b4 | ||
|
|
ff5a1a9e29 | ||
|
|
b0138a0cb0 | ||
|
|
e433e6c4a9 | ||
|
|
ed46363fd9 | ||
|
|
68669abdcb | ||
|
|
1cb6b0c27f | ||
|
|
7795177df7 | ||
|
|
b8ef51ee7a | ||
|
|
d6cc19e3f2 | ||
|
|
84b5b71e84 | ||
|
|
fbef4e61ed | ||
|
|
af50eb6cbd | ||
|
|
36b081b6ea | ||
|
|
ae782bd7ac | ||
|
|
354a6dcc01 | ||
|
|
3a111372b1 | ||
|
|
cee43a0f30 | ||
|
|
2c3234ef72 | ||
|
|
362894fbb1 | ||
|
|
06ee0d9c4d | ||
|
|
a0a9b1bd17 | ||
|
|
112f7b4e86 | ||
|
|
cd06c38d65 | ||
|
|
ebb0060a05 | ||
|
|
6d92cc641e | ||
|
|
84adb085e3 | ||
|
|
169754fb4c | ||
|
|
596c1905e8 | ||
|
|
96320e69c0 | ||
|
|
25421a64fd | ||
|
|
ea3624e133 | ||
|
|
2925631a49 | ||
|
|
9280cf8e04 | ||
|
|
116491f0d6 | ||
|
|
1f1bfc91bc | ||
|
|
b3ddd2cc54 | ||
|
|
90d07791d3 | ||
|
|
912c5a0874 | ||
|
|
efb18f8785 | ||
|
|
f7bbda2afb | ||
|
|
252e4dfc5f | ||
|
|
3eecc727e0 | ||
|
|
aea248e1de | ||
|
|
56c7fb0df1 | ||
|
|
17535fbc17 | ||
|
|
d8b07ce1d0 | ||
|
|
6a1ee17dc0 | ||
|
|
6dc577e163 | ||
|
|
7962652c94 | ||
|
|
b0b1bbd847 | ||
|
|
af107b5e17 | ||
|
|
f3a1b93ee4 | ||
|
|
466fbe12bf | ||
|
|
6b1a9660ed | ||
|
|
67c0cdea0a | ||
|
|
7009195686 | ||
|
|
ac8c4177aa | ||
|
|
2052d2edae | ||
|
|
e2e5476fa5 | ||
|
|
35a62b068b | ||
|
|
b16c146160 | ||
|
|
1585545c5a | ||
|
|
9da0d56695 | ||
|
|
619998a82b | ||
|
|
aedc78af6b | ||
|
|
ef9c22ab61 | ||
|
|
996bf8061a | ||
|
|
37cfaf1665 | ||
|
|
901051cecb | ||
|
|
639bbed7d0 | ||
|
|
9db8b51bda | ||
|
|
04fd81482d | ||
|
|
6301b4c4ed | ||
|
|
bc8752755c | ||
|
|
a3a9df3657 | ||
|
|
8ed6e88543 | ||
|
|
bbc5307819 | ||
|
|
16c346bad4 | ||
|
|
b35ddccf5d | ||
|
|
2a64e998b8 | ||
|
|
c22bac0d20 | ||
|
|
f6272d4292 | ||
|
|
442bc46ff7 | ||
|
|
a98ac46b86 | ||
|
|
12d679104c | ||
|
|
a2f63c9424 | ||
|
|
180fa10d64 | ||
|
|
b62a541591 | ||
|
|
f9e03f4714 | ||
|
|
f7ffb9e511 | ||
|
|
2c61f6df37 | ||
|
|
eb63ce9a72 | ||
|
|
3234df6fb1 | ||
|
|
3d6d039b86 | ||
|
|
3a0d851b1c | ||
|
|
d6668e2a28 | ||
|
|
c2957e0922 | ||
|
|
ff7883566f | ||
|
|
224b6224fb | ||
|
|
8606182f1e | ||
|
|
4fc2c5fb59 | ||
|
|
3dae05f72d | ||
|
|
f8d25b3fcb | ||
|
|
0e204c7c06 | ||
|
|
9bb068f3f3 | ||
|
|
aa267768c1 | ||
|
|
ee2b36ad7b | ||
|
|
c00d3bcc92 | ||
|
|
a1f46c91fd | ||
|
|
2df1f8344e | ||
|
|
f7cd022ac4 | ||
|
|
a2b8da49db | ||
|
|
bb776bacbf | ||
|
|
67657f93ff | ||
|
|
747bb3f9fd | ||
|
|
6778cd8ce5 | ||
|
|
ba57f7a460 | ||
|
|
ff79c02fc4 | ||
|
|
e807698e9f | ||
|
|
7b9ce8a96c | ||
|
|
a2db22ab74 | ||
|
|
d10cb54a94 | ||
|
|
2362b4e0f0 | ||
|
|
6c30f0ae16 | ||
|
|
846de763b3 | ||
|
|
58295f0c15 | ||
|
|
adc514bf96 | ||
|
|
ed9abc7612 | ||
|
|
47f3d57c00 | ||
|
|
54604e8fc5 | ||
|
|
4a6110d41b | ||
|
|
db48cdc44e | ||
|
|
4f7e218959 | ||
|
|
504aa95bd9 | ||
|
|
04bec43fa2 | ||
|
|
2578cee601 | ||
|
|
0825a0bcd5 | ||
|
|
847043cf52 | ||
|
|
f4ebcffc65 | ||
|
|
2aefbf7603 | ||
|
|
b381963715 | ||
|
|
01eb265261 | ||
|
|
ac66b7eae0 | ||
|
|
4eab315de2 | ||
|
|
a88aa59718 | ||
|
|
be41a8feed | ||
|
|
82fb21b613 | ||
|
|
4952ed4a36 | ||
|
|
ee9cac2af9 | ||
|
|
38309fb3f6 | ||
|
|
1d8e6cf581 | ||
|
|
caeb6c614f | ||
|
|
7d9d6add9d | ||
|
|
03532b98d4 | ||
|
|
bf0208d474 | ||
|
|
4797dc9771 | ||
|
|
c91120b4b8 | ||
|
|
09aaf83332 | ||
|
|
c26c6a4b25 | ||
|
|
28e684b0af | ||
|
|
16b789409d | ||
|
|
d0b9e6dd0a | ||
|
|
5ba9869b49 | ||
|
|
bf250c6bb2 | ||
|
|
b58e9a6253 | ||
|
|
bdc304d612 | ||
|
|
5bbc648241 | ||
|
|
6d19719526 | ||
|
|
a1a8feae07 | ||
|
|
6900f5f958 | ||
|
|
7738afbd8a | ||
|
|
ffcbc32d66 | ||
|
|
37ce8f33ca | ||
|
|
1b31b150a3 | ||
|
|
4354606d1e | ||
|
|
49ca76e303 | ||
|
|
5d0938aba6 | ||
|
|
0dfd13d13b | ||
|
|
9db8ce23f6 | ||
|
|
dedc8c37b4 | ||
|
|
ae8f25bd43 | ||
|
|
c43b9183cc | ||
|
|
8ef8c8b290 | ||
|
|
4445745e51 | ||
|
|
6987a7dee5 | ||
|
|
b13a36efd7 | ||
|
|
05e4309137 | ||
|
|
7488c6366e | ||
|
|
6345a417a3 | ||
|
|
a482bd8e5b | ||
|
|
b31cc0e3ab | ||
|
|
3afdf4ac7e | ||
|
|
0bf637b3d2 | ||
|
|
e0dfe872a0 | ||
|
|
68bff3d352 | ||
|
|
04979ec732 | ||
|
|
0336078c9f | ||
|
|
8bb8649482 | ||
|
|
8aa4f54200 | ||
|
|
dd352d1977 | ||
|
|
665165234f | ||
|
|
860d23bef2 | ||
|
|
e4d2a0ae94 | ||
|
|
fbedc4bfeb | ||
|
|
519903b556 | ||
|
|
4fa5189caa | ||
|
|
e7643394b0 | ||
|
|
df77c715cc | ||
|
|
841e168a04 | ||
|
|
c3570e984a | ||
|
|
855248c589 | ||
|
|
fad8911352 | ||
|
|
cb31f1d4f0 | ||
|
|
071aa057aa | ||
|
|
17869ffb87 | ||
|
|
40f9403364 | ||
|
|
8f810273bb | ||
|
|
e7f7a9ff2f | ||
|
|
0a4f756744 | ||
|
|
ff613b8f96 | ||
|
|
bb36032d5a | ||
|
|
c82e6a4122 | ||
|
|
7b08465f61 | ||
|
|
e1ae92a6bb | ||
|
|
b7267be71a | ||
|
|
75a9686b51 | ||
|
|
55b20c298e | ||
|
|
e29ca0f166 | ||
|
|
8199af2425 | ||
|
|
24f1a02fea | ||
|
|
776f4a0279 | ||
|
|
3dc23cdaa4 | ||
|
|
55346e8376 | ||
|
|
a4ef96bca5 | ||
|
|
7088f7715f | ||
|
|
6caf5fac81 | ||
|
|
0159fc9a6b | ||
|
|
a23ec265e3 | ||
|
|
5897fa35a3 | ||
|
|
a193cb7a1d | ||
|
|
ccf09fae58 | ||
|
|
46f683cf14 | ||
|
|
b7d05e45c8 | ||
|
|
75551aae9d | ||
|
|
3c6de53a5b | ||
|
|
ccff15af14 | ||
|
|
09a871339d | ||
|
|
3039dac9dc | ||
|
|
7fd471c43c | ||
|
|
254ae8d43d | ||
|
|
a125ee351b | ||
|
|
3cf97133b0 | ||
|
|
d7c2a05970 | ||
|
|
98f5e5bc85 | ||
|
|
9fa15860d0 | ||
|
|
75b0660dbc | ||
|
|
6089dc9098 | ||
|
|
95ca8d543f | ||
|
|
c9102de1c5 | ||
|
|
ec2a200ee0 | ||
|
|
707f99cd0c | ||
|
|
04001aa89b | ||
|
|
340c89a358 | ||
|
|
0cf4d3a79c | ||
|
|
ed5859ad80 | ||
|
|
cd3b105997 | ||
|
|
f9fd7a35c2 | ||
|
|
8d2cb24e51 | ||
|
|
049e666104 | ||
|
|
056814423f | ||
|
|
54240b9657 | ||
|
|
9a4d614a0b | ||
|
|
5834d25997 | ||
|
|
b506e17d08 | ||
|
|
8f5444033e | ||
|
|
52305e0fe6 | ||
|
|
6317a4684f | ||
|
|
5013e0d2b5 | ||
|
|
93493d2a97 | ||
|
|
2a5409cf5c | ||
|
|
1e88d9ac67 | ||
|
|
27cf1577ba | ||
|
|
1203b16528 | ||
|
|
cd6234d0a0 | ||
|
|
7dcbae97f2 | ||
|
|
a7b166727d | ||
|
|
bedcfc85bd | ||
|
|
69d3cf72b3 | ||
|
|
4d5f1b72de | ||
|
|
f7545efc76 | ||
|
|
ac90ad84f6 | ||
|
|
91fa389935 | ||
|
|
bda4c6c94e | ||
|
|
808847e0a1 | ||
|
|
5ff842ebef | ||
|
|
db9525c2a3 | ||
|
|
7f020a4f3c | ||
|
|
39ae8f3879 | ||
|
|
db59b0650e | ||
|
|
6b449ba34a | ||
|
|
15a78f9786 | ||
|
|
4ec4c61cfc | ||
|
|
ca5f819b46 | ||
|
|
3a7c54b06f | ||
|
|
9bba487ca4 | ||
|
|
e1d1bf607f | ||
|
|
97621ca893 | ||
|
|
85cf3f4bb8 | ||
|
|
671ed57123 | ||
|
|
f571a762fd | ||
|
|
5ba39f7ca2 | ||
|
|
2bfbf4f707 | ||
|
|
bf5d98d7b9 | ||
|
|
5ce4069c24 | ||
|
|
d774cf9daf | ||
|
|
ca9639706e | ||
|
|
cf65d53dc8 | ||
|
|
ef231947b3 | ||
|
|
cd4af9da24 | ||
|
|
c1d2006c0f | ||
|
|
80f2033326 | ||
|
|
194c45d07d | ||
|
|
c82c719c21 | ||
|
|
cfb2a264f1 | ||
|
|
6f9a11d046 | ||
|
|
41241d47e5 | ||
|
|
bfedcf281c | ||
|
|
5389806ce8 | ||
|
|
6fd7f81615 | ||
|
|
85b6253118 | ||
|
|
88bb52df72 | ||
|
|
0e9e49d635 | ||
|
|
60b0109164 | ||
|
|
b8800bf41f | ||
|
|
9865007240 | ||
|
|
82f645371d | ||
|
|
04ca978cba | ||
|
|
32684b8801 | ||
|
|
6016a7a47a | ||
|
|
19ec99786a | ||
|
|
1fddd40b8b | ||
|
|
c4f1dfcf17 | ||
|
|
fe135c15da | ||
|
|
0a91cc84c1 | ||
|
|
b94c94ff6f | ||
|
|
2c4af336d3 | ||
|
|
deeb5978c0 | ||
|
|
9d11032a98 | ||
|
|
8a2ecf8fa6 | ||
|
|
21943f5d35 | ||
|
|
58ee080e72 | ||
|
|
849d36019d | ||
|
|
d809c9309b | ||
|
|
177e41c948 | ||
|
|
beab7f66e5 | ||
|
|
8460a082a4 | ||
|
|
af405e8a6f | ||
|
|
1b13f305ad | ||
|
|
c0941f01e3 | ||
|
|
b1df4a74cd | ||
|
|
06935ba4bb | ||
|
|
18b24252a6 | ||
|
|
274a88f52c | ||
|
|
b3ac7d4c7f | ||
|
|
311e4c9ebf | ||
|
|
f180bc993f | ||
|
|
0e8e2d56c5 | ||
|
|
8af76560a0 | ||
|
|
0db7facffe | ||
|
|
5fcf0dc22e | ||
|
|
6d9af58391 | ||
|
|
b20de8612a | ||
|
|
1fe48c7f19 | ||
|
|
7b18991338 | ||
|
|
19369ba422 | ||
|
|
42c184af74 | ||
|
|
a3170cae38 | ||
|
|
1d134c4d3f | ||
|
|
8718c53e6b | ||
|
|
d3c8def6aa | ||
|
|
50e980f28e | ||
|
|
971c7617db | ||
|
|
929051eae4 | ||
|
|
f7b0fee6ef | ||
|
|
51ff984269 | ||
|
|
d38baac55f | ||
|
|
5e6d6c51b8 | ||
|
|
220a0db842 | ||
|
|
a994a49fa9 | ||
|
|
57d3af6e2d | ||
|
|
3672cb4c1c | ||
|
|
f56f76eb1d | ||
|
|
b02e452be5 | ||
|
|
309f5f85dc | ||
|
|
a3de842d90 | ||
|
|
1e3bbd6cbe | ||
|
|
9043973a57 | ||
|
|
70c8b120c2 | ||
|
|
581af787af | ||
|
|
750856c53a | ||
|
|
d07894304f | ||
|
|
a56bf73058 | ||
|
|
858bf7813a | ||
|
|
dd99ecc1bc | ||
|
|
2a7c272a69 | ||
|
|
ba9581e64c | ||
|
|
b44eb55b33 | ||
|
|
d4e41165c4 | ||
|
|
586a7e645b | ||
|
|
bd07e10e56 | ||
|
|
b5e2752ad6 | ||
|
|
72a58073cd | ||
|
|
fbacf0337a | ||
|
|
fb838d175c | ||
|
|
e589c2ed3d | ||
|
|
9384202d42 | ||
|
|
970f5f068c | ||
|
|
23d08b3509 | ||
|
|
2bbe015b85 | ||
|
|
5a1be3bda3 | ||
|
|
85bd27dbd7 | ||
|
|
7081f2d6e6 | ||
|
|
ea951145b8 | ||
|
|
37247875fe | ||
|
|
f6e70a6142 | ||
|
|
6589650eea | ||
|
|
40bf5deddd | ||
|
|
2041938568 | ||
|
|
07f1057ec7 | ||
|
|
97f56b57a0 | ||
|
|
8fde009d73 | ||
|
|
0a6f9f16d8 | ||
|
|
260af101fa | ||
|
|
1af0223f4e | ||
|
|
caefe38d87 | ||
|
|
ac784dcef4 | ||
|
|
f4567c67fb | ||
|
|
ebbe57c142 | ||
|
|
94a9576ee7 | ||
|
|
697b9c5ad0 | ||
|
|
e145787beb | ||
|
|
96c626d42f | ||
|
|
4aa79bb211 | ||
|
|
5aa61b6fcf | ||
|
|
65dea75ab8 | ||
|
|
0d7ec99e1d | ||
|
|
0c6c4eeb60 | ||
|
|
ca953eb331 | ||
|
|
2ab2e14bb5 | ||
|
|
473452205d | ||
|
|
1e38c13785 | ||
|
|
e4053f38c2 | ||
|
|
c435f33870 | ||
|
|
1373661a78 | ||
|
|
96c2b5fec4 | ||
|
|
01b8b7cc52 | ||
|
|
1b1be9918c | ||
|
|
69ed3c270a | ||
|
|
2ac39bef22 | ||
|
|
d06b3afc6c | ||
|
|
6d223fa00f | ||
|
|
1100b30ddc | ||
|
|
1908710891 | ||
|
|
eb5e01d37c | ||
|
|
11f1b67c87 | ||
|
|
3500281e8c | ||
|
|
9124be67f6 | ||
|
|
8fc352b7cd | ||
|
|
75a293691e | ||
|
|
3ba4755c33 | ||
|
|
8cf69185f2 | ||
|
|
1fc23babac | ||
|
|
4f2d4020d8 | ||
|
|
278a9b9486 | ||
|
|
49133159c8 | ||
|
|
2c61dcc3ee | ||
|
|
f5fb0d9db9 | ||
|
|
e455040749 | ||
|
|
4322bfe90a | ||
|
|
9945c358aa | ||
|
|
93e5190bb1 | ||
|
|
da3fcf286a | ||
|
|
d27a31461c | ||
|
|
d9b9ed853d | ||
|
|
a1e8ce1d81 | ||
|
|
8ed18c9e73 | ||
|
|
05db4b09cd | ||
|
|
62176d7836 | ||
|
|
c7270e7e36 | ||
|
|
25b825965e | ||
|
|
a7e57b2779 | ||
|
|
692a2f0859 | ||
|
|
d809d38b01 | ||
|
|
1181d87cbe | ||
|
|
d97121d35c | ||
|
|
678eb19d71 | ||
|
|
349b9094a0 | ||
|
|
06d4abfb4d | ||
|
|
ed85f64ee7 | ||
|
|
9754e9373b | ||
|
|
1d0b2915c2 | ||
|
|
acf41defc1 | ||
|
|
6f0ec99bdd | ||
|
|
d99a7a8ab0 | ||
|
|
acd04a1aa6 | ||
|
|
de87544235 | ||
|
|
430b1a9c84 | ||
|
|
1ba806475b | ||
|
|
e2be5b3d49 | ||
|
|
7ede57157f | ||
|
|
9d5ee01b17 | ||
|
|
87cafe6f15 | ||
|
|
8a37120968 | ||
|
|
32295ad53d | ||
|
|
002b1494b7 | ||
|
|
99506091b3 | ||
|
|
c3074b5cb4 | ||
|
|
48f8e55c0a | ||
|
|
b91c283315 | ||
|
|
96106282bb | ||
|
|
6c6d0c90a2 | ||
|
|
c7f5d9c4a3 | ||
|
|
53d271ee42 | ||
|
|
0fd8e427c7 | ||
|
|
a78d6c70ab | ||
|
|
6ef50c3f9b | ||
|
|
786009a853 | ||
|
|
bd3ae84dde | ||
|
|
b499a05011 | ||
|
|
a0f7f1279c | ||
|
|
b4f144907e | ||
|
|
dde81bb76b | ||
|
|
3ed85f3f35 | ||
|
|
dcf8dbfe7f | ||
|
|
e4aae4fd9b | ||
|
|
f21dbd337f | ||
|
|
c7b935a9ac | ||
|
|
a34534c9b8 | ||
|
|
14ea12a6ba | ||
|
|
3a6a09d4fd | ||
|
|
ca426e2f32 | ||
|
|
b4107d530a | ||
|
|
78c70d7be5 | ||
|
|
181a423f85 | ||
|
|
86a68d5e46 | ||
|
|
451404ceee | ||
|
|
c8d2f1e17a | ||
|
|
8821a3c015 | ||
|
|
54965f9760 | ||
|
|
5c77c9a0da | ||
|
|
8e9136b837 | ||
|
|
3ca1c8b131 | ||
|
|
d4088f3610 | ||
|
|
b970dce3ec | ||
|
|
29a029d7e7 | ||
|
|
c638ee5659 | ||
|
|
4fc2d723f5 | ||
|
|
b56f011989 | ||
|
|
0aa506cc6c | ||
|
|
de5389cc27 | ||
|
|
bdce66f69a | ||
|
|
2423411a64 | ||
|
|
00aa39c66f | ||
|
|
d45c20d713 | ||
|
|
c3caa3f269 | ||
|
|
34595bac3b | ||
|
|
1dbacc8377 | ||
|
|
29bf0662db | ||
|
|
365dac33e3 | ||
|
|
79d65106ab | ||
|
|
6bea093682 | ||
|
|
c40c53d0af | ||
|
|
077d7c8c86 | ||
|
|
8ad2f1aae0 | ||
|
|
0c67b4e2bc |
63
COPYING
@@ -1,48 +1,39 @@
|
||||
/*=======================================================================
|
||||
Copyright Notice and Statement for NCSA Hierarchical Data Format (HDF)
|
||||
Software Library and Utilities
|
||||
|
||||
Copyright Notice and Statement for
|
||||
NCSA Hierarchical Data Format (HDF) Software Library and Utilities
|
||||
NCSA Hierarchical Data Format (HDF) Software Library and Utilities Copyright
|
||||
1998 the Board of Trustees of the University of Illinois. All rights reserved.
|
||||
|
||||
|
||||
NCSA Hierarchical Data Format (HDF) Software Library and Utilities
|
||||
Copyright 1998 the Board of Trustees of the University of Illinois
|
||||
All rights reserved.
|
||||
|
||||
Contributors: National Center for Supercomputing Applications (NCSA) at
|
||||
the University of Illinois, Lawrence Livermore Nat'l Laboratory (LLNL),
|
||||
Sandia National Laboratories (SNL), Los Alamos National Laboratory (LANL),
|
||||
Jean-loup Gailly and Mark Adler (gzip library)
|
||||
Contributors: National Center for Supercomputing Applications (NCSA) at the
|
||||
University of Illinois, Lawrence Livermore Nat'l Laboratory (LLNL), Sandia
|
||||
National Laboratories (SNL), Los Alamos National Laboratory (LANL).
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted for any purpose (including commercial purposes)
|
||||
provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or materials provided with the distribution.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or materials provided with the distribution.
|
||||
|
||||
3. In addition, redistributions of modified forms of the source or binary
|
||||
code must carry prominent notices stating that the original code was
|
||||
changed and the date of the change.
|
||||
3. In addition, redistributions of modified forms of the source or binary
|
||||
code must carry prominent notices stating that the original code was
|
||||
changed and the date of the change.
|
||||
|
||||
4. All publications or advertising materials mentioning features or use of
|
||||
this software must acknowledge that it was developed by the National Center
|
||||
for Supercomputing Applications at the University of Illinois, and credit
|
||||
the Contributors.
|
||||
4. All publications or advertising materials mentioning features or use of
|
||||
this software must acknowledge that it was developed by the National
|
||||
Center for Supercomputing Applications at the University of Illinois, and
|
||||
credit the Contributors.
|
||||
|
||||
5. Neither the name of the University nor the names of the Contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission from the University or the Contributors.
|
||||
|
||||
6. THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND THE CONTRIBUTORS "AS IS"
|
||||
WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. In no event
|
||||
shall the University or the Contributors be liable for any damages suffered
|
||||
by the users arising out of the use of this software, even if advised of
|
||||
the possibility of such damage.
|
||||
|
||||
|
||||
=======================================================================*/
|
||||
5. Neither the name of the University nor the names of the Contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission from the University or the Contributors.
|
||||
|
||||
6. THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND THE CONTRIBUTORS "AS IS"
|
||||
WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. In no event
|
||||
shall the University or the Contributors be liable for any damages
|
||||
suffered by the users arising out of the use of this software, even if
|
||||
advised of the possibility of such damage.
|
||||
|
||||
483
INSTALL
@@ -1,149 +1,410 @@
|
||||
-*- outline -*-
|
||||
|
||||
This file contains instructions for the installation of HDF5 on
|
||||
Unix-like systems. First, one must obtain a tarball of the HDF5
|
||||
release from the ftp://hdf.ncsa.uiuc.edu/pub/dist/HDF5 repository.
|
||||
The files are available in uncompressed tar, gzip, bzip2, and compress
|
||||
formats.
|
||||
Unix-like systems. Users of the Intel TFLOPS machine should see the
|
||||
INSTALL.ascired for instructions.
|
||||
|
||||
For those that like to live dangerously and don't like to read ;-) you
|
||||
can do the following:
|
||||
* Obtaining HDF5
|
||||
The latest supported public release of HDF5 is available from
|
||||
ftp://hdf.ncsa.uiuc.edu/pub/dist/HDF5 and is available in tar
|
||||
format uncompressed or compressed with compress, gzip, or
|
||||
bzip2.
|
||||
|
||||
$ tar xf hdf5-1.0.0a.tar
|
||||
$ cd hdf5-1.0.0a
|
||||
$ make test
|
||||
$ make install # Optional
|
||||
The HDF team also makes snapshots of the source code available
|
||||
on a regular basis but these. These snapshots are unsupported
|
||||
(that is, the HDF team will not release a bug-fix on a
|
||||
particular snapshot; rather any bug fixes will be rolled into
|
||||
the next snapshot). Furthermore, the snapshots have only been
|
||||
tested on a few machines and may not test correctly for
|
||||
parallel applications. Snapshots can be found at
|
||||
ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/snapshots in a
|
||||
limited number for formats.
|
||||
|
||||
Note:
|
||||
For the users of the Intel TFLOPS machine, a special sequence of steps
|
||||
for the install may be found in the file: INSTALL.ascired.
|
||||
* Warnings about compilers
|
||||
OUTPUT FROM THE FOLLOWING COMPILERS SHOULD BE EXTREMELY
|
||||
SUSPECT WHEN USED TO COMPILE THE HDF5 LIBRARY, ESPECIALLY IF
|
||||
OPTIMIZATIONS ARE ENABLED. IN ALL CASES, HDF5 ATTEMPTS TO WORK
|
||||
AROUND THE COMPILER BUGS BUT THE HDF5 DEVELOPMENT TEAM MAKES
|
||||
NO GUARANTEES THAT THERE ARE OTHER CODE GENERATION PROBLEMS.
|
||||
|
||||
=======
|
||||
Step 0: Install optional third-party packages.
|
||||
** GNU (Intel platforms)
|
||||
Versions before 2.8.1 have serious problems allocating
|
||||
registers when functions contain operations on `long long'
|
||||
data types. Supplying the `--disable-hsizet' switch to
|
||||
configure (documented below) will prevent hdf5 from using
|
||||
`long long' data types in situations that are known not to
|
||||
work, but it limits the hdf5 address space to 2GB.
|
||||
|
||||
* GNU zlib compression library, version 1.0.2 or later is used for
|
||||
the `deflate' compression method. If libz.a cannot be found then
|
||||
this form of compression is not compiled into the library.
|
||||
** DEC
|
||||
The V5.2-038 compiler (and possibly others) occasionally
|
||||
generates incorrect code for memcpy() calls when optimizations
|
||||
are enabled, resulting in unaligned access faults. HDF5 works
|
||||
around the problem by casting the second argument to `char*'.
|
||||
|
||||
Step 1. Unpack the source tree.
|
||||
** SGI (Irix64 6.2)
|
||||
The Mongoose 7.00 compiler has serious optimization bugs and
|
||||
should be upgraded to MIPSpro 7.2.1.2m. Patches are available
|
||||
from SGI.
|
||||
|
||||
* The tarball will unpack into an hdf5-1.0.0a directory with one of
|
||||
the following commands:
|
||||
|
||||
$ tar xf hdf5-1.0.0a.tar OR
|
||||
$ gunzip <hdf5-1.0.0a.tar.gz |tar xf - OR
|
||||
$ bunzip2 <hdf5-1.0.0a.tar.bz2 |tar xf - OR
|
||||
$ uncompress -c <hdf5-1.0.0a.tar.Z |tar xf -
|
||||
|
||||
Step 2. Configure.
|
||||
|
||||
* HDF5 uses the GNU autoconf program for configuration. Most
|
||||
installations can be configured by typing just (from the
|
||||
hdf5-1.0.0a directory)
|
||||
|
||||
$ sh configure
|
||||
** Windows/NT
|
||||
The MicroSoft Win32 5.0 compiler is unable to cast unsigned
|
||||
long long values to doubles. HDF5 works around this bug by
|
||||
first casting to signed long long and then to double.
|
||||
|
||||
|
||||
* The configuration process can be controlled through environment
|
||||
variables, command-line switches, and host configuration files.
|
||||
For a complete list of switches say `sh configure --help'.
|
||||
* Quick installation
|
||||
For those that don't like to read ;-) the following steps can
|
||||
be used to configure, build, test, and install the HDF5
|
||||
library, header files, and support programs.
|
||||
|
||||
* Host configuration files are located in the `config' directory
|
||||
and are based on architecture name, vendor name, and/or operating
|
||||
system which are displayed near the beginning of the `configure'
|
||||
output. Not all hosts require a host configuration file.
|
||||
|
||||
* The C compiler and flags, the `ar' and `ranlib' program names,
|
||||
and the `make' program can be specified with environment
|
||||
variables if configure doesn't properly detect them and they are
|
||||
not defined in a host config file.
|
||||
$ gunzip <hdf5-1.0.0.tar.gz |tar xf -
|
||||
$ cd hdf5-1.0.0
|
||||
$ make check
|
||||
$ make install
|
||||
|
||||
CC Name of the C compiler.
|
||||
CFLAGS Switches for the C compiler.
|
||||
CPPFLAGS Additional switches for the .c -> .o step.
|
||||
AR Name of the `ar' program.
|
||||
RANLIB Name of the `ranlib' program or `:' if none.
|
||||
MAKE Name of the `make' program (GNU make is preferred)
|
||||
* HDF5 dependencies
|
||||
** Zlib
|
||||
The HDF5 library has a predefined compression filter that uses
|
||||
the "deflate" method for chunked datatsets. If zlib-1.1.2 or
|
||||
later is found then hdf5 will use it, otherwise HDF5's
|
||||
predefined compression method will degenerate to a no-op (the
|
||||
compression filter will succeed but the data will not be
|
||||
compressed).
|
||||
|
||||
* This version of HDF5 is normally built with various debugging
|
||||
code enabled. To turn it off add the `--disable-debug' switch
|
||||
to the configure command.
|
||||
** MPI and MPI-IO
|
||||
The parallel version of the library is built upon the
|
||||
foundation provided by MPI and MPI-IO. If these libraries are
|
||||
not available when HDF5 is configured then only a serial
|
||||
version of HDF5 can be built.
|
||||
|
||||
* This version of HDF5 is normally built with support for symbolic
|
||||
debugging with dbx or gdb and without compiler optimization
|
||||
switches. To disable symbolic debugging and enable
|
||||
optimizations add `--enable-production' to the configure
|
||||
command.
|
||||
* Full installation instructions for source distributions
|
||||
** Unpacking the distribution
|
||||
The HDF5 source code is distributed in a variety of formats
|
||||
which can be unpacked with the following commands, each of
|
||||
which creates an `hdf5-1.0.0' directory.
|
||||
|
||||
* This version of HDF5 is normally built with the ability to print
|
||||
the names, arguments, and return values of all API functions
|
||||
when they're called. For more information refer to the
|
||||
doc/html/tracing.html file. To disable tracing support add
|
||||
`--disable-trace' to the configure command.
|
||||
*** Non-compressed tar archive (*.tar)
|
||||
$ tar xf hdf5-1.0.0.tar
|
||||
|
||||
* Old versions of gcc (<2.8.0) may experience register allocation
|
||||
problems on some architectures. If this happens then the
|
||||
`--disable-hsizet' can be given but the resulting library will
|
||||
be unable to handle datasets larger than 4GB.
|
||||
*** Compressed tar archive (*.tar.Z)
|
||||
$ uncompress -c <hdf5-1.0.0.tar.Z |tar xf -
|
||||
|
||||
* By default libraries, include files, programs, and documentation
|
||||
are installed (when one says `make install') under
|
||||
/usr/local/lib, /usr/local/include, /usr/local/bin, and
|
||||
/usr/local/man. However, if you want them in some other
|
||||
location you can specify a prefix to use instead of /usr/local.
|
||||
For instance, to install in /usr/lib, /usr/include, /usr/bin,
|
||||
and /usr/man one would say
|
||||
*** Gzip'd tar archive (*.tar.gz)
|
||||
$ gunzip <hdf5-1.0.0.tar.gz |tar xf -
|
||||
|
||||
$ ./configure --prefix=/usr
|
||||
*** Bzip'd tar archive (*.tar.bz2)
|
||||
$ bunzip2 <hdf5-1.0.0.tar.gz |tar xf -
|
||||
|
||||
The library can be used directly from the source tree without
|
||||
installing it.
|
||||
** Configuring
|
||||
HDF5 uses the GNU autoconf system for configuration, which
|
||||
detects various features of the host system and creates the
|
||||
Makefiles. On most systems it should be sufficient to say:
|
||||
|
||||
Step 3. Compile library, tests, and programs.
|
||||
$ ./configure OR
|
||||
$ sh configure
|
||||
|
||||
* Build library targets by saying
|
||||
The configuration process can be controlled through
|
||||
environment variables, command-line switches, and host
|
||||
configuration files. For a complete list of switches say
|
||||
`./configure --help'. The host configuration files are located
|
||||
in the `config' directory and are based on architecture name,
|
||||
vendor name, and/or operating system which are displayed near
|
||||
the beginning of the `configure' output. The host config file
|
||||
influences the behavior of configure by setting or augmenting
|
||||
shell variables.
|
||||
|
||||
$ make
|
||||
*** Specifying the installation directories
|
||||
Typing `make install' will install the HDF5 library, header
|
||||
files, and support programs in /usr/local/lib,
|
||||
/usr/local/include, and /usr/local/bin. To use a path other
|
||||
than /usr/local specify the path with the `--prefix=PATH'
|
||||
switch:
|
||||
|
||||
Note: If you supplied some other make command through the MAKE
|
||||
environment variable in the previous step then use that command
|
||||
instead. The same applies below.
|
||||
$ ./configure --prefix=/home/robb
|
||||
|
||||
Note: When using GNU make you can add `-j -l6' to the make
|
||||
command to compile in parallel on SMP machines. Do not give a
|
||||
number after the `-j' since GNU make will turn it off for
|
||||
recursive invocations of make.
|
||||
If shared libraries are being built (the default) then the
|
||||
final home of the shared library must be specified with this
|
||||
switch before the library and executables are built.
|
||||
|
||||
Step 4. Run confidence tests.
|
||||
*** Using an alternate C compiler
|
||||
By default, configure will look for the C compiler by trying
|
||||
`gcc' and `cc'. However, if the environment variable "CC" is
|
||||
set then its value is used as the C compiler (users of csh and
|
||||
derivatives will need to prefix the commands below with
|
||||
`env'). For instance, to use the native C compiler on a system
|
||||
which also has the GNU gcc compiler:
|
||||
|
||||
* All confidence tests should be run by saying
|
||||
$ CC=cc ./configure
|
||||
|
||||
$ make test
|
||||
A parallel version of hdf5 can be built by specifying `mpicc'
|
||||
as the C compiler (the `--enable-parallel' flag documented
|
||||
below is optional). Using the `mpicc' compiler will insure
|
||||
that the correct MPI and MPI-IO header files and libraries are
|
||||
used.
|
||||
|
||||
The command will fail if any test fails, and one will see the
|
||||
word "*FAIL*" in the output.
|
||||
$ CC=/usr/local/mpi/bin/mpicc ./configure
|
||||
|
||||
Note: some old versions of make will report that `test is up to
|
||||
date'. If this happens then run `make _test' instead or run
|
||||
`make test' from within the test directory.
|
||||
On Irix64 the default compiler is `cc -64'. To use an
|
||||
alternate compiler specify it with the CC variable:
|
||||
|
||||
Temporary files will be deleted by each test when it completes,
|
||||
but may continue to exist in an incomplete state if the test
|
||||
fails. To prevent deletion of the files define the
|
||||
HDF5_NOCLEANUP environment variable.
|
||||
$ CC='cc -o32' ./configure
|
||||
|
||||
Step 5. Install public files.
|
||||
*** Additional compilation flags
|
||||
If addtional flags must be passed to the compilation commands
|
||||
then specify those flags with the CFLAGS variable. For
|
||||
instance, to enable symbolic debugging of a production version
|
||||
of HDF5 one might say:
|
||||
|
||||
* Install the library, header files, and programs by saying:
|
||||
$ CFLAGS=-g ./confgure --enable-production
|
||||
|
||||
$ make install
|
||||
*** Specifying other programs
|
||||
The build system has been tuned for use with GNU make but
|
||||
works also with other versions of make. If the `make' command
|
||||
runs a non-GNU version but a GNU version is available under a
|
||||
different name (perhaps `gmake') then HDF5 can be configured
|
||||
to use it by setting the MAKE variable. Note that whatever
|
||||
value is used for MAKE must also be used as the make command
|
||||
when building the library:
|
||||
|
||||
This step will fail unless you have permission to write to the
|
||||
installation directories. Of course, you can use the header
|
||||
files, library, and programs directly out of the source tree if
|
||||
you like, skipping this step. The directory specified for the
|
||||
--prefix switch (or "/usr/local") must exist, but the directories
|
||||
under it are created automatically by make.
|
||||
$ MAKE=gmake ./configure
|
||||
$ gmake
|
||||
|
||||
Step 6. Subscribe to mailing lists.
|
||||
The `AR' and `RANLIB' variables can also be set to the names
|
||||
of the `ar' and `ranlib' (or `:') commands to override values
|
||||
detected by configure.
|
||||
|
||||
* Subscribe to the mailing lists described in the README file.
|
||||
The HDF5 library, include files, and utilities are installed
|
||||
during `make install' (described below) with a BSD-compatible
|
||||
install program detected automatically by configure. If none
|
||||
is found then the shell script bin/install-sh is
|
||||
used. Configure doesn't check that the install script actually
|
||||
works, but if a bad install is detected on your system (e.g.,
|
||||
on the ASCI blue machine as of March 2, 1999) you have two
|
||||
choices:
|
||||
|
||||
1. Copy the bin/install-sh program to your $HOME/bin
|
||||
directory, name it `install', and make sure that
|
||||
$HOME/bin is searched before the system bin
|
||||
directories.
|
||||
|
||||
2. Specify the full path name of the `install-sh' program
|
||||
as the value of the INSTALL environment variable. Note:
|
||||
do not use `cp' or some other program in place of
|
||||
install because the HDF5 makefiles also use the install
|
||||
program to also change file ownership and/or access
|
||||
permissions.
|
||||
|
||||
*** Specifying other libraries and headers
|
||||
Configure searches the standard places (those places known by
|
||||
the systems compiler) for include files and header
|
||||
files. However, additional directories can be specified by
|
||||
using the CPPFLAGS and/or LDFLAGS variables:
|
||||
|
||||
$ CPPFLAGS=-I/home/robb/include \
|
||||
LDFLAGS=-L/home/robb/lib \
|
||||
./configure
|
||||
|
||||
HDF5 uses the zlib library for two purposes: it provides
|
||||
support for the HDF5 deflate data compression filter, and it
|
||||
is used by the h5toh4 converter in support of HDF4. Configure
|
||||
searches the standard places (plus those specified above with
|
||||
CPPFLAGS and LDFLAGS variables) for the zlib headers and
|
||||
library. The search can be disabled by specifying
|
||||
`--without-zlib' or alternate directories can be specified
|
||||
with `--with-zlib=INCDIR,LIBDIR' or through the CPPFLAGS and
|
||||
LDFLAGS variables:
|
||||
|
||||
$ ./configure --with-zlib=/usr/unsup/include,/usr/unsup/lib
|
||||
|
||||
$ CPPFLAGS=-I/usr/unsup/include \
|
||||
LDFLAGS=-L/usr/unsup/lib \
|
||||
./configure
|
||||
|
||||
The HDF5-to-HDF4 conversion tool requires the HDF4 library and
|
||||
header files which are detected the same way as zlib. The
|
||||
switch to give to configure is `--with-hdf4'. Note that HDF5
|
||||
requires a newer version of zlib than the one shipped with
|
||||
some versions of HDF4. Also, unless you have the "correct"
|
||||
version of hdf4 the confidence testing will fail in the tools
|
||||
directory.
|
||||
|
||||
*** Static versus shared linking
|
||||
The build process will create static libraries on all systems
|
||||
and shared libraries on systems that support dynamic linking
|
||||
to a sufficient degree. Either form of library may be
|
||||
suppressed by saying `--disable-static' or `--disable-shared'.
|
||||
|
||||
$ ./configure --disable-shared
|
||||
|
||||
*** Optimization versus symbolic debugging
|
||||
The library can be compiled to provide symbolic debugging
|
||||
support so it can be debugged with gdb, dbx, ddd, etc or it
|
||||
can be compiled with various optimizations. To compile for
|
||||
symbolic debugging (the default for snapshots) say
|
||||
`--disable-production'; to compile with optimizations (the
|
||||
default for supported public releases) say
|
||||
`--enable-production'. On some systems the library can also
|
||||
be compiled for profiling with gprof by saying
|
||||
`--enable-production=profile'.
|
||||
|
||||
$ ./configure --disable-production #symbolic debugging
|
||||
$ ./configure --enable-production #optimized code
|
||||
$ ./configure --enable-production=profile #for use with gprof
|
||||
|
||||
Regardless of whether support for symbolic debugging is
|
||||
enabled, the library also is able to perform runtime debugging
|
||||
of certain packages (such as type conversion execution times,
|
||||
and extensive invariant condition checking). To enable this
|
||||
debugging supply a comma-separated list of package names to to
|
||||
the `--enable-debug' switch (see Debugging.html for a list of
|
||||
package names). Debugging can be disabled by saying
|
||||
`--disable-debug'. The default debugging level for snapshots
|
||||
is a subset of the available packages; the default for
|
||||
supported releases is no debugging (debugging can incur a
|
||||
significant runtime penalty).
|
||||
|
||||
$ ./configure --enable-debug=s,t #debug only H5S and H5T
|
||||
$ ./configure --enable-debug #debug normal packages
|
||||
$ ./configure --enable-debug=all #debug all packages
|
||||
$ ./configure --disable-debug #no debugging
|
||||
|
||||
HDF5 is also able to print a trace of all API function calls,
|
||||
their arguments, and the return values. To enable or disable
|
||||
the ability to trace the API say `--enable-trace' (the default
|
||||
for snapthots) or `--disable-trace' (the default for public
|
||||
releases). The tracing must also be enabled at runtime to see
|
||||
any output (see Debugging.html).
|
||||
|
||||
*** Large (>2GB) vs. small (<2GB) file capability
|
||||
In order to read or write files that could potentially be
|
||||
larger than 2GB it is necessary to use the non-ANSI `long
|
||||
long' data type on some platforms. However, some compilers
|
||||
(e.g., GNU gcc versions before 2.8.1 on Intel platforms)
|
||||
are unable to produce correct machine code for this data
|
||||
type. To disable use of the `long long' type on these machines
|
||||
say:
|
||||
|
||||
$ ./configure --disable-hsizet
|
||||
|
||||
*** Parallel vs. serial library
|
||||
The HDF5 library can be configured to use MPI and MPI-IO for
|
||||
parallelizm on a distributed multi-processor system. The easy
|
||||
way to do this is to have a properly installed parallel
|
||||
compiler (e.g., MPICH's mpicc or IBM's mpcc) and supply that
|
||||
executable as the value of the CC environment variable:
|
||||
|
||||
$ CC=mpcc ./configure
|
||||
$ CC=/usr/local/mpi/bin/mpicc ./configure
|
||||
|
||||
If no such wrapper script is available then you must specify
|
||||
your normal C compiler along with the distribution of
|
||||
MPI/MPI-IO which is to be used (values other than `mpich' will
|
||||
be added at a later date):
|
||||
|
||||
$ ./configure --enable-parallel=mpich
|
||||
|
||||
If the MPI/MPI-IO include files and/or libraries cannot be
|
||||
found by the compiler then their directories must be given as
|
||||
arguments to CPPFLAGS and/or LDFLAGS:
|
||||
|
||||
$ CPPFLAGS=-I/usr/local/mpi/include \
|
||||
LDFLAGS=-L/usr/local/mpi/lib/LINUX/ch_p4 \
|
||||
./configure --enable-parallel=mpich
|
||||
|
||||
If a parallel library is being built then configure attempts
|
||||
to determine how to run a parallel application on one
|
||||
processor and on many processors. If the compiler is mpicc
|
||||
and the user hasn't specified values for RUNSERIAL and
|
||||
RUNPARALLEL then configure chooses `mpirun' from the same
|
||||
directory as `mpicc':
|
||||
|
||||
RUNSERIAL: /usr/local/mpi/bin/mpirun -np 1
|
||||
RUNPARALLEL: /usr/local/mpi/bin/mpirun -np $${NPROCS:=2}
|
||||
|
||||
The `$${NPROCS:=2}' will be substituted with the value of the
|
||||
NPROCS environment variable at the time `make check' is run
|
||||
(or the value 2).
|
||||
|
||||
** Building
|
||||
The library, confidence tests, and programs can be build by
|
||||
saying just
|
||||
|
||||
$ make
|
||||
|
||||
Note that if you supplied some other make command via the MAKE
|
||||
variable during the configuration step then that same command
|
||||
must be used here.
|
||||
|
||||
When using GNU make you can add `-j -l6' to the make command
|
||||
to compile in arallel on SMP machines. Do not give a number
|
||||
after th `-j' since GNU make will turn it off for recursive
|
||||
invocations of make.
|
||||
|
||||
$ make -j -l6
|
||||
|
||||
** Testing
|
||||
HDF5 comes with various test suites, all of which can be run
|
||||
by saying
|
||||
|
||||
$ make check
|
||||
|
||||
To run only the tests for the library change to the `test'
|
||||
directory before issuing the command. Similarly, tests for the
|
||||
parallel aspects of the library are in `testpar' and tests for
|
||||
the support programs are in `tools'.
|
||||
|
||||
Temporary files will be deleted by each test when it complets,
|
||||
but may continue to exist in an incomplete state if the test
|
||||
fails. To prevent deletion of the files define the
|
||||
HDF5_NOCLEANUP environment variable.
|
||||
|
||||
** Installing
|
||||
The HDF5 library, include files, and support programs can be
|
||||
installed in a (semi-)public place by saying `make
|
||||
install'. The files are installed under the directory
|
||||
specified with `--prefix=DIR' (or '/usr/local') in directories
|
||||
named `lib', `include', and `bin'. The prefix directory must
|
||||
exist prior to `make install', but its subdirectories are
|
||||
created automatically.
|
||||
|
||||
The library can be used without installing it by pointing the
|
||||
compiler at the `src' directory for both include files and
|
||||
libraries. However, the minimum which must be installed to
|
||||
make the library publically available is:
|
||||
|
||||
The library:
|
||||
./src/libhdf5.a
|
||||
|
||||
The public header files:
|
||||
./src/H5*public.h
|
||||
|
||||
The main header file:
|
||||
./src/hdf5.h
|
||||
|
||||
The configuration information:
|
||||
./src/H5config.h
|
||||
|
||||
The support programs that are useful are:
|
||||
./tools/h5ls (list file contents)
|
||||
./tools/h5dump (dump file contents)
|
||||
./tools/h5repart (repartition file families)
|
||||
./tools/h5toh4 (hdf5 to hdf4 file converter)
|
||||
./tools/h5debug (low-level file debugging)
|
||||
./tools/h5import (a demo)
|
||||
|
||||
* Using the Library
|
||||
Please see the User Manual in the doc/html directory.
|
||||
|
||||
Most programs will include <hdf5.h> and link with
|
||||
-lhdf5. Additional libraries may also be necessary depending
|
||||
on whether support for compression, etc. was compiled into the
|
||||
hdf5 library.
|
||||
|
||||
A summary of the hdf5 installation can be found in the
|
||||
libhdf5.settings file in the same directory as the static
|
||||
and/or shared hdf5 libraries.
|
||||
|
||||
* Support
|
||||
Support is described in the README file.
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@ effort is shown here at steps 9) and steps 10).
|
||||
The total required steps are something similar to:
|
||||
FROM SASN100,
|
||||
|
||||
1) uncompress hdf5-1.0.0a.tar.Z
|
||||
1) uncompress hdf5-1.1.0.tar.Z
|
||||
|
||||
2) tar xvf hdf5-1.0.0a.tar
|
||||
2) tar xvf hdf5-1.1.0.tar
|
||||
|
||||
3) cd ./hdf5
|
||||
|
||||
@@ -73,9 +73,9 @@ execution of parallel tests described in steps 12) through 16).
|
||||
The total required steps are something similar to:
|
||||
FROM SASN100,
|
||||
|
||||
1) uncompress hdf5-1.0.0a.tar.Z
|
||||
1) uncompress hdf5-1.1.0.tar.Z
|
||||
|
||||
2) tar xvf hdf5-1.0.0a.tar
|
||||
2) tar xvf hdf5-1.1.0.tar
|
||||
|
||||
3) cd ./hdf5
|
||||
|
||||
@@ -111,18 +111,11 @@ FROM SASN100,
|
||||
|
||||
12) cd testpar
|
||||
|
||||
13) /* edit testphdf5.c, change the following lines */
|
||||
char *filenames[]={ "pfs:/pfs/multi/tmp_1/your_own/ParaEg1.h5f",
|
||||
"pfs:/pfs/multi/tmp_1/your_own/ParaEg2.h5f",
|
||||
"pfs:/pfs/multi/tmp_1/your_own/ParaEg3.h5f" };
|
||||
|
||||
/* change "your_own" to your own directory name */
|
||||
char *filenames[]={ "pfs:/pfs/multi/tmp_1/my_dir/ParaEg1.h5f",
|
||||
"pfs:/pfs/multi/tmp_1/my_dir/ParaEg2.h5f",
|
||||
"pfs:/pfs/multi/tmp_1/my_dir/ParaEg3.h5f" };
|
||||
13) go through the README file.
|
||||
|
||||
14) make -f Makefile.ascired
|
||||
|
||||
|
||||
When everything is finished compiling and linking,
|
||||
FROM JANUS,
|
||||
|
||||
|
||||
@@ -37,7 +37,9 @@
|
||||
# (We use csh here, but of course you can adapt to whatever shell you like.)
|
||||
|
||||
# compile for MPI jobs
|
||||
setenv CC mpcc
|
||||
# setenv CC mpcc (for IBM's MPI)
|
||||
# setenv CC "/usr/local/mpich-1.1.1/lib/rs6000/ch_mpl/mpicc" (for mpich)
|
||||
setenv CC "/usr/local/mpich-1.1.1/lib/rs6000/ch_mpl/mpicc"
|
||||
|
||||
# These compiler flags work on ASCI baby blue pacific (IBM SP),
|
||||
# using IBM's MPI and Argonne's MPI-IO (ROMIO):
|
||||
@@ -47,9 +49,9 @@ setenv CC mpcc
|
||||
# The following flags are only needed when compiling/linking a user program
|
||||
# for execution.
|
||||
# -bI:/usr/include/piofs/piofs.exp this MPI-IO uses PIOFS file system
|
||||
# -L/usr/local/mpio/lib/ibm -lmpio link to this MPI-IO lib
|
||||
# -L/usr /local/mpio/lib/ibm -lmpio link to this MPI-IO lib
|
||||
#
|
||||
setenv CFLAGS "-g -D_LARGE_FILES -DHAVE_FUNCTION -I/usr/local/mpio/include/ibm -bI:/usr/include/piofs/piofs.exp -L/usr/local/mpio/lib/ibm -lmpio"
|
||||
setenv CFLAGS "-g -qfullpath -bnoobjreorder -D_LARGE_FILES -DHAVE_FUNCTION"
|
||||
|
||||
# The configure/make process needs to be able to run some programs,
|
||||
# need to specify a processor pool.
|
||||
|
||||
28
INSTALL.parallel
Normal file
@@ -0,0 +1,28 @@
|
||||
This file contains instructions for the installation a version of HDF5
|
||||
that uses the parallel file I/O facilities of the MPI-IO library. A
|
||||
parallel version of HDF5 can run in a serial environment as long as
|
||||
the appropriate MPI-IO and MPI header files and libraries are
|
||||
available.
|
||||
|
||||
The parallel version of hdf5 can be build by generally following the
|
||||
instructions in the INSTALL file for building a serial version and
|
||||
using `mpicc' as the C compiler. This can be done by setting the CC
|
||||
environment variable before invoking configure as with:
|
||||
|
||||
$ CC=mpicc ./configure
|
||||
|
||||
If the mpicc compiler is not available then a parallel library can
|
||||
still be built as long as the appropriate header files and libraries
|
||||
can be found. If these files are part of the default compiler search
|
||||
paths then configuration is as simple as:
|
||||
|
||||
$ ./configure --enable-parallel
|
||||
|
||||
Otherwise, if the MPI and MPI-IO header files or library cannot be
|
||||
found then the compiler search paths can be corrected, the files can
|
||||
be moved, or configure can be told about the file locations. The
|
||||
latter is done with something like:
|
||||
|
||||
$ CPPFLAGS=-I/usr/local/mpi/include \
|
||||
LDFLAGS=-L/usr/local/mpi/lib/LINUX/ch_p4 \
|
||||
./configure --enable-parallel
|
||||
@@ -97,3 +97,15 @@ Information for HDF5 maintainers:
|
||||
|
||||
which limits the number of children to two (this doesn't work at the
|
||||
top level because the `-j2' is not passed to recursive makes).
|
||||
|
||||
* To create a release tarball go to the top-level directory and run
|
||||
./bin/release. You can optionally supply one or more of the words
|
||||
`tar', `gzip', `bzip2' or `compress' on the command line. The
|
||||
result will be a (compressed) tar file(s) in the `releases'
|
||||
directory. The README file is updated to contain the release date
|
||||
and version number.
|
||||
|
||||
* To create a tarball of all the files which are part of HDF5 go to
|
||||
the top-level directory and type:
|
||||
|
||||
tar cvf foo.tar `grep '^\.' MANIFEST |unexpand |cut -f1`
|
||||
|
||||
@@ -1,19 +1,17 @@
|
||||
Installation instructions for Parallel HDF5
|
||||
-------------------------------------------
|
||||
(last updated: April 22, 1998)
|
||||
(last updated: May 21, 1999)
|
||||
|
||||
1. Overview
|
||||
-----------
|
||||
This file contains instructions for the installation of parallel
|
||||
HDF5. Platforms supported by this release are SGI Origin 2000,
|
||||
IBM SP2, and the Intel TFLOP. The steps are kind of unnatural and
|
||||
will be more automized in the next release. If you have difficulties
|
||||
installing the software in your system, please send mail to
|
||||
hdfparallel@ncsa.uiuc.edu
|
||||
|
||||
Note:
|
||||
For the users of the Intel TFLOPS machine, a special sequence of steps
|
||||
for the parallel install may be found in the file: INSTALL.ascired.
|
||||
Also, MPI/MPIO information similar to that found below may be found in
|
||||
INSTALL_parallel.ascired.
|
||||
In your mail, please enclose the output of "uname -a". Also attach the
|
||||
content of "config.log" if you have run the "configure" command.
|
||||
|
||||
First, you must obtain and unpack the HDF5 source as
|
||||
described in the file INSTALL. You also need to obtain the
|
||||
@@ -21,21 +19,69 @@ information of the include and library paths of MPI and MPIO
|
||||
software installed in your system since the parallel HDF5 library
|
||||
uses them for parallel I/O access.
|
||||
|
||||
For an IBM SP2 system, follow the instructions in INSTALL.ibm.sp.parallel.
|
||||
For an SGI Origin 2000 system, use the following shell commands. (The
|
||||
one shown here is what works in the NCSA O2K machine in which MPI library
|
||||
is installed in system area but no official MPIO software is available.
|
||||
I use a private installation of ROMIO for it.)
|
||||
|
||||
mpi1_inc="" #mpi-1 include
|
||||
mpi1_lib="" #mpi-1 library
|
||||
mpio_inc="-I$HOME/ROMIO/include" #mpio include
|
||||
mpio_lib="-L$HOME/ROMIO/lib/IRIX64/" #mpio library
|
||||
2. Quick Instruction for known systems
|
||||
--------------------------------------
|
||||
The following shows particular steps to run the parallel HDF5
|
||||
configure for a few machines we tested. If your particular platform
|
||||
is not shown or somehow the steps do not work for yours, please go
|
||||
to the next section for more detail explanations.
|
||||
|
||||
IBM SP2: follow the instructions in INSTALL.ibm.sp.parallel.
|
||||
|
||||
TFLOPS: follow the instuctions in INSTALL.ascired.
|
||||
|
||||
SGI Origin 2000:
|
||||
Cray T3E:
|
||||
(where MPI-IO is part of system MPI library such as mpt 1.3)
|
||||
|
||||
#!/bin/sh
|
||||
|
||||
RUNPARALLEL="mpirun -np 2"
|
||||
export RUNPARALLEL
|
||||
LIBS="-lmpi"
|
||||
export LIBS
|
||||
./configure --enable-parallel --disable-shared --prefix=$PWD/installdir
|
||||
make
|
||||
make check
|
||||
make install
|
||||
|
||||
|
||||
SGI Origin 2000:
|
||||
Cray T3E:
|
||||
(where MPI-IO is not part of system MPI library or I want to
|
||||
use my own version of MPIO)
|
||||
|
||||
|
||||
mpi1_inc="" #mpi-1 include
|
||||
mpi1_lib="" #mpi-1 library
|
||||
mpio_inc=-I$HOME/ROMIO/include #mpio include
|
||||
mpio_lib="-L$HOME/ROMIO/lib/IRIX64" #mpio library
|
||||
|
||||
MPI_INC="$mpio_inc $mpi1_inc"
|
||||
MPI_LIB="$mpio_lib $mpi1_lib"
|
||||
|
||||
#for version 1.1
|
||||
CPPFLAGS=$MPI_INC
|
||||
export CPPFLAGS
|
||||
LDFLAGS=$MPI_LIB
|
||||
export LDFLAGS
|
||||
RUNPARALLEL="mpirun -np 2"
|
||||
export RUNPARALLEL
|
||||
LIBS="-lmpio -lmpi"
|
||||
export LIBS
|
||||
|
||||
./configure --enable-parallel --disable-shared --prefix=$PWD/installdir
|
||||
make
|
||||
make check
|
||||
make install
|
||||
|
||||
|
||||
3. Detail explanation
|
||||
---------------------
|
||||
[Work in progress. Please send mail to hdfparallel@ncsa.uiuc.edu.]
|
||||
|
||||
|
||||
|
||||
MPI_INC="$mpi1_inc $mpio_inc"
|
||||
export MPI_INC
|
||||
MPI_LIB="$mpi1_lib $mpio_lib"
|
||||
export MPI_LIB
|
||||
|
||||
./configure --enable-parallel
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
# (We use sh here, but of course you can adapt to whatever shell you like.)
|
||||
|
||||
# compile for MPI jobs
|
||||
CC=cicc
|
||||
#CC=cicc
|
||||
|
||||
# The following flags are only needed when compiling/linking a user program
|
||||
# for execution.
|
||||
@@ -26,19 +26,32 @@ CC=cicc
|
||||
debug="-g -UH5O_DEBUG -DH5F_OPT_SEEK=0"
|
||||
default_mode="-DDOS386 $debug -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
|
||||
MPICH=""
|
||||
ROMIO="/usr/community/mpi-io/romio/current"
|
||||
# Using the MPICH libary by Daniel Sands.
|
||||
# It contains both MPI-1 and MPI-IO functions.
|
||||
ROMIO="${HOME}/MPIO/mpich"
|
||||
if [ ! -d $ROMIO ]
|
||||
then
|
||||
echo "ROMIO directory ($ROMIO) not found"
|
||||
echo "Aborted"
|
||||
exit 1
|
||||
fi
|
||||
mpi1_inc=""
|
||||
mpi1_lib=""
|
||||
mpio_inc="-I$ROMIO/include"
|
||||
mpio_lib="-L$ROMIO/lib/tflop"
|
||||
mpio_lib="-L$ROMIO/lib"
|
||||
|
||||
|
||||
MPI_INC="$mpi1_inc $mpio_inc"
|
||||
MPI_LIB="$mpi1_lib $mpio_lib"
|
||||
|
||||
CFLAGS="$default_mode"
|
||||
#for version 1.1 and later
|
||||
RUNSERIAL="yod -sz 1"
|
||||
export RUNSERIAL
|
||||
RUNPARALLEL="yod -sz 8"
|
||||
export RUNPARALLEL
|
||||
LIBS="-lmpich"
|
||||
export LIBS
|
||||
|
||||
export CC CFLAGS MPI_INC MPI_LIB
|
||||
|
||||
# Once these variables are set to the proper values for your installation,
|
||||
# you can run the configure program (i.e., ./configure tflop --enable-parallel=mpio)
|
||||
@@ -49,5 +62,7 @@ export CC CFLAGS MPI_INC MPI_LIB
|
||||
# cicc and link to the MPI-IO library and the parallel version of the HDF5
|
||||
# library (that was created and installed with the configure/make process).
|
||||
|
||||
./configure tflop --enable-parallel=mpio
|
||||
|
||||
CFLAGS="$default_mode" \
|
||||
CPPFLAGS=$MPI_INC \
|
||||
LDFLAGS=$MPI_LIB \
|
||||
./configure --enable-parallel --disable-shared tflop
|
||||
|
||||
332
MANIFEST
@@ -1,3 +1,10 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# This is the list of files that are part of HDF5. All files have a
|
||||
# `./' prefix and appear in lexicographic order. Lines that end with
|
||||
# _DO_NOT_DISTRIBUTE_ will not be included in a release. Blank lines
|
||||
# and comments are ignored. Comments must start in column one.
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
./COPYING
|
||||
./INSTALL
|
||||
./INSTALL.ascired
|
||||
@@ -11,57 +18,97 @@
|
||||
./README
|
||||
./RELEASE
|
||||
./acconfig.h
|
||||
./bin/checkposix
|
||||
./bin/config.guess
|
||||
./bin/config.sub
|
||||
./bin/distdep
|
||||
./bin/errors
|
||||
./bin/install-sh
|
||||
./bin/release
|
||||
./bin/trace
|
||||
./bin/versinc
|
||||
./config/BlankForm
|
||||
./config/alpha-dec
|
||||
./config/commence.in
|
||||
./config/conclude.in
|
||||
./config/depend.in
|
||||
./config/freebsd2.2.1
|
||||
./config/hpux10.20
|
||||
./config/intel-osf1
|
||||
./config/irix5.3
|
||||
./config/irix6.2
|
||||
./config/irix64
|
||||
./config/linux
|
||||
./config/powerpc-ibm-aix4.2.1.0
|
||||
./config/rs6000-ibm-aix4.1.4.0
|
||||
./config/solaris2.5
|
||||
./aclocal.m4
|
||||
./configure
|
||||
./configure.in
|
||||
./doc/html/ddl.html
|
||||
./all.zip
|
||||
|
||||
./bin/checkapi _DO_NOT_DISTRIBUTE_
|
||||
./bin/checkposix _DO_NOT_DISTRIBUTE_
|
||||
./bin/config.guess
|
||||
./bin/config.sub
|
||||
./bin/debug-ohdr _DO_NOT_DISTRIBUTE_
|
||||
./bin/distdep
|
||||
./bin/errors _DO_NOT_DISTRIBUTE_
|
||||
./bin/h5vers
|
||||
./bin/install-sh
|
||||
./bin/iostats
|
||||
./bin/ltconfig
|
||||
./bin/ltmain.sh
|
||||
./bin/release
|
||||
./bin/snapshot
|
||||
./bin/trace
|
||||
./bin/versinc _DO_NOT_DISTRIBUTE_
|
||||
|
||||
./config/BlankForm
|
||||
./config/commence.in
|
||||
./config/conclude.in
|
||||
./config/dec-flags
|
||||
./config/dec-osf4.x
|
||||
./config/depend.in
|
||||
./config/freebsd
|
||||
./config/gnu-flags
|
||||
./config/hpux10.20
|
||||
./config/hpux9.03
|
||||
./config/intel-osf1
|
||||
./config/irix5.x
|
||||
./config/irix6.x
|
||||
./config/linux-gnu
|
||||
./config/linux-gnulibc1
|
||||
./config/linux-gnulibc2
|
||||
./config/powerpc-ibm-aix4.x
|
||||
./config/rs6000-ibm-aix4.x
|
||||
./config/solaris2.x
|
||||
./config/unicosmk
|
||||
|
||||
./doc/html/Attributes.html
|
||||
./doc/html/Big.html
|
||||
./doc/html/Caching.html
|
||||
./doc/html/CodeReview.html
|
||||
./doc/html/Chunking.html
|
||||
./doc/html/Chunk_f1.gif
|
||||
./doc/html/Chunk_f1.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/Chunk_f2.gif
|
||||
./doc/html/Chunk_f2.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/Chunk_f3.gif
|
||||
./doc/html/Chunk_f4.gif
|
||||
./doc/html/Chunk_f5.gif
|
||||
./doc/html/Chunk_f6.gif
|
||||
./doc/html/Chunk_f6.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/CodeReview.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/Coding.html
|
||||
./doc/html/Compression.html
|
||||
./doc/html/Copyright.html
|
||||
./doc/html/Datasets.html
|
||||
./doc/html/Dataspaces.html
|
||||
./doc/html/Datatypes.html
|
||||
./doc/html/DatatypesEnum.html
|
||||
./doc/html/ddl.html
|
||||
./doc/html/Debugging.html
|
||||
./doc/html/EnumMap.gif
|
||||
./doc/html/Environment.html
|
||||
./doc/html/Errors.html
|
||||
./doc/html/ExternalFiles.html
|
||||
./doc/html/ExternalFiles.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/Files.html
|
||||
./doc/html/Filters.html
|
||||
./doc/html/Glossary.html
|
||||
./doc/html/Groups.html
|
||||
./doc/html/H5.api.html
|
||||
./doc/html/H5.api_map.html
|
||||
./doc/html/H5.format.html
|
||||
./doc/html/H5.intro.html
|
||||
./doc/html/H5.sample_code.html
|
||||
./doc/html/H5.user.html
|
||||
./doc/html/IH_map1.gif
|
||||
./doc/html/IH_map2.gif
|
||||
./doc/html/IH_map3.gif
|
||||
./doc/html/IH_map4.gif
|
||||
./doc/html/IH_mapFoot.gif
|
||||
./doc/html/IH_mapHead.gif
|
||||
./doc/html/IOPipe.html
|
||||
./doc/html/MemoryManagement.html
|
||||
./doc/html/ObjectHeader.txt
|
||||
./doc/html/MemoryManagement.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/NCSAfooterlogo.gif
|
||||
./doc/html/ObjectHeader.txt _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/Properties.html
|
||||
./doc/html/Ragged.html
|
||||
./doc/html/References.html
|
||||
./doc/html/RM_H5.html
|
||||
./doc/html/RM_H5A.html
|
||||
./doc/html/RM_H5D.html
|
||||
@@ -69,76 +116,76 @@
|
||||
./doc/html/RM_H5F.html
|
||||
./doc/html/RM_H5Front.html
|
||||
./doc/html/RM_H5G.html
|
||||
./doc/html/RM_H5I.html
|
||||
./doc/html/RM_H5P.html
|
||||
./doc/html/RM_H5R.html
|
||||
./doc/html/RM_H5RA.html
|
||||
./doc/html/RM_H5S.html
|
||||
./doc/html/RM_H5T.html
|
||||
./doc/html/RM_H5Z.html
|
||||
./doc/html/Tools.html
|
||||
./doc/html/Version.html
|
||||
./doc/html/chunk1.gif
|
||||
./doc/html/chunk1.obj
|
||||
./doc/html/chunk1.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/compat.html
|
||||
./doc/html/dataset_p1.gif
|
||||
./doc/html/dataset_p1.obj
|
||||
./doc/html/extern1.gif
|
||||
./doc/html/extern1.obj
|
||||
./doc/html/extern1.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/extern2.gif
|
||||
./doc/html/extern2.obj
|
||||
./doc/html/extern2.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/group_p1.gif
|
||||
./doc/html/group_p1.obj
|
||||
./doc/html/group_p1.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/group_p2.gif
|
||||
./doc/html/group_p2.obj
|
||||
./doc/html/group_p2.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/group_p3.gif
|
||||
./doc/html/group_p3.obj
|
||||
./doc/html/group_p3.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/h5s.examples
|
||||
./doc/html/hdf2.jpg
|
||||
./doc/html/ph5design.html
|
||||
./doc/html/ph5example.c
|
||||
./doc/html/ph5implement.txt
|
||||
./doc/html/pipe1.gif
|
||||
./doc/html/pipe1.obj
|
||||
./doc/html/pipe1.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/pipe2.gif
|
||||
./doc/html/pipe2.obj
|
||||
./doc/html/pipe2.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/pipe3.gif
|
||||
./doc/html/pipe3.obj
|
||||
./doc/html/pipe3.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/pipe4.gif
|
||||
./doc/html/pipe4.obj
|
||||
./doc/html/pipe4.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/pipe5.gif
|
||||
./doc/html/pipe5.obj
|
||||
./doc/html/heap.txt
|
||||
./doc/html/pipe5.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/heap.txt _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/index.html
|
||||
./doc/html/move.html
|
||||
./doc/html/review1.html
|
||||
./doc/html/review1a.html
|
||||
./doc/html/storage.html
|
||||
./doc/html/study.html
|
||||
./doc/html/study_1000x1000.gif
|
||||
./doc/html/study_250x250.gif
|
||||
./doc/html/study_499x499.gif
|
||||
./doc/html/study_5000x1000.gif
|
||||
./doc/html/study_500x500.gif
|
||||
./doc/html/study_p1.gif
|
||||
./doc/html/study_p1.obj
|
||||
./doc/html/symtab
|
||||
./doc/html/tracing.html
|
||||
./doc/html/move.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/review1.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/review1a.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/storage.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/symtab _DO_NOT_DISTRIBUTE_
|
||||
./doc/html/version.gif
|
||||
./doc/html/version.obj
|
||||
./doc/src/Glossary.html
|
||||
./doc/src/H5.intro.doc
|
||||
./doc/src/RM_H5.html
|
||||
./doc/src/RM_H5A.html
|
||||
./doc/src/RM_H5D.html
|
||||
./doc/src/RM_H5E.html
|
||||
./doc/src/RM_H5F.html
|
||||
./doc/src/RM_H5Front.html
|
||||
./doc/src/RM_H5G.html
|
||||
./doc/src/RM_H5P.html
|
||||
./doc/src/RM_H5S.html
|
||||
./doc/src/RM_H5T.html
|
||||
./doc/src/RM_H5Z.html
|
||||
./doc/tgif/APIGrammar.obj
|
||||
./doc/tgif/FileGrammar.obj
|
||||
./doc/tgif/IOPipe.obj
|
||||
./doc/tgif/RobbPipe.obj
|
||||
./doc/tgif/UserView.obj
|
||||
./doc/html/version.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/Copyright.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/Glossary.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/H5.intro.doc _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5A.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5D.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5E.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5F.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5Front.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5G.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5P.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5R.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5S.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5T.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/RM_H5Z.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/src/Tools.html _DO_NOT_DISTRIBUTE_
|
||||
./doc/tgif/APIGrammar.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/tgif/FileGrammar.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/tgif/IOPipe.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/tgif/RobbPipe.obj _DO_NOT_DISTRIBUTE_
|
||||
./doc/tgif/UserView.obj _DO_NOT_DISTRIBUTE_
|
||||
|
||||
./examples/Attributes.txt
|
||||
./examples/Makefile.in
|
||||
./examples/h5_chunk_read.c
|
||||
@@ -147,9 +194,29 @@
|
||||
./examples/h5_group.c
|
||||
./examples/h5_read.c
|
||||
./examples/h5_write.c
|
||||
./examples/h5_select.c
|
||||
./examples/h5_attribute.c
|
||||
./examples/h5_mount.c
|
||||
./examples/h5_reference.c
|
||||
|
||||
./pablo/HDFIOTrace.h
|
||||
./pablo/HDFTrace.h
|
||||
./pablo/HDFmpioProtos.h
|
||||
./pablo/HDFrecord_RT.h
|
||||
./pablo/Makefile.in
|
||||
./pablo/PabloHDF.c
|
||||
./pablo/PabloHDF_RT.c
|
||||
./pablo/PabloHDF_SDDF.c
|
||||
./pablo/ProcIDs.h
|
||||
./pablo/PabloSedscr
|
||||
./pablo/ProcTrace.h
|
||||
./pablo/ProcTrace.inc
|
||||
./pablo/READ_ME
|
||||
|
||||
./src/.distdep
|
||||
./src/.indent.pro
|
||||
./src/.indent.pro _DO_NOT_DISTRIBUTE_
|
||||
./src/H5.c
|
||||
./src/H5api_adpt.h
|
||||
./src/H5A.c
|
||||
./src/H5Aprivate.h
|
||||
./src/H5Apublic.h
|
||||
@@ -206,7 +273,9 @@
|
||||
./src/H5Ocont.c
|
||||
./src/H5Odtype.c
|
||||
./src/H5Oefl.c
|
||||
./src/H5Ofill.c
|
||||
./src/H5Olayout.c
|
||||
./src/H5Omtime.c
|
||||
./src/H5Oname.c
|
||||
./src/H5Onull.c
|
||||
./src/H5Oprivate.h
|
||||
@@ -217,13 +286,20 @@
|
||||
./src/H5P.c
|
||||
./src/H5Pprivate.h
|
||||
./src/H5Ppublic.h
|
||||
./src/H5R.c
|
||||
./src/H5Rprivate.h
|
||||
./src/H5Rpublic.h
|
||||
./src/H5RA.c
|
||||
./src/H5RAprivate.h
|
||||
./src/H5RApublic.h
|
||||
./src/H5S.c
|
||||
./src/H5Sall.c
|
||||
./src/H5Shyper.c
|
||||
./src/H5Smpio.c
|
||||
./src/H5Snone.c
|
||||
./src/H5Spoint.c
|
||||
./src/H5Sprivate.h
|
||||
./src/H5Spublic.h
|
||||
./src/H5Ssimp.c
|
||||
./src/H5Sselect.c
|
||||
./src/H5T.c
|
||||
./src/H5Tbit.c
|
||||
@@ -231,6 +307,7 @@
|
||||
./src/H5Tpkg.h
|
||||
./src/H5Tprivate.h
|
||||
./src/H5Tpublic.h
|
||||
./src/H5Tvlen.c
|
||||
./src/H5TB.c
|
||||
./src/H5TBprivate.h
|
||||
./src/H5V.c
|
||||
@@ -244,6 +321,8 @@
|
||||
./src/H5public.h
|
||||
./src/Makefile.in
|
||||
./src/hdf5.h
|
||||
./src/libhdf5.settings.in
|
||||
|
||||
./test/.distdep
|
||||
./test/Makefile.in
|
||||
./test/big.c
|
||||
@@ -252,33 +331,118 @@
|
||||
./test/cmpd_dset.c
|
||||
./test/dsets.c
|
||||
./test/dtypes.c
|
||||
./test/enum.c
|
||||
./test/extend.c
|
||||
./test/external.c
|
||||
./test/fillval.c
|
||||
./test/flush1.c
|
||||
./test/flush2.c
|
||||
./test/gheap.c
|
||||
./test/h5test.c
|
||||
./test/h5test.h
|
||||
./test/hyperslab.c
|
||||
./test/iopipe.c
|
||||
./test/istore.c
|
||||
./test/lheap.c
|
||||
./test/links.c
|
||||
./test/shtype.c
|
||||
./test/mount.c
|
||||
./test/mtime.c
|
||||
./test/ohdr.c
|
||||
./test/overhead.c
|
||||
./test/ragged.c
|
||||
./test/space_overflow.c _DO_NOT_DISTRIBUTE_
|
||||
./test/stab.c
|
||||
./test/testhdf5.c
|
||||
./test/testhdf5.h
|
||||
./test/tattr.c
|
||||
./test/tfile.c
|
||||
./test/th5s.c
|
||||
./test/theap.c
|
||||
./test/th5s.h5
|
||||
./test/tmeta.c
|
||||
./test/tohdr.c
|
||||
./test/trefer.c
|
||||
./test/tselect.c
|
||||
./test/tstab.c
|
||||
./testpar/Makefile.ascired
|
||||
./testpar/Makefile.irix64
|
||||
./test/tvltypes.c
|
||||
./test/unlink.c
|
||||
|
||||
./testpar/Makefile.in
|
||||
./testpar/Makefile.ibmsp
|
||||
./testpar/README
|
||||
./testpar/t_dset.c
|
||||
./testpar/t_file.c
|
||||
./testpar/t_mpi.c
|
||||
./testpar/testphdf5.c
|
||||
./testpar/testphdf5.h
|
||||
|
||||
./tools/Makefile.in
|
||||
./tools/h5debug.c
|
||||
./tools/h5dump.c
|
||||
./tools/h5dump.h
|
||||
./tools/h5dumptst.c
|
||||
./tools/h5dumputil.c
|
||||
./tools/h5findshd.c
|
||||
./tools/h5import.c
|
||||
./tools/h5ls.c
|
||||
./tools/h5repart.c
|
||||
./tools/h5toh4.c
|
||||
./tools/h5toh4.h
|
||||
./tools/h5tools.c
|
||||
./tools/h5tools.h
|
||||
./tools/testh5dump.sh
|
||||
./tools/testh5toh4
|
||||
|
||||
./tools/testfiles/tall-1.ddl
|
||||
./tools/testfiles/tall-2.ddl
|
||||
./tools/testfiles/tall-3.ddl
|
||||
./tools/testfiles/tall.h5
|
||||
./tools/testfiles/tattr-1.ddl
|
||||
./tools/testfiles/tattr-2.ddl
|
||||
./tools/testfiles/tattr-3.ddl
|
||||
./tools/testfiles/tattr.h5
|
||||
./tools/testfiles/tcomp-1.ddl
|
||||
./tools/testfiles/tcomp-2.ddl
|
||||
./tools/testfiles/tcomp-3.ddl
|
||||
./tools/testfiles/tcompound.h5
|
||||
./tools/testfiles/tcompound2.h5
|
||||
./tools/testfiles/tdatareg.h5
|
||||
./tools/testfiles/tdatareg.ddl
|
||||
./tools/testfiles/tdset-1.ddl
|
||||
./tools/testfiles/tdset-2.ddl
|
||||
./tools/testfiles/tdset.h5
|
||||
./tools/testfiles/tdset2.h5
|
||||
./tools/testfiles/tenum.h5
|
||||
./tools/testfiles/tenum.ddl
|
||||
./tools/testfiles/tgroup-1.ddl
|
||||
./tools/testfiles/tgroup-2.ddl
|
||||
./tools/testfiles/tgroup.h5
|
||||
./tools/testfiles/thlink-1.ddl
|
||||
./tools/testfiles/thlink-2.ddl
|
||||
./tools/testfiles/thlink-3.ddl
|
||||
./tools/testfiles/thlink-4.ddl
|
||||
./tools/testfiles/thlink-5.ddl
|
||||
./tools/testfiles/thlink.h5
|
||||
./tools/testfiles/tloop-1.ddl
|
||||
./tools/testfiles/tloop.h5
|
||||
./tools/testfiles/tloop2.h5
|
||||
./tools/testfiles/tmany.h5
|
||||
./tools/testfiles/tobjref.h5
|
||||
./tools/testfiles/tobjref.ddl
|
||||
./tools/testfiles/tslink-1.ddl
|
||||
./tools/testfiles/tslink-2.ddl
|
||||
./tools/testfiles/tslink.h5
|
||||
./tools/testfiles/tstr-1.ddl
|
||||
./tools/testfiles/tstr.h5
|
||||
./tools/testfiles/tstr2.h5
|
||||
|
||||
./tools/testfiles/Expected/tall.hdf
|
||||
./tools/testfiles/Expected/tattr.hdf
|
||||
./tools/testfiles/Expected/tcompound.hdf
|
||||
./tools/testfiles/Expected/tcompound2.hdf
|
||||
./tools/testfiles/Expected/tdset.hdf
|
||||
./tools/testfiles/Expected/tdset2.hdf
|
||||
./tools/testfiles/Expected/tgroup.hdf
|
||||
./tools/testfiles/Expected/thlink.hdf
|
||||
./tools/testfiles/Expected/tloop.hdf
|
||||
./tools/testfiles/Expected/tmany.hdf
|
||||
./tools/testfiles/Expected/tslink.hdf
|
||||
./tools/testfiles/Expected/tstr.hdf
|
||||
./tools/testfiles/Expected/tstr2.hdf
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
SHELL=/bin/sh
|
||||
|
||||
all lib progs test _test install uninstall dep depend: _config
|
||||
all lib progs check test _test install uninstall dep depend: _config
|
||||
$(MAKE) $@
|
||||
|
||||
clean mostlyclean distclean maintainer-clean TAGS: _config
|
||||
|
||||
54
Makefile.in
@@ -1,4 +1,4 @@
|
||||
# Top-level HDF5 Makefile(.in) -*- makefile -*-
|
||||
# Top-level HDF5 Makefile(.in)
|
||||
#
|
||||
# Copyright (C) 1997 National Center for Supercomputing Applications.
|
||||
# All rights reserved.
|
||||
@@ -8,10 +8,14 @@
|
||||
# but does so in the correct order. You can alternatively invoke make from
|
||||
# each subdirectory manually.
|
||||
#
|
||||
top_srcdir=@top_srcdir@
|
||||
top_builddir=.
|
||||
srcdir=@srcdir@
|
||||
VPATH=.:@srcdir@
|
||||
@COMMENCE@
|
||||
|
||||
# Subdirectories in build-order
|
||||
SUBDIRS=src test tools
|
||||
# Subdirectories in build-order (not including `examples')
|
||||
SUBDIRS=src test tools @TESTPARALLEL@
|
||||
|
||||
##############################################################################
|
||||
# T A R G E T S
|
||||
@@ -21,7 +25,10 @@ SUBDIRS=src test tools
|
||||
# library, header files, or programs. The components can be
|
||||
# built individually with the targets lib, progs, and tests.
|
||||
#
|
||||
# test: Test the uninstalled library to make sure it works.
|
||||
# check: Test the uninstalled library to make sure it works. You may
|
||||
# also say `test' or `_test' (`test' doesn't work from the top
|
||||
# level directory for some versions of make because `test' is
|
||||
# also a directory).
|
||||
#
|
||||
# install: Installs libraries, header files, programs, and documentation
|
||||
# in the various directories under the prefix directory (lib,
|
||||
@@ -59,11 +66,22 @@ SUBDIRS=src test tools
|
||||
# make used in combination with gcc will maintain dependency
|
||||
# information automatically.
|
||||
#
|
||||
lib progs tests test _test install uninstall TAGS dep depend:
|
||||
lib progs check test _test uninstall:
|
||||
@@SETX@; for d in $(SUBDIRS); do \
|
||||
(cd $$d && $(MAKE) $@) || exit 1; \
|
||||
done
|
||||
|
||||
tests TAGS dep depend:
|
||||
@@SETX@; for d in $(SUBDIRS) examples; do \
|
||||
(cd $$d && $(MAKE) $@) || exit 1; \
|
||||
done
|
||||
|
||||
install:
|
||||
@@SETX@; for d in $(SUBDIRS); do \
|
||||
(cd $$d && $(MAKE) $@) || exit 1; \
|
||||
done
|
||||
@$(LT) --mode=finish $(libdir);
|
||||
|
||||
# Number format detection
|
||||
H5detect:
|
||||
(cd src && $(MAKE) $@)
|
||||
@@ -75,24 +93,26 @@ H5Tinit.c:
|
||||
mostlyclean distclean maintainer-clean
|
||||
|
||||
clean mostlyclean:
|
||||
@@SETX@; for d in $(SUBDIRS); do \
|
||||
(cd $$d && $(MAKE) $@) || exit 1; \
|
||||
@@SETX@; for d in $(SUBDIRS) examples pablo; do \
|
||||
(cd $$d && $(MAKE) $@); \
|
||||
done
|
||||
-$(RM) conftest conftest.c
|
||||
|
||||
distclean:
|
||||
@@SETX@; for d in $(SUBDIRS); do \
|
||||
(cd $$d && $(MAKE) $@) || exit 1; \
|
||||
@@SETX@; for d in $(SUBDIRS) examples pablo; do \
|
||||
(cd $$d && $(MAKE) $@); \
|
||||
done
|
||||
$(RM) config/commence config/conclude config/depend
|
||||
$(RM) config.cache config.log config.status src/H5config.h
|
||||
$(RM) Makefile
|
||||
$(CP) Makefile.dist Makefile
|
||||
-$(RM) config/commence config/conclude config/depend
|
||||
-$(RM) config.cache config.log config.status src/H5config.h
|
||||
-$(RM) config/stamp1 config/stamp2 libtool Makefile
|
||||
-$(CP) Makefile.dist Makefile
|
||||
|
||||
maintainer-clean:
|
||||
@echo "This command is intented for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
@@SETX@; for d in $(SUBDIRS); do \
|
||||
(cd $$d && $(MAKE) $@) || exit 1; \
|
||||
@@SETX@; for d in $(SUBDIRS) examples pablo; do \
|
||||
(cd $$d && $(MAKE) $@); \
|
||||
done
|
||||
$(RM) config.cache config.log config.status src/H5config.h
|
||||
$(RM) configure src/H5config.h.in
|
||||
-$(RM) config.cache config.log config.status src/H5config.h
|
||||
-$(RM) configure src/H5config.h.in
|
||||
|
||||
|
||||
2
README
@@ -1,4 +1,4 @@
|
||||
This is hdf5-1.0.23a released on 1998-06-15 05:41 UTC
|
||||
This is hdf5-1.1.110 currently under development
|
||||
Please refer to the INSTALL file for installation instructions.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
||||
232
RELEASE
@@ -1,5 +1,59 @@
|
||||
Release information for hdf5-1.0.23a
|
||||
-----------------------------------
|
||||
Release information for hdf5-1.1.x
|
||||
------------------------------------
|
||||
|
||||
CHANGES SINCE THE Version 1.0.0 RELEASE
|
||||
|
||||
* [Improvement]: configure sets up the Makefile in the parallel tests
|
||||
suit (testpar/) correctly. (Tested for O2K only.)
|
||||
|
||||
* [Bug-Fix]: Configure failed for all IRIX versions other than 6.3.
|
||||
It now configures correctly for all IRIX 6.x version.
|
||||
|
||||
CHANGES SINCE THE BETA RELEASE
|
||||
|
||||
* Added fill values for datasets. For contiguous datasets fill value
|
||||
performance may be quite poor since the fill value is written to the
|
||||
entire dataset when the dataset is created. This will be remedied
|
||||
in a future version. Chunked datasets using fill values do not
|
||||
incur any additional overhead. See H5Pset_fill_value().
|
||||
|
||||
* Multiple hdf5 files can be "mounted" on one another to create a
|
||||
larger virtual file. See H5Fmount().
|
||||
|
||||
* Object names can be removed or changed but objects are never
|
||||
actually removed from the file yet. See H5Gunlink() and H5Gmove().
|
||||
|
||||
* Added a tuning mechanism for B-trees to insure that sequential
|
||||
writes to chunked datasets use less overhead. See H5Pset_btree_ratios().
|
||||
|
||||
* Various optimizations and bug fixes.
|
||||
|
||||
|
||||
CHANGES SINCE THE SECOND ALPHA
|
||||
|
||||
* Strided hyperslab selections in dataspaces now working.
|
||||
|
||||
* The compression API has been replaced with a more general filter
|
||||
API. See doc/html/Filters.html for details.
|
||||
|
||||
* Alpha-quality 2d ragged arrays are implemented as a layer built on
|
||||
top of other hdf5 objects. The API and storage format will almost
|
||||
certainly change.
|
||||
|
||||
* More debugging support including API tracing. See Debugging.html.
|
||||
|
||||
* C and Fortran style 8-bit fixed-length character string types are
|
||||
supported with space or null padding or null termination and
|
||||
translations between them.
|
||||
|
||||
* Added function H5Fflush() to write all cached data immediately to
|
||||
the file.
|
||||
|
||||
* Datasets maintain a modification time which can be retrieved with
|
||||
H5Gstat().
|
||||
|
||||
* The h5ls tool can display much more information, including all the
|
||||
values of a dataset.
|
||||
|
||||
CHANGES SINCE THE FIRST ALPHA
|
||||
|
||||
@@ -37,12 +91,12 @@ Release information for hdf5-1.0.23a
|
||||
which correspond to the standard C types like H5T_NATIVE_INT.
|
||||
|
||||
* More debugging support was added. If tracing is enabled at
|
||||
configuration time and the HDF5_TRACE environment variable is set to
|
||||
a file descriptor then all API calls will emit the function name,
|
||||
argument names and values, and return value on that file number.
|
||||
There is an html document that describes this. If appropriate
|
||||
debugging options are enabled at configuration time, some packages
|
||||
will display performance information on stderr.
|
||||
configuration time (the default) and the HDF5_TRACE environment
|
||||
variable is set to a file descriptor then all API calls will emit
|
||||
the function name, argument names and values, and return value on
|
||||
that file number. There is an html document that describes this.
|
||||
If appropriate debugging options are enabled at configuration time,
|
||||
some packages will display performance information on stderr.
|
||||
|
||||
* Data types can be stored in the file as independent objects and
|
||||
multiple datasets can share a data type.
|
||||
@@ -60,7 +114,7 @@ Release information for hdf5-1.0.23a
|
||||
HDF5.
|
||||
|
||||
* Hard and soft (symbolic) links are implemented which allow groups to
|
||||
share objects.
|
||||
share objects. Dangling and recursive symbolic links are supported.
|
||||
|
||||
* User-defined data compression is implemented although we may
|
||||
generalize the interface to allow arbitrary user-defined filters
|
||||
@@ -113,8 +167,8 @@ Library
|
||||
H5open - initialize library (happens automatically)
|
||||
H5close - shut down the library (happens automatically)
|
||||
H5dont_atexit - don't call H5close on exit
|
||||
H5version - retrieve library version info
|
||||
H5version_check - check for specific library version
|
||||
H5get_libversion - retrieve library version info
|
||||
H5check_version - check for specific library version
|
||||
|
||||
Property Lists
|
||||
H5Pclose - release template resources
|
||||
@@ -156,10 +210,10 @@ Property Lists
|
||||
H5Pset_buffer - set raw-data I/O pipe buffer properties
|
||||
H5Pget_preserve - get type conversion preservation properties
|
||||
H5Pset_preserve - set type conversion preservation properties
|
||||
H5Pget_compression - get raw data compression properties
|
||||
H5Pset_compression - set raw data compression properties
|
||||
H5Pget_deflate - get deflate compression properties
|
||||
H5Pset_deflate - set deflate compression properties
|
||||
H5Pget_nfilters - get number of raw data filters
|
||||
H5Pget_filter - get raw data filter properties
|
||||
H5Pset_filter - set raw data filter properties
|
||||
H5Pset_deflate - set deflate compression filter properties
|
||||
H5Pget_mpi - get MPI-IO properties
|
||||
H5Pset_mpi - set MPI-IO properties
|
||||
H5Pget_xfer - get data transfer properties
|
||||
@@ -177,64 +231,74 @@ Datasets
|
||||
H5Dextend - extend a dataset
|
||||
|
||||
Attributes
|
||||
H5Acreate - create a new attribute
|
||||
H5Aopen_name - open an attribute by name
|
||||
H5Aopen_idx - open an attribute by number
|
||||
H5Acreate - create a new attribute
|
||||
H5Aopen_name - open an attribute by name
|
||||
H5Aopen_idx - open an attribute by number
|
||||
H5Awrite - write values into an attribute
|
||||
H5Aread - read values from an attribute
|
||||
H5Aget_space - get attribute data space
|
||||
H5Aget_type - get attribute data type
|
||||
H5Aget_name - get attribute name
|
||||
H5Anum_attrs - return the number of attributes for an object
|
||||
H5Aiterate - iterate over an object's attributes
|
||||
H5Adelete - delete an attribute
|
||||
H5Aget_space - get attribute data space
|
||||
H5Aget_type - get attribute data type
|
||||
H5Aget_name - get attribute name
|
||||
H5Anum_attrs - return the number of attributes for an object
|
||||
H5Aiterate - iterate over an object's attributes
|
||||
H5Adelete - delete an attribute
|
||||
H5Aclose - close an attribute
|
||||
|
||||
Errors
|
||||
H5Eclear - clear the error stack
|
||||
H5Eprint - print an error stack
|
||||
H5Eget_auto - get automatic error reporting settings
|
||||
H5Eset_auto - set automatic error reporting
|
||||
H5Eget_auto - get automatic error reporting settings
|
||||
H5Eset_auto - set automatic error reporting
|
||||
H5Ewalk - iterate over the error stack
|
||||
H5Ewalk_cb - the default error stack iterator function
|
||||
H5Eget_major - get the message for the major error number
|
||||
H5Eget_minor - get the message for the minor error number
|
||||
H5Ewalk_cb - the default error stack iterator function
|
||||
H5Eget_major - get the message for the major error number
|
||||
H5Eget_minor - get the message for the minor error number
|
||||
|
||||
Files
|
||||
H5Fclose - close a file and release resources
|
||||
H5Fclose - close a file and release resources
|
||||
H5Fcreate - create a new file
|
||||
H5Fget_create_template- get file creation property list
|
||||
H5Fget_access_template- get file access property list
|
||||
H5Fget_create_plist - get file creation property list
|
||||
H5Fget_access_plist - get file access property list
|
||||
H5Fis_hdf5 - determine if a file is an hdf5 file
|
||||
H5Fopen - open an existing file
|
||||
H5Fopen - open an existing file
|
||||
|
||||
Groups
|
||||
H5Gclose - close a group and release resources
|
||||
H5Gcreate - create a new group
|
||||
H5Gcreate - create a new group
|
||||
H5Gopen - open an existing group
|
||||
H5Gpop - pop a group from the cwg stack
|
||||
H5Gpush - push a group onto the cwg stack
|
||||
H5Gset - set the current working group (cwg)
|
||||
H5Giterate - iterate over the contents of a group
|
||||
H5Giterate - iterate over the contents of a group
|
||||
H5Gmove - change the name of some object
|
||||
H5Glink - create a hard or soft link to an object
|
||||
H5Gunlink - break the link between a name and an object
|
||||
H5Gstat - get information about a group entry
|
||||
H5Gunlink - break the link between a name and an object
|
||||
H5Gget_objinfo - get information about a group entry
|
||||
H5Gget_linkval - get the value of a soft link
|
||||
H5Gget_comment - get the comment string for an object
|
||||
H5Gset_comment - set the comment string for an object
|
||||
|
||||
Dataspaces
|
||||
H5Sclose - release dataspace
|
||||
H5Screate - create a new dataspace
|
||||
H5Screate_simple - create a new simple dataspace
|
||||
H5Sextent_dims - get dataspace size
|
||||
H5Screate - create a new data space
|
||||
H5Scopy - copy a data space
|
||||
H5Sclose - release data space
|
||||
H5Screate_simple - create a new simple data space
|
||||
H5Sset_space - set simple data space extents
|
||||
H5Sis_simple - determine if data space is simple
|
||||
H5Sset_extent_simple - set simple data space dimensionality and size
|
||||
H5Sget_simple_extent_npoints - get number of points in simple extent
|
||||
H5Sget_simple_extent_ndims - get simple data space dimensionality
|
||||
H5Sget_simple_extent_dims - get simple data space size
|
||||
H5Sget_simple_extent_type - get type of simple extent
|
||||
H5Sset_extent_none - reset extent to be empty
|
||||
H5Sextent_copy - copy the extent from one data space to another
|
||||
H5Sget_select_npoints - get number of points selected for I/O
|
||||
H5Sselect_hyperslab - set hyperslab dataspace selection
|
||||
H5Sselect_elements - set element sequence dataspace selection
|
||||
H5Sextent_ndims - get dataspace dimensionality
|
||||
H5Sextent_npoints - get number of points in extent of dataspace
|
||||
H5Sselect_npoints - get number of selected points in dataspace
|
||||
H5Sis_simple - determine if dataspace is simple
|
||||
H5Sset_extent_simple - set simple dataspace dimensionality and size
|
||||
H5Scopy - copy a dataspace
|
||||
H5Sselect_all - select entire extent for I/O
|
||||
H5Sselect_none - deselect all elements of extent
|
||||
H5Soffset_simple - set selection offset
|
||||
H5Sselect_valid - determine if selection is valid for extent
|
||||
|
||||
Datatypes
|
||||
H5Tclose - release data type resources
|
||||
@@ -244,8 +308,14 @@ Datatypes
|
||||
H5Tcopy - copy a data type
|
||||
H5Tcreate - create a new data type
|
||||
H5Tequal - compare two data types
|
||||
H5Tlock - lock type to prevent changes
|
||||
H5Tfind - find a data type conversion function
|
||||
H5Tconvert - convert data from one type to another
|
||||
H5Tregister_hard - register specific type conversion function
|
||||
H5Tregister_soft - register general type conversion function
|
||||
H5Tunregister - remove a type conversion function
|
||||
H5Tget_overflow - get function that handles overflow conv. cases
|
||||
H5Tset_overflow - set function to handle overflow conversion cases
|
||||
H5Tget_class - get data type class
|
||||
H5Tget_cset - get character set
|
||||
H5Tget_ebias - get exponent bias
|
||||
@@ -264,11 +334,9 @@ Datatypes
|
||||
H5Tget_sign - get integer sign type
|
||||
H5Tget_size - get size in bytes
|
||||
H5Tget_strpad - get string padding
|
||||
H5Tinsert - insert struct member
|
||||
H5Tlock - lock type to prevent changes
|
||||
H5Tinsert - insert scalar struct member
|
||||
H5Tinsert_array - insert array struct member
|
||||
H5Tpack - pack struct members
|
||||
H5Tregister_hard - register specific type conversion function
|
||||
H5Tregister_soft - register general type conversion function
|
||||
H5Tset_cset - set character set
|
||||
H5Tset_ebias - set exponent bias
|
||||
H5Tset_fields - set floating point fields
|
||||
@@ -281,36 +349,54 @@ Datatypes
|
||||
H5Tset_sign - set integer sign type
|
||||
H5Tset_size - set size in bytes
|
||||
H5Tset_strpad - set string padding
|
||||
H5Tunregister - remove a type conversion function
|
||||
|
||||
Compression
|
||||
H5Tregister - register a new compression method
|
||||
Filters
|
||||
H5Tregister - register a new filter method
|
||||
|
||||
Ragged Arrays (alpha)
|
||||
H5Rcreate - create a new ragged array
|
||||
H5Ropen - open an existing array
|
||||
H5Rclose - close a ragged array
|
||||
H5Rwrite - write to an array
|
||||
H5Rread - read from an array
|
||||
|
||||
This release has been tested on UNIX platforms only; specifically:
|
||||
Linux, FreedBSD, IRIX, Solaris & Dec UNIX.
|
||||
|
||||
|
||||
Release information for parallel HDF5
|
||||
-------------------------------------
|
||||
RELEASE INFORMATION FOR PARALLEL HDF5
|
||||
-------------------------------------
|
||||
|
||||
+) Current release supports independent access to fixed dimension datasets
|
||||
only.
|
||||
* Current release supports independent access to fixed dimension datasets
|
||||
only.
|
||||
|
||||
+) The comm and info arguments of H5Cset_mpi are not used. All parallel
|
||||
I/O are done via MPI_COMM_WORLD. Access_mode for H5Cset_mpi can be
|
||||
H5ACC_INDEPENDENT only.
|
||||
* The comm and info arguments of H5Cset_mpi are not used. All parallel
|
||||
I/O are done via MPI_COMM_WORLD. Access_mode for H5Cset_mpi can be
|
||||
H5ACC_INDEPENDENT only.
|
||||
|
||||
+) This release of parallel HDF5 has been tested on IBM SP2 and SGI
|
||||
Origin 2000 systems. It uses the ROMIO version of MPIO interface
|
||||
for parallel I/O supports.
|
||||
* This release of parallel HDF5 has been tested on IBM SP2 and SGI
|
||||
Origin 2000 systems. It uses the ROMIO version of MPIO interface
|
||||
for parallel I/O supports.
|
||||
|
||||
+) Useful URL's.
|
||||
Parallel HDF webpage: "http://hdf.ncsa.uiuc.edu/Parallel_HDF/"
|
||||
ROMIO webpage: "http://www.mcs.anl.gov/home/thakur/romio/"
|
||||
* Useful URL's.
|
||||
Parallel HDF webpage: "http://hdf.ncsa.uiuc.edu/Parallel_HDF/"
|
||||
ROMIO webpage: "http://www.mcs.anl.gov/home/thakur/romio/"
|
||||
|
||||
+) Some to-do items for future releases
|
||||
support for Intel Teraflop platform.
|
||||
support for unlimited dimension datasets.
|
||||
support for file access via a communicator besides MPI_COMM_WORLD.
|
||||
support for collective access to datasets.
|
||||
support for independent create/open of datasets.
|
||||
* Some to-do items for future releases
|
||||
support for Intel Teraflop platform.
|
||||
support for unlimited dimension datasets.
|
||||
support for file access via a communicator besides MPI_COMM_WORLD.
|
||||
support for collective access to datasets.
|
||||
support for independent create/open of datasets.
|
||||
|
||||
|
||||
|
||||
PLATFORMS SUPPORTED
|
||||
-------------------
|
||||
|
||||
Platform(OS) C-Compiler Fortran-Compiler
|
||||
------------ ---------- ----------------
|
||||
Sun4(Solaris 2.5) CC SC4.0 f77 SC4.0
|
||||
SGI (IRIX v6.5) CC 7.21 f77 7.21
|
||||
SGI-Origin(IRIX64 v6.4-n32) CC 7.2.1.2m f77 7.2.1.2m
|
||||
SGI-Origin(IRIX64 v6.4-64) CC 7.2.1.2m f77 7.2.1.2m
|
||||
|
||||
29
acconfig.h
@@ -10,5 +10,32 @@
|
||||
/* Define if it's safe to use `long long' for hsize_t and hssize_t */
|
||||
#undef HAVE_LARGE_HSIZET
|
||||
|
||||
/* The width parameter for printf formats for type `long long', us. `ll' */
|
||||
/* Width for printf() for type `long long' or `__int64', us. `ll' */
|
||||
#undef PRINTF_LL_WIDTH
|
||||
|
||||
/* Define if `tm_gmtoff' is a member of `struct tm' */
|
||||
#undef HAVE_TM_GMTOFF
|
||||
|
||||
/* Define if `__tm_gmtoff' is a member of `struct tm' */
|
||||
#undef HAVE___TM_GMTOFF
|
||||
|
||||
/* Define if `timezone' is a global variable */
|
||||
#undef HAVE_TIMEZONE
|
||||
|
||||
/* Define if `struct timezone' is defined */
|
||||
#undef HAVE_STRUCT_TIMEZONE
|
||||
|
||||
/* Define if `struct stat' has the `st_blocks' field */
|
||||
#undef HAVE_STAT_ST_BLOCKS
|
||||
|
||||
/* Define if `struct text_info' is defined */
|
||||
#undef HAVE_STRUCT_TEXT_INFO
|
||||
|
||||
/* Define if `struct videoconfig' is defined */
|
||||
#undef HAVE_STRUCT_VIDEOCONFIG
|
||||
|
||||
/* Define if the ioctl TIOCGETD is defined */
|
||||
#undef HAVE_TIOCGETD
|
||||
|
||||
/* Define if the ioctl TIOCGWINSZ is defined */
|
||||
#undef HAVE_TIOCGWINSZ
|
||||
|
||||
259
aclocal.m4
vendored
Normal file
@@ -0,0 +1,259 @@
|
||||
## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*-
|
||||
## Copyright (C) 1996-1998 Free Software Foundation, Inc.
|
||||
## Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; either version 2 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful, but
|
||||
## WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
## General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## As a special exception to the GNU General Public License, if you
|
||||
## distribute this file as part of a program that contains a
|
||||
## configuration script generated by Autoconf, you may include it under
|
||||
## the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# serial 24 AM_PROG_LIBTOOL
|
||||
AC_DEFUN(AM_PROG_LIBTOOL,
|
||||
[AC_REQUIRE([AM_ENABLE_SHARED])dnl
|
||||
AC_REQUIRE([AM_ENABLE_STATIC])dnl
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
AC_REQUIRE([AC_PROG_RANLIB])dnl
|
||||
AC_REQUIRE([AC_PROG_CC])dnl
|
||||
AC_REQUIRE([AM_PROG_LD])dnl
|
||||
AC_REQUIRE([AM_PROG_NM])dnl
|
||||
AC_REQUIRE([AC_PROG_LN_S])dnl
|
||||
dnl
|
||||
# Always use our own libtool.
|
||||
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
|
||||
AC_SUBST(LIBTOOL)dnl
|
||||
|
||||
# Check for any special flags to pass to ltconfig.
|
||||
libtool_flags=
|
||||
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
||||
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
||||
test "$silent" = yes && libtool_flags="$libtool_flags --silent"
|
||||
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
||||
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
||||
|
||||
# Some flags need to be propagated to the compiler or linker for good
|
||||
# libtool support.
|
||||
case "$host" in
|
||||
*-*-irix6*)
|
||||
# Find out which ABI we are using.
|
||||
echo '[#]line __oline__ "configure"' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
case "`/usr/bin/file conftest.o`" in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -32"
|
||||
;;
|
||||
*N32*)
|
||||
LD="${LD-ld} -n32"
|
||||
;;
|
||||
*64-bit*)
|
||||
LD="${LD-ld} -64"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
rm -rf conftest*
|
||||
;;
|
||||
|
||||
*-*-sco3.2v5*)
|
||||
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
|
||||
CFLAGS="$CFLAGS -belf"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
||||
AR="$AR" CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
||||
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
||||
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \
|
||||
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
|
||||
|| AC_MSG_ERROR([libtool configure failed])
|
||||
])
|
||||
|
||||
# AM_ENABLE_SHARED - implement the --enable-shared flag
|
||||
# Usage: AM_ENABLE_SHARED[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AM_ENABLE_SHARED,
|
||||
[define([AM_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(shared,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-shared build shared libraries [default=>>AM_ENABLE_SHARED_DEFAULT]
|
||||
changequote([, ])dnl
|
||||
[ --enable-shared=PKGS only build shared libraries if the current package
|
||||
appears as an element in the PKGS list],
|
||||
[p=${PACKAGE-default}
|
||||
case "$enableval" in
|
||||
yes) enable_shared=yes ;;
|
||||
no) enable_shared=no ;;
|
||||
*)
|
||||
enable_shared=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
||||
for pkg in $enableval; do
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_shared=yes
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
;;
|
||||
esac],
|
||||
enable_shared=AM_ENABLE_SHARED_DEFAULT)dnl
|
||||
])
|
||||
|
||||
# AM_DISABLE_SHARED - set the default shared flag to --disable-shared
|
||||
AC_DEFUN(AM_DISABLE_SHARED,
|
||||
[AM_ENABLE_SHARED(no)])
|
||||
|
||||
# AM_DISABLE_STATIC - set the default static flag to --disable-static
|
||||
AC_DEFUN(AM_DISABLE_STATIC,
|
||||
[AM_ENABLE_STATIC(no)])
|
||||
|
||||
# AM_ENABLE_STATIC - implement the --enable-static flag
|
||||
# Usage: AM_ENABLE_STATIC[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AM_ENABLE_STATIC,
|
||||
[define([AM_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(static,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-static build static libraries [default=>>AM_ENABLE_STATIC_DEFAULT]
|
||||
changequote([, ])dnl
|
||||
[ --enable-static=PKGS only build shared libraries if the current package
|
||||
appears as an element in the PKGS list],
|
||||
[p=${PACKAGE-default}
|
||||
case "$enableval" in
|
||||
yes) enable_static=yes ;;
|
||||
no) enable_static=no ;;
|
||||
*)
|
||||
enable_static=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
||||
for pkg in $enableval; do
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_static=yes
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
;;
|
||||
esac],
|
||||
enable_static=AM_ENABLE_STATIC_DEFAULT)dnl
|
||||
])
|
||||
|
||||
|
||||
# AM_PROG_LD - find the path to the GNU or non-GNU linker
|
||||
AC_DEFUN(AM_PROG_LD,
|
||||
[AC_ARG_WITH(gnu-ld,
|
||||
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
|
||||
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
|
||||
AC_REQUIRE([AC_PROG_CC])
|
||||
ac_prog=ld
|
||||
if test "$ac_cv_prog_gcc" = yes; then
|
||||
# Check if gcc -print-prog-name=ld gives a path.
|
||||
AC_MSG_CHECKING([for ld used by GCC])
|
||||
ac_prog=`($CC -print-prog-name=ld) 2>&5`
|
||||
case "$ac_prog" in
|
||||
# Accept absolute paths.
|
||||
/* | [A-Za-z]:\\*)
|
||||
test -z "$LD" && LD="$ac_prog"
|
||||
;;
|
||||
"")
|
||||
# If it fails, then pretend we aren't using GCC.
|
||||
ac_prog=ld
|
||||
;;
|
||||
*)
|
||||
# If it is relative, then search for the first ld in PATH.
|
||||
with_gnu_ld=unknown
|
||||
;;
|
||||
esac
|
||||
elif test "$with_gnu_ld" = yes; then
|
||||
AC_MSG_CHECKING([for GNU ld])
|
||||
else
|
||||
AC_MSG_CHECKING([for non-GNU ld])
|
||||
fi
|
||||
AC_CACHE_VAL(ac_cv_path_LD,
|
||||
[if test -z "$LD"; then
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in $PATH; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f "$ac_dir/$ac_prog"; then
|
||||
ac_cv_path_LD="$ac_dir/$ac_prog"
|
||||
# Check to see if the program is GNU ld. I'd rather use --version,
|
||||
# but apparently some GNU ld's only accept -v.
|
||||
# Break only if it was the GNU/non-GNU ld that we prefer.
|
||||
if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
|
||||
test "$with_gnu_ld" != no && break
|
||||
else
|
||||
test "$with_gnu_ld" != yes && break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
else
|
||||
ac_cv_path_LD="$LD" # Let the user override the test with a path.
|
||||
fi])
|
||||
LD="$ac_cv_path_LD"
|
||||
if test -n "$LD"; then
|
||||
AC_MSG_RESULT($LD)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
|
||||
AC_SUBST(LD)
|
||||
AM_PROG_LD_GNU
|
||||
])
|
||||
|
||||
AC_DEFUN(AM_PROG_LD_GNU,
|
||||
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
|
||||
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
|
||||
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
|
||||
ac_cv_prog_gnu_ld=yes
|
||||
else
|
||||
ac_cv_prog_gnu_ld=no
|
||||
fi])
|
||||
])
|
||||
|
||||
# AM_PROG_NM - find the path to a BSD-compatible name lister
|
||||
AC_DEFUN(AM_PROG_NM,
|
||||
[AC_MSG_CHECKING([for BSD-compatible nm])
|
||||
AC_CACHE_VAL(ac_cv_path_NM,
|
||||
[case "$NM" in
|
||||
/* | [A-Za-z]:\\*)
|
||||
ac_cv_path_NM="$NM" # Let the user override the test with a path.
|
||||
;;
|
||||
*)
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/nm; then
|
||||
# Check to see if the nm accepts a BSD-compat flag.
|
||||
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||
# nm: unknown option "B" ignored
|
||||
if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
|
||||
ac_cv_path_NM="$ac_dir/nm -B"
|
||||
elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
|
||||
ac_cv_path_NM="$ac_dir/nm -p"
|
||||
else
|
||||
ac_cv_path_NM="$ac_dir/nm"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
|
||||
;;
|
||||
esac])
|
||||
NM="$ac_cv_path_NM"
|
||||
AC_MSG_RESULT([$NM])
|
||||
AC_SUBST(NM)
|
||||
])
|
||||
35
bin/checkapi
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/perl -w
|
||||
require 5.003;
|
||||
|
||||
# Purpose: insures that API functions aren't called internally.
|
||||
# Usage: checkapi H5*.c
|
||||
my $comment = 0;
|
||||
while (<>) {
|
||||
|
||||
# Remove comments within the line.
|
||||
s/\/\*.*?\*\///g;
|
||||
|
||||
# Process comment begin and end tokens on this line.
|
||||
$comment-- if /\*\//; # count comment ends
|
||||
next if $comment; # skip line if in comment
|
||||
$comment++ if /\/\*/; # count comment starts
|
||||
s/(.*)\/\*.*/$1/; # remove comments that begin on this line
|
||||
|
||||
# Remove character strings
|
||||
s/\\.//g; # remove escaped characters
|
||||
s/\".*?\"//g; # remove string constants
|
||||
|
||||
# Disregard the following hits
|
||||
next if /^H5/;
|
||||
next if /^\#/;
|
||||
next if /FUNC_ENTER/;
|
||||
|
||||
next unless /(H5[A-Z]{1,2}[a-z]\w*)/;
|
||||
print "$ARGV:$.: $1\n";
|
||||
} continue {
|
||||
if (eof) {
|
||||
print "$ARGV:$.: bad comment nesting\n" if $comment;
|
||||
$comment = 0;
|
||||
close ARGV; # reset line number
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,8 @@ while (<>) {
|
||||
# Get rid of string constants if they begin and end on this line.
|
||||
s/([\'\"])([^\1]|\\\1)*?\1/$1$1/g;
|
||||
|
||||
# Get rid of preprocessor directives
|
||||
s/^\#.*//;
|
||||
|
||||
# Now find all function calls on this line
|
||||
while (($name)=/\b([a-gi-z_A-GI-Z]\w*)\s*\(/) {
|
||||
@@ -44,14 +46,19 @@ while (<>) {
|
||||
# calls.
|
||||
next if $name =~ /^(if|for|return|sizeof|switch|while|void)$/;
|
||||
|
||||
# Ignore things that get misdetected because of the simplified
|
||||
# parsing that takes place here.
|
||||
next if $name =~ /^int$/;
|
||||
|
||||
# These are really HDF5 functions/macros even though they don't
|
||||
# start with `h' or `H'.
|
||||
next if $name =~ /^FUNC_(ENTER|LEAVE)(_INIT)?$/;
|
||||
next if $name =~ /^U?INT(8|16|32|64)(ENCODE|DECODE)$/;
|
||||
next if $name =~ /^(MIN|MAX3?|NELMTS|BOUND|CONSTR)$/;
|
||||
next if $name =~ /^(MIN3?|MAX3?|NELMTS|BOUND|CONSTR)$/;
|
||||
next if $name =~ /^addr_defined$/;
|
||||
|
||||
# These functions/macros are exempt.
|
||||
next if $name =~ /^(assert|main|[fs]?printf)$/;
|
||||
next if $name =~ /^(assert|main|[fs]?printf|va_(start|arg|end))$/;
|
||||
|
||||
print "$ARGV:$.: $name\n";
|
||||
}
|
||||
|
||||
451
bin/config.guess
vendored
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
@@ -51,35 +51,110 @@ trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
|
||||
# Note: order is significant - the case branches are not exclusive.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
alpha:OSF1:V*:*)
|
||||
# After 1.2, OSF1 uses "V1.3" for uname -r.
|
||||
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
|
||||
exit 0 ;;
|
||||
alpha:OSF1:*:*)
|
||||
if test $UNAME_RELEASE = "V4.0"; then
|
||||
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
||||
fi
|
||||
# A Vn.n version is a released version.
|
||||
# A Tn.n version is a released field test version.
|
||||
# A Xn.n version is an unreleased experimental baselevel.
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
echo alpha-dec-osf${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
cat <<EOF >dummy.s
|
||||
.globl main
|
||||
.ent main
|
||||
main:
|
||||
.frame \$30,0,\$26,0
|
||||
.prologue 0
|
||||
.long 0x47e03d80 # implver $0
|
||||
lda \$2,259
|
||||
.long 0x47e20c21 # amask $2,$1
|
||||
srl \$1,8,\$2
|
||||
sll \$2,2,\$2
|
||||
sll \$0,3,\$0
|
||||
addl \$1,\$0,\$0
|
||||
addl \$2,\$0,\$0
|
||||
ret \$31,(\$26),1
|
||||
.end main
|
||||
EOF
|
||||
${CC-cc} dummy.s -o dummy 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
./dummy
|
||||
case "$?" in
|
||||
7)
|
||||
UNAME_MACHINE="alpha"
|
||||
;;
|
||||
15)
|
||||
UNAME_MACHINE="alphaev5"
|
||||
;;
|
||||
14)
|
||||
UNAME_MACHINE="alphaev56"
|
||||
;;
|
||||
10)
|
||||
UNAME_MACHINE="alphapca56"
|
||||
;;
|
||||
16)
|
||||
UNAME_MACHINE="alphaev6"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
rm -f dummy.s dummy
|
||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
|
||||
exit 0 ;;
|
||||
21064:Windows_NT:50:3)
|
||||
echo alpha-dec-winnt3.5
|
||||
exit 0 ;;
|
||||
Amiga*:UNIX_System_V:4.0:*)
|
||||
echo m68k-cbm-sysv4
|
||||
exit 0;;
|
||||
amiga:NetBSD:*:*)
|
||||
echo m68k-cbm-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
amiga:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
arc64:OpenBSD:*:*)
|
||||
echo mips64el-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
arc:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
hkmips:OpenBSD:*:*)
|
||||
echo mips-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
pmax:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sgi:OpenBSD:*:*)
|
||||
echo mips-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
wgrisc:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit 0;;
|
||||
Pyramid*:OSx*:*:*)
|
||||
arm32:NetBSD:*:*)
|
||||
echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
SR2?01:HI-UX/MPP:*:*)
|
||||
echo hppa1.1-hitachi-hiuxmpp
|
||||
exit 0;;
|
||||
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
|
||||
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
||||
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
||||
echo pyramid-pyramid-sysv3
|
||||
else
|
||||
echo pyramid-pyramid-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:5.*:*)
|
||||
NILE:*:*:dcosx)
|
||||
echo pyramid-pyramid-svr4
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
||||
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
i86pc:SunOS:5.*:*)
|
||||
echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:6*:*)
|
||||
# According to config.sub, this is the proper way to canonicalize
|
||||
@@ -99,27 +174,86 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
sun3*:SunOS:*:*)
|
||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun*:*:4.2BSD:*)
|
||||
UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
|
||||
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
|
||||
case "`/bin/arch`" in
|
||||
sun3)
|
||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||
;;
|
||||
sun4)
|
||||
echo sparc-sun-sunos${UNAME_RELEASE}
|
||||
;;
|
||||
esac
|
||||
exit 0 ;;
|
||||
aushp:SunOS:*:*)
|
||||
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
atari*:NetBSD:*:*)
|
||||
echo m68k-atari-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
atari*:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun3*:NetBSD:*:*)
|
||||
echo m68k-sun-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun3*:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mac68k:NetBSD:*:*)
|
||||
echo m68k-apple-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mac68k:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mvme68k:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mvme88k:OpenBSD:*:*)
|
||||
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
powerpc:machten:*:*)
|
||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
RISC*:Mach:*:*)
|
||||
echo mips-dec-mach_bsd4.3
|
||||
exit 0 ;;
|
||||
RISC*:ULTRIX:*:*)
|
||||
echo mips-dec-ultrix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
VAX*:ULTRIX*:*:*)
|
||||
echo vax-dec-ultrix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mips:*:4*:UMIPS)
|
||||
echo mips-mips-riscos4sysv
|
||||
2020:CLIX:*:*)
|
||||
echo clipper-intergraph-clix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mips:*:5*:RISCos)
|
||||
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||
sed 's/^ //' << EOF >dummy.c
|
||||
int main (argc, argv) int argc; char **argv; {
|
||||
#if defined (host_mips) && defined (MIPSEB)
|
||||
#if defined (SYSTYPE_SYSV)
|
||||
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
|
||||
#endif
|
||||
#if defined (SYSTYPE_SVR4)
|
||||
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
|
||||
#endif
|
||||
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
|
||||
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
exit (-1);
|
||||
}
|
||||
EOF
|
||||
${CC-cc} dummy.c -o dummy \
|
||||
&& ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
echo mips-mips-riscos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Night_Hawk:Power_UNIX:*:*)
|
||||
echo powerpc-harris-powerunix
|
||||
exit 0 ;;
|
||||
m88k:CX/UX:7*:*)
|
||||
echo m88k-harris-cxux7
|
||||
exit 0 ;;
|
||||
@@ -130,12 +264,17 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
echo m88k-motorola-sysv3
|
||||
exit 0 ;;
|
||||
AViiON:dgux:*:*)
|
||||
# DG/UX returns AViiON for all architectures
|
||||
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
||||
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
||||
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
||||
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||
else
|
||||
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||
fi
|
||||
else echo i586-dg-dgux${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||
echo m88k-dolphin-sysv3
|
||||
@@ -150,16 +289,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
|
||||
echo m68k-tektronix-bsd
|
||||
exit 0 ;;
|
||||
*:IRIX64:*:*)
|
||||
echo mips-sgi-irix64
|
||||
exit 0 ;;
|
||||
*:IRIX*:*:*)
|
||||
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
|
||||
exit 0 ;;
|
||||
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
||||
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
||||
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
||||
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
||||
i[34]86:AIX:*:*)
|
||||
i?86:AIX:*:*)
|
||||
echo i386-ibm-aix
|
||||
exit 0 ;;
|
||||
*:AIX:2:3)
|
||||
@@ -204,7 +340,7 @@ EOF
|
||||
echo romp-ibm-bsd4.4
|
||||
exit 0 ;;
|
||||
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
|
||||
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
||||
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
||||
exit 0 ;; # report: romp-ibm BSD 4.3
|
||||
*:BOSX:*:*)
|
||||
echo rs6000-bull-bosx
|
||||
@@ -222,7 +358,7 @@ EOF
|
||||
case "${UNAME_MACHINE}" in
|
||||
9000/31? ) HP_ARCH=m68000 ;;
|
||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||
9000/7?? | 9000/8?[79] ) HP_ARCH=hppa1.1 ;;
|
||||
9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
|
||||
9000/8?? ) HP_ARCH=hppa1.0 ;;
|
||||
esac
|
||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||
@@ -270,6 +406,13 @@ EOF
|
||||
hp8??:OSF1:*:*)
|
||||
echo hppa1.0-hp-osf
|
||||
exit 0 ;;
|
||||
i?86:OSF1:*:*)
|
||||
if [ -x /usr/sbin/sysversion ] ; then
|
||||
echo ${UNAME_MACHINE}-unknown-osf1mk
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-osf1
|
||||
fi
|
||||
exit 0 ;;
|
||||
parisc*:Lites*:*:*)
|
||||
echo hppa1.1-hp-lites
|
||||
exit 0 ;;
|
||||
@@ -297,20 +440,36 @@ EOF
|
||||
CRAY*Y-MP:*:*:*)
|
||||
echo ymp-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY*C90:*:*:*)
|
||||
echo c90-cray-unicos${UNAME_RELEASE}
|
||||
CRAY*[A-Z]90:*:*:*)
|
||||
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
||||
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
||||
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||
exit 0 ;;
|
||||
CRAY*TS:*:*:*)
|
||||
echo t90-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY*T3E:*:*:*)
|
||||
echo t3e-cray-unicosmk
|
||||
exit 0 ;;
|
||||
CRAY-2:*:*:*)
|
||||
echo cray2-cray-unicos
|
||||
exit 0 ;;
|
||||
F300:UNIX_System_V:*:*)
|
||||
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
|
||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||
exit 0 ;;
|
||||
F301:UNIX_System_V:*:*)
|
||||
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
|
||||
exit 0 ;;
|
||||
hp3[0-9][05]:NetBSD:*:*)
|
||||
echo m68k-hp-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
i[3456]86:Paragon*:*:*)
|
||||
echo ${UNAME_MACHINE}-intel-osf1
|
||||
hp300:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||
i?86:BSD/386:*:* | *:BSD/OS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:FreeBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||
@@ -318,36 +477,143 @@ EOF
|
||||
*:NetBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
*:OpenBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo i386-pc-cygwin32
|
||||
exit 0 ;;
|
||||
i*:MINGW*:*)
|
||||
echo i386-pc-mingw32
|
||||
exit 0 ;;
|
||||
p*:CYGWIN*:*)
|
||||
echo powerpcle-unknown-cygwin32
|
||||
exit 0 ;;
|
||||
prep*:SunOS:5.*:*)
|
||||
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
*:GNU:*:*)
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit 0 ;;
|
||||
*:Linux:*:*)
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
# first see if it will tell us.
|
||||
ld_help_string=`ld --help 2>&1`
|
||||
if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
|
||||
elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
|
||||
elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
|
||||
elif test "${UNAME_MACHINE}" = "alpha" ; then
|
||||
echo alpha-unknown-linux ; exit 0
|
||||
else
|
||||
# Either a pre-BFD a.out linker (linuxoldld) or one that does not give us
|
||||
# useful --help. Gcc wants to distinguish between linuxoldld and linuxaout.
|
||||
test ! -d /usr/lib/ldscripts/. \
|
||||
&& echo "${UNAME_MACHINE}-unknown-linuxoldld" && exit 0
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
ld_supported_emulations=`echo $ld_help_string \
|
||||
| sed -ne '/supported emulations:/!d
|
||||
s/[ ][ ]*/ /g
|
||||
s/.*supported emulations: *//
|
||||
s/ .*//
|
||||
p'`
|
||||
case "$ld_supported_emulations" in
|
||||
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
|
||||
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
|
||||
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
|
||||
esac
|
||||
|
||||
if test "${UNAME_MACHINE}" = "alpha" ; then
|
||||
sed 's/^ //' <<EOF >dummy.s
|
||||
.globl main
|
||||
.ent main
|
||||
main:
|
||||
.frame \$30,0,\$26,0
|
||||
.prologue 0
|
||||
.long 0x47e03d80 # implver $0
|
||||
lda \$2,259
|
||||
.long 0x47e20c21 # amask $2,$1
|
||||
srl \$1,8,\$2
|
||||
sll \$2,2,\$2
|
||||
sll \$0,3,\$0
|
||||
addl \$1,\$0,\$0
|
||||
addl \$2,\$0,\$0
|
||||
ret \$31,(\$26),1
|
||||
.end main
|
||||
EOF
|
||||
LIBC=""
|
||||
${CC-cc} dummy.s -o dummy 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
./dummy
|
||||
case "$?" in
|
||||
7)
|
||||
UNAME_MACHINE="alpha"
|
||||
;;
|
||||
15)
|
||||
UNAME_MACHINE="alphaev5"
|
||||
;;
|
||||
14)
|
||||
UNAME_MACHINE="alphaev56"
|
||||
;;
|
||||
10)
|
||||
UNAME_MACHINE="alphapca56"
|
||||
;;
|
||||
16)
|
||||
UNAME_MACHINE="alphaev6"
|
||||
;;
|
||||
esac
|
||||
|
||||
objdump --private-headers dummy | \
|
||||
grep ld.so.1 > /dev/null
|
||||
if test "$?" = 0 ; then
|
||||
LIBC="libc1"
|
||||
fi
|
||||
fi
|
||||
rm -f dummy.s dummy
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
|
||||
elif test "${UNAME_MACHINE}" = "mips" ; then
|
||||
cat >dummy.c <<EOF
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
#ifdef __MIPSEB__
|
||||
printf ("%s-unknown-linux-gnu\n", argv[1]);
|
||||
#endif
|
||||
#ifdef __MIPSEL__
|
||||
printf ("%sel-unknown-linux-gnu\n", argv[1]);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
else
|
||||
# Either a pre-BFD a.out linker (linux-gnuoldld)
|
||||
# or one that does not give us useful --help.
|
||||
# GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
|
||||
# If ld does not provide *any* "supported emulations:"
|
||||
# that means it is gnuoldld.
|
||||
echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
|
||||
test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
|
||||
|
||||
case "${UNAME_MACHINE}" in
|
||||
i?86)
|
||||
VENDOR=pc;
|
||||
;;
|
||||
*)
|
||||
VENDOR=unknown;
|
||||
;;
|
||||
esac
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
cat >dummy.c <<EOF
|
||||
#include <features.h>
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
#ifdef __ELF__
|
||||
printf ("%s-unknown-linux\n", argv[1]);
|
||||
# ifdef __GLIBC__
|
||||
# if __GLIBC__ >= 2
|
||||
printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
|
||||
# else
|
||||
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
|
||||
# endif
|
||||
# else
|
||||
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
|
||||
# endif
|
||||
#else
|
||||
printf ("%s-unknown-linuxaout\n", argv[1]);
|
||||
printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@@ -357,30 +623,45 @@ EOF
|
||||
fi ;;
|
||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
||||
# are messed up and put the nodename in both sysname and nodename.
|
||||
i[34]86:DYNIX/ptx:4*:*)
|
||||
i?86:DYNIX/ptx:4*:*)
|
||||
echo i386-sequent-sysv4
|
||||
exit 0 ;;
|
||||
i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
|
||||
i?86:UNIX_SV:4.2MP:2.*)
|
||||
# Unixware is an offshoot of SVR4, but it has its own version
|
||||
# number series starting with 2...
|
||||
# I am not positive that other SVR4 systems won't match this,
|
||||
# I just have to hope. -- rms.
|
||||
# Use sysv4.2uw... so that sysv4* matches it.
|
||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||
exit 0 ;;
|
||||
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
i[34]86:*:3.2:*)
|
||||
i?86:*:3.2:*)
|
||||
if test -f /usr/options/cb.name; then
|
||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||
echo ${UNAME_MACHINE}-unknown-isc$UNAME_REL
|
||||
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||
echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
|
||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||
&& UNAME_MACHINE=i586
|
||||
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-sysv32
|
||||
echo ${UNAME_MACHINE}-pc-sysv32
|
||||
fi
|
||||
exit 0 ;;
|
||||
pc:*:*:*)
|
||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||
# the processor, so we play safe by assuming i386.
|
||||
echo i386-pc-msdosdjgpp
|
||||
exit 0 ;;
|
||||
Intel:Mach:3*:*)
|
||||
echo i386-unknown-mach3
|
||||
echo i386-pc-mach3
|
||||
exit 0 ;;
|
||||
paragon:*:*:*)
|
||||
echo i860-intel-osf1
|
||||
@@ -396,28 +677,36 @@ EOF
|
||||
# "miniframe"
|
||||
echo m68010-convergent-sysv
|
||||
exit 0 ;;
|
||||
M680[234]0:*:R3V[567]*:*)
|
||||
M68*:*:R3V[567]*:*)
|
||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
|
||||
uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4.3 && exit 0 ;;
|
||||
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
||||
OS_REL=''
|
||||
test -r /etc/.relid \
|
||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4.3${OS_REL} && exit 0
|
||||
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
|
||||
&& echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
|
||||
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||
uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4 && exit 0 ;;
|
||||
m680[234]0:LynxOS:2.[23]*:*)
|
||||
echo m68k-lynx-lynxos${UNAME_RELEASE}
|
||||
m68*:LynxOS:2.*:*)
|
||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mc68030:UNIX_System_V:4.*:*)
|
||||
echo m68k-atari-sysv4
|
||||
exit 0 ;;
|
||||
i[34]86:LynxOS:2.[23]*:*)
|
||||
echo i386-lynx-lynxos${UNAME_RELEASE}
|
||||
i?86:LynxOS:2.*:*)
|
||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
TSUNAMI:LynxOS:2.[23]*:*)
|
||||
echo sparc-lynx-lynxos${UNAME_RELEASE}
|
||||
TSUNAMI:LynxOS:2.*:*)
|
||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
rs6000:LynxOS:2.[23]*:*)
|
||||
echo rs6000-lynx-lynxos${UNAME_RELEASE}
|
||||
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
|
||||
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
SM[BE]S:UNIX_SV:*:*)
|
||||
echo mips-dde-sysv${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
RM*:SINIX-*:*:*)
|
||||
echo mips-sni-sysv4
|
||||
@@ -430,6 +719,32 @@ EOF
|
||||
echo ns32k-sni-sysv
|
||||
fi
|
||||
exit 0 ;;
|
||||
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
||||
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
||||
echo i586-unisys-sysv4
|
||||
exit 0 ;;
|
||||
*:UNIX_System_V:4*:FTX*)
|
||||
# From Gerald Hewes <hewes@openmarket.com>.
|
||||
# How about differentiating between stratus architectures? -djm
|
||||
echo hppa1.1-stratus-sysv4
|
||||
exit 0 ;;
|
||||
*:*:*:FTX*)
|
||||
# From seanf@swdc.stratus.com.
|
||||
echo i860-stratus-sysv4
|
||||
exit 0 ;;
|
||||
mc68*:A/UX:*:*)
|
||||
echo m68k-apple-aux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
news*:NEWS-OS:*:6*)
|
||||
echo mips-sony-newsos6
|
||||
exit 0 ;;
|
||||
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
|
||||
if [ -d /usr/nec ]; then
|
||||
echo mips-nec-sysv${UNAME_RELEASE}
|
||||
else
|
||||
echo mips-unknown-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
@@ -473,7 +788,7 @@ main ()
|
||||
#endif
|
||||
int version;
|
||||
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
||||
printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3");
|
||||
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
||||
exit (0);
|
||||
#endif
|
||||
|
||||
@@ -490,7 +805,7 @@ main ()
|
||||
#endif
|
||||
|
||||
#if defined (__386BSD__)
|
||||
printf ("i386-unknown-bsd\n"); exit (0);
|
||||
printf ("i386-pc-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (sequent)
|
||||
|
||||
208
bin/config.sub
vendored
@@ -1,9 +1,9 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script, version 1.1.
|
||||
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -41,10 +41,9 @@
|
||||
# The goal of this file is to map all the various variations of a given
|
||||
# machine specification into a single specification in the form:
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
# or in some cases, the newer four-part form:
|
||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||
# It is wrong to echo any other type of specification.
|
||||
#
|
||||
# Robb Matzke, 24 Sep 1997
|
||||
# Changed i[345]86 to i[3456]86 so pentium pro processors are recognized.
|
||||
|
||||
if [ x$1 = x ]
|
||||
then
|
||||
@@ -65,11 +64,21 @@ case $1 in
|
||||
;;
|
||||
esac
|
||||
|
||||
# Separate what the user gave into CPU-COMPANY and OS (if any).
|
||||
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
||||
if [ $basic_machine != $1 ]
|
||||
then os=`echo $1 | sed 's/.*-/-/'`
|
||||
else os=; fi
|
||||
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
|
||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
case $maybe_os in
|
||||
linux-gnu*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
*)
|
||||
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
||||
if [ $basic_machine != $1 ]
|
||||
then os=`echo $1 | sed 's/.*-/-/'`
|
||||
else os=; fi
|
||||
;;
|
||||
esac
|
||||
|
||||
### Let's recognize common machines as not being operating systems so
|
||||
### that things like config.sub decstation-3100 work. We also
|
||||
@@ -84,38 +93,43 @@ case $os in
|
||||
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
|
||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp )
|
||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||
-apple)
|
||||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
-hiux*)
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
-sco5)
|
||||
os=sco3.2v5
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco4)
|
||||
os=-sco3.2v4
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco3.2.[4-9]*)
|
||||
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco3.2v[4-9]*)
|
||||
# Don't forget version if it is 3.2v4 or newer.
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco*)
|
||||
os=-sco3.2v2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-isc)
|
||||
os=-isc2.2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-clix*)
|
||||
basic_machine=clipper-intergraph
|
||||
;;
|
||||
-isc*)
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-lynx*)
|
||||
os=-lynxos
|
||||
@@ -126,35 +140,49 @@ case $os in
|
||||
-windowsnt*)
|
||||
os=`echo $os | sed -e 's/windowsnt/winnt/'`
|
||||
;;
|
||||
-psos*)
|
||||
os=-psos
|
||||
;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
case $basic_machine in
|
||||
# Recognize the basic CPU types without company name.
|
||||
# Some are omitted here because they have special meanings below.
|
||||
tahoe | i[3456]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
|
||||
| arme[lb] | pyramid \
|
||||
| tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
|
||||
| alpha | we32k | ns16k | clipper | sparclite | i370 | sh \
|
||||
| powerpc | powerpcle | sparc64 | 1750a | dsp16xx | mips64 | mipsel \
|
||||
| pdp11 | mips64el | mips64orion | mips64orionel \
|
||||
| sparc)
|
||||
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||
| arme[lb] | pyramid | mn10200 | mn10300 \
|
||||
| tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
|
||||
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
|
||||
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
|
||||
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
|
||||
| mipstx39 | mipstx39el \
|
||||
| sparc | sparclet | sparclite | sparc64 | v850)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
# We use `pc' rather than `unknown'
|
||||
# because (1) that's what they normally are, and
|
||||
# (2) the word "unknown" tends to confuse beginning users.
|
||||
i[3456]86)
|
||||
basic_machine=$basic_machine-pc
|
||||
;;
|
||||
# Object if more than one company name word.
|
||||
*-*-*)
|
||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||
exit 1
|
||||
;;
|
||||
# Recognize the basic CPU types with company name.
|
||||
vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
|
||||
| sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
|
||||
| none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
|
||||
| hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
|
||||
| pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
|
||||
| pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
|
||||
| mips64el-* | mips64orion-* | mips64orionel-*)
|
||||
vax-* | tahoe-* | i[3456]86-* | i860-* | m32r-* | m68k-* | m68000-* \
|
||||
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
||||
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
|
||||
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* \
|
||||
| alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
|
||||
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
|
||||
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
|
||||
| sparc64-* | mips64-* | mipsel-* \
|
||||
| mips64el-* | mips64orion-* | mips64orionel-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| f301-*)
|
||||
;;
|
||||
# Recognize the various machine names and aliases which stand
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
@@ -181,9 +209,9 @@ case $basic_machine in
|
||||
amiga | amiga-*)
|
||||
basic_machine=m68k-cbm
|
||||
;;
|
||||
amigados)
|
||||
amigaos | amigados)
|
||||
basic_machine=m68k-cbm
|
||||
os=-amigados
|
||||
os=-amigaos
|
||||
;;
|
||||
amigaunix | amix)
|
||||
basic_machine=m68k-cbm
|
||||
@@ -193,6 +221,10 @@ case $basic_machine in
|
||||
basic_machine=m68k-apollo
|
||||
os=-sysv
|
||||
;;
|
||||
aux)
|
||||
basic_machine=m68k-apple
|
||||
os=-aux
|
||||
;;
|
||||
balance)
|
||||
basic_machine=ns32k-sequent
|
||||
os=-dynix
|
||||
@@ -225,6 +257,14 @@ case $basic_machine in
|
||||
basic_machine=cray2-cray
|
||||
os=-unicos
|
||||
;;
|
||||
cray-t3e | t3e | t3e-cray)
|
||||
basic_machine=t3e-cray
|
||||
os=-unicosmk
|
||||
;;
|
||||
[ctj]90-cray)
|
||||
basic_machine=c90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
crds | unos)
|
||||
basic_machine=m68k-crds
|
||||
;;
|
||||
@@ -306,25 +346,28 @@ case $basic_machine in
|
||||
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
||||
basic_machine=hppa1.0-hp
|
||||
;;
|
||||
hppa-next)
|
||||
os=-nextstep3
|
||||
;;
|
||||
i370-ibm* | ibm*)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
;;
|
||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||
i[3456]86v32)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv32
|
||||
;;
|
||||
i[3456]86v4*)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv4
|
||||
;;
|
||||
i[3456]86v)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv
|
||||
;;
|
||||
i[3456]86sol2)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-solaris2
|
||||
;;
|
||||
iris | iris4d)
|
||||
@@ -355,6 +398,14 @@ case $basic_machine in
|
||||
miniframe)
|
||||
basic_machine=m68000-convergent
|
||||
;;
|
||||
mipsel*-linux*)
|
||||
basic_machine=mipsel-unknown
|
||||
os=-linux-gnu
|
||||
;;
|
||||
mips*-linux*)
|
||||
basic_machine=mips-unknown
|
||||
os=-linux-gnu
|
||||
;;
|
||||
mips3*-*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||
;;
|
||||
@@ -413,10 +464,10 @@ case $basic_machine in
|
||||
basic_machine=i860-intel
|
||||
os=-osf
|
||||
;;
|
||||
janus | tflop)
|
||||
basic_machine=i386-intel
|
||||
os=-osf1
|
||||
;;
|
||||
tflop*)
|
||||
basic_machine=i386-intel
|
||||
os=-osf1
|
||||
;;
|
||||
pbd)
|
||||
basic_machine=sparc-tti
|
||||
;;
|
||||
@@ -426,14 +477,18 @@ case $basic_machine in
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pentium | p5 | p6)
|
||||
# We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
|
||||
pentium | p5)
|
||||
basic_machine=i586-intel
|
||||
;;
|
||||
pentium-* | p5-* | p6-*)
|
||||
# We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
|
||||
pentiumpro | p6)
|
||||
basic_machine=i686-intel
|
||||
;;
|
||||
pentium-* | p5-*)
|
||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumpro-* | p6-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
k5)
|
||||
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
|
||||
basic_machine=i586-amd
|
||||
@@ -524,6 +579,12 @@ case $basic_machine in
|
||||
basic_machine=i386-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
tx39)
|
||||
basic_machine=mipstx39-unknown
|
||||
;;
|
||||
tx39el)
|
||||
basic_machine=mipstx39el-unknown
|
||||
;;
|
||||
tower | tower-32)
|
||||
basic_machine=m68k-ncr
|
||||
;;
|
||||
@@ -543,6 +604,9 @@ case $basic_machine in
|
||||
basic_machine=vax-dec
|
||||
os=-vms
|
||||
;;
|
||||
vpp*|vx|vx-*)
|
||||
basic_machine=f301-fujitsu
|
||||
;;
|
||||
vxworks960)
|
||||
basic_machine=i960-wrs
|
||||
os=-vxworks
|
||||
@@ -570,7 +634,11 @@ case $basic_machine in
|
||||
# Here we handle the default manufacturer of certain CPU types. It is in
|
||||
# some cases the only manufacturer, in others, it is the most popular.
|
||||
mips)
|
||||
basic_machine=mips-mips
|
||||
if [ x$os = x-linux-gnu ]; then
|
||||
basic_machine=mips-unknown
|
||||
else
|
||||
basic_machine=mips-mips
|
||||
fi
|
||||
;;
|
||||
romp)
|
||||
basic_machine=romp-ibm
|
||||
@@ -622,6 +690,8 @@ esac
|
||||
if [ x"$os" != x"" ]
|
||||
then
|
||||
case $os in
|
||||
# First match some system type aliases
|
||||
# that might get confused with valid system types.
|
||||
# -solaris* is a basic system type, with this one exception.
|
||||
-solaris1 | -solaris1.*)
|
||||
os=`echo $os | sed -e 's|solaris1|sunos4|'`
|
||||
@@ -629,28 +699,37 @@ case $os in
|
||||
-solaris)
|
||||
os=-solaris2
|
||||
;;
|
||||
-unixware* | svr4*)
|
||||
-svr4*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-unixware*)
|
||||
os=-sysv4.2uw
|
||||
;;
|
||||
-gnu/linux*)
|
||||
os=`echo $os | sed -e 's|gnu/linux|linux|'`
|
||||
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
|
||||
;;
|
||||
# First accept the basic system types.
|
||||
# The portable systems comes first.
|
||||
# Each alternative MUST END IN A *, to match a version number.
|
||||
# -sysv* is not here because it comes later, after sysvr4.
|
||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||
| -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[345]* \
|
||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||
| -amigados* | -msdos* | -newsos* | -unicos* | -aos* \
|
||||
| -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
|
||||
| -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* )
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -uxpv*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-linux*)
|
||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||
;;
|
||||
-sunos5*)
|
||||
os=`echo $os | sed -e 's|sunos5|solaris2|'`
|
||||
;;
|
||||
@@ -675,6 +754,9 @@ case $os in
|
||||
-ctix* | -uts*)
|
||||
os=-sysv
|
||||
;;
|
||||
-ns2 )
|
||||
os=-nextstep2
|
||||
;;
|
||||
# Preserve the version number of sinix5.
|
||||
-sinix5.*)
|
||||
os=`echo $os | sed -e 's|sinix|sysv|'`
|
||||
@@ -768,7 +850,7 @@ case $basic_machine in
|
||||
os=-sysv
|
||||
;;
|
||||
*-cbm)
|
||||
os=-amigados
|
||||
os=-amigaos
|
||||
;;
|
||||
*-dg)
|
||||
os=-dgux
|
||||
@@ -782,6 +864,9 @@ case $basic_machine in
|
||||
m88k-omron*)
|
||||
os=-luna
|
||||
;;
|
||||
*-next )
|
||||
os=-nextstep
|
||||
;;
|
||||
*-sequent)
|
||||
os=-ptx
|
||||
;;
|
||||
@@ -815,6 +900,9 @@ case $basic_machine in
|
||||
*-masscomp)
|
||||
os=-rtu
|
||||
;;
|
||||
f301-fujitsu)
|
||||
os=-uxpv
|
||||
;;
|
||||
*)
|
||||
os=-none
|
||||
;;
|
||||
@@ -833,9 +921,6 @@ case $basic_machine in
|
||||
-sunos*)
|
||||
vendor=sun
|
||||
;;
|
||||
-lynxos*)
|
||||
vendor=lynx
|
||||
;;
|
||||
-aix*)
|
||||
vendor=ibm
|
||||
;;
|
||||
@@ -863,9 +948,12 @@ case $basic_machine in
|
||||
-ptx*)
|
||||
vendor=sequent
|
||||
;;
|
||||
-vxworks*)
|
||||
-vxsim* | -vxworks*)
|
||||
vendor=wrs
|
||||
;;
|
||||
-aux*)
|
||||
vendor=apple
|
||||
;;
|
||||
esac
|
||||
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||
;;
|
||||
|
||||
26
bin/debug-ohdr
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/perl
|
||||
require 5.003;
|
||||
|
||||
# Looks for lines emitted by H5O_open() and H5O_close() and tries to
|
||||
# determine which objects were not properly closed.
|
||||
|
||||
while (<>) {
|
||||
next unless /^([<>])(0x[\da-f]+|\d+)$/;
|
||||
my ($op, $addr) = ($1, $2);
|
||||
|
||||
if ($op eq ">") {
|
||||
# Open object
|
||||
$obj{$addr} += 1;
|
||||
} else {
|
||||
# Close object
|
||||
die unless $obj{$addr}>0;
|
||||
$obj{$addr} -= 1;
|
||||
delete $obj{$addr} unless $obj{$addr};
|
||||
}
|
||||
}
|
||||
|
||||
for (sort keys %obj) {
|
||||
printf "%3d %s\n", $obj{$_}, $_;
|
||||
}
|
||||
|
||||
exit 0;
|
||||
@@ -2,6 +2,9 @@
|
||||
require 5.003;
|
||||
use Text::Tabs;
|
||||
|
||||
# NOTE: THE FORMAT OF HRETURN_ERROR AND HGOTO_ERROR MACROS HAS
|
||||
# CHANGED. THIS SCRIPT NO LONGER WORKS! --rpm
|
||||
|
||||
# Copyright (C) 1997 National Center for Supercomputing Applications.
|
||||
# All rights reserved.
|
||||
#
|
||||
|
||||
202
bin/h5vers
Executable file
@@ -0,0 +1,202 @@
|
||||
#!/usr/bin/perl -w
|
||||
require 5.003;
|
||||
|
||||
### Copyright © 1998 NCSA.
|
||||
# Robb Matzke <matzke@llnl.gov>
|
||||
# 17 July 1998
|
||||
|
||||
### Purpose
|
||||
# Increments the hdf5 version number by changing the value of
|
||||
# constants in the src/H5public.h file. The new version number is
|
||||
# printed on the standard output. An alternate source file name can be
|
||||
# specified as an argument. In any case, the original file is saved
|
||||
# by appending a tilde `~' to the name.
|
||||
|
||||
### Usage:
|
||||
# h5vers [OPTIONS] [FILE]
|
||||
|
||||
# Without options this program only displays the current version and
|
||||
# doesn't modify any files or create backups. The default is to print
|
||||
# the version number as a dotted triple like `1.0.24' but with the
|
||||
# `-v' option the version will be printed as `version 1.0 release 24'.
|
||||
#
|
||||
# The `-s VERSION' switch will set the version as specified. If the
|
||||
# string contains a dotted triple then it will be used as the version
|
||||
# number, otherwise up to three numbers will be read from the end of
|
||||
# the string and used as the major version, minor version, and release
|
||||
# number. If any numbers are missing then zero is assumed. This
|
||||
# allows versions to be specified like `-s "version 2.1 release 8"' or
|
||||
# `-s hdf5-2.1.8.tar.bz2'. If the new version is less than the old
|
||||
# version then a warning message is generated on standard error.
|
||||
#
|
||||
# The `-i [major|minor|release]' option increments the major, minor,
|
||||
# or release (the default) number. If the minor number is incremented
|
||||
# then the release number is set to zero; if the major number is
|
||||
# incremented then the minor and release numbers are set to zero.
|
||||
#
|
||||
# If a file is specified then that file is used instead of
|
||||
# ./H5public.h or ./src/H5public.h.
|
||||
#
|
||||
# If the version number is changed (either `-s' or `-i' was used on
|
||||
# the command line) then the first line of the README file one
|
||||
# directory above the H5public.h file is also modified so it looks
|
||||
# something like: This is hdf5-1.2.3 currently under development.
|
||||
##############################################################################
|
||||
|
||||
sub getvers {
|
||||
local ($_) = @_;
|
||||
my (@vers);
|
||||
|
||||
($vers[0]) = /^\#\s*define\s+H5_VERS_MAJOR\s+(\d+)/m;
|
||||
($vers[1]) = /^\#\s*define\s+H5_VERS_MINOR\s+(\d+)/m;
|
||||
($vers[2]) = /^\#\s*define\s+H5_VERS_RELEASE\s+(\d+)/m;
|
||||
return @vers;
|
||||
}
|
||||
|
||||
sub setvers {
|
||||
my ($contents, @vers) = @_;
|
||||
$_[0] =~ s/^(\#\s*define\s+H5_VERS_MAJOR\s+)\d+/$1$vers[0]/m;
|
||||
$_[0] =~ s/^(\#\s*define\s+H5_VERS_MINOR\s+)\d+/$1$vers[1]/m;
|
||||
$_[0] =~ s/^(\#\s*define\s+H5_VERS_RELEASE\s+)\d+/$1$vers[2]/m;
|
||||
}
|
||||
|
||||
sub usage {
|
||||
my ($prog) = $0 =~ /([^\/]+)$/;
|
||||
print STDERR <<EOF;
|
||||
Usage: $prog [OPTS] [FILE]
|
||||
-i major|minor|release
|
||||
Increment specified version component and set following components
|
||||
to zero.
|
||||
-s VERSION
|
||||
Set the version as specified. The version number can be embedded in
|
||||
some other string such as \"hdf5-1.1.0.tar.bz2\" or even \"this is
|
||||
hdf5 version 1.1 release 0\" for convenience.
|
||||
-v
|
||||
Instead of displaying only a dotted triple version number a line such
|
||||
as \"version 1.1 release 0\" will be printed.
|
||||
FILE
|
||||
The name of the file that contains version information. This is
|
||||
seldom necessary since files H5public.h, src/H5public.h and
|
||||
../src/H5public.h are automatically checked.
|
||||
EOF
|
||||
exit 1;
|
||||
}
|
||||
|
||||
# Parse arguments
|
||||
my ($verbose, $set, $inc, $file);
|
||||
my (@files) = ("H5public.h", "src/H5public.h", "../src/H5public.h");
|
||||
while ($_ = shift) {
|
||||
$_ eq "-s" && do {
|
||||
die "-s switch needs a version number\n" unless @ARGV;
|
||||
$set = shift;
|
||||
next;
|
||||
};
|
||||
|
||||
$_ eq "-i" && do {
|
||||
if (@ARGV && $ARGV[1]=~/^(major|minor|release)$/) {
|
||||
$inc = shift;
|
||||
} else {
|
||||
$inc = "release";
|
||||
}
|
||||
next;
|
||||
};
|
||||
|
||||
$_ eq "-v" && do {
|
||||
$verbose = 1;
|
||||
next;
|
||||
};
|
||||
|
||||
/^-(h|\?|-?help)$/ && usage;
|
||||
/^-/ && die "unrecognized option: $_\n";
|
||||
die "only one file name can be specified\n" if $file;
|
||||
$file = $_;
|
||||
}
|
||||
die "mutually exclusive options given\n" if $set && $inc;
|
||||
|
||||
# Determine file to use as H5public.h and README. The README file is
|
||||
# always in the directory above H5public.h
|
||||
unless ($file) {
|
||||
for (@files) {
|
||||
($file=$_,last) if -f $_;
|
||||
}
|
||||
}
|
||||
die "unable to read file: $file\n" unless -r $file;
|
||||
$README = $file;
|
||||
$README =~ s/[^\/]*$/..\/README/;
|
||||
die "unable to read file: $README\n" unless -r $file;
|
||||
|
||||
# Get the current version number.
|
||||
open FILE, $file or die "unable to open $file: $!\n";
|
||||
my ($contents) = join "", <FILE>;
|
||||
close FILE;
|
||||
my (@curver) = getvers $contents;
|
||||
|
||||
# Determine the new version number.
|
||||
if ($set) {
|
||||
if ($set =~ /(\d+)\.(\d+)\.(\d+)/) {
|
||||
@newver = ($1, $2, $3);
|
||||
} elsif ($set =~ /(\d+)\D+(\d+)\D+(\d+)\D*$/) {
|
||||
@newver = ($1, $2, $3);
|
||||
} elsif ($set =~ /(\d+)\D+(\d+)\D*$/) {
|
||||
@newver = ($1, $2, 0);
|
||||
} elsif ($set =~ /(\d+)\D*$/) {
|
||||
@newver = ($1, 0, 0);
|
||||
} else {
|
||||
die "illegal version number specified: $set\n";
|
||||
}
|
||||
} elsif ($inc && $inc eq "major") {
|
||||
$newver[0] = $curver[0]+1;
|
||||
@newver[1,2] = (0,0);
|
||||
} elsif ($inc && $inc eq "minor") {
|
||||
$newver[0] = $curver[0];
|
||||
$newver[1] = $curver[1]+1;
|
||||
$newver[2] = 0;
|
||||
} elsif ($inc && $inc eq "release") {
|
||||
@newver[0,1] = @curver[0,1];
|
||||
$newver[2] = $curver[2]+1;
|
||||
} elsif ($inc) {
|
||||
die "unknown increment field: $inc\n";
|
||||
} else {
|
||||
# Nothing to do but print result
|
||||
$README = "";
|
||||
@newver = @curver;
|
||||
}
|
||||
|
||||
# Print a warning if the version got smaller.
|
||||
if ($newver[0]*1000000 + $newver[1]*1000 + $newver[2] <
|
||||
$curver[0]*1000000 + $curver[1]*1000 + $curver[2]) {
|
||||
printf STDERR "Warning: version decreased from %d.%d.%d to %d.%d.%d\n",
|
||||
@curver, @newver;
|
||||
}
|
||||
|
||||
# Update the version number if it changed.
|
||||
if ($newver[0]!=$curver[0] ||
|
||||
$newver[1]!=$curver[1] ||
|
||||
$newver[2]!=$curver[2]) {
|
||||
setvers $contents, @newver or die "unable to set version\n";
|
||||
rename $file, "$file~" or die "unable to save backup file\n";
|
||||
open FILE, ">$file" or die "unable to open $file but backup saved!\n";
|
||||
print FILE $contents;
|
||||
close FILE;
|
||||
}
|
||||
|
||||
# Update the README file
|
||||
if ($README) {
|
||||
open FILE, $README or die "$README: $!\n";
|
||||
@contents = <FILE>;
|
||||
close FILE;
|
||||
$contents[0] = sprintf("This is hdf5-%d.%d.%d currently under development\n",
|
||||
@newver);
|
||||
open FILE, ">$README" or die "$README: $!\n";
|
||||
print FILE @contents;
|
||||
close FILE;
|
||||
}
|
||||
|
||||
# Print the new version number
|
||||
if ($verbose) {
|
||||
printf "version %d.%d release %d\n", @newver;
|
||||
} else {
|
||||
printf "%d.%d.%d\n", @newver;
|
||||
}
|
||||
|
||||
exit 0;
|
||||
83
bin/iostats
Executable file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Usage: pipe the output of Linux's `strace' program into the stdin of
|
||||
# this command, and the output of this command into gnuplot.
|
||||
|
||||
my ($fast,$npasses);
|
||||
if ($ARGV[0] =~ /^--?fast$/) {
|
||||
$fast = 1;
|
||||
shift;
|
||||
}
|
||||
|
||||
my $filename = shift || "tstab2.h5";
|
||||
my $total = 0;
|
||||
my %What; # What{pos}{nbytes}{r|w} = naccesses
|
||||
my($total_writes, $total_bytes_out, $total_reads, $total_bytes_in);
|
||||
|
||||
while (<>) {
|
||||
if (!defined $fd) {
|
||||
if (/^open\("(.*?)".*=\s+(\d+)/ && $1 eq $filename) {
|
||||
$fd = $2;
|
||||
$pos = 0;
|
||||
}
|
||||
} elsif (/^close\((\d+)/ && $1==$fd) {
|
||||
$fd = undef;
|
||||
} elsif (!$fast &&
|
||||
/^lseek\((\d+), -?\d+,.*= (\d+)/ &&
|
||||
$1==$fd && $2>=0) {
|
||||
$pos = $2;
|
||||
} elsif (!$fast && /^lseek\((\d+),/ && $1==$fd) {
|
||||
die $_;
|
||||
} elsif (/^write\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
|
||||
$1==$fd && $3>=0) {
|
||||
my $nbytes = $3;
|
||||
if ($fast) {
|
||||
$total_writes++;
|
||||
$total_bytes_out += $nbytes;
|
||||
} else {
|
||||
$What{$pos}{$nbytes}{w}++;
|
||||
printf "%d %d\n", $total, $pos;
|
||||
$pos += $nbytes;
|
||||
$total += $nbytes;
|
||||
}
|
||||
} elsif (/^write\((\d+),/ && $1==$fd) {
|
||||
die $_;
|
||||
} elsif (/^read\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
|
||||
$1==$fd && $3>=0) {
|
||||
my $nbytes = $3;
|
||||
if ($fast) {
|
||||
$total_reads++;
|
||||
$total_bytes_in += $nbytes;
|
||||
} else {
|
||||
$What{$pos}{$nbytes}{r}++;
|
||||
printf "%d %d\n", $total, $pos;
|
||||
$pos += $nbytes;
|
||||
$total += $nbytes;
|
||||
}
|
||||
} elsif (/^read\((\d+),/ && $1==$fd) {
|
||||
die $_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!$fast) {
|
||||
print "="x36, "\n";
|
||||
printf "%8s %8s %8s %8s\n","Position","NBytes","NReads","NWrites";
|
||||
for $pos (sort {$a<=>$b} keys %What) {
|
||||
for $nbytes (sort {$a<=>$b} keys %{$What{$pos}}) {
|
||||
printf("%8d %8d %8d %8d\n", $pos, $nbytes,
|
||||
$What{$pos}{$nbytes}{r},
|
||||
$What{$pos}{$nbytes}{w});
|
||||
$total_writes += $What{$pos}{$nbytes}{w};
|
||||
$total_reads += $What{$pos}{$nbytes}{r};
|
||||
$total_bytes_out += $What{$pos}{$nbytes}{w} * $nbytes;
|
||||
$total_bytes_in += $What{$pos}{$nbytes}{r} * $nbytes;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print "="x36, "\n";
|
||||
printf("Write: %8d calls, %10d total bytes, %10g average bytes\n",
|
||||
$total_writes, $total_bytes_out, $total_bytes_out/$total_writes);
|
||||
printf("Read: %8d calls, %10d total bytes, %10g average bytes\n",
|
||||
$total_reads, $total_bytes_in, $total_bytes_in/$total_reads);
|
||||
1512
bin/ltconfig
Executable file
2453
bin/ltmain.sh
Normal file
376
bin/release
@@ -1,249 +1,165 @@
|
||||
#! /usr/local/bin/perl -w
|
||||
require 5.003;
|
||||
use Cwd;
|
||||
#!/bin/sh
|
||||
|
||||
# Builds a release. Arguments are zero or more of the words.
|
||||
# Make a release of hdf5. The command-line switches are:
|
||||
#
|
||||
# tar -- build a tar file *.tar
|
||||
# compress -- build a compressed tar file *.tar.Z
|
||||
# gzip -- build a compressed tar file *.tar.gz
|
||||
# bzip2 -- build a compressed tar file *.tar.bz2
|
||||
# -d DIR The name of the directory where the releas(es) should be
|
||||
# placed. By default, the directory is ./releases
|
||||
#
|
||||
# If no arguments are given then `gzip' is assumed. If the only argument
|
||||
# is the word `all' then all forms are used.
|
||||
|
||||
$releases = "./releases"; # Directory for release tarballs
|
||||
|
||||
##############################################################################
|
||||
# Read version info, return an array (MAJOR,MINOR,RELEASE,PATCHLEVEL) or
|
||||
# a string "MAJOR.MINOR.RELEASE PATCHLEVEL"
|
||||
# --nocheck Ignore errors in MANIFEST file.
|
||||
#
|
||||
# The other command-line options are the names of the programs to use
|
||||
# for compressing the resulting tar archive (if none are given then
|
||||
# `tar' is assumed):
|
||||
#
|
||||
sub getver () {
|
||||
my @ver;
|
||||
|
||||
open SRC, "./src/H5public.h" or die "cannot read HDF5 version";
|
||||
while (<SRC>) {
|
||||
$ver[0] = $1 if /define\s+H5_VERS_MAJOR\s+(\d+)/;
|
||||
$ver[1] = $1 if /define\s+H5_VERS_MINOR\s+(\d+)/;
|
||||
$ver[2] = $1 if /define\s+H5_VERS_RELEASE\s+(\d+)/;
|
||||
$ver[3] = $1 if /define\s+H5_VERS_PATCH\s+(\d+)/;
|
||||
}
|
||||
close SRC;
|
||||
wantarray ? @ver : "$ver[0].$ver[1].$ver[2]".chr(ord('a')+$ver[3]);
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# Set version information. Input is a string or an array.
|
||||
# tar -- use tar and don't do any compressing.
|
||||
# compress -- use compress and append `.Z' to the output name.
|
||||
# gzip -- use gzip with `-9' and append `.gz' to the output name.
|
||||
# bzip2 -- use bzip2 with `-9' and append `.bz2' to the output name.
|
||||
#
|
||||
sub setver ($;$$$) {
|
||||
my @ver = @_;
|
||||
local $_;
|
||||
|
||||
if ($ver[0]=~/\D/) {
|
||||
@ver = $ver[0] =~ /^(\d+)\.(\d+)\.(\d+)([a-z])$/ or return "";
|
||||
$ver[3] = ord($ver[3])-ord('a');
|
||||
}
|
||||
|
||||
$_ = `cat ./src/H5public.h`;
|
||||
s/(define\s+H5_VERS_MAJOR\s+)(\d+)/$1$ver[0]/;
|
||||
s/(define\s+H5_VERS_MINOR\s+)(\d+)/$1$ver[1]/;
|
||||
s/(define\s+H5_VERS_RELEASE\s+)(\d+)/$1$ver[2]/;
|
||||
s/(define\s+H5_VERS_PATCH\s+)(\d+)/$1$ver[3]/;
|
||||
open SRC, "> ./src/H5public.h" or return "";
|
||||
print SRC $_;
|
||||
close SRC;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# Make sure MANIFEST contains all the necessary files. If we are running
|
||||
# under CVS then look at the CVS/Entries files to get the names that should
|
||||
# be in the manifest. Otherwise we really can't do anything.
|
||||
# Examples:
|
||||
#
|
||||
sub manifest () {
|
||||
my ($fname, %manifest);
|
||||
my $nprobs=0;
|
||||
|
||||
# We can't do anything if we're not running under cvs.
|
||||
return "" unless -d "CVS";
|
||||
|
||||
# Read the files from the manifest.
|
||||
open MANIFEST, "MANIFEST" or die "unable to read manifest";
|
||||
while (<MANIFEST>) {
|
||||
chomp;
|
||||
$manifest{$_} = 1;
|
||||
}
|
||||
close MANIFEST;
|
||||
|
||||
# Read files from CVS/Entries
|
||||
open FIND, "find . -name Entries -print | sort |" or
|
||||
die "unable to find CVS entries";
|
||||
while (defined($fname=<FIND>)) {
|
||||
chomp $fname;
|
||||
my ($dir) = $fname =~ m%(.*)/CVS/Entries%;
|
||||
open ENTRIES, $fname or die "unable to open $fname";
|
||||
while (<ENTRIES>) {
|
||||
my ($ename);
|
||||
next unless ($ename) = m%^/([^/]+)/[^-]%;
|
||||
$ename = "$dir/" . $ename;
|
||||
if (exists $manifest{$ename}) {
|
||||
delete $manifest{$ename};
|
||||
} else {
|
||||
print "NEW: $ename\n";
|
||||
$nprobs++;
|
||||
}
|
||||
}
|
||||
close ENTRIES;
|
||||
}
|
||||
close FIND;
|
||||
|
||||
for (sort keys %manifest) {
|
||||
print "OLD: $_\n";
|
||||
$nprobs++;
|
||||
}
|
||||
|
||||
if ($nprobs) {
|
||||
print "Please add the new files to MANIFEST and remove the old\n";
|
||||
print "files and try again. The MANIFEST should contain all files\n";
|
||||
print "that are to be distributed for a release.\n";
|
||||
exit 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Build a release
|
||||
# $ release
|
||||
# releases/hdf5-1.0.38.tar
|
||||
#
|
||||
# $ release gzip
|
||||
# releases/hdf5-1.0.38.tar.gz
|
||||
#
|
||||
# $ release -d /tmp tar compress gzip bzip2
|
||||
# /tmp/hdf5-1.0.38.tar
|
||||
# /tmp/hdf5-1.0.38.tar.Z
|
||||
# /tmp/hdf5-1.0.38.tar.gz
|
||||
# /tmp/hdf5-1.0.38.tar.bz2
|
||||
#
|
||||
sub release (@) {
|
||||
my @types = @_;
|
||||
my ($ver, $status, $created_symlink);
|
||||
my ($batch) = 0;
|
||||
local $_;
|
||||
|
||||
if (@types>0 && $types[0] =~ /^-?-batch$/) {
|
||||
$batch = 1;
|
||||
shift @types;
|
||||
}
|
||||
# Defaults
|
||||
DEST=releases
|
||||
VERS=`perl bin/h5vers`
|
||||
test "$VERS" || exit 1
|
||||
verbose=yes
|
||||
check=yes
|
||||
|
||||
# Make sure no one forgot to update MANIFEST
|
||||
manifest;
|
||||
# Command-line arguments
|
||||
while [ -n "$1" ]; do
|
||||
arg=$1
|
||||
shift
|
||||
case "$arg" in
|
||||
-d)
|
||||
DEST=$1
|
||||
shift
|
||||
;;
|
||||
--nocheck)
|
||||
check=no
|
||||
;;
|
||||
-*)
|
||||
echo "Unknown switch: $arg" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
methods="$methods $arg"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Make sure the version number is correct.
|
||||
$ver = getver;
|
||||
if ($batch) {
|
||||
print "Releasing version $ver\n";
|
||||
} else {
|
||||
print "HDF version to release [$ver] ";
|
||||
return "" unless defined ($_=<STDIN>);
|
||||
chomp;
|
||||
(setver ($ver=$_) or die "cannot set version") if /\S/;
|
||||
}
|
||||
# Default method is tar
|
||||
if [ "X$methods" = "X" ]; then
|
||||
methods=tar
|
||||
fi
|
||||
|
||||
# Update the README file to contain the new version and date
|
||||
# information.
|
||||
my $today = sprintf "19%02d-%02d-%02d %02d:%02d UTC", (gmtime)[5,4,3,2,1];
|
||||
$_ = `cat README`;
|
||||
s[^(This is hdf5-)\d+.\d+.\d+[a-z]( released on )(\d+-?){3} \d+:\d+ UTC]
|
||||
[$1$ver$2$today]s;
|
||||
system ("cp -p README README~");
|
||||
open README, ">README" or die "unable to open README: $!\n";
|
||||
print README;
|
||||
close README;
|
||||
|
||||
# Move default top-level makefile into place.
|
||||
$status = system "cp Makefile.dist Makefile";
|
||||
die "cannot install default Makefile" if $status >> 8;
|
||||
|
||||
# Make sure release directory exists
|
||||
(mkdir $releases, 0777 or die "cannot create $releases")
|
||||
unless -d $releases;
|
||||
die "no manifest" unless -r "MANIFEST";
|
||||
test "$verbose" && echo "Releasing hdf5-$VERS to $DEST" 1>&2
|
||||
if [ ! -d $DEST ]; then
|
||||
echo " Destination directory $DEST does not exist" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# We build the release from above the root of the source tree so the
|
||||
# hdf5 directory appears as part of the name in the tar file. We create
|
||||
# a temporary symlink called something like `hdf5-1.0.0a' that points to
|
||||
# our current working directory.
|
||||
$_ = cwd;
|
||||
my ($parent,$root) = m%(.*)/(.*)$% or die "cannot split directory";
|
||||
if ($root ne "hdf5-$ver" && ! -e "../hdf5-$ver") {
|
||||
symlink $root, "../hdf5-$ver" or die "cannot create link";
|
||||
$created_symlink = 1;
|
||||
}
|
||||
my $name = "$root/$releases/hdf5-$ver";
|
||||
# Copy the manifest file to get a list of file names.
|
||||
MANIFEST=/tmp/H5_MANIFEST.$$
|
||||
grep '^\.' MANIFEST | expand | cut -f1 -d' ' >$MANIFEST
|
||||
|
||||
# Build the releases.
|
||||
@types = ("gzip") unless @types;
|
||||
@types = qw/tar gzip compress bzip2/ if 1==@types && "all" eq $types[0];
|
||||
$_ = `cat MANIFEST`;
|
||||
s/^\.\///mg;
|
||||
@filelist = ("Makefile", split /\s*\n/, $_);
|
||||
$filelist = join " ", map {"hdf5-$ver/$_"} @filelist;
|
||||
|
||||
chdir ".." or die;
|
||||
for (@types) {
|
||||
print "Compressing with $_...\n";
|
||||
|
||||
/^tar$/ && do {
|
||||
$status = system "tar cf $name.tar $filelist";
|
||||
next;
|
||||
};
|
||||
|
||||
/^gzip$/ && do {
|
||||
$status = system "tar cf - $filelist |gzip -9 >$name.tar.gz";
|
||||
next;
|
||||
};
|
||||
|
||||
/^compress$/ && do {
|
||||
$status = system "tar cf - $filelist |compress -c >$name.tar.Z";
|
||||
next;
|
||||
};
|
||||
|
||||
/^bzip2$/ && do {
|
||||
$status = system "tar cf - $filelist |bzip2 -9 >$name.tar.bz2";
|
||||
next;
|
||||
};
|
||||
} continue {
|
||||
print STDERR "$_ failed\n" if $status >> 8;
|
||||
}
|
||||
chdir $root or die;
|
||||
|
||||
# Remove the temporary symlink we created above.
|
||||
unlink "../hdf5-$ver" if $created_symlink;
|
||||
|
||||
|
||||
# Update version info
|
||||
if ($batch) {
|
||||
my ($v1,$v2,$v3,$v4) = $ver =~ /^(\d+)\.(\d+)\.(\d+)([a-z])$/;
|
||||
$v3 += 1;
|
||||
setver ($ver = "$v1.$v2.${v3}a") or die "cannot set version";
|
||||
print "Development version set to $ver\n";
|
||||
} else {
|
||||
print <<EOF;
|
||||
|
||||
If this is a real release then the version number for continued development
|
||||
should be incremented. Otherwise just press return.
|
||||
# Check that all the files in MANIFEST exist and that (if this is a
|
||||
# CVS checkout) that all the CVS-managed files appear in the
|
||||
# MANIFEST.
|
||||
test "$verbose" && echo " Checking manifest..." 1>&2
|
||||
test -f $MANIFEST || exit 1
|
||||
for file in `cat $MANIFEST`; do
|
||||
if [ ! -f $file ]; then
|
||||
echo "- $file"
|
||||
fail=yes
|
||||
fi
|
||||
done
|
||||
for cvs in `find . -type d -name CVS -print`; do
|
||||
path=`echo $cvs |sed s+/CVS++`
|
||||
for file in `grep '^\/' $cvs/Entries |cut -d/ -f2`; do
|
||||
if (grep $path/$file $MANIFEST >/dev/null); then
|
||||
:
|
||||
else
|
||||
echo "+ $path/$file"
|
||||
fail=yes
|
||||
fi
|
||||
done
|
||||
done
|
||||
# for file in ./Changes `sh -c 'svf ls' 2>/dev/null`; do
|
||||
# if (grep $file $MANIFEST >/dev/null); then
|
||||
# :
|
||||
# elif [ $file = ./Changes ]; then
|
||||
# :
|
||||
# else
|
||||
# echo "+ $file"
|
||||
# fail=yes
|
||||
# fi
|
||||
# done
|
||||
|
||||
if [ "X$fail" = "Xyes" ]; then
|
||||
cat 1>&2 <<EOF
|
||||
The MANIFEST is out of date. Files marked with a minus sign (-) no
|
||||
longer exist; files marked with a plus sign (+) are CVS-managed but do
|
||||
not appear in the MANIFEST. Please remedy the situation and try again.
|
||||
EOF
|
||||
print "Set development version to [", ($ver=getver), "] ";
|
||||
return "" unless defined ($_ = <STDIN>);
|
||||
chomp;
|
||||
(setver ($ver=$_) or die "cannot set version") if /\S/;
|
||||
if [ $check = yes ]; then
|
||||
exit 1
|
||||
else
|
||||
echo "Continuing anyway..."
|
||||
fi
|
||||
fi
|
||||
|
||||
if (-d "CVS") {
|
||||
my $tag = $ver;
|
||||
$tag =~ s/\./-/g;
|
||||
print "Tag CVS sources with \"$tag\"? [n] ";
|
||||
chomp ($_ = <STDIN>);
|
||||
if ($_ eq 'y') {
|
||||
print "Tagging CVS sources...\n";
|
||||
my $status = system "cvs tag -R $tag";
|
||||
die "cvs tag failed" if $status >> 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
# Create a manifest that contains only files for distribution.
|
||||
grep '^\.' MANIFEST | grep -v _DO_NOT_DISTRIBUTE_ >$MANIFEST
|
||||
|
||||
return 1;
|
||||
}
|
||||
# Prepare the source tree for a release.
|
||||
test -h ../hdf5-$VERS && rm ../hdf5-$VERS
|
||||
ln -s `pwd` ../hdf5-$VERS || exit 1
|
||||
mv Makefile ../Makefile.x 2>/dev/null #might fail
|
||||
cp -p Makefile.dist Makefile
|
||||
echo "This is hdf5-$VERS released on `date`" >README.x
|
||||
tail -n +2 <README >>README.x
|
||||
mv README.x README
|
||||
test "$verbose" && echo " Running tar..." 1>&2
|
||||
( \
|
||||
cd ..; \
|
||||
tar cf x.tar hdf5-$VERS/Makefile \
|
||||
`sed s+^.+hdf5-$VERS+ $MANIFEST` || exit 1 \
|
||||
)
|
||||
|
||||
release @ARGV;
|
||||
# Compress
|
||||
for comp in $methods; do
|
||||
case $comp in
|
||||
tar)
|
||||
cp -p ../x.tar $DEST/hdf5-$VERS.tar;;
|
||||
compress)
|
||||
test "$verbose" && echo " Running compress..." 1>&2
|
||||
compress -c <../x.tar >$DEST/hdf5-$VERS.tar.Z;;
|
||||
gzip)
|
||||
test "$verbose" && echo " Running gzip..." 1>&2
|
||||
gzip -9 <../x.tar >$DEST/hdf5-$VERS.tar.gz;;
|
||||
bzip2)
|
||||
test "$verbose" && echo " Running bzip2..." 1>&2
|
||||
bzip2 -9 <../x.tar >$DEST/hdf5-$VERS.tar.bz2;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Remove temporary things
|
||||
test -f ../Makefile.x && mv ../Makefile.x Makefile
|
||||
rm -f $MANIFEST
|
||||
rm -f ../hdf5-$VERS
|
||||
rm -f ../x.tar
|
||||
exit 0
|
||||
|
||||
192
bin/snapshot
Executable file
@@ -0,0 +1,192 @@
|
||||
#!/bin/sh
|
||||
set -x
|
||||
date
|
||||
#
|
||||
# This script should be run nightly from cron. It checks out hdf5
|
||||
# from the CVS source tree and compares it against the previous
|
||||
# snapshot. If anything significant changed then a new snapshot is
|
||||
# created, the minor version number is incremented, and the change is
|
||||
# checked back into the CVS repository.
|
||||
#
|
||||
|
||||
# The path isn't properly initialized on hawkwind -- /usr/local/bin is
|
||||
# either missing or is after /usr/bin when it should be before.
|
||||
PATH="/usr/local/bin:$PATH"
|
||||
|
||||
# Where are the snapshots stored?
|
||||
ARCHIVES_default=/afs/ncsa/ftp/HDF/pub/outgoing/hdf5/snapshots
|
||||
ARCHIVES=$ARCHIVES_default
|
||||
|
||||
# Where are the HDF4 library?
|
||||
# At NCSA, the standard place to find HDF4 software is in /usr/ncsa/.
|
||||
HDF4LIB_default="/usr/ncsa/include,/usr/ncsa/lib"
|
||||
HDF4LIB=$HDF4LIB_default
|
||||
|
||||
# What compression methods to use?
|
||||
METHODS="gzip bzip2"
|
||||
|
||||
# Make sure cvs would work
|
||||
if [ -z "$CVSROOT" ]; then
|
||||
echo "Where is the CVS repository?" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#
|
||||
# Command options
|
||||
cmd="all"
|
||||
errcode=0
|
||||
echo '$#=' $# '$*="' $* '"'
|
||||
while [ $# -gt 0 ] ; do
|
||||
case "$1" in
|
||||
all)
|
||||
cmd="all"
|
||||
;;
|
||||
checkout)
|
||||
cmdcheckout="checkout"
|
||||
cmd=""
|
||||
;;
|
||||
test)
|
||||
cmdtest="test"
|
||||
cmd=""
|
||||
;;
|
||||
release)
|
||||
cmdrel="release"
|
||||
cmd=""
|
||||
;;
|
||||
help)
|
||||
cmd="help"
|
||||
break
|
||||
;;
|
||||
hdf4)
|
||||
shift
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "HDF4LIB information missing"
|
||||
errcode=1
|
||||
cmd="help"
|
||||
break
|
||||
fi
|
||||
HDF4LIB="$1"
|
||||
;;
|
||||
archive)
|
||||
shift
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Archive pathname missing"
|
||||
errcode=1
|
||||
cmd="help"
|
||||
break
|
||||
fi
|
||||
ARCHIVES="$1"
|
||||
;;
|
||||
*)
|
||||
echo "Unkown option $1"
|
||||
errcode=1
|
||||
cmd="help"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ "$cmd" = help ]; then
|
||||
set -
|
||||
echo "Usage: $0 [all] [checkout] [test] [release] [help] [hdf4 <hdf4lib_path>] [archive <arch_path> ]"
|
||||
echo " all: Run all commands (checkout, test & release)"
|
||||
echo " [Default is all]"
|
||||
echo " checkout: Run cvs checkout"
|
||||
echo " test: Run test"
|
||||
echo " release: Run release"
|
||||
echo " help: Print this message"
|
||||
echo " hdf4 <hdf4lib_path>:"
|
||||
echo " Use <hdf4lib_path> as the HDF4LIB locations"
|
||||
echo " [Default is $HDF4LIB_default]"
|
||||
echo " archive <arch_path>: "
|
||||
echo " Use <arch_path> as the release ARCHIVE area"
|
||||
echo " [<arch_path> default as $ARCHIVES_default]"
|
||||
exit $errcode
|
||||
fi
|
||||
|
||||
# Setup the proper configure option (--with-hdf4) to use hdf4 library
|
||||
# provide HDF4LIB is non-empty.
|
||||
HDF4LIB=${HDF4LIB:+"--with-hdf4="$HDF4LIB}
|
||||
CONFIGURE="./configure $HDF4LIB"
|
||||
|
||||
# Execute the requests
|
||||
snapshot=yes
|
||||
|
||||
# Show all settings right before execution.
|
||||
# set
|
||||
# exit 0
|
||||
|
||||
|
||||
#=============================
|
||||
# Run CVS checkout
|
||||
#=============================
|
||||
if [ "$cmd" = "all" -o -n "$cmdcheckout" ]; then
|
||||
# Create a working directory. Hopefully one is left over from last
|
||||
# time that still has the contents of the previous release. But if
|
||||
# not, just create one and assume that a snapshot is necessary.
|
||||
COMPARE=${HOME}/hdf5-snapshots
|
||||
test -d ${COMPARE} || mkdir -p ${COMPARE} || exit 1
|
||||
|
||||
# Check out the current version from CVS
|
||||
cvs -Q co -d ${COMPARE}/current hdf5 || exit 1
|
||||
fi # Do CVS checkout
|
||||
|
||||
|
||||
#=============================
|
||||
# Run Test the HDF5 library
|
||||
#=============================
|
||||
if [ "$cmd" = "all" -o -n "$cmdtest" ]; then
|
||||
# Compare it with the previous version. Compare only files listed in
|
||||
# the MANIFEST plus the MANIFEST itself.
|
||||
if [ -d ${COMPARE}/previous ]; then
|
||||
if (diff -c ${COMPARE}/previous/MANIFEST ${COMPARE}/current/MANIFEST); then
|
||||
snapshot=no
|
||||
for src in `grep '^\.' ${COMPARE}/current/MANIFEST|expand|cut -f1 -d' '`; do
|
||||
diff -I H5_VERS_RELEASE -I " released on " \
|
||||
-I " currently under development" \
|
||||
${COMPARE}/previous/$src ${COMPARE}/current/$src || \
|
||||
snapshot=yes
|
||||
# Don't break because we want to see all the diffs.
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# Make sure all the serial tests work.
|
||||
if [ "$snapshot" = "yes" ]; then
|
||||
if (cd ${COMPARE}/current; \
|
||||
${CONFIGURE}; \
|
||||
make _test); then
|
||||
:
|
||||
else
|
||||
snapshot=no
|
||||
fi
|
||||
fi
|
||||
fi # Test the HDF5 library
|
||||
|
||||
|
||||
#=============================
|
||||
# Run Release snapshot, update version, and commit to cvs and tag
|
||||
#=============================
|
||||
if [ "$cmd" = "all" -o -n "$cmdrel" ]; then
|
||||
if [ "$snapshot" = "yes" ]; then
|
||||
(cd ${COMPARE}/current; make distclean)
|
||||
(
|
||||
# Turn on exit on error in the sub-shell so that it does not
|
||||
# cvs commit if errors encounter here.
|
||||
set -e
|
||||
cd ${COMPARE}/current
|
||||
cvs -Q tag hdf5-`perl -w bin/h5vers |tr . _`
|
||||
bin/release -d $ARCHIVES $METHODS
|
||||
RELEASE_VERSION="`perl -w bin/h5vers -v`"
|
||||
perl -w bin/h5vers -i
|
||||
cvs -Q commit -m "Snapshot $RELEASE_VERSION"
|
||||
)
|
||||
fi
|
||||
|
||||
# Replace the previous version with the current version.
|
||||
rm -rf ${COMPARE}/previous
|
||||
mv ${COMPARE}/current ${COMPARE}/previous
|
||||
fi #Release snapshot
|
||||
|
||||
exit 0
|
||||
44
bin/trace
@@ -15,6 +15,7 @@ $Source = "";
|
||||
# usually the same as the package name.
|
||||
#
|
||||
%TypeString = ("hbool_t" => "b",
|
||||
"htri_t" => "b",
|
||||
"double" => "d",
|
||||
"H5D_layout_t" => "Dl",
|
||||
"H5D_transfer_t" => "Dt",
|
||||
@@ -22,6 +23,7 @@ $Source = "";
|
||||
"H5E_direction_t" => "Ed",
|
||||
"H5E_error_t*" => "Ee",
|
||||
"H5F_driver_t" => "Fd",
|
||||
"H5F_scope_t" => "Fs",
|
||||
"H5G_link_t" => "Gl",
|
||||
"H5G_stat_t*" => "Gs",
|
||||
"hsize_t" => "h",
|
||||
@@ -30,10 +32,13 @@ $Source = "";
|
||||
"int" => "Is",
|
||||
"unsigned" => "Iu",
|
||||
"unsigned int" => "Iu",
|
||||
"H5I_type_t" => "It",
|
||||
"MPI_Comm" => "Mc",
|
||||
"MPI_Info" => "Mi",
|
||||
"off_t" => "o",
|
||||
"H5P_class_t" => "p",
|
||||
"href_t" => "r",
|
||||
"H5R_type_t" => "Rt",
|
||||
"char*" => "s",
|
||||
"H5S_class_t" => "Sc",
|
||||
"H5S_seloper_t" => "Ss",
|
||||
@@ -41,6 +46,7 @@ $Source = "";
|
||||
"H5T_norm_t" => "Tn",
|
||||
"H5T_order_t" => "To",
|
||||
"H5T_pad_t" => "Tp",
|
||||
"H5T_pers_t" => "Te",
|
||||
"H5T_sign_t" => "Ts",
|
||||
"H5T_class_t" => "Tt",
|
||||
"H5T_str_t" => "Tz",
|
||||
@@ -55,7 +61,7 @@ $Source = "";
|
||||
"H5T_overflow_t" => "x",
|
||||
"H5Z_func_t" => "x",
|
||||
"size_t" => "z",
|
||||
"H5Z_method_t" => "Zm",
|
||||
"H5Z_filter_t" => "Zf",
|
||||
"ssize_t" => "Zs",
|
||||
);
|
||||
|
||||
@@ -80,17 +86,21 @@ sub errmesg ($$@) {
|
||||
#
|
||||
sub argstring ($$$) {
|
||||
my ($file, $func, $atype) = @_;
|
||||
my ($ptr, $tstr) = (0,"!");
|
||||
my ($ptr, $tstr, $array) = (0, "!", "");
|
||||
my ($fq_atype);
|
||||
|
||||
# Normalize the data type by removing redundant white space,
|
||||
# certain type qualifiers, and indirection.
|
||||
$atype =~ s/^\bconst\b//;
|
||||
$atype =~ s/\b__unused__\b//g;
|
||||
$atype =~ s/\bUNUSED\b//g;
|
||||
$atype =~ s/\s+/ /g;
|
||||
$ptr = length $1 if $atype =~ s/(\*+)//;
|
||||
$atype =~ s/^\s+//;
|
||||
$atype =~ s/\s+$//;
|
||||
if ($atype =~ /(.*)\[(.*)\]$/) {
|
||||
($array, $atype) = ($2, $1);
|
||||
$atype =~ s/\s+$//;
|
||||
}
|
||||
$fq_atype = $atype . ('*' x $ptr);
|
||||
|
||||
if ($ptr>0 && exists $TypeString{$fq_atype}) {
|
||||
@@ -104,7 +114,7 @@ sub argstring ($$$) {
|
||||
} else {
|
||||
$tstr = $TypeString{$atype};
|
||||
}
|
||||
return ("*" x $ptr) . $tstr;
|
||||
return ("*" x $ptr) . ($array?"[$array]":"") . $tstr;
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
@@ -129,15 +139,18 @@ sub rewrite_func ($$$$$) {
|
||||
# comma, then split the arguments on commas.
|
||||
$args =~ s/(\/\*\s*in),\s*(out\s*\*\/)/$1_$2/g;
|
||||
my @args = split /,[\s\n]*/, $args;
|
||||
my $argno = 0;
|
||||
my %names;
|
||||
|
||||
for $arg (@args) {
|
||||
unless ($arg=~/^(([a-z_A-Z]\w*\s+)+\**)
|
||||
([a-z_A-Z]\w*)(\[\])?
|
||||
([a-z_A-Z]\w*)(\[.*?\])?
|
||||
(\s*\/\*\s*(in|out|in_out)\s*\*\/)?\s*$/x) {
|
||||
errmesg $file, $name, "unable to parse \`$arg\'";
|
||||
goto error;
|
||||
} else {
|
||||
my ($atype, $aname, $array, $adir) = ($1, $3, $4, $6);
|
||||
$names{$aname} = $argno++;
|
||||
$adir ||= "in";
|
||||
$atype =~ s/\s+$//;
|
||||
push @arg_name, $aname;
|
||||
@@ -145,7 +158,18 @@ sub rewrite_func ($$$$$) {
|
||||
if ($adir eq "out") {
|
||||
push @arg_str, "x";
|
||||
} else {
|
||||
$atype .= "*" if $array;
|
||||
if (defined $array) {
|
||||
$atype .= "*";
|
||||
if ($array =~ /^\[\/\*([a-z_A-Z]\w*)\*\/\]$/) {
|
||||
my $asize = $1;
|
||||
if (exists $names{$asize}) {
|
||||
$atype .= '[a' . $names{$asize} . ']';
|
||||
} else {
|
||||
warn "bad array size: $asize";
|
||||
$atype .= "*";
|
||||
}
|
||||
}
|
||||
}
|
||||
push @arg_str, argstring $file, $name, $atype;
|
||||
}
|
||||
}
|
||||
@@ -154,7 +178,7 @@ sub rewrite_func ($$$$$) {
|
||||
$trace .= join("", @arg_str) . "\"";
|
||||
my $len = 4 + length $trace;
|
||||
for (@arg_name) {
|
||||
if ($len + length >= 78) {
|
||||
if ($len + length >= 77) {
|
||||
$trace .= ",\n $_";
|
||||
$len = 13 + length;
|
||||
} else {
|
||||
@@ -185,7 +209,7 @@ sub rewrite_func ($$$$$) {
|
||||
|
||||
|
||||
error:
|
||||
return "\n$type\n$name ($args)$body";
|
||||
return "\n$type\n$name($args)\n$body";
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
@@ -203,8 +227,8 @@ for $file (@ARGV) {
|
||||
my $original = $Source;
|
||||
my $napi = $Source =~ s/\n([A-Za-z]\w*(\s+[a-z]\w*)*)\s*\n #type
|
||||
(H5[A-Z]{1,2}[^_A-Z]\w*) #name
|
||||
\s*\((.*?)\) #args
|
||||
(.*?\n\}[^\n]*) #body
|
||||
\s*\((.*?)\)\s* #args
|
||||
(\{.*?\n\}[^\n]*) #body
|
||||
/rewrite_func($file,$1,$3,$4,$5)/segx;
|
||||
$total_api += $napi;
|
||||
|
||||
|
||||
126
config/BlankForm
@@ -9,31 +9,109 @@
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
|
||||
# Sometimes a particular compiler must be used. If that's the case
|
||||
# then uncomment the following line. Otherwise the main configure
|
||||
# script will try to detect the compiler automatically.
|
||||
#CC=gcc
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
#CFLAGS="$CFLAGS -ansi"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
# Choosing a C Compiler
|
||||
# ---------------------
|
||||
#
|
||||
# The user should be able to specify the compiler by setting the CC
|
||||
# environment variable to the name of the compiler and any switches it
|
||||
# requires for proper operation. If CC is unset then this script may
|
||||
# set it. If CC is unset by time this script completes then configure
|
||||
# will try `gcc' and `cc' in that order (perhaps some others too).
|
||||
#
|
||||
# Note: Code later in this file may depend on the value of $CC_BASENAME
|
||||
# in order to distinguish between different compilers when
|
||||
# deciding which compiler command-line switches to use. This
|
||||
# variable is set based on the incoming value of $CC and is only
|
||||
# used within this file.
|
||||
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC="/some/default/compiler/named/foo -ansi"
|
||||
CC_BASENAME=foo
|
||||
fi
|
||||
|
||||
|
||||
# C Compiler and Preprocessor Flags
|
||||
# ---------------------------------
|
||||
#
|
||||
# Flags that end with `_CFLAGS' are always passed to the compiler.
|
||||
# Flags that end with `_CPPFLAGS' are passed to the compiler when
|
||||
# compiling but not when linking.
|
||||
#
|
||||
# DEBUG_CFLAGS Flags to pass to the compiler to create a
|
||||
# DEBUG_CPPFLAGS library suitable for use with debugging
|
||||
# tools. Usually this list will exclude
|
||||
# optimization switches (like `-O') and include
|
||||
# switches that turn on symbolic debugging
|
||||
# support (like `-g').
|
||||
#
|
||||
# PROD_CFLAGS Flags to pass to the compiler to create a
|
||||
# PROD_CPPFLAGS production version of the library. These
|
||||
# usualy exclude symbolic debugging switches
|
||||
# (like `-g') and include optimization switches
|
||||
# (like `-O').
|
||||
#
|
||||
# PROFILE_CFLAGS Flags to pass to the compiler to create a
|
||||
# PROFILE_CPPFLAGS library suitable for performance testing (like
|
||||
# `-pg'). This may or may not include debugging
|
||||
# or production flags.
|
||||
#
|
||||
# CFLAGS Flags can be added to this variable which
|
||||
# might already be partially initialized. These
|
||||
# flags will always be passed to the compiler
|
||||
# and should include switches to turn on full
|
||||
# warnings. HDF5 attempts to be ANSI and Posix
|
||||
# compliant and employ good programming
|
||||
# practices resulting in few if any
|
||||
# warnings.
|
||||
#
|
||||
# Warning flags do not have to be added to CFLAGS
|
||||
# variable if the compiler is the GNU gcc
|
||||
# compiler or a descendent of gcc such as EGCS or PGCC.
|
||||
#
|
||||
# The CFLAGS should contains *something* or else
|
||||
# configure will probably add `-g'. For most
|
||||
# systems this isn't a problem but some systems
|
||||
# will disable optimizations in favor of the
|
||||
# `-g'.
|
||||
#
|
||||
#
|
||||
# These flags should be set according to the compiler being used.
|
||||
# There are two ways to check the compiler. You can try using `-v' or
|
||||
# `--version' to see if the compiler will print a version string. You
|
||||
# can use the value of $CC_BASENAME which is the base name of the
|
||||
# first word in $CC (note that the value of CC may have changed
|
||||
# above).
|
||||
|
||||
case $CC_BASENAME in
|
||||
gcc)
|
||||
CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
|
||||
DEBUG_CFLAGS="-g -fverbose-asm"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O3 -fomit-frame-pointer"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
|
||||
*)
|
||||
CFLAGS="$CFLAGS -ansi"
|
||||
DEBUG_CFLAGS="-g"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
|
||||
# Overriding Configure Tests
|
||||
# --------------------------
|
||||
#
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
#CFLAGS="$CFLAGS -ansi"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
# Things that Make needs
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
.SUFFIXES: .c .o .lo
|
||||
@SET_MAKE@
|
||||
|
||||
# Programs
|
||||
@@ -14,6 +14,7 @@ SHELL=/bin/sh
|
||||
CC=@CC@
|
||||
CFLAGS=@CFLAGS@
|
||||
CPPFLAGS=@CPPFLAGS@
|
||||
LDFLAGS=@LDFLAGS@
|
||||
LIBS=@LIBS@
|
||||
AR=@AR@
|
||||
RANLIB=@RANLIB@
|
||||
@@ -22,19 +23,36 @@ CP=cp
|
||||
INSTALL=@INSTALL@
|
||||
INSTALL_PROGRAM=@INSTALL_PROGRAM@
|
||||
INSTALL_DATA=@INSTALL_DATA@
|
||||
RUNTEST=@RUNTEST@
|
||||
RUNSERIAL=@RUNSERIAL@
|
||||
RUNPARALLEL=@RUNPARALLEL@
|
||||
RUNTEST=$(RUNSERIAL)
|
||||
TRACE=:
|
||||
|
||||
# Installation points
|
||||
ROOT=@ROOT@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
bindir=@bindir@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
PUB_LIB=$(LIB)
|
||||
|
||||
# The default is to build the library and/or programs
|
||||
all: lib tests progs
|
||||
# Shared libraries
|
||||
LT=$(top_builddir)/libtool
|
||||
LT_COMPILE=$(LT) --mode=compile $(CC)
|
||||
LT_LINK_LIB=$(LT) --mode=link $(CC) -rpath $(libdir)
|
||||
LT_LINK_EXE=$(LT) --mode=link $(CC) -rpath $(bindir)
|
||||
LT_RUN=$(LT) --mode=execute
|
||||
LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM)
|
||||
LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA)
|
||||
LT_UNINSTALL=$(LT) --mode=uninstall $(RM)
|
||||
|
||||
|
||||
# The default is to build the library and/or programs. We must build
|
||||
# them sequentially.
|
||||
all:
|
||||
$(MAKE) lib
|
||||
$(MAKE) progs
|
||||
$(MAKE) tests
|
||||
|
||||
# The following rules insure that the Makefile is up-to-date by rerunning
|
||||
# various autoconf components (although not all versions of make assume
|
||||
@@ -45,22 +63,25 @@ all: lib tests progs
|
||||
#
|
||||
# Graphically, the dependencies are:
|
||||
#
|
||||
# configure.in
|
||||
# | |
|
||||
# +--------------------+ +-------------------+
|
||||
# | |
|
||||
# stamp1 configure
|
||||
# | |
|
||||
# | config.status
|
||||
# | | |
|
||||
# | +-------------------------------------+ |
|
||||
# | | |
|
||||
# stamp2 Makefile.in et al |
|
||||
# | | |
|
||||
# | +-----------+ +------+
|
||||
# +-----------------------------+ | |
|
||||
# | | |
|
||||
# Makefile
|
||||
# configure.in
|
||||
# | |
|
||||
# +-----------------+ +------------+
|
||||
# | |
|
||||
# stamp1 configure
|
||||
# (H5config.h.in) |
|
||||
# | | |
|
||||
# | +---------------+ +-----------+
|
||||
# | | |
|
||||
# | config.status
|
||||
# | |
|
||||
# | +------------------+
|
||||
# | |
|
||||
# stamp2
|
||||
# (H5config.h) Makefile.in et al
|
||||
# | |
|
||||
# +------------------+ +-----------+
|
||||
# | |
|
||||
# Makefile
|
||||
#
|
||||
# A side effect of updating stamp1 is to generate H5config.h.in and a
|
||||
# side effect of updating stamp2 is to generate H5config.h. When using
|
||||
@@ -68,30 +89,31 @@ all: lib tests progs
|
||||
# the user may want to occassionally type `make Makefile' in any source
|
||||
# directory.
|
||||
#
|
||||
STAMP1=$(ROOT)/config/stamp1
|
||||
STAMP2=$(ROOT)/config/stamp2
|
||||
STAMP1=$(top_builddir)/config/stamp1
|
||||
STAMP2=$(top_builddir)/config/stamp2
|
||||
|
||||
MAKEFILE_PARTS=$(ROOT)/config/commence.in Makefile.in \
|
||||
$(ROOT)/config/conclude.in $(ROOT)/config/depend.in
|
||||
MAKEFILE_PARTS=$(srcdir)/Makefile.in \
|
||||
$(top_srcdir)/config/commence.in \
|
||||
$(top_srcdir)/config/conclude.in \
|
||||
$(top_srcdir)/config/depend.in
|
||||
|
||||
$(STAMP1): $(ROOT)/configure.in
|
||||
-(cd $(ROOT); \
|
||||
touch $(STAMP1); \
|
||||
autoheader)
|
||||
$(STAMP1): $(top_srcdir)/configure.in
|
||||
touch $(STAMP1)
|
||||
-cd $(top_srcdir); autoheader
|
||||
|
||||
$(STAMP2): $(STAMP1) $(ROOT)/config.status
|
||||
-(cd $(ROOT); \
|
||||
touch $(STAMP2); \
|
||||
CONFIG_FILES= CONFIG_HEADERS=src/H5config.h ./config.status)
|
||||
$(STAMP2): $(STAMP1) $(top_builddir)/config.status
|
||||
touch $(STAMP2)
|
||||
-cd $(top_builddir); \
|
||||
CONFIG_FILES= CONFIG_HEADERS=src/H5config.h ./config.status
|
||||
|
||||
$(ROOT)/configure: $(ROOT)/configure.in
|
||||
-(cd $(ROOT); autoconf)
|
||||
$(top_srcdir)/configure: $(top_srcdir)/configure.in
|
||||
-cd $(top_srcdir); autoconf
|
||||
|
||||
$(ROOT)/config.status: $(ROOT)/configure
|
||||
-(cd $(ROOT); ./config.status --recheck)
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(STAMP1)
|
||||
-cd $(top_builddir); ./config.status --recheck
|
||||
|
||||
Makefile: $(MAKEFILE_PARTS) $(ROOT)/config.status $(STAMP2)
|
||||
-(cd $(ROOT); CONFIG_HEADERS= ./config.status)
|
||||
Makefile: $(MAKEFILE_PARTS) $(STAMP2)
|
||||
-cd $(top_builddir); CONFIG_HEADERS= ./config.status
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# The following section of this makefile comes from the middle of `Makefile.in'
|
||||
|
||||
@@ -9,10 +9,9 @@
|
||||
#
|
||||
lib: $(LIB)
|
||||
$(LIB) __no_library__: $(LIB_OBJ)
|
||||
$(AR) -rc $@ $(LIB_OBJ)
|
||||
$(RANLIB) $@
|
||||
@$(LT_LINK_LIB) -o $@ $(CFLAGS) $(LIB_OBJ) $(LIBS)
|
||||
|
||||
progs: $(PROGS)
|
||||
progs: $(LIB) $(PROGS)
|
||||
|
||||
# Build a tags file in this directory.
|
||||
TAGS: $(LIB_SRC)
|
||||
@@ -20,60 +19,99 @@ TAGS: $(LIB_SRC)
|
||||
-etags $(LIB_SRC)
|
||||
|
||||
# Runs each test in order, passing $(TEST_FLAGS) to the program.
|
||||
tests: $(TESTS)
|
||||
test _test: tests
|
||||
@for test in $(TESTS) dummy; do \
|
||||
tests: $(TEST_PROGS) $(LIB)
|
||||
check test _test: tests
|
||||
@for test in $(TEST_PROGS) dummy; do \
|
||||
if test $$test != dummy; then \
|
||||
echo "============================"; \
|
||||
echo "Testing $$test $(TEST_FLAGS)"; \
|
||||
$(RUNTEST) ./$$test $(TEST_FLAGS) || exit 1; \
|
||||
echo "============================"; \
|
||||
PATH=".:$$PATH" srcdir=$(srcdir) \
|
||||
$(RUNTEST) $$test $(TEST_FLAGS) || \
|
||||
exit 1; \
|
||||
echo ""; \
|
||||
fi; \
|
||||
done;
|
||||
@for test in $(TEST_SCRIPTS) dummy; do \
|
||||
if test $$test != dummy; then \
|
||||
echo "============================"; \
|
||||
echo "Testing $$test $(TEST_FLAGS)"; \
|
||||
echo "============================"; \
|
||||
RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \
|
||||
srcdir=$(srcdir) \
|
||||
/bin/sh $$test $(TEST_FLAGS) || \
|
||||
exit 1; \
|
||||
echo ""; \
|
||||
fi; \
|
||||
done;
|
||||
|
||||
# Make installation directories directories if they don't exist.
|
||||
$(libdir):
|
||||
mkdir $@ && chmod 755 $@
|
||||
|
||||
$(includedir):
|
||||
mkdir $@ && chmod 755 $@
|
||||
|
||||
$(bindir):
|
||||
mkdir $@ && chmod 755 $@
|
||||
|
||||
# Install the library, the public header files, and programs.
|
||||
install: $(LIB) $(PUB_HDR) $(PROGS)
|
||||
@test -d $(libdir) || mkdir $(libdir)
|
||||
@for f in X $(LIB); do \
|
||||
install: $(PUB_LIB) $(PUB_HDR) $(PROGS) $(libdir) $(includedir) $(bindir)
|
||||
@for f in X $(PUB_LIB); do \
|
||||
if test $$f != X; then \
|
||||
(set -x; $(INSTALL_DATA) $$f $(libdir)/. || exit 1); \
|
||||
($(LT_INSTALL_LIB) $$f $(libdir)/. || exit 1); \
|
||||
fi; \
|
||||
done
|
||||
@test -d $(includedir) || mkdir $(includedir)
|
||||
@if test -f libhdf5.settings; then \
|
||||
(set -x; $(INSTALL_DATA) libhdf5.settings $(libdir)/. || exit 1); \
|
||||
fi
|
||||
@for f in X $(PUB_HDR); do \
|
||||
if test $$f != X; then \
|
||||
(set -x; $(INSTALL_DATA) $$f $(includedir)/. || exit 1); \
|
||||
fi \
|
||||
if test -f $$f; then \
|
||||
(set -x; $(INSTALL_DATA) $$f $(includedir)/. || exit 1); \
|
||||
else \
|
||||
(set -x; $(INSTALL_DATA) $(srcdir)/$$f $(includedir)/. || \
|
||||
exit 1); \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@test -d $(bindir) || mkdir $(bindir)
|
||||
@for f in X $(PROGS); do \
|
||||
if test $$f != X; then \
|
||||
(set -x; $(INSTALL_PROGRAM) $$f $(bindir)/. || exit 1); \
|
||||
($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1); \
|
||||
fi; \
|
||||
done
|
||||
|
||||
# Removes those things that `make install' (would have) installed.
|
||||
uninstall:
|
||||
@if test "X$(LIB)" != X; then \
|
||||
set -x; cd $(libdir) && $(RM) $(LIB); \
|
||||
for f in $(LIB); do \
|
||||
$(LT_UNINSTALL) $(libdir)/$$f; \
|
||||
done; \
|
||||
fi
|
||||
@if test "X$(PUBHDR)" != X; then \
|
||||
@if test "X$(PUB_HDR)" != X; then \
|
||||
set -x; cd $(includedir) && $(RM) $(PUB_HDR); \
|
||||
fi
|
||||
@if test "X$(PROGS)" != X; then \
|
||||
set -x; cd $(bindir) && $(RM) $(PROGS); \
|
||||
for f in $(PROGS); do \
|
||||
$(LT_UNINSTALL) $(bindir)/$$f; \
|
||||
done; \
|
||||
fi
|
||||
|
||||
# Removes temporary files without removing the final target files. That is,
|
||||
# remove things like object files but not libraries or executables.
|
||||
#
|
||||
mostlyclean:
|
||||
$(RM) $(LIB_OBJ) $(PROG_OBJ) $(MOSTLYCLEAN)
|
||||
-$(RM) $(LIB_OBJ) $(LIB_OBJ:.lo=.o)
|
||||
-$(RM) $(TEST_OBJ) $(TEST_OBJ:.lo=.o)
|
||||
-$(RM) $(PROG_OBJ) $(PROG_OBJ:.lo=.o) $(MOSTLYCLEAN)
|
||||
|
||||
# Like `mostlyclean' except it also removes the final targets: things like
|
||||
# libraries and executables. This target doesn't remove any file that
|
||||
# is part of the HDF5 distribution.
|
||||
#
|
||||
clean: mostlyclean
|
||||
$(RM) $(LIB) $(TESTS) $(PROGS) $(CLEAN)
|
||||
-$(RM) $(LIB) $(TEST_PROGS) $(PROGS) $(CLEAN)
|
||||
-$(RM) -r .libs
|
||||
|
||||
# Like `clean' except it also removes files that were created by running
|
||||
# configure. If you've unpacked the source and built HDF5 without creating
|
||||
@@ -81,26 +119,25 @@ clean: mostlyclean
|
||||
# in the distribution.
|
||||
#
|
||||
distclean: clean
|
||||
$(RM) .depend TAGS *~ core *.core *.bak *.old *.new $(DISTCLEAN)
|
||||
@if test -f Makefile.in; then \
|
||||
-$(RM) .depend TAGS *~ core *.core *.bak *.old *.new $(DISTCLEAN)
|
||||
@if test -f $(srcdir)/Makefile.in; then \
|
||||
(set -x; $(RM) Makefile); \
|
||||
fi
|
||||
|
||||
|
||||
# Like `distclean' except it deletes all files that can be regenerated from
|
||||
# the makefile, including those generated from autoheader and autoconf.
|
||||
#
|
||||
maintainer-clean: distclean
|
||||
$(RM) *~ core core.* *.core *.bak *.contrib gmon.out
|
||||
-$(RM) *~ core core.* *.core *.bak *.contrib gmon.out
|
||||
|
||||
# Implicit rules
|
||||
.c.a:
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
|
||||
$(AR) -rc $@ $*.o
|
||||
$(RM) $*.o
|
||||
|
||||
.c.o:
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
|
||||
|
||||
.c.lo:
|
||||
@$(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) -c $<
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# The following section of this makefile contains dependencies between the
|
||||
# source files and the header files. If GNU make and GCC are being used then
|
||||
@@ -113,3 +150,5 @@ maintainer-clean: distclean
|
||||
|
||||
@DEPEND1@
|
||||
@DEPEND2@
|
||||
@DEPEND3@
|
||||
@DEPEND4@
|
||||
|
||||
62
config/dec-flags
Normal file
@@ -0,0 +1,62 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file should be sourced into configure if the compiler is a DEC
|
||||
# compiler. It is careful not to do anything if the compiler is not
|
||||
# DEC; otherwise `cc_flags_set' is set to `yes'
|
||||
#
|
||||
|
||||
# Get the compiler version unless it's already known.
|
||||
#
|
||||
# cc_vendor: The compiler vendor: DEC
|
||||
# cc_version: Version number, like: V5.2-038
|
||||
#
|
||||
if test X = "X$cc_flags_set"; then
|
||||
cc_vendor=DEC
|
||||
cc_version="`$CC $CFLAGS -V 2>&1 |head -1 |\
|
||||
sed 's/.*DEC C \(V[0-9][-\.0-9]*\).*/\1/'`"
|
||||
if test X != "$gcc_version"; then
|
||||
echo "compiler '$CC' is $cc_vendor-$cc_version"
|
||||
else
|
||||
cc_vendor=
|
||||
fi
|
||||
fi
|
||||
|
||||
# Warn about old compilers that don't work right.
|
||||
case "$cc_vendor-$cc_version" in
|
||||
DEC-V5.2-038)
|
||||
cat <<EOF
|
||||
**
|
||||
** This compiler may generate incorrect code when optimizations are
|
||||
** enabled. Please upgrade to a newer version (we're not sure which
|
||||
** version actually works) before reporting bugs to the HDF5 team.
|
||||
**
|
||||
EOF
|
||||
sleep 5
|
||||
;;
|
||||
esac
|
||||
|
||||
# Compiler flags
|
||||
case "$cc_vendor-$cc_version" in
|
||||
DEC-V5.*)
|
||||
# Production
|
||||
PROD_CFLAGS="-g0 -verbose -warnprotos -std -O4 $ARCH -ansi_args -fp_reorder -readonly_strings -inline speed"
|
||||
PROD_CPPFLAGS="-D_INTRINSICS -D_INLINE_INTRINSICS"
|
||||
|
||||
# Debug
|
||||
DEBUG_CFLAGS="-g -std -verbose -warnprotos"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
|
||||
# Profile
|
||||
PROFILE_CFLAGS="-pg -std -verbose -warnprotos"
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
# Flags are set
|
||||
cc_flags_set=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
# If no flags were set then clear the compiler vendor and version info.
|
||||
if test X = "X$cc_flags_set"; then
|
||||
cc_vendor=
|
||||
cc_version=
|
||||
fi
|
||||
20
config/dec-osf4.x
Normal file
@@ -0,0 +1,20 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for detailed information.
|
||||
|
||||
# The default compiler is `cc'
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=cc
|
||||
CC_BASENAME=cc
|
||||
fi
|
||||
|
||||
# Try GNU compiler flags.
|
||||
. $srcdir/config/gnu-flags
|
||||
|
||||
# Try native DEC compiler
|
||||
ARCH=${ARCH:='-arch host -tune host'}
|
||||
. $srcdir/config/dec-flags
|
||||
@@ -25,20 +25,20 @@ dep depend: .distdep
|
||||
|
||||
.distdep: .depend
|
||||
touch .distdep
|
||||
-perl -p $(ROOT)/bin/distdep .depend >.distdep
|
||||
-srcdir=$(srcdir) perl -p $(top_srcdir)/bin/distdep .depend >.distdep
|
||||
|
||||
.depend: $(LIB_SRC) $(TEST_SRC) $(PROG_SRC)
|
||||
@touch .depend
|
||||
@for dep in $? dummy; do \
|
||||
if [ $$dep != "dummy" ]; then \
|
||||
echo Building dependencies for $$dep; \
|
||||
obj=`echo $$dep | sed 's/\.c/\\\\.o/'`; \
|
||||
sed "/$$obj/,/[^\\]$$/d" <$@ >$@- && mv $@- $@; \
|
||||
obj=`echo $$dep | sed 's/\.c/\\\\.lo/'`; \
|
||||
sed '\%$$obj%,\%[^\\]$$%d' <$@ >$@- && mv $@- $@; \
|
||||
$(TRACE) $$dep; \
|
||||
$(CC) -M -MG $(CPPFLAGS) $$dep >>$@; \
|
||||
$(CC) -M -MG $(CPPFLAGS) $$dep |sed 's/\.o/.lo/' >>$@; \
|
||||
fi; \
|
||||
done;
|
||||
-perl -p $(ROOT)/bin/distdep .depend >.distdep
|
||||
-perl -p $(top_srcdir)/bin/distdep .depend >$(srcdir)/.distdep
|
||||
|
||||
-include .depend
|
||||
|
||||
|
||||
21
config/freebsd
Normal file
@@ -0,0 +1,21 @@
|
||||
# -*- shell-script -*-
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details.
|
||||
|
||||
# The default compiler is `gcc'
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=gcc
|
||||
CC_BASENAME=gcc
|
||||
fi
|
||||
|
||||
# Architecture-specific flags
|
||||
ARCH=
|
||||
|
||||
# Omit frame pointer for optimized code?
|
||||
NOFP=${NOFP:=-fomit-frame-pointer}
|
||||
|
||||
# Figure out compiler flags
|
||||
. $srcdir/config/gnu-flags
|
||||
156
config/gnu-flags
Normal file
@@ -0,0 +1,156 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file should be sourced into configure if the compiler is the
|
||||
# GNU gcc compiler or a derivative. It is careful not to do anything
|
||||
# if the compiler is not GNU; otherwise `cc_flags_set' is set to `yes'
|
||||
#
|
||||
|
||||
# Get the compiler version in a way that works for gcc, egcs, and
|
||||
# pgcc unless a compiler version is already known
|
||||
#
|
||||
# cc_vendor: The compiler name: gcc, egcs, or pgcc
|
||||
# cc_version: Version number: 2.91.60, 2.7.2.1
|
||||
#
|
||||
if test X = "X$cc_flags_set"; then
|
||||
cc_version="`$CC $CFLAGS -v 2>&1 |grep 'gcc version' |\
|
||||
sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`"
|
||||
cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'`
|
||||
cc_version=`echo $cc_version |sed 's/[-a-z]//g'`
|
||||
if test X = "X$cc_vendor" -a X != "X$cc_version"; then
|
||||
cc_vendor=gcc
|
||||
fi
|
||||
if test "-" != "$cc_vendor-$cc_version"; then
|
||||
echo "compiler '$CC' is GNU $cc_vendor-$cc_version"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Warn about old GNU compilers that don't work right.
|
||||
case "$cc_vendor-$cc_version" in
|
||||
gcc-2.7.*)
|
||||
cat <<EOF
|
||||
**
|
||||
** This compiler may be unable to properly compile the long long
|
||||
** data type used extensively by hdf5, although specifying
|
||||
** --disable-hsizet for configure may work around those bugs.
|
||||
** There may be other code generation problems also, especially
|
||||
** when optimizations are enabled. Please upgrade to at least GNU
|
||||
** gcc version 2.8.1 before reporting bugs to the HDF5 team.
|
||||
**
|
||||
EOF
|
||||
sleep 5
|
||||
;;
|
||||
|
||||
pgcc-2.*)
|
||||
v2=`echo $cc_version |cut -f2 -d.`
|
||||
v3=`echo $cc_version |cut -f3 -d.`
|
||||
v=`expr $v2 '*' 1000 + $v3`
|
||||
if test $v -le 91066; then
|
||||
cat <<EOF
|
||||
**
|
||||
** This compiler may have problems allocating registers for long
|
||||
** long data types when optimizations are enabled. There may be
|
||||
** other code generation problems as well. We know of no version
|
||||
** of pgcc which is capable of compiling HDF5 in production mode.
|
||||
** Please use gcc-2.8 or egcs-1.1.1 before reporting bugs.
|
||||
**
|
||||
EOF
|
||||
sleep 5
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# Architecture-specific flags
|
||||
case "$host_cpu" in
|
||||
i686)
|
||||
ARCH=${ARCH:="-mcpu=pentiumpro -march=pentiumpro -malign-double"}
|
||||
;;
|
||||
esac
|
||||
|
||||
# Compiler flags
|
||||
case "$cc_vendor-$cc_version" in
|
||||
gcc-2.7*)
|
||||
# General
|
||||
CFLAGS="$CFLAGS -ansi"
|
||||
|
||||
# Production
|
||||
PROC_CFLAGS="-O3 $NOFP -finline-functions -Wno-shadow"
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# Debug
|
||||
DEBUG_CFLAGS="-g -fverbose-asm -Wno-shadow"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
|
||||
# Profile
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
# Flags are set
|
||||
cc_flags_set=yes
|
||||
;;
|
||||
|
||||
gcc-2.8.*)
|
||||
# General
|
||||
CFLAGS="$CFLAGS -Wsign-compare"
|
||||
|
||||
# Production
|
||||
PROD_CFLAGS="$ARCH -O3 $NOFP -finline-functions -fschedule-insns2 -Wno-shadow"
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# Debug
|
||||
DEBUG_CFLAGS="-g -fverbose-asm -Wno-shadow"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
|
||||
# Profile
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
# Flags are set
|
||||
cc_flags_set=yes
|
||||
;;
|
||||
|
||||
egcs-2.*|pgcc-2.*)
|
||||
# General
|
||||
CFLAGS="$CFLAGS -Wsign-compare"
|
||||
|
||||
# Production
|
||||
PROD_CFLAGS="$ARCH -O6 $NOFP -Wno-shadow"
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# Debug
|
||||
DEBUG_CFLAGS="-g -fverbose-asm -Wno-shadow"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
|
||||
# Profile
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
# Flags are set
|
||||
cc_flags_set=yes
|
||||
;;
|
||||
|
||||
gcc-*|egcs-*|pgcc-*)
|
||||
# This must be some other GNU compiler that we don't know about.
|
||||
# Just use fairly generic flags.
|
||||
|
||||
# Production
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# Debug
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
|
||||
# Profile
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
# Flags are set
|
||||
cc_flags_set=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
# Clear cc info if no flags set
|
||||
if test X = "X$cc_flags_set"; then
|
||||
cc_vendor=
|
||||
cc_version=
|
||||
fi
|
||||
@@ -3,36 +3,34 @@
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details.
|
||||
|
||||
# Default compiler is `cc'
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=cc
|
||||
CC_BASENAME=cc
|
||||
fi
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
# Flags
|
||||
case "X-$CC" in
|
||||
X-gcc)
|
||||
CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
|
||||
DEBUG_CFLAGS="-g -fverbose-asm"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O3"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
CFLAGS="$CFLAGS -Ae"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
*)
|
||||
CFLAGS="$CFLAGS -Ae"
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS="-Ae"
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS="-Ae"
|
||||
PROFILE_CFLAGS=
|
||||
PROFILE_CPPFLAGS="-Ae"
|
||||
;;
|
||||
esac
|
||||
|
||||
36
config/hpux9.03
Normal file
@@ -0,0 +1,36 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details
|
||||
|
||||
# Default compiler is `cc'
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=cc
|
||||
CC_BASENAME=cc
|
||||
fi
|
||||
|
||||
# Flags
|
||||
case "X-$CC" in
|
||||
X-gcc)
|
||||
CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
|
||||
DEBUG_CFLAGS="-g -fverbose-asm"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O3"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
|
||||
*)
|
||||
CFLAGS="$CFLAGS -Ae"
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS=
|
||||
PROD_CFLAGS=
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS=
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
esac
|
||||
@@ -3,24 +3,29 @@
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details.
|
||||
|
||||
# The default compiler is `cicc'
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=cicc
|
||||
CC_BASENAME=cicc
|
||||
fi
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
# The default archiver is `xar'
|
||||
AR=${AR:-xar}
|
||||
|
||||
# Sometimes a particular compiler must be used. If that's the case
|
||||
# then uncomment the following line. Otherwise the main configure
|
||||
# script will try to detect the compiler automatically.
|
||||
CC=cicc
|
||||
AR=xar
|
||||
# There is no ranlib
|
||||
RANLIB=:
|
||||
LIBS="-L./ -L../ -lnoop_stubs"
|
||||
RUNTEST="yod -sz 1"
|
||||
|
||||
# Additional libraries
|
||||
LDFLAGS="$LDFLAGS -lnoop_stubs"
|
||||
|
||||
# How to run serial and parallel test programs
|
||||
RUNSERIAL="yod -sz 1"
|
||||
RUNPARALLEL="yod -sz 8"
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
CFLAGS="$CFLAGS -DDOS386"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
@@ -36,17 +41,20 @@ PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
# Turn off shared lib option. It does not work for TFLOPS yet.
|
||||
enable_shared="${enable_shared:-no}"
|
||||
|
||||
# Set this to the width required by printf() to print type `long
|
||||
# long'. For instance, if the format would be `%lld' then set it to
|
||||
# `ll' or if the format would be `%qd' set it to `q'.
|
||||
hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
|
||||
|
||||
# Hard set sizeof_intn_t to 0 because they are not supported.
|
||||
ac_cv_sizeof_int16_t=${ac_cv_sizeof_int16_t='0'}
|
||||
ac_cv_sizeof_int32_t=${ac_cv_sizeof_int32_t='0'}
|
||||
ac_cv_sizeof_int64_t=${ac_cv_sizeof_int64_t='0'}
|
||||
ac_cv_sizeof_int8_t=${ac_cv_sizeof_int8_t='0'}
|
||||
ac_cv_sizeof_uint16_t=${ac_cv_sizeof_uint16_t='0'}
|
||||
ac_cv_sizeof_uint32_t=${ac_cv_sizeof_uint32_t='0'}
|
||||
ac_cv_sizeof_uint64_t=${ac_cv_sizeof_uint64_t='0'}
|
||||
ac_cv_sizeof_uint8_t=${ac_cv_sizeof_uint8_t='0'}
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
|
||||
# Sometimes a particular compiler must be used. If that's the case
|
||||
# then uncomment the following line. Otherwise the main configure
|
||||
# script will try to detect the compiler automatically.
|
||||
CC=cc
|
||||
RANLIB=:
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
CFLAGS="$CFLAGS -ansi -fullwarn -woff 799"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
|
||||
# Set this to the width required by printf() to print type `long
|
||||
# long'. For instance, if the format would be `%lld' then set it to
|
||||
# `ll' or if the format would be `%qd' set it to `q'.
|
||||
#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
|
||||
|
||||
50
config/irix5.x
Normal file
@@ -0,0 +1,50 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details
|
||||
|
||||
# The default compiler is `cc' and there is no ranlib.
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=cc
|
||||
CC_BASENAME=cc
|
||||
fi
|
||||
RANLIB=:
|
||||
|
||||
case "X-$CC_BASENAME" in
|
||||
X-gcc)
|
||||
CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
|
||||
DEBUG_CFLAGS="-g -fverbose-asm"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O3"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
|
||||
*)
|
||||
# Do *not* use -ansi because it prevents hdf5 from being able
|
||||
# to read modification dates from the file. On some systems it
|
||||
# can also result in compile errors in system header files
|
||||
# since hdf5 includes a couple non-ANSI header files.
|
||||
#CFLAGS="$CFLAGS -ansi"
|
||||
|
||||
# Always turn off these compiler warnings:
|
||||
CFLAGS="$CFLAGS -woff 799"
|
||||
|
||||
# Extra debugging flags
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# Extra production flags
|
||||
# Note: higher optimizations relax alignment requirements needed.
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# Extra profiling flags
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
esac
|
||||
@@ -1,39 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
RANLIB=:
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
CFLAGS="$CFLAGS -ansi -n32"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
87
config/irix6.x
Normal file
@@ -0,0 +1,87 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details.
|
||||
|
||||
# Use SGI supplied C compiler by default. There is no ranlib
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC='cc'
|
||||
CC_BASENAME=cc
|
||||
fi
|
||||
RANLIB=:
|
||||
|
||||
# Compiler flags
|
||||
case "X-$CC_BASENAME" in
|
||||
X-gcc)
|
||||
CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
|
||||
DEBUG_CFLAGS="-g -fverbose-asm"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O3"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
|
||||
*)
|
||||
|
||||
# Check for old versions of the compiler that don't work right.
|
||||
case "`$CC -version 2>&1 |head -1`" in
|
||||
"Mongoose Compilers: Version 7.00")
|
||||
echo " +---------------------------------------------------+"
|
||||
echo " | You have an old version of cc (Mongoose Compilers |"
|
||||
echo " | version 7.00). Please upgrade to MIPSpro version |"
|
||||
echo " | 7.2.1.2m (patches are available from the SGI web |"
|
||||
echo " | site). The 7.00 version may generate incorrect |"
|
||||
echo " | code, especially when optimizations are enabled. |"
|
||||
echo " +---------------------------------------------------+"
|
||||
sleep 5
|
||||
;;
|
||||
esac
|
||||
|
||||
# Do *not* use -ansi because it prevents hdf5 from being able
|
||||
# to read modification dates from the file. On some systems it
|
||||
# can also result in compile errors in system header files
|
||||
# since hdf5 includes a couple non-ANSI header files.
|
||||
#CFLAGS="$CFLAGS -ansi"
|
||||
|
||||
# Always turn off these compiler warnings for the -64 compiler:
|
||||
# 1174: function declared but not used
|
||||
# 1429: the `long long' type is not standard
|
||||
# 1209: constant expressions
|
||||
# 1196: __vfork() (this is an SGI config problem)
|
||||
# 1685: turn off warnings about turning off invalid warnings
|
||||
CFLAGS="$CFLAGS -woff 1174,1429,1209,1196,1685"
|
||||
|
||||
# Always turn off these compiler warnings for the old compiler:
|
||||
# 799: the `long long' type is not standard
|
||||
# 803: turn off warnings about turning off invalid warnings
|
||||
# 835: __vfork() (this is an SGI config problem)
|
||||
CFLAGS="$CFLAGS -woff 799,803,835"
|
||||
|
||||
# Always turn off these loader warnings:
|
||||
# (notice the peculiar syntax)
|
||||
# 47: branch instructions that degrade performance on R4000
|
||||
# 84: a library is not used
|
||||
# 85: duplicate definition preemption (from -lnsl)
|
||||
# 134: duplicate weak definition preemption (from -lnsl)
|
||||
CFLAGS="$CFLAGS -Wl,-woff,47,-woff,84,-woff,85,-woff,134"
|
||||
|
||||
# Extra debugging flags
|
||||
DEBUG_CFLAGS="-g -fullwarn"
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# Extra production flags
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# Extra profiling flags
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
# Turn off shared lib option. It does not work for IRIX64 yet.
|
||||
test `uname -s` = IRIX64 && enable_shared="${enable_shared:-no}"
|
||||
;;
|
||||
esac
|
||||
@@ -1,50 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
|
||||
# Use SGI supplied C compiler
|
||||
CC="cc"
|
||||
RANLIB=:
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
# Always turn off these warnings:
|
||||
# 1174: function declared but not used
|
||||
# 1429: the `long long' type is not standard
|
||||
# 1209: constant expressions
|
||||
# 1196: __vfork() (this is an SGI config problem)
|
||||
#
|
||||
CFLAGS="$CFLAGS -fullwarn -ansi -64 -woff 1174,1429,1209,1196"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=-O
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
#!/bin/sh
|
||||
|
||||
58
config/linux
@@ -1,58 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
CC=${CC:-gcc}
|
||||
case `$CC -v 2>&1 |tail -1 |sed 's/gcc version //'` in
|
||||
2.7.*)
|
||||
echo " +------------------------------------------------+"
|
||||
echo " | You have an old version of gcc. Please upgrade |"
|
||||
echo " | to 2.8.1 or better. Continuing anyway, but |"
|
||||
echo " | code generation may be wrong on some platforms.|"
|
||||
echo " +------------------------------------------------+"
|
||||
sleep 5
|
||||
;;
|
||||
2.8.*)
|
||||
CFLAGS="$CFLAGS -Wundef -Wsign-compare"
|
||||
;;
|
||||
esac
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
CFLAGS="$CFLAGS -ansi"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS="-g -fverbose-asm"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS="-mcpu=pentiumpro -march=pentiumpro -O3 -finline-functions -malign-double -fomit-frame-pointer -fschedule-insns2"
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Enable parallel support by default for Robb's development system.
|
||||
#
|
||||
if [ 'robb@arborea' = `whoami`@`hostname` ]; then
|
||||
enable_parallel=${enable_parallel:-yes}
|
||||
fi
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
4
config/linux-gnu
Normal file
@@ -0,0 +1,4 @@
|
||||
# -*- shell-script -*-
|
||||
# This is the same as linux-gnulibc1
|
||||
|
||||
. $srcdir/config/linux-gnulibc1
|
||||
19
config/linux-gnulibc1
Normal file
@@ -0,0 +1,19 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details.
|
||||
|
||||
# The default compiler is `gcc'.
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=gcc
|
||||
CC_BASENAME=gcc
|
||||
fi
|
||||
|
||||
# Omit frame pointer for optimized code?
|
||||
NOFP=${NOFP:=-fomit-frame-pointer}
|
||||
|
||||
# Figure out compiler flags
|
||||
. $srcdir/config/gnu-flags
|
||||
@@ -1,7 +1,10 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details.
|
||||
|
||||
. config/linux
|
||||
CPP=/usr/bin/cpp
|
||||
# Same as with gnulibc1 for now
|
||||
. $srcdir/config/linux-gnulibc1
|
||||
@@ -1,39 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
#CFLAGS="$CFLAGS -ansi"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
|
||||
21
config/powerpc-ibm-aix4.x
Normal file
@@ -0,0 +1,21 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details.
|
||||
|
||||
# Cross compiling defaults
|
||||
ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
|
||||
ac_cv_sizeof_short=${ac_cv_sizeof_short=2}
|
||||
ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
|
||||
ac_cv_sizeof_long=${ac_cv_sizeof_long=4}
|
||||
ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
|
||||
ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
|
||||
ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
|
||||
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
|
||||
ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
|
||||
ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
|
||||
ac_cv_sizeof_off_t=${ac_cv_sizeof_off_t=8}
|
||||
@@ -1,39 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
#CFLAGS="$CFLAGS -ansi"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
|
||||
10
config/rs6000-ibm-aix4.x
Normal file
@@ -0,0 +1,10 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details.
|
||||
|
||||
# Cross compiling defaults
|
||||
ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
@@ -1,41 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
|
||||
# We can only use gcc
|
||||
CC=gcc
|
||||
|
||||
# What must *always* be present for things to compile correctly?
|
||||
CFLAGS="$CFLAGS -ansi"
|
||||
#CPPFLAGS="$CPPFLAGS -I."
|
||||
|
||||
# What compiler flags should be used for code development?
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS=
|
||||
|
||||
# What compiler flags should be used for building a production
|
||||
# library?
|
||||
PROD_CFLAGS=-O2
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# What compiler flags enable code profiling?
|
||||
PROFILE_CFLAGS=-pg
|
||||
PROFILE_CPPFLAGS=
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
28
config/solaris2.x
Normal file
@@ -0,0 +1,28 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
#
|
||||
# See BlankForm in this directory for details
|
||||
|
||||
# The default compiler is `gcc'
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=gcc
|
||||
CC_BASENAME=gcc
|
||||
fi
|
||||
|
||||
# Try gcc compiler flags
|
||||
. $srcdir/config/gnu-flags
|
||||
|
||||
# Try solaris native compiler flags
|
||||
if test "X-" = "X-$cc_flags_set"; then
|
||||
CFLAGS="-erroff=%none"
|
||||
DEBUG_CFLAGS=-g
|
||||
DEBUG_CPPFLAGS="-DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS=-xO2
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS=-xpg
|
||||
PROFILE_CPPFLAGS=
|
||||
cc_flags_set=yes
|
||||
fi
|
||||
138
config/unicosmk
Normal file
@@ -0,0 +1,138 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# This file is part of the HDF5 build script. It is processed shortly
|
||||
# after configure starts and defines, among other things, flags for
|
||||
# the various compile modes.
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Compiler flags. The CPPFLAGS values should not include package debug
|
||||
# flags like `-DH5G_DEBUG' since these are added with the
|
||||
# `--enable-debug' switch of configure.
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
# Choosing a C Compiler
|
||||
# ---------------------
|
||||
#
|
||||
# The user should be able to specify the compiler by setting the CC
|
||||
# environment variable to the name of the compiler and any switches it
|
||||
# requires for proper operation. If CC is unset then this script may
|
||||
# set it. If CC is unset by time this script completes then configure
|
||||
# will try `gcc' and `cc' in that order (perhaps some others too).
|
||||
#
|
||||
# Note: Code later in this file may depend on the value of $CC_BASENAME
|
||||
# in order to distinguish between different compilers when
|
||||
# deciding which compiler command-line switches to use. This
|
||||
# variable is set based on the incoming value of $CC and is only
|
||||
# used within this file.
|
||||
|
||||
if test "X-" = "X-$CC"; then
|
||||
CC=cc
|
||||
CC_BASENAME=cc
|
||||
fi
|
||||
# no need to use RANLIB
|
||||
RANLIB=:
|
||||
|
||||
|
||||
# C Compiler and Preprocessor Flags
|
||||
# ---------------------------------
|
||||
#
|
||||
# Flags that end with `_CFLAGS' are always passed to the compiler.
|
||||
# Flags that end with `_CPPFLAGS' are passed to the compiler when
|
||||
# compiling but not when linking.
|
||||
#
|
||||
# DEBUG_CFLAGS Flags to pass to the compiler to create a
|
||||
# DEBUG_CPPFLAGS library suitable for use with debugging
|
||||
# tools. Usually this list will exclude
|
||||
# optimization switches (like `-O') and include
|
||||
# switches that turn on symbolic debugging
|
||||
# support (like `-g').
|
||||
#
|
||||
# PROD_CFLAGS Flags to pass to the compiler to create a
|
||||
# PROD_CPPFLAGS production version of the library. These
|
||||
# usualy exclude symbolic debugging switches
|
||||
# (like `-g') and include optimization switches
|
||||
# (like `-O').
|
||||
#
|
||||
# PROFILE_CFLAGS Flags to pass to the compiler to create a
|
||||
# PROFILE_CPPFLAGS library suitable for performance testing (like
|
||||
# `-pg'). This may or may not include debugging
|
||||
# or production flags.
|
||||
#
|
||||
# CFLAGS Flags can be added to this variable which
|
||||
# might already be partially initialized. These
|
||||
# flags will always be passed to the compiler
|
||||
# and should include switches to turn on full
|
||||
# warnings. HDF5 attempts to be ANSI and Posix
|
||||
# compliant and employ good programming
|
||||
# practices resulting in few if any
|
||||
# warnings.
|
||||
#
|
||||
# Warning flags do not have to be added to CFLAGS
|
||||
# variable if the compiler is the GNU gcc
|
||||
# compiler or a descendent of gcc such as EGCS or PGCC.
|
||||
#
|
||||
# The CFLAGS should contains *something* or else
|
||||
# configure will probably add `-g'. For most
|
||||
# systems this isn't a problem but some systems
|
||||
# will disable optimizations in favor of the
|
||||
# `-g'.
|
||||
#
|
||||
#
|
||||
# These flags should be set according to the compiler being used.
|
||||
# There are two ways to check the compiler. You can try using `-v' or
|
||||
# `--version' to see if the compiler will print a version string. You
|
||||
# can use the value of $CC_BASENAME which is the base name of the
|
||||
# first word in $CC (note that the value of CC may have changed
|
||||
# above).
|
||||
|
||||
case $CC_BASENAME in
|
||||
gcc)
|
||||
CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
|
||||
DEBUG_CFLAGS="-g -fverbose-asm"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O3 -fomit-frame-pointer"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
|
||||
cc)
|
||||
CFLAGS="$CFLAGS"
|
||||
DEBUG_CFLAGS="-g -h zero"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O2"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
|
||||
*)
|
||||
CFLAGS="$CFLAGS -ansi"
|
||||
DEBUG_CFLAGS="-g"
|
||||
DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
|
||||
PROD_CFLAGS="-O"
|
||||
PROD_CPPFLAGS=
|
||||
PROFILE_CFLAGS="-pg"
|
||||
PROFILE_CPPFLAGS=
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
|
||||
# Overriding Configure Tests
|
||||
# --------------------------
|
||||
#
|
||||
# Values for overriding configuration tests when cross compiling.
|
||||
# This includes compiling on some machines where the serial front end
|
||||
# compiles for a parallel back end.
|
||||
|
||||
# Set this to `yes' or `no' depending on whether the target is big
|
||||
# endian or little endian.
|
||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
|
||||
|
||||
# Set this to the width required by printf() to print type `long
|
||||
# long'. For instance, if the format would be `%lld' then set it to
|
||||
# `ll' or if the format would be `%qd' set it to `q'.
|
||||
#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
|
||||
639
configure.in
@@ -1,10 +1,8 @@
|
||||
dnl Process this file with autoconf to produce configure. -*-indented-text-*-
|
||||
dnl Process this file with autoconf to produce configure.
|
||||
dnl
|
||||
dnl Copyright (C) 1997 National Center for Supercomputing Applications.
|
||||
dnl All rights reserved.
|
||||
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Initialize configure.
|
||||
dnl
|
||||
@@ -15,6 +13,13 @@ AC_CONFIG_AUX_DIR(bin)
|
||||
AC_CANONICAL_HOST
|
||||
AC_SUBST(CPPFLAGS)
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Dump all shell variables values.
|
||||
dnl
|
||||
AC_MSG_CHECKING(shell variables initial values)
|
||||
set >&5
|
||||
AC_MSG_RESULT(done)
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Check that the cache file was build on the same host as what we're
|
||||
dnl running on now.
|
||||
@@ -28,8 +33,6 @@ elif test $hdf5_cv_host != $host; then
|
||||
AC_MSG_ERROR(config.cache file is invalid)
|
||||
fi
|
||||
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Source any special files that we need. These files normally aren't
|
||||
dnl present but can be used by the maintainers to fine tune things like
|
||||
@@ -44,33 +47,65 @@ dnl OS
|
||||
dnl VENDOR
|
||||
dnl CPU
|
||||
dnl
|
||||
AC_MSG_CHECKING(for host config file)
|
||||
dnl If the `OS' ends with a version number then remove it. For instance,
|
||||
dnl `freebsd3.1' would become `freebsd'
|
||||
case $host_os in
|
||||
aix4.*)
|
||||
host_os_novers=aix4.x
|
||||
;;
|
||||
freebsd*)
|
||||
host_os_novers=freebsd
|
||||
;;
|
||||
irix5.*)
|
||||
host_os_novers=irix5.x
|
||||
;;
|
||||
irix6.*)
|
||||
host_os_novers=irix6.x
|
||||
;;
|
||||
osf4.*)
|
||||
host_os_novers=osf4.x
|
||||
;;
|
||||
solaris2.*)
|
||||
host_os_novers=solaris2.x
|
||||
;;
|
||||
*)
|
||||
host_os_novers=$host_os
|
||||
;;
|
||||
esac
|
||||
|
||||
host_config="none"
|
||||
for f in $host \
|
||||
$host_vendor-$host_os \
|
||||
$host_cpu-$host_os \
|
||||
for f in $host_cpu-$host_vendor-$host_os \
|
||||
$host_cpu-$host_vendor-$host_os_novers \
|
||||
$host_vendor-$host_os \
|
||||
$host_vendor-$host_os_novers \
|
||||
$host_cpu-$host_os \
|
||||
$host_cpu-$host_os_novers \
|
||||
$host_cpu-$host_vendor \
|
||||
$host_os \
|
||||
$host_os_novers \
|
||||
$host_vendor \
|
||||
$host_cpu ; do
|
||||
if test -f config/$f; then
|
||||
host_config=config/$f
|
||||
AC_MSG_CHECKING(for config $f)
|
||||
if test -f $srcdir/config/$f; then
|
||||
host_config=$srcdir/config/$f
|
||||
AC_MSG_RESULT(found)
|
||||
break
|
||||
fi
|
||||
AC_MSG_RESULT(no)
|
||||
done
|
||||
AC_MSG_RESULT($host_config)
|
||||
if test $host_config != "none"; then
|
||||
CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`"
|
||||
. $host_config
|
||||
fi
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Check for programs.
|
||||
dnl
|
||||
AC_PROG_CC
|
||||
CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`"
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_RANLIB
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
if test "X$AR" = "X"; then
|
||||
AC_CHECK_PROGS(AR,ar xar,:,$PATH)
|
||||
@@ -94,61 +129,116 @@ if test Xyes = "X$GCC"; then
|
||||
fi
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Production flags?
|
||||
dnl Production flags? Save the value in $CONFIG_MODE so we have it for
|
||||
dnl the record.
|
||||
dnl
|
||||
AC_MSG_CHECKING(for production mode)
|
||||
AC_ARG_ENABLE(production,
|
||||
[--enable-production=yes|no Determines how to run the compiler.])
|
||||
[ --enable-production Determines how to run the compiler.])
|
||||
|
||||
case "X-$enableval" in
|
||||
X-yes)
|
||||
AC_MSG_RESULT("production")
|
||||
CONFIG_MODE=production
|
||||
CFLAGS="$CFLAGS $PROD_CFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS"
|
||||
;;
|
||||
X-|X-no)
|
||||
AC_MSG_RESULT("development")
|
||||
CONFIG_MODE=development
|
||||
CFLAGS="$CFLAGS $DEBUG_CFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS"
|
||||
;;
|
||||
X-pg|X-profile)
|
||||
AC_MSG_RESULT("profile")
|
||||
CONFIG_MODE=profile
|
||||
CFLAGS="$CFLAGS $PROFILE_CFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS"
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT("user-defined")
|
||||
CONFIG_MODE="$X-enableval"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Check for libraries. (none required yet)
|
||||
dnl Check for system libraries.
|
||||
dnl
|
||||
AC_CHECK_LIB(m, ceil)
|
||||
AC_CHECK_LIB(coug, main) dnl ...for ASCI/Red
|
||||
AC_CHECK_LIB(z, compress2)
|
||||
AC_CHECK_LIB(m,ceil)
|
||||
AC_CHECK_LIB(nsl,xdr_int) dnl ...for Solaris and hdf4
|
||||
AC_CHECK_LIB(coug,main) dnl ...for ASCI/Red
|
||||
AC_CHECK_LIB(jpeg,main) dnl ...required for linking hdf4 apps
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Check for header files.
|
||||
dnl Check for system header files.
|
||||
dnl
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(unistd.h zlib.h)
|
||||
AC_HEADER_TIME
|
||||
dnl Unix
|
||||
AC_CHECK_HEADERS(sys/resource.h sys/time.h unistd.h sys/ioctl.h sys/stat.h)
|
||||
AC_CHECK_HEADERS(stddef.h setjmp.h stdint.h)
|
||||
dnl Windows
|
||||
AC_CHECK_HEADERS(io.h winsock.h sys/timeb.h)
|
||||
|
||||
case $host in
|
||||
alpha*-dec*-osf*)
|
||||
dnl The <sys/sysinfo.h> and <sys/proc.h> are needed on the DEC
|
||||
dnl Alpha to turn off UAC fixing. We do *not* attempt to
|
||||
dnl locate these files on other systems because there are too
|
||||
dnl many problems with including them.
|
||||
AC_CHECK_HEADERS(sys/sysinfo.h sys/proc.h)
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Data types and their sizes.
|
||||
dnl
|
||||
AC_TYPE_OFF_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_CHECK_TYPE(size_t, unsigned long)
|
||||
AC_CHECK_TYPE(ssize_t, long)
|
||||
AC_C_BIGENDIAN
|
||||
AC_CHECK_SIZEOF(char, 1)
|
||||
AC_CHECK_SIZEOF(short, 2)
|
||||
AC_CHECK_SIZEOF(int, 4)
|
||||
AC_CHECK_SIZEOF(long, 4)
|
||||
AC_CHECK_SIZEOF(long long, 8)
|
||||
AC_CHECK_SIZEOF(__int64, 8)
|
||||
AC_CHECK_SIZEOF(float, 4)
|
||||
AC_CHECK_SIZEOF(double, 8)
|
||||
AC_CHECK_SIZEOF(long double, 8)
|
||||
|
||||
dnl Posix.1g types (C9x)
|
||||
cat >>confdefs.h <<\EOF
|
||||
#include <sys/types.h>
|
||||
EOF
|
||||
AC_CHECK_SIZEOF( int8_t, 1)
|
||||
AC_CHECK_SIZEOF( uint8_t, 1)
|
||||
AC_CHECK_SIZEOF( int_least8_t, 1)
|
||||
AC_CHECK_SIZEOF( uint_least8_t, 1)
|
||||
AC_CHECK_SIZEOF( int_fast8_t, 1)
|
||||
AC_CHECK_SIZEOF( uint_fast8_t, 1)
|
||||
|
||||
AC_CHECK_SIZEOF( int16_t, 2)
|
||||
AC_CHECK_SIZEOF( uint16_t, 2)
|
||||
AC_CHECK_SIZEOF( int_least16_t, 2)
|
||||
AC_CHECK_SIZEOF(uint_least16_t, 2)
|
||||
AC_CHECK_SIZEOF( int_fast16_t, 2)
|
||||
AC_CHECK_SIZEOF( uint_fast16_t, 2)
|
||||
|
||||
AC_CHECK_SIZEOF( int32_t, 4)
|
||||
AC_CHECK_SIZEOF( uint32_t, 4)
|
||||
AC_CHECK_SIZEOF( int_least32_t, 4)
|
||||
AC_CHECK_SIZEOF(uint_least32_t, 4)
|
||||
AC_CHECK_SIZEOF( int_fast32_t, 4)
|
||||
AC_CHECK_SIZEOF( uint_fast32_t, 4)
|
||||
|
||||
AC_CHECK_SIZEOF( int64_t, 8)
|
||||
AC_CHECK_SIZEOF( uint64_t, 8)
|
||||
AC_CHECK_SIZEOF( int_least64_t, 8)
|
||||
AC_CHECK_SIZEOF(uint_least64_t, 8)
|
||||
AC_CHECK_SIZEOF( int_fast64_t, 8)
|
||||
AC_CHECK_SIZEOF( uint_fast64_t, 8)
|
||||
|
||||
AC_CHECK_SIZEOF(size_t, 4)
|
||||
cat >>confdefs.h <<\EOF
|
||||
#include <sys/types.h> /*for off_t definition*/
|
||||
@@ -156,30 +246,205 @@ EOF
|
||||
AC_CHECK_SIZEOF(off_t, 4)
|
||||
|
||||
AC_ARG_ENABLE(hsizet,
|
||||
[--disable-hsizet Datasets can normally be larger than memory
|
||||
and/or files but some compilers are unable to
|
||||
handle this (including versions of GCC before
|
||||
2.8.0). Disabling the feature causes dataset
|
||||
sizes to be restricted to the size of core memory,
|
||||
or 'size_t'.],
|
||||
[ --disable-hsizet Datasets can normally be larger than memory
|
||||
and/or files but some compilers are unable to
|
||||
handle this (including versions of GCC before
|
||||
2.8.0). Disabling the feature causes dataset
|
||||
sizes to be restricted to the size of core memory,
|
||||
or 'size_t'.],
|
||||
HSIZET=$enableval)
|
||||
AC_MSG_CHECKING(for sizeof hsize_t and hssize_t)
|
||||
AC_SUBST(HSIZET)
|
||||
case $HSIZET in
|
||||
no|small)
|
||||
AC_MSG_RESULT(small)
|
||||
HSIZET=small
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT(large)
|
||||
HSIZET=large
|
||||
AC_DEFINE(HAVE_LARGE_HSIZET)
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Is the GNU zlib present? It has a header file `zlib.h' and a library
|
||||
dnl `-lz' and their locations might be specified with the `--enable-zlib'
|
||||
dnl command-line switch. The value is an include path and/or a library path.
|
||||
dnl If the library path is specified then it must be preceded by a comma.
|
||||
dnl
|
||||
|
||||
AC_ARG_WITH(zlib,[ --with-zlib=INC,LIB Use the GNU zlib compression],
|
||||
,withval=yes)
|
||||
case $withval in
|
||||
yes)
|
||||
AC_CHECK_HEADERS(zlib.h)
|
||||
AC_CHECK_LIB(z, compress)
|
||||
;;
|
||||
no)
|
||||
AC_MSG_CHECKING(for GNU zlib)
|
||||
AC_MSG_RESULT(suppressed)
|
||||
;;
|
||||
*)
|
||||
zlib_inc="`echo $withval |cut -f1 -d,`"
|
||||
if test "X" != "$zlib_inc"; then
|
||||
saved_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS -I$zlib_inc"
|
||||
AC_CHECK_HEADERS(zlib.h,,CPPFLAGS="$saved_CPPFLAGS")
|
||||
else
|
||||
AC_CHECK_HEADERS(zlib.h)
|
||||
fi
|
||||
|
||||
zlib_lib="`echo $withval |cut -f2 -d, -s`"
|
||||
if test "X" != "$zlb_lib"; then
|
||||
saved_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="$LDFLAGS -L$zlib_lib"
|
||||
AC_CHECK_LIB(z, compress,,LDFLAGS="$saved_LDFLAGS")
|
||||
else
|
||||
AC_CHECK_LIB(z, compress)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Is HDF4 present? If so then we can compile the h5toh4 converter. We
|
||||
dnl assume h5toh4 can be compiled and then prove otherwise when we don't find
|
||||
dnl a header file or library.
|
||||
dnl
|
||||
AC_SUBST(H5TOH4)
|
||||
H5TOH4=h5toh4
|
||||
AC_SUBST(TESTH5TOH4)
|
||||
TESTH5TOH4='$(srcdir)/testh5toh4'
|
||||
|
||||
AC_ARG_WITH(hdf4,[ --with-hdf4=INC,LIB Use the HDF4 library],,withval=yes)
|
||||
case $withval in
|
||||
yes)
|
||||
AC_CHECK_HEADERS(mfhdf.h,,unset H5TOH4 TESTH5TOH4)
|
||||
AC_CHECK_LIB(df,main,,unset H5TOH4 TESTH5TOH4)
|
||||
AC_CHECK_LIB(mfhdf,main,,unset H5TOH4 TESTH5TOH4)
|
||||
;;
|
||||
no)
|
||||
AC_MSG_CHECKING(for HDF4)
|
||||
AC_MSG_RESULT(suppressed)
|
||||
unset H5TOH4 TESTH5TOH4
|
||||
;;
|
||||
*)
|
||||
hdf4_inc="`echo $withval |cut -f1 -d,`"
|
||||
if test "X" != "$hdf4_inc"; then
|
||||
saved_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS -I$hdf4_inc"
|
||||
AC_CHECK_HEADERS(mfhdf.h,,
|
||||
CPPFLAGS="$saved_CPPFLAGS"
|
||||
unset H5TOH4 TESTH5TOH4
|
||||
)
|
||||
else
|
||||
AC_CHECK_HEADERS(mfhdf.h)
|
||||
fi
|
||||
|
||||
hdf4_lib="`echo $withval |cut -f2 -d, -s`"
|
||||
if test "X" != "$hdf4_lib"; then
|
||||
saved_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="$LDFLAGS -L$hdf4_lib"
|
||||
AC_CHECK_LIB(df,main,,unset H5TOH4 TESTH5TOH4)
|
||||
AC_CHECK_LIB(mfhdf,main,,unset H5TOH4 TESTH5TOH4)
|
||||
else
|
||||
AC_CHECK_LIB(df,main)
|
||||
AC_CHECK_LIB(mfhdf,main)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl How does one figure out the local time zone? Anyone know of a
|
||||
dnl Posix way to do this?
|
||||
dnl
|
||||
|
||||
dnl First check if `struct tm' has a `tm_gmtoff' member.
|
||||
AC_MSG_CHECKING(for tm_gmtoff in struct tm)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/time.h>
|
||||
#include <time.h>],[struct tm tm; tm.tm_gmtoff=0;],
|
||||
AC_DEFINE(HAVE_TM_GMTOFF)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
dnl check if `struct tm' has a `__tm_gmtoff' member.
|
||||
AC_MSG_CHECKING(for __tm_gmtoff in struct tm)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/time.h>
|
||||
#include <time.h>],[struct tm tm; tm.__tm_gmtoff=0;],
|
||||
AC_DEFINE(HAVE___TM_GMTOFF)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
dnl Check whether the global variable `timezone' is defined.
|
||||
AC_MSG_CHECKING(for global timezone variable)
|
||||
AC_TRY_LINK([
|
||||
#include <sys/time.h>
|
||||
#include <time.h>], [timezone=0;],
|
||||
AC_DEFINE(HAVE_TIMEZONE)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
dnl Check whether `struct timezone' is defined.
|
||||
AC_STRUCT_TIMEZONE
|
||||
AC_MSG_CHECKING(for struct timezone)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>],[struct timezone tz; tz.tz_minuteswest=0;],
|
||||
AC_DEFINE(HAVE_STRUCT_TIMEZONE)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Does the struct stat have the st_blocks field? This field is not Posix.
|
||||
dnl
|
||||
AC_MSG_CHECKING(for st_blocks in struct stat)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/stat.h>],[struct stat sb; sb.st_blocks=0;],
|
||||
AC_DEFINE(HAVE_STAT_ST_BLOCKS)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl How do we figure out the width of a tty in characters?
|
||||
dnl
|
||||
AC_CHECK_FUNCS(_getvideoconfig gettextinfo GetConsoleScreenBufferInfo)
|
||||
AC_CHECK_FUNCS(_scrsize ioctl)
|
||||
|
||||
AC_MSG_CHECKING(for struct videoconfig)
|
||||
AC_TRY_COMPILE(,[struct videoconfig w; w.numtextcols=0;],
|
||||
AC_DEFINE(HAVE_STRUCT_VIDEOCONFIG)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
AC_MSG_CHECKING(for struct text_info)
|
||||
AC_TRY_COMPILE(,[struct text_info w; w.screenwidth=0;],
|
||||
AC_DEFINE(HAVE_STRUCT_TEXT_INFO)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
AC_MSG_CHECKING(for TIOCGWINSZ)
|
||||
AC_TRY_COMPILE([#include <sys/ioctl.h>],[int w=TIOCGWINSZ;],
|
||||
AC_DEFINE(HAVE_TIOCGWINSZ)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
AC_MSG_CHECKING(for TIOCGGETD)
|
||||
AC_TRY_COMPILE([#include <sys/ioctl.h>],[int w=TIOCGETD;],
|
||||
AC_DEFINE(HAVE_TIOCGETD)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Check for functions.
|
||||
dnl
|
||||
AC_CHECK_FUNCS(getpwuid gethostname system getrusage fork waitpid)
|
||||
|
||||
AC_CHECK_FUNCS(gettimeofday BSDgettimeofday difftime snprintf vsnprintf)
|
||||
AC_CHECK_FUNCS(compress2 setsysinfo longjmp signal sigaction)
|
||||
AC_TRY_COMPILE([#include<sys/types.h>],
|
||||
[off64_t n = 0;],
|
||||
AC_CHECK_FUNCS(lseek64 fseek64),
|
||||
@@ -194,13 +459,13 @@ AC_C_CONST
|
||||
AC_C_INLINE
|
||||
|
||||
AC_MSG_CHECKING(for __attribute__ extension)
|
||||
AC_TRY_COMPILE(,[int __attribute__((unused)) f(void){return 1;}],
|
||||
AC_TRY_COMPILE(,[int __attribute__((unused)) x],
|
||||
AC_DEFINE(HAVE_ATTRIBUTE)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
AC_MSG_CHECKING(for __FUNCTION__ extension)
|
||||
AC_TRY_COMPILE(,[int f(void){return __FUNCTION__;}],
|
||||
AC_TRY_COMPILE(,[(void)__FUNCTION__],
|
||||
AC_DEFINE(HAVE_FUNCTION)
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
@@ -212,7 +477,7 @@ dnl default in case none of the others work.
|
||||
dnl
|
||||
AC_MSG_CHECKING(how to print long long)
|
||||
AC_CACHE_VAL(hdf5_cv_printf_ll,
|
||||
for hdf5_cv_printf_ll in ll q l; do
|
||||
for hdf5_cv_printf_ll in l L q ll unknown; do
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -223,24 +488,24 @@ AC_CACHE_VAL(hdf5_cv_printf_ll,
|
||||
exit (strcmp(s,"1099511627776"));}],
|
||||
break)
|
||||
done)
|
||||
AC_MSG_RESULT($hdf5_cv_printf_ll)
|
||||
AC_MSG_RESULT(%${hdf5_cv_printf_ll}d and %${hdf5_cv_printf_ll}u)
|
||||
AC_DEFINE_UNQUOTED(PRINTF_LL_WIDTH,"$hdf5_cv_printf_ll")
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Turn on debugging by setting compiler flags
|
||||
dnl
|
||||
AC_MSG_CHECKING(for debug flags)
|
||||
AC_ARG_ENABLE(debug,
|
||||
[--enable-debug=all Turn on debugging in all packages. One may also
|
||||
[ --enable-debug[=all] Turn on debugging in all packages. One may also
|
||||
specify a comma-separated list of package names
|
||||
without the leading H5 or the word no. The default
|
||||
is most packages.],
|
||||
DEBUG_PKG=$enableval)
|
||||
|
||||
AC_SUBST(DEBUG_PKG)
|
||||
all_packages="ac,b,d,e,f,g,hg,hl,i,mf,mm,o,p,s,t,v,z"
|
||||
if test X = "X$DEBUG_PKG" -o Xyes = "X$DEBUG_PKG"; then
|
||||
DEBUG_PKG=ac,b,d,e,f,g,hg,i,mm,p,s,t,v,z
|
||||
DEBUG_PKG="d,e,f,g,hg,i,mm,o,p,s,t,v,z"
|
||||
CPPFLAGS="$CPPFLAGS -UNDEBUG"
|
||||
AC_MSG_RESULT(default ($DEBUG_PKG))
|
||||
elif test Xall = "X$DEBUG_PKG"; then
|
||||
@@ -266,53 +531,256 @@ dnl Enable tracing of the API
|
||||
dnl
|
||||
AC_MSG_CHECKING(for API tracing);
|
||||
AC_ARG_ENABLE(trace,
|
||||
[--disable-trace Disable API tracing capability],
|
||||
[ --disable-trace Disable API tracing capability],
|
||||
TRACE=$enableval)
|
||||
|
||||
AC_SUBST(TRACE_API)
|
||||
if test X = "X$TRACE" -o Xyes = "X$TRACE"; then
|
||||
AC_MSG_RESULT(yes)
|
||||
TRACE_API=yes
|
||||
CPPFLAGS="$CPPFLAGS -DH5_DEBUG_API"
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
TRACE_API=no
|
||||
CPPFLAGS="$CPPFLAGS -UH5_DEBUG_API"
|
||||
fi
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Check for parallel support
|
||||
dnl The following variables are used to distinguish between building a
|
||||
dnl serial and parallel library.
|
||||
dnl
|
||||
dnl HAVE_PARALLEL -- defined in H5config.h if we are building
|
||||
dnl a parallel library even if configure wasn't
|
||||
dnl able to find some header file or library that
|
||||
dnl might be required. This is defined if the
|
||||
dnl compiler looks like a parallel compiler (e.g.,
|
||||
dnl mpicc or mpcc) or if the user explicitly states
|
||||
dnl that a parallel library is being built by supplying
|
||||
dnl the `--enable-parallel' configure switch.
|
||||
dnl
|
||||
dnl PARALLEL -- This variable is set to a non-null value if
|
||||
dnl configure thinks we're compiling a parallel
|
||||
dnl version of the library.
|
||||
dnl
|
||||
dnl RUNSERIAL -- This is a command which will be prepended to
|
||||
dnl the executable name to run the executable using
|
||||
dnl a single process. For serial versions of the
|
||||
dnl library this will normally be empty. For parallel
|
||||
dnl versions it might be something like `mpirun -np 1'.
|
||||
dnl The value of this variable is substituted in *.in
|
||||
dnl files.
|
||||
dnl
|
||||
dnl RUNPARALLEL -- This is a command which will be prepended to
|
||||
dnl the executable name to run the executable on
|
||||
dnl multiple processors. For the serial library the
|
||||
dnl value will normally be the empty string. For
|
||||
dnl parallel library it should be something like
|
||||
dnl `mpi -np $$NPROCS' where NPROCS will eventually
|
||||
dnl contain the number of processors on which to run
|
||||
dnl the executable (the double dollarsigns are to
|
||||
dnl protect the expansion until make executes the
|
||||
dnl command). The value of this variable is
|
||||
dnl substituted in *.in files.
|
||||
dnl
|
||||
AC_SUBST(PARALLEL)
|
||||
AC_SUBST(RUNSERIAL)
|
||||
AC_SUBST(RUNPARALLEL)
|
||||
AC_SUBST(TESTPARALLEL)
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl If the compiler is obviously a parallel compiler then we're building
|
||||
dnl a parallel version of hdf5 and should define HAVE_PARALLEL. Furthermore,
|
||||
dnl the name of the compiler might tell us how to run the resulting
|
||||
dnl executable. For `mpicc' the executable should be run with `mpirun' from
|
||||
dnl the same directory as mpicc if it exists.
|
||||
dnl
|
||||
case "$CC_BASENAME" in
|
||||
mpicc)
|
||||
# The mpich compiler. Use mpirun from the same directory if it
|
||||
# exists.
|
||||
PARALLEL=mpicc
|
||||
AC_MSG_CHECKING(for mpirun)
|
||||
|
||||
# Find the path where mpicc is located.
|
||||
cmd=`echo $CC |cut -f1 -d' '`
|
||||
if (echo $cmd |grep / >/dev/null); then
|
||||
path="`echo $cmd |sed 's/\(.*\)\/.*$/\1/'`"
|
||||
else
|
||||
for path in `echo $PATH |tr : ' '`; do
|
||||
if test -x $path/$cmd; then
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Is there an mpirun at that path?
|
||||
if test -x $path/mpirun; then
|
||||
AC_MSG_RESULT($path/mpirun)
|
||||
RUNSERIAL="${RUNSERIAL:-none}"
|
||||
if test "X-" = "X-$RUNPARALLEL"; then
|
||||
RUNPARALLEL="$path/mpirun -np \$\${NPROCS:=2}"
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT(none)
|
||||
fi
|
||||
;;
|
||||
|
||||
mpcc|mpcc_r)
|
||||
# The IBM compiler
|
||||
PARALLEL="$CC_BASENAME"
|
||||
;;
|
||||
|
||||
*)
|
||||
# Probably not a parallel compiler, but if `--enable-parallel'
|
||||
# is defined below then we're still building a parallel hdf5.
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl What header files and libraries do we have to look for for parallel
|
||||
dnl support? For the most part, search paths are already specified with
|
||||
dnl CPPFLAGS and LDFLAGS or are known to the compiler. If the user says
|
||||
dnl `--disable-parallel' but specifies a known parallel compiler (like mpicc
|
||||
dnl or mpcc) then parallel support is enabled but configure doesn't search
|
||||
dnl for any parallel header files or libraries.
|
||||
dnl
|
||||
AC_ARG_ENABLE(parallel,
|
||||
--enable-parallel=mpio Enable parallel support with MPIO,
|
||||
PARALLEL=$enableval)
|
||||
AC_MSG_CHECKING(for parallel support);
|
||||
AC_SUBST(RUNTEST)
|
||||
[ --enable-parallel=TYPE Search for MPI-IO and MPI support files])
|
||||
|
||||
case "X-$PARALLEL" in
|
||||
AC_MSG_CHECKING(for parallel support files)
|
||||
case "X-$enable_parallel" in
|
||||
X-|X-no|X-none)
|
||||
# Either we are not compiling for parallel or the header and library
|
||||
# files and locations are known to the compiler (this is the case
|
||||
# for a correct installation of mpicc for instance).
|
||||
AC_MSG_RESULT(skipped)
|
||||
;;
|
||||
|
||||
X-|X-no)
|
||||
# Parallel support is not enabled
|
||||
AC_MSG_RESULT(disabled)
|
||||
;;
|
||||
X-yes)
|
||||
# We want to compile a parallel library with a compiler that
|
||||
# already knows how to link with MPI and MPI-IO.
|
||||
AC_MSG_RESULT(provided by compiler)
|
||||
PARALLEL=yes
|
||||
;;
|
||||
|
||||
X-mpio|X-yes)
|
||||
# Use MPIO. Define HAVE_PARALLEL in src/H5config.h (comes from
|
||||
# ./acconfig.h) and augment the include and library search paths
|
||||
# (it doesn't hurt to have extra paths). Then check for header
|
||||
# files and libraries. Some extra source files are added to the
|
||||
# list also so we don't have to ifdef out the whole file.
|
||||
AC_MSG_RESULT(mpio)
|
||||
AC_DEFINE(HAVE_PARALLEL)
|
||||
CPPFLAGS="$CPPFLAGS $MPI_INC"
|
||||
CFLAGS="$CFLAGS $MPI_LIB"
|
||||
RUNTEST="$RUNTEST"
|
||||
AC_CHECK_LIB(mpi,main) dnl Replace `main' with some function
|
||||
AC_CHECK_LIB(mpio,main) dnl Replace `main' with some function
|
||||
;;
|
||||
X-mpich)
|
||||
# For normal mpich installation the compiler, mpicc, should know
|
||||
# where the MPI and MPI-IO header files are located and know which
|
||||
# extra libraries need to be linked and will supply appropriate
|
||||
# flags to the underlying compiler.
|
||||
AC_MSG_RESULT(mpich)
|
||||
AC_MSG_WARN(*** Why aren't you using an mpicc compiler? ***)
|
||||
|
||||
*)
|
||||
AC_MSG_ERROR(unknown parallel support: $PARALLEL)
|
||||
;;
|
||||
# Apparently mpicc isn't installed correctly so configure must search
|
||||
# for the header files and libraries. Actually we only have to search
|
||||
# for the libraries in order to get the onto the link line, the user
|
||||
# will have already told us about the locations. Fail if something
|
||||
# is missing.
|
||||
PARALLEL=mpich
|
||||
AC_CHECK_LIB(mpich,MPI_Init,,AC_MSG_ERROR(no mpich library))
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_RESULT(error)
|
||||
AC_MSG_ERROR(\"$enable_parallel\" is not a valid parallel search type)
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Should the `testpar' directory participate in the build?
|
||||
dnl
|
||||
if test "X-" != "X-$PARALLEL"; then
|
||||
TESTPARALLEL=testpar
|
||||
fi
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Print some other parallel information and do some sanity checks.
|
||||
dnl
|
||||
if test "X-" != "X-$PARALLEL"; then
|
||||
# We are building a parallel library
|
||||
AC_DEFINE(HAVE_PARALLEL)
|
||||
|
||||
# Display what we found about running programs
|
||||
AC_MSG_CHECKING(prefix for running on one processor)
|
||||
AC_MSG_RESULT($RUNSERIAL)
|
||||
AC_MSG_CHECKING(prefix for running in parallel)
|
||||
AC_MSG_RESULT($RUNPARALLEL)
|
||||
|
||||
# Check that we can link a simple MPI and MPI-IO application
|
||||
dnl AC_MSG_CHECKING(whether a simple MPI-IO program can be linked)
|
||||
dnl AC_TRY_LINK(,[MPI_Init();MPI_File_open();],
|
||||
dnl AC_MSG_RESULT(yes),
|
||||
dnl AC_MSG_RESULT(no)
|
||||
dnl AC_MSG_ERROR('unable to link a simple MPI-IO application'))
|
||||
|
||||
|
||||
# There *must* be some way to run in parallel even if it's just the
|
||||
# word `none'.
|
||||
if test "X-" = "X-$RUNPARALLEL"; then
|
||||
AC_MSG_ERROR(no way to run a parallel program)
|
||||
fi
|
||||
|
||||
# If RUNSERIAL or RUNPARALLEL is the word `none' then replace it with
|
||||
# the empty string.
|
||||
if test "X-none" = "X-$RUNSERIAL"; then
|
||||
RUNSERIAL=
|
||||
fi
|
||||
if test "X-none" = "X-$RUNPARALLEL"; then
|
||||
RUNPARALLEL=
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
dnl Set some variables for general configuration information to be saved
|
||||
dnl and installed with the libraries.
|
||||
dnl
|
||||
|
||||
# HDF5 version from the first line of the README file.
|
||||
H5_VERSION=`cut -d' ' -f3 $srcdir/README |head -1`
|
||||
AC_SUBST(H5_VERSION)
|
||||
|
||||
# Configuration date
|
||||
AC_SUBST(CONFIG_DATE) CONFIG_DATE=`date`
|
||||
|
||||
# User doing the configuration
|
||||
AC_SUBST(CONFIG_USER) CONFIG_USER="$USER@`hostname`"
|
||||
if test "X-$ORGANIZATION" != "X-"; then
|
||||
CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
|
||||
fi
|
||||
|
||||
# Configuration mode (production, development, profile, etc) saved above.
|
||||
AC_SUBST(CONFIG_MODE)
|
||||
|
||||
# Byte sex from the AC_C_BIGENDIAN macro.
|
||||
AC_SUBST(BYTESEX)
|
||||
if test "X-$WORDS_BIGENDIAN" = "X-"; then
|
||||
BYTESEX="little-endian"
|
||||
else
|
||||
BYTESEX="big-endian"
|
||||
fi
|
||||
|
||||
# Are we compiling static libraries, shared libraries, or both?
|
||||
AC_SUBST(STATIC_SHARED)
|
||||
if test "X-$enable_static" = "X-yes" && test "X-$enable_shared" = "X-yes"; then
|
||||
STATIC_SHARED="static, shared"
|
||||
elif test "X-$enable_static" = "X-yes"; then
|
||||
STATIC_SHARED="static"
|
||||
elif test "X-$enable_shared" = "X-yes"; then
|
||||
STATIC_SHARED="shared"
|
||||
else
|
||||
STATIC_SHARED="none"
|
||||
fi
|
||||
|
||||
# Parallel support? (set above except empty if none)
|
||||
PARALLEL=${PARALLEL:-no}
|
||||
|
||||
# Compiler with version information
|
||||
AC_SUBST(CC_VERSION)
|
||||
if test "X-$cc_vendor" != "X-" && test "X-$cc_version" != "X-"; then
|
||||
CC_VERSION="$CC ($cc_vendor-$cc_version)"
|
||||
else
|
||||
CC_VERSION="$CC"
|
||||
fi
|
||||
|
||||
|
||||
dnl ----------------------------------------------------------------------
|
||||
@@ -326,9 +794,13 @@ AC_SUBST_FILE(CONCLUDE) CONCLUDE=config/conclude
|
||||
if test "X$GCC" = "Xyes" && test "X$GMAKE" = "Xyes"; then
|
||||
AC_SUBST_FILE(DEPEND1) DEPEND1=config/depend
|
||||
AC_SUBST_FILE(DEPEND2) DEPEND2=/dev/null
|
||||
AC_SUBST_FILE(DEPEND3) DEPEND3=/dev/null
|
||||
AC_SUBST_FILE(DEPEND4) DEPEND4=/dev/null
|
||||
else
|
||||
AC_SUBST_FILE(DEPEND1) DEPEND1=src/.distdep
|
||||
AC_SUBST_FILE(DEPEND2) DEPEND2=test/.distdep
|
||||
AC_SUBST_FILE(DEPEND1) DEPEND1=$srcdir/src/.distdep
|
||||
AC_SUBST_FILE(DEPEND2) DEPEND2=$srcdir/test/.distdep
|
||||
AC_SUBST_FILE(DEPEND3) DEPEND3=$srcdir/testpar/.distdep
|
||||
AC_SUBST_FILE(DEPEND4) DEPEND4=$srcdirtools/.distdep
|
||||
fi
|
||||
|
||||
dnl We don't need to say when we're entering directories if we're using
|
||||
@@ -350,9 +822,28 @@ else
|
||||
fi
|
||||
AC_SUBST(ROOT) ROOT=`$pwd`
|
||||
|
||||
dnl Touch the time-stamp files for src/H5config.h.in and src/H5config.h
|
||||
dnl before we generate them or the Makefiles.
|
||||
touch ./config/stamp1 ./config/stamp2
|
||||
dnl Some cleanup stuff
|
||||
rm -f conftest conftest.o conftest.c dummy.o
|
||||
|
||||
AC_OUTPUT(config/depend config/commence config/conclude \
|
||||
Makefile src/Makefile test/Makefile tools/Makefile examples/Makefile)
|
||||
dnl Build config.status, touch the stamp files, and build all the Makefiles.
|
||||
dnl The order is such that the first `make' does not need to update any
|
||||
dnl configuration information. See config/commence.in for the order in which
|
||||
dnl things need to be done.
|
||||
|
||||
# First the stamp1 file for H5config.h.in
|
||||
mkdir ./config >/dev/null 2>&1
|
||||
touch ./config/stamp1
|
||||
|
||||
# Then the config.status file (but not makefiles)
|
||||
saved_no_create=$no_create
|
||||
no_create=yes
|
||||
AC_OUTPUT(src/libhdf5.settings config/depend config/commence config/conclude \
|
||||
Makefile src/Makefile pablo/Makefile test/Makefile \
|
||||
testpar/Makefile tools/Makefile examples/Makefile)
|
||||
no_create=$saved_no_create
|
||||
|
||||
# Then the stamp2 file for H5config.h
|
||||
touch ./config/stamp2
|
||||
|
||||
# Finally the makefiles
|
||||
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
|
||||
|
||||
@@ -1,18 +1,80 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Attributes</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Attributes</h1>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
Attributes
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>The Attribute Interface (H5A)</h1>
|
||||
|
||||
<h2>1. Introduction</h2>
|
||||
|
||||
<p>The appribute API (H5A) is primarily designed to easily allow small
|
||||
<p>The attribute API (H5A) is primarily designed to easily allow small
|
||||
datasets to be attached to primary datasets as metadata information.
|
||||
Additional goals for the H5A interface include keeping storage
|
||||
requirement for each attribute to a minimum and easily sharing
|
||||
requirements for each attribute to a minimum and easily sharing
|
||||
attributes among datasets.
|
||||
<p>Because attributes are intended to be small objects, large datasets
|
||||
intended as additional information for a primary dataset should be
|
||||
@@ -21,7 +83,7 @@
|
||||
indicate a particular type of dataset with supplemental datasets is
|
||||
located in the group. How small is "small" is not defined by the
|
||||
library and is up to the user's interpretation.
|
||||
<p>Attributes are not seperate objects in the file, they are always
|
||||
<p>Attributes are not separate objects in the file, they are always
|
||||
contained in the object header of the object they are attached to. The
|
||||
I/O functions defined below are required to read or write attribute
|
||||
information, not the H5D I/O routines.
|
||||
@@ -44,12 +106,12 @@
|
||||
and <em>space_id</em> are created with the H5T and H5S interfaces
|
||||
respectively. Currently only simple dataspaces are allowed for attribute
|
||||
dataspaces. The <em>create_plist_id</em> property list is currently
|
||||
unused, but will be used int the future for optional properties of
|
||||
unused, but will be used in the future for optional properties of
|
||||
attributes. The attribute ID returned from this function must be released
|
||||
with H5Aclose or resource leaks will develop. Attempting to create an
|
||||
attribute with the same name as an already existing attribute will fail,
|
||||
leaving the pre-existing attribute in place.
|
||||
This function returns a attribute ID for success or negative for failure.
|
||||
This function returns an attribute ID for success or negative for failure.
|
||||
|
||||
<br><br>
|
||||
<dt><code>hid_t H5Aopen_name (hid_t <em>loc_id</em>, const char
|
||||
@@ -58,7 +120,7 @@
|
||||
specified with <em>loc_id</em>. The name specified with <em>name</em>
|
||||
indicates the attribute to access. The attribute ID returned from this
|
||||
function must be released with H5Aclose or resource leaks will develop.
|
||||
This function returns a attribute ID for success or negative for failure.
|
||||
This function returns an attribute ID for success or negative for failure.
|
||||
|
||||
<br><br>
|
||||
<dt><code>hid_t H5Aopen_idx (hid_t <em>loc_id</em>, unsigned
|
||||
@@ -68,7 +130,7 @@
|
||||
indicates the <em>idx</em>th attribute to access, starting with '0'. The
|
||||
attribute ID returned from this function must be released with H5Aclose or
|
||||
resource leaks will develop.
|
||||
This function returns a attribute ID for success or negative for failure.
|
||||
This function returns an attribute ID for success or negative for failure.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Aclose (hid_t <em>attr_id</em>)</code>
|
||||
@@ -116,7 +178,7 @@
|
||||
unsigned *<em>attr_number</em>,
|
||||
H5A_operator <em>operator</em>,
|
||||
void *<em>operator_data</em>)</code>
|
||||
<dd> This function interates over the attributes of dataset or group
|
||||
<dd> This function iterates over the attributes of the dataset or group
|
||||
specified with <em>loc_id</em>. For each attribute of the object, the
|
||||
<em>operator_data</em> and some additional information (specified below)
|
||||
are passed to the <em>operator</em> function. The iteration begins with
|
||||
@@ -156,7 +218,7 @@
|
||||
This function returns a datatype ID for success or negative for failure.
|
||||
<br><br>
|
||||
<dt><code>size_t H5Aget_name (hid_t <em>attr_id</em>,
|
||||
char *<em>buf</em>, size_t <em>buf_size</em>)</code>
|
||||
size_t <em>buf_size</em>, char *<em>buf</em>)</code>
|
||||
<dd>This function retrieves the name of an attribute for an attribute ID.
|
||||
Up to <em>buf_size</em> characters are stored in <em>buf</em> followed by a
|
||||
'\0' string terminator. If the name of the attribute is longer than
|
||||
@@ -165,13 +227,78 @@
|
||||
This function returns the length of the attribute's name (which may be
|
||||
longer than <em>buf_size</em>) on success or negative for failure.
|
||||
<br><br>
|
||||
<dt><code>int H5Anum_attrs (hid_t <em>loc_id</em>)</code>
|
||||
<dt><code>int H5Aget_num_attrs (hid_t <em>loc_id</em>)</code>
|
||||
<dd>This function returns the number of attributes attached to a dataset or
|
||||
group, <em>loc_id</em>.
|
||||
This function returns non-negative for success or negative for failure.
|
||||
</dl>
|
||||
|
||||
<hr>
|
||||
<address><a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Support</a></address>
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
Attributes
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
|
||||
<br>
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -24,10 +24,18 @@
|
||||
|
||||
<h2>2. File Size Limits</h2>
|
||||
|
||||
<p>Some 32-bit operating systems have special file systems that
|
||||
can support large (>2GB) files and HDF5 will detect these and
|
||||
use them automatically. If this is the case, the output from
|
||||
configure will show:
|
||||
<p>Systems that have 64-bit file addresses will be able to access
|
||||
those files automatically. One should see the following output
|
||||
from configure:
|
||||
|
||||
<p><code><pre>
|
||||
checking size of off_t... 8
|
||||
</pre></code>
|
||||
|
||||
<p>Also, some 32-bit operating systems have special file systems
|
||||
that can support large (>2GB) files and HDF5 will detect
|
||||
these and use them automatically. If this is the case, the
|
||||
output from configure will show:
|
||||
|
||||
<p><code><pre>
|
||||
checking for lseek64... yes
|
||||
@@ -42,25 +50,28 @@ checking for fseek64... yes
|
||||
<p><code><pre>
|
||||
hid_t plist, file;
|
||||
plist = H5Pcreate (H5P_FILE_ACCESS);
|
||||
H5Pset_family (plist, 1<<30, H5P_DEFAULT);
|
||||
H5Pset_family (plist, 1<<30, H5P_DEFAULT);
|
||||
file = H5Fcreate ("big%03d.h5", H5F_ACC_TRUNC, H5P_DEFAULT, plist);
|
||||
</code></pre>
|
||||
|
||||
<p>The second argument (<code>30</code>) to
|
||||
<p>The second argument (<code>1<<30</code>) to
|
||||
<code>H5Pset_family()</code> indicates that the family members
|
||||
are to be 2^30 bytes (1GB) each. In general, family members
|
||||
cannot be 2GB because writes to byte number 2,147,483,647 will
|
||||
fail, so the largest safe value for a family member is
|
||||
2,147,483,647. HDF5 will create family members on demand as the
|
||||
HDF5 address space increases, but since most Unix systems limit
|
||||
the number of concurrently open files the effective maximum size
|
||||
of the HDF5 address space will be limited.
|
||||
are to be 2^30 bytes (1GB) each although we could have used any
|
||||
reasonably large value. In general, family members cannot be
|
||||
2GB because writes to byte number 2,147,483,647 will fail, so
|
||||
the largest safe value for a family member is 2,147,483,647.
|
||||
HDF5 will create family members on demand as the HDF5 address
|
||||
space increases, but since most Unix systems limit the number of
|
||||
concurrently open files the effective maximum size of the HDF5
|
||||
address space will be limited (the system on which this was
|
||||
developed allows 1024 open files, so if each family member is
|
||||
approx 2GB then the largest HDF5 file is approx 2TB).
|
||||
|
||||
<p>If the effective HDF5 address space is limited then one may be
|
||||
able to store datasets as external datasets each spanning
|
||||
multiple files of any length since HDF5 opens external dataset
|
||||
files one at a time. To arrange storage for a 5TB dataset one
|
||||
could say:
|
||||
files one at a time. To arrange storage for a 5TB dataset split
|
||||
among 1GB files one could say:
|
||||
|
||||
<p><code><pre>
|
||||
hid_t plist = H5Pcreate (H5P_DATASET_CREATE);
|
||||
@@ -73,9 +84,9 @@ for (i=0; i<5*1024; i++) {
|
||||
<h2>3. Dataset Size Limits</h2>
|
||||
|
||||
<p>The second limit which must be overcome is that of
|
||||
<code>sizeof(size_t)</code>. HDF5 defines a new data type
|
||||
called <code>hsize_t</code> which is used for sizes of datasets
|
||||
and is, by default, defined as <code>unsigned long long</code>.
|
||||
<code>sizeof(size_t)</code>. HDF5 defines a data type called
|
||||
<code>hsize_t</code> which is used for sizes of datasets and is,
|
||||
by default, defined as <code>unsigned long long</code>.
|
||||
|
||||
<p>To create a dataset with 8*2^30 4-byte integers for a total of
|
||||
32GB one first creates the dataspace. We give two examples
|
||||
@@ -105,7 +116,7 @@ hid_t space2 = H5Screate_simple (1, size2, size2};
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
<!-- Created: Fri Apr 10 13:26:04 EDT 1998 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Wed May 13 12:36:47 EDT 1998
|
||||
Last modified: Sun Jul 19 11:37:25 EDT 1998
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -4,7 +4,69 @@
|
||||
<title>Data Caching</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
Caching
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>Meta Data Caching</h1>
|
||||
|
||||
<p>The HDF5 library caches two types of data: meta data and raw
|
||||
@@ -72,11 +134,83 @@
|
||||
the pointer arguments may be null pointers.
|
||||
</dl>
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
Caching
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- Created: Tue May 26 15:20:14 EDT 1998 -->
|
||||
<!-- hhmts start -->
|
||||
<!--
|
||||
Last modified: Tue May 26 15:38:27 EDT 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
BIN
doc/html/Chunk_f1.gif
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
252
doc/html/Chunk_f1.obj
Normal file
@@ -0,0 +1,252 @@
|
||||
%TGIF 3.0-p17
|
||||
state(0,33,100.000,0,0,0,16,1,9,1,1,0,0,0,1,1,1,'Courier',0,17,0,0,0,10,0,0,1,1,0,16,0,0,1,1,1,0,1088,1408,0,0,2880).
|
||||
%
|
||||
% @(#)$Header$
|
||||
% %W%
|
||||
%
|
||||
unit("1 pixel/pixel").
|
||||
color_info(11,65535,0,[
|
||||
"magenta", 65535, 0, 65535, 65280, 0, 65280, 1,
|
||||
"red", 65535, 0, 0, 65280, 0, 0, 1,
|
||||
"green", 0, 65535, 0, 0, 65280, 0, 1,
|
||||
"blue", 0, 0, 65535, 0, 0, 65280, 1,
|
||||
"yellow", 65535, 65535, 0, 65280, 65280, 0, 1,
|
||||
"pink", 65535, 49344, 52171, 65280, 49152, 51968, 1,
|
||||
"cyan", 0, 65535, 65535, 0, 65280, 65280, 1,
|
||||
"CadetBlue", 24415, 40606, 41120, 24320, 40448, 40960, 1,
|
||||
"white", 65535, 65535, 65535, 65280, 65280, 65280, 1,
|
||||
"black", 0, 0, 0, 0, 0, 0, 1,
|
||||
"DarkSlateGray", 12079, 20303, 20303, 12032, 20224, 20224, 1
|
||||
]).
|
||||
page(1,"",1).
|
||||
text('black',432,272,'Courier',0,17,2,1,0,1,49,28,302,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Point",
|
||||
"Written"]).
|
||||
box('black',256,288,320,352,0,3,1,70,0,0,0,0,0,'3',[
|
||||
]).
|
||||
text('black',288,272,'Courier',0,17,1,1,0,1,49,14,75,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Dataset"]).
|
||||
box('black',352,288,384,320,5,1,1,77,5,0,0,0,0,'1',[
|
||||
]).
|
||||
text('black',368,272,'Courier',0,17,1,1,0,1,35,14,80,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Chunk"]).
|
||||
box('black',96,32,544,384,0,1,1,118,0,0,0,0,0,'1',[
|
||||
]).
|
||||
box('black',128,64,256,128,5,1,1,131,5,0,0,0,0,'1',[
|
||||
]).
|
||||
box('black',128,128,256,192,5,1,1,132,5,0,0,0,0,'1',[
|
||||
]).
|
||||
box('black',384,64,512,128,5,1,1,137,5,0,0,0,0,'1',[
|
||||
]).
|
||||
box('black',256,128,384,192,5,1,1,142,5,0,0,0,0,'1',[
|
||||
]).
|
||||
box('black',256,192,384,256,5,1,1,144,5,0,0,0,0,'1',[
|
||||
]).
|
||||
box('black',384,192,512,256,5,1,1,146,5,0,0,0,0,'1',[
|
||||
]).
|
||||
box('black',128,64,432,224,0,3,1,26,0,0,0,0,0,'3',[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
152,80,154,86,160,86,155,89,157,94,152,91,147,94,149,89,
|
||||
144,86,150,86,152,80],1,1,1,0,178,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',148,84,156,92,0,1,0,179,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',152,83,'Courier',0,17,1,1,0,1,112,14,180,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',152,80,'Courier',0,17,1,1,0,1,0,14,181,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
182,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
200,96,202,102,208,102,203,105,205,110,200,107,195,110,197,105,
|
||||
192,102,198,102,200,96],1,1,1,0,188,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',196,100,204,108,0,1,0,189,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',200,99,'Courier',0,17,1,1,0,1,112,14,190,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',200,96,'Courier',0,17,1,1,0,1,0,14,191,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
192,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
168,128,170,134,176,134,171,137,173,142,168,139,163,142,165,137,
|
||||
160,134,166,134,168,128],1,1,1,0,198,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',164,132,172,140,0,1,0,199,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',168,131,'Courier',0,17,1,1,0,1,112,14,200,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',168,128,'Courier',0,17,1,1,0,1,0,14,201,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
202,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
168,160,170,166,176,166,171,169,173,174,168,171,163,174,165,169,
|
||||
160,166,166,166,168,160],1,1,1,0,208,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',164,164,172,172,0,1,0,209,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',168,163,'Courier',0,17,1,1,0,1,112,14,210,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',168,160,'Courier',0,17,1,1,0,1,0,14,211,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
212,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
136,144,138,150,144,150,139,153,141,158,136,155,131,158,133,153,
|
||||
128,150,134,150,136,144],1,1,1,0,218,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',132,148,140,156,0,1,0,219,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',136,147,'Courier',0,17,1,1,0,1,112,14,220,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',136,144,'Courier',0,17,1,1,0,1,0,14,221,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
222,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
248,144,250,150,256,150,251,153,253,158,248,155,243,158,245,153,
|
||||
240,150,246,150,248,144],1,1,1,0,228,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',244,148,252,156,0,1,0,229,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',248,147,'Courier',0,17,1,1,0,1,112,14,230,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',248,144,'Courier',0,17,1,1,0,1,0,14,231,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
232,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
296,176,298,182,304,182,299,185,301,190,296,187,291,190,293,185,
|
||||
288,182,294,182,296,176],1,1,1,0,238,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',292,180,300,188,0,1,0,239,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',296,179,'Courier',0,17,1,1,0,1,112,14,240,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',296,176,'Courier',0,17,1,1,0,1,0,14,241,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
242,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
360,208,362,214,368,214,363,217,365,222,360,219,355,222,357,217,
|
||||
352,214,358,214,360,208],1,1,1,0,248,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',356,212,364,220,0,1,0,249,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',360,211,'Courier',0,17,1,1,0,1,112,14,250,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',360,208,'Courier',0,17,1,1,0,1,0,14,251,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
252,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
408,192,410,198,416,198,411,201,413,206,408,203,403,206,405,201,
|
||||
400,198,406,198,408,192],1,1,1,0,258,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',404,196,412,204,0,1,0,259,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',408,195,'Courier',0,17,1,1,0,1,112,14,260,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',408,192,'Courier',0,17,1,1,0,1,0,14,261,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
262,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
376,128,378,134,384,134,379,137,381,142,376,139,371,142,373,137,
|
||||
368,134,374,134,376,128],1,1,1,0,268,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',372,132,380,140,0,1,0,269,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',376,131,'Courier',0,17,1,1,0,1,112,14,270,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',376,128,'Courier',0,17,1,1,0,1,0,14,271,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
272,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
408,80,410,86,416,86,411,89,413,94,408,91,403,94,405,89,
|
||||
400,86,406,86,408,80],1,1,1,0,278,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',404,84,412,92,0,1,0,279,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',408,83,'Courier',0,17,1,1,0,1,112,14,280,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',408,80,'Courier',0,17,1,1,0,1,0,14,281,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
282,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',11,[
|
||||
424,304,426,310,432,310,427,313,429,318,424,315,419,318,421,313,
|
||||
416,310,422,310,424,304],1,1,1,0,288,0,0,0,0,0,'1',
|
||||
"000",[
|
||||
]),
|
||||
box('black',420,308,428,316,0,1,0,289,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',424,307,'Courier',0,17,1,1,0,1,112,14,290,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "", 1, 0, 0,
|
||||
text('black',424,304,'Courier',0,17,1,1,0,1,0,14,291,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
""]))
|
||||
])
|
||||
],
|
||||
292,0,0,[
|
||||
]).
|
||||
BIN
doc/html/Chunk_f2.gif
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
95
doc/html/Chunk_f2.obj
Normal file
@@ -0,0 +1,95 @@
|
||||
%TGIF 3.0-p17
|
||||
state(0,33,100.000,0,0,0,16,1,9,1,1,6,1,1,0,1,0,'Courier',0,17,0,2,0,10,0,0,1,1,0,16,0,0,1,1,1,0,1088,1408,0,0,2880).
|
||||
%
|
||||
% @(#)$Header$
|
||||
% %W%
|
||||
%
|
||||
unit("1 pixel/pixel").
|
||||
color_info(11,65535,0,[
|
||||
"magenta", 65535, 0, 65535, 65280, 0, 65280, 1,
|
||||
"red", 65535, 0, 0, 65280, 0, 0, 1,
|
||||
"green", 0, 65535, 0, 0, 65280, 0, 1,
|
||||
"blue", 0, 0, 65535, 0, 0, 65280, 1,
|
||||
"yellow", 65535, 65535, 0, 65280, 65280, 0, 1,
|
||||
"pink", 65535, 49344, 52171, 65280, 49152, 51968, 1,
|
||||
"cyan", 0, 65535, 65535, 0, 65280, 65280, 1,
|
||||
"CadetBlue", 24415, 40606, 41120, 24320, 40448, 40960, 1,
|
||||
"white", 65535, 65535, 65535, 65280, 65280, 65280, 1,
|
||||
"black", 0, 0, 0, 0, 0, 0, 1,
|
||||
"DarkSlateGray", 12079, 20303, 20303, 12032, 20224, 20224, 1
|
||||
]).
|
||||
page(1,"",1).
|
||||
group([
|
||||
box('black',192,416,512,544,0,1,0,22,0,0,0,0,0,'1',[
|
||||
]),
|
||||
oval('black',192,384,512,448,0,1,1,23,0,0,0,0,0,'1',[
|
||||
]),
|
||||
arc('black',0,1,1,0,192,512,352,544,192,544,512,544,0,320,64,11520,11520,24,0,0,8,3,0,0,0,'1','8','3',[
|
||||
]),
|
||||
poly('black',2,[
|
||||
192,416,192,544],0,1,1,25,0,0,0,0,8,3,0,0,0,'1','8','3',
|
||||
"0",[
|
||||
]),
|
||||
poly('black',2,[
|
||||
512,416,512,544],0,1,1,26,0,0,0,0,8,3,0,0,0,'1','8','3',
|
||||
"0",[
|
||||
]),
|
||||
box('black',196,452,508,572,0,1,0,27,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',352,451,'Courier',0,17,1,1,0,1,112,14,28,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "HDF5 File", 1, 0, 0,
|
||||
text('black',351,505,'Courier',0,17,1,1,0,1,63,14,29,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"HDF5 File"]))
|
||||
])
|
||||
],
|
||||
30,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',5,[
|
||||
240,160,240,352,464,352,464,160,240,160],0,1,1,0,63,0,0,0,0,0,'1',
|
||||
"00",[
|
||||
]),
|
||||
box('black',254,164,450,348,0,1,0,64,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',352,163,'Courier',0,17,1,1,0,1,112,14,65,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "Filter", 1, 0, 0,
|
||||
text('black',351,242,'Courier',0,17,2,1,0,1,49,28,66,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Filter",
|
||||
"Pipeine"]))
|
||||
])
|
||||
],
|
||||
62,0,0,[
|
||||
]).
|
||||
group([
|
||||
polygon('black',13,[
|
||||
304,85,304,107,336,107,336,128,368,128,368,107,400,107,400,85,
|
||||
368,85,368,64,336,64,336,85,304,85],0,1,1,0,103,0,0,0,0,0,'1',
|
||||
"0000",[
|
||||
]),
|
||||
box('black',307,68,397,124,0,1,0,104,0,0,0,0,0,'1',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',352,67,'Courier',0,17,1,1,0,1,112,14,105,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "Modify Bytes", 1, 0, 0,
|
||||
text('black',352,89,'Courier',0,17,1,1,0,1,84,14,106,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Modify Bytes"]))
|
||||
])
|
||||
],
|
||||
107,0,0,[
|
||||
]).
|
||||
box('black',176,48,528,592,0,1,1,143,0,0,0,0,0,'1',[
|
||||
]).
|
||||
poly('black',4,[
|
||||
256,416,256,128,256,96,304,96],1,7,1,168,1,0,2,0,22,9,0,0,0,'7','22','9',
|
||||
"6",[
|
||||
]).
|
||||
poly('black',4,[
|
||||
400,96,448,96,448,128,448,416],1,7,1,173,1,0,2,0,22,9,0,0,0,'7','22','9',
|
||||
"6",[
|
||||
]).
|
||||
text('black',432,128,'Courier',0,17,1,0,0,1,35,14,312,0,11,3,2,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Chunk"]).
|
||||
text('black',240,368,'Courier',0,17,1,0,0,1,35,14,314,0,11,3,2,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Chunk"]).
|
||||
BIN
doc/html/Chunk_f3.gif
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
doc/html/Chunk_f4.gif
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
doc/html/Chunk_f5.gif
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
doc/html/Chunk_f6.gif
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
107
doc/html/Chunk_f6.obj
Normal file
@@ -0,0 +1,107 @@
|
||||
%TGIF 3.0-p17
|
||||
state(0,33,100.000,0,0,0,8,1,9,1,1,0,1,1,0,1,1,'Courier',0,17,0,0,0,10,0,0,1,1,0,16,0,0,1,1,1,0,1088,1408,0,0,2880).
|
||||
%
|
||||
% @(#)$Header$
|
||||
% %W%
|
||||
%
|
||||
unit("1 pixel/pixel").
|
||||
color_info(11,65535,0,[
|
||||
"magenta", 65535, 0, 65535, 65280, 0, 65280, 1,
|
||||
"red", 65535, 0, 0, 65280, 0, 0, 1,
|
||||
"green", 0, 65535, 0, 0, 65280, 0, 1,
|
||||
"blue", 0, 0, 65535, 0, 0, 65280, 1,
|
||||
"yellow", 65535, 65535, 0, 65280, 65280, 0, 1,
|
||||
"pink", 65535, 49344, 52171, 65280, 49152, 51968, 1,
|
||||
"cyan", 0, 65535, 65535, 0, 65280, 65280, 1,
|
||||
"CadetBlue", 24415, 40606, 41120, 24320, 40448, 40960, 1,
|
||||
"white", 65535, 65535, 65535, 65280, 65280, 65280, 1,
|
||||
"black", 0, 0, 0, 0, 0, 0, 1,
|
||||
"DarkSlateGray", 12079, 20303, 20303, 12032, 20224, 20224, 1
|
||||
]).
|
||||
page(1,"",1).
|
||||
polygon('black',5,[
|
||||
128,256,256,256,256,320,128,320,128,256],5,1,1,0,26,5,0,0,0,0,'1',
|
||||
"00",[
|
||||
]).
|
||||
polygon('black',7,[
|
||||
256,128,256,256,128,256,128,192,192,192,192,128,256,128],5,1,1,0,25,5,0,0,0,0,'1',
|
||||
"00",[
|
||||
]).
|
||||
polygon('black',7,[
|
||||
128,64,256,64,256,128,192,128,192,192,128,192,128,64],5,1,1,0,24,5,0,0,0,0,'1',
|
||||
"00",[
|
||||
]).
|
||||
box('black',128,64,256,320,0,3,1,22,0,0,0,0,0,'3',[
|
||||
]).
|
||||
text('black',192,96,'Courier',0,17,1,1,0,1,49,14,34,0,11,3,2,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Strip 1"]).
|
||||
text('black',224,160,'Courier',0,17,1,1,0,1,49,14,40,0,11,3,2,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Strip 2"]).
|
||||
text('black',192,272,'Courier',0,17,1,1,0,1,49,14,46,0,11,3,2,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Strip 3"]).
|
||||
polygon('black',5,[
|
||||
448,256,576,256,576,320,448,320,448,256],5,1,1,0,59,5,0,0,0,0,'1',
|
||||
"00",[
|
||||
]).
|
||||
polygon('black',7,[
|
||||
576,128,576,256,448,256,448,192,512,192,512,128,576,128],5,1,1,0,60,5,0,0,0,0,'1',
|
||||
"00",[
|
||||
]).
|
||||
polygon('black',7,[
|
||||
448,64,576,64,576,128,512,128,512,192,448,192,448,64],5,1,1,0,61,5,0,0,0,0,'1',
|
||||
"00",[
|
||||
]).
|
||||
box('black',448,64,576,320,0,3,1,62,0,0,0,0,0,'3',[
|
||||
]).
|
||||
text('black',512,96,'Courier',0,17,1,1,0,1,49,14,63,0,11,3,2,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Strip 1"]).
|
||||
text('black',544,160,'Courier',0,17,1,1,0,1,49,14,64,0,11,3,2,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Strip 2"]).
|
||||
text('black',512,272,'Courier',0,17,1,1,0,1,49,14,65,0,11,3,2,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"Strip 3"]).
|
||||
text('black',192,32,'Courier',0,17,1,1,0,1,28,14,68,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"FILE"]).
|
||||
text('black',512,32,'Courier',0,17,1,1,0,1,42,14,70,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"MEMORY"]).
|
||||
group([
|
||||
polygon('black',6,[
|
||||
320,160,320,208,384,208,416,184,384,160,320,160],0,3,1,0,72,0,0,0,0,0,'3',
|
||||
"00",[
|
||||
]),
|
||||
box('black',324,164,388,204,0,3,0,73,0,0,0,0,0,'3',[
|
||||
attr("", "auto_center_attr", 0, 1, 0,
|
||||
text('black',356,162,'Courier',0,17,1,1,0,1,112,14,74,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"auto_center_attr"])),
|
||||
attr("label=", "TCONV", 1, 0, 0,
|
||||
text('black',355,177,'Courier',0,17,1,1,0,1,35,14,75,0,11,3,0,0,0,0,0,2,0,0,0,0,"",0,0,0,[
|
||||
"TCONV"]))
|
||||
])
|
||||
],
|
||||
76,0,0,[
|
||||
]).
|
||||
poly('black',5,[
|
||||
256,96,288,96,320,96,320,128,320,160],1,7,1,87,1,0,5,0,22,9,0,0,0,'7','22','9',
|
||||
"70",[
|
||||
]).
|
||||
poly('black',2,[
|
||||
256,184,320,184],1,7,1,88,1,0,5,0,22,9,0,0,0,'7','22','9',
|
||||
"0",[
|
||||
]).
|
||||
poly('black',5,[
|
||||
256,288,288,288,320,288,320,256,320,208],1,7,1,89,1,0,5,0,22,9,0,0,0,'7','22','9',
|
||||
"70",[
|
||||
]).
|
||||
poly('black',5,[
|
||||
400,160,400,128,400,96,432,96,448,96],1,7,1,92,1,0,5,0,22,9,0,0,0,'7','22','9',
|
||||
"70",[
|
||||
]).
|
||||
poly('black',2,[
|
||||
416,184,512,184],1,7,1,93,1,0,5,0,22,9,0,0,0,'7','22','9',
|
||||
"0",[
|
||||
]).
|
||||
poly('black',5,[
|
||||
400,208,400,256,400,288,432,288,448,288],1,7,1,94,1,0,5,0,22,9,0,0,0,'7','22','9',
|
||||
"70",[
|
||||
]).
|
||||
box('black',96,0,608,352,0,1,1,99,0,0,0,0,0,'1',[
|
||||
]).
|
||||
326
doc/html/Chunking.html
Normal file
@@ -0,0 +1,326 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Dataset Chunking Issues</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
Chunking
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>Dataset Chunking Issues</h1>
|
||||
|
||||
<h2>Table of Contents</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="#S1">1. Introduction</a>
|
||||
<li><a href="#S2">2. Raw Data Chunk Cache</a>
|
||||
<li><a href="#S3">3. Cache Efficiency</a>
|
||||
<li><a href="#S4">4. Fragmentation</a>
|
||||
<li><a href="#S5">5. File Storage Overhead</a>
|
||||
</ul>
|
||||
|
||||
<h2><a name="S1">1. Introduction</a></h2>
|
||||
|
||||
|
||||
<p><em>Chunking</em> refers to a storage layout where a dataset is
|
||||
partitioned into fixed-size multi-dimensional chunks. The
|
||||
chunks cover the dataset but the dataset need not be an integral
|
||||
number of chunks. If no data is ever written to a chunk then
|
||||
that chunk isn't allocated on disk. Figure 1 shows a 25x48
|
||||
element dataset covered by nine 10x20 chunks and 11 data points
|
||||
written to the dataset. No data was written to the region of
|
||||
the dataset covered by three of the chunks so those chunks were
|
||||
never allocated in the file -- the other chunks are allocated at
|
||||
independent locations in the file and written in their entirety.
|
||||
|
||||
<center><image src="Chunk_f1.gif"><br><b>Figure 1</b></center>
|
||||
|
||||
<p>The HDF5 library treats chunks as atomic objects -- disk I/O is
|
||||
always in terms of complete chunks<a href="#fn1">(1)</a>. This
|
||||
allows data filters to be defined by the application to perform
|
||||
tasks such as compression, encryption, checksumming,
|
||||
<em>etc</em>. on entire chunks. As shown in Figure 2, if
|
||||
<code>H5Dwrite()</code> touches only a few bytes of the chunk,
|
||||
the entire chunk is read from the file, the data passes upward
|
||||
through the filter pipeline, the few bytes are modified, the
|
||||
data passes downward through the filter pipeline, and the entire
|
||||
chunk is written back to the file.
|
||||
|
||||
<center><image src="Chunk_f2.gif"><br><b>Figure 2</b></center>
|
||||
|
||||
<h2><a name="S2">2. The Raw Data Chunk Cache</a></h2>
|
||||
|
||||
<p>It's obvious from Figure 2 that calling <code>H5Dwrite()</code>
|
||||
many times from the application would result in poor performance
|
||||
even if the data being written all falls within a single chunk.
|
||||
A raw data chunk cache layer was added between the top of the
|
||||
filter stack and the bottom of the byte modification layer<a
|
||||
href="#fn2">(2)</a>. By default, the chunk cache will store 521
|
||||
chunks or 1MB of data (whichever is less) but these values can
|
||||
be modified with <code>H5Pset_cache()</code>.
|
||||
|
||||
<p>The preemption policy for the cache favors certain chunks and
|
||||
tries not to preempt them.
|
||||
|
||||
<ul>
|
||||
<li>Chunks that have been accessed frequently in the near past
|
||||
are favored.
|
||||
<li>A chunk which has just entered the cache is favored.
|
||||
<li>A chunk which has been completely read or completely written
|
||||
but not partially read or written is penalized according to
|
||||
some application specified weighting between zero and one.
|
||||
<li>A chunk which is larger than the maximum cache size is not
|
||||
eligible for caching.
|
||||
</ul>
|
||||
|
||||
<h2><a name="S3">3. Cache Efficiency</a></h2>
|
||||
|
||||
<p>Now for some real numbers... A 2000x2000 element dataset is
|
||||
created and covered by a 20x20 array of chunks (each chunk is 100x100
|
||||
elements). The raw data cache is adjusted to hold at most 25 chunks by
|
||||
setting the maximum number of bytes to 25 times the chunk size in
|
||||
bytes. Then the application creates a square, two-dimensional memory
|
||||
buffer and uses it as a window into the dataset, first reading and then
|
||||
rewriting in row-major order by moving the window across the dataset
|
||||
(the read and write tests both start with a cold cache).
|
||||
|
||||
<p>The measure of efficiency in Figure 3 is the number of bytes requested
|
||||
by the application divided by the number of bytes transferred from the
|
||||
file. There are at least a couple ways to get an estimate of the cache
|
||||
performance: one way is to turn on <a href="Debugging.html">cache
|
||||
debugging</a> and look at the number of cache misses. A more accurate
|
||||
and specific way is to register a data filter whose sole purpose is to
|
||||
count the number of bytes that pass through it (that's the method used
|
||||
below).
|
||||
|
||||
<center><image src="Chunk_f3.gif"><br><b>Figure 3</b></center>
|
||||
|
||||
<p>The read efficiency is less than one for two reasons: collisions in the
|
||||
cache are handled by preempting one of the colliding chunks, and the
|
||||
preemption algorithm occasionally preempts a chunk which hasn't been
|
||||
referenced for a long time but is about to be referenced in the near
|
||||
future.
|
||||
|
||||
<p>The write test results in lower efficiency for most window
|
||||
sizes because HDF5 is unaware that the application is about to
|
||||
overwrite the entire dataset and must read in most chunks before
|
||||
modifying parts of them.
|
||||
|
||||
<p>There is a simple way to improve efficiency for this example.
|
||||
It turns out that any chunk that has been completely read or
|
||||
written is a good candidate for preemption. If we increase the
|
||||
penalty for such chunks from the default 0.75 to the maximum
|
||||
1.00 then efficiency improves.
|
||||
|
||||
<center><image src="Chunk_f4.gif"><br><b>Figure 4</b></center>
|
||||
|
||||
<p>The read efficiency is still less than one because of
|
||||
collisions in the cache. The number of collisions can often be
|
||||
reduced by increasing the number of slots in the cache. Figure
|
||||
5 shows what happens when the maximum number of slots is
|
||||
increased by an order of magnitude from the default (this change
|
||||
has no major effect on memory used by the test since the byte
|
||||
limit was not increased for the cache).
|
||||
|
||||
<center><image src="Chunk_f5.gif"><br><b>Figure 5</b></center>
|
||||
|
||||
<p>Although the application eventually overwrites every chunk
|
||||
completely the library has know way of knowing this before hand
|
||||
since most calls to <code>H5Dwrite()</code> modify only a
|
||||
portion of any given chunk. Therefore, the first modification of
|
||||
a chunk will cause the chunk to be read from disk into the chunk
|
||||
buffer through the filter pipeline. Eventually HDF5 might
|
||||
contain a data set transfer property that can turn off this read
|
||||
operation resulting in write efficiency which is equal to read
|
||||
efficiency.
|
||||
|
||||
|
||||
<h2><a name="S4">4. Fragmentation</a></h2>
|
||||
|
||||
<p>Even if the application transfers the entire dataset contents with a
|
||||
single call to <code>H5Dread()</code> or <code>H5Dwrite()</code> it's
|
||||
possible the request will be broken into smaller, more manageable
|
||||
pieces by the library. This is almost certainly true if the data
|
||||
transfer includes a type conversion.
|
||||
|
||||
<center><image src="Chunk_f6.gif"><br><b>Figure 6</b></center>
|
||||
|
||||
<p>By default the strip size is 1MB but it can be changed by calling
|
||||
<code>H5Pset_buffer()</code>.
|
||||
|
||||
|
||||
<h2><a name="S5">5. File Storage Overhead</a></h2>
|
||||
|
||||
<p>The chunks of the dataset are allocated at independent
|
||||
locations throughout the HDF5 file and a B-tree maps chunk
|
||||
N-dimensional addresses to file addresses. The more chunks that
|
||||
are allocated for a dataset the larger the B-tree. Large B-trees
|
||||
have two disadvantages:
|
||||
|
||||
<ul>
|
||||
<li>The file storage overhead is higher and more disk I/O is
|
||||
required to traverse the tree from root to leaves.
|
||||
<li>The increased number of B-tree nodes will result in higher
|
||||
contention for the meta data cache.
|
||||
</ul>
|
||||
|
||||
<p>There are three ways to reduce the number of B-tree nodes. The
|
||||
obvious way is to reduce the number of chunks by choosing a larger chunk
|
||||
size (doubling the chunk size will cut the number of B-tree nodes in
|
||||
half). Another method is to adjust the split ratios for the B-tree by
|
||||
calling <code>H5Pset_split_ratios()</code>, but this method typically
|
||||
results in only a slight improvement over the default settings.
|
||||
Finally, the out-degree of each node can be increased by calling
|
||||
<code>H5Pset_istore_k()</code> (increasing the out degree actually
|
||||
increases file overhead while decreasing the number of nodes).
|
||||
|
||||
<hr>
|
||||
|
||||
<p><a name="fn1">Footnote 1:</a> Parallel versions of the library
|
||||
can access individual bytes of a chunk when the underlying file
|
||||
uses MPI-IO.
|
||||
|
||||
<p><a name="fn2">Footnote 2:</a> The raw data chunk cache was
|
||||
added before the second alpha release.
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
Chunking
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- Created: Tue Oct 20 12:38:40 EDT 1998 -->
|
||||
<!-- hhmts start -->
|
||||
<!--
|
||||
Last modified: Fri Oct 23 10:30:52 EDT 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
|
||||
<br>
|
||||
Last modified: 30 October 1998
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,409 +0,0 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Compression</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Compression</h1>
|
||||
|
||||
<h2>1. Introduction</h2>
|
||||
|
||||
<p>HDF5 supports compression of raw data by compression methods
|
||||
built into the library or defined by an application. A
|
||||
compression method is associated with a dataset when the dataset
|
||||
is created and is applied independently to each storage chunk of
|
||||
the dataset.
|
||||
|
||||
The dataset must use the <code>H5D_CHUNKED</code> storage
|
||||
layout. The library doesn't support compression for contiguous
|
||||
datasets because of the difficulty of implementing random access
|
||||
for partial I/O, and compact dataset compression is not
|
||||
supported because it wouldn't produce significant results.
|
||||
|
||||
<h2>2. Supported Compression Methods</h2>
|
||||
|
||||
<p>The library identifies compression methods with small
|
||||
integers, with values less than 16 reserved for use by NCSA and
|
||||
values between 16 and 255 (inclusive) available for general
|
||||
use. This range may be extended in the future if it proves to
|
||||
be too small.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table align=center width="80%">
|
||||
<tr>
|
||||
<th width="30%">Method Name</th>
|
||||
<th width="70%">Description</th>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>H5Z_NONE</code></td>
|
||||
<td>The default is to not use compression. Specifying
|
||||
<code>H5Z_NONE</code> as the compression method results
|
||||
in better perfomance than writing a function that just
|
||||
copies data because the library's I/O pipeline
|
||||
recognizes this method and is able to short circuit
|
||||
parts of the pipeline.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>H5Z_DEFLATE</code></td>
|
||||
<td>The <em>deflate</em> method is the algorithm used by
|
||||
the GNU <code>gzip</code>program. It's a combination of
|
||||
a Huffman encoding followed by a 1977 Lempel-Ziv (LZ77)
|
||||
dictionary encoding. The aggressiveness of the
|
||||
compression can be controlled by passing an integer value
|
||||
to the compressor with <code>H5Pset_deflate()</code>
|
||||
(see below). In order for this compression method to be
|
||||
used, the HDF5 library must be configured and compiled
|
||||
in the presence of the GNU zlib version 1.1.2 or
|
||||
later.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>H5Z_RES_<em>N</em></code></td>
|
||||
<td>These compression methods (where <em>N</em> is in the
|
||||
range two through 15, inclusive) are reserved by NCSA
|
||||
for future use.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Values of <em>N</em> between 16 and 255, inclusive</td>
|
||||
<td>These values can be used to represent application-defined
|
||||
compression methods. We recommend that methods under
|
||||
testing should be in the high range and when a method is
|
||||
about to be published it should be given a number near
|
||||
the low end of the range (or even below 16). Publishing
|
||||
the compression method and its numeric ID will make a
|
||||
file sharable.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>Setting the compression for a dataset to a method which was
|
||||
not compiled into the library and/or not registered by the
|
||||
application is allowed, but writing to such a dataset will
|
||||
silently <em>not</em> compress the data. Reading a compressed
|
||||
dataset for a method which is not available will result in
|
||||
errors (specifically, <code>H5Dread()</code> will return a
|
||||
negative value). The errors will be displayed in the
|
||||
compression statistics if the library was compiled with
|
||||
debugging turned on for the "z" package. See the
|
||||
section on diagnostics below for more details.
|
||||
|
||||
<h2>3. Application-Defined Methods</h2>
|
||||
|
||||
<p>Compression methods 16 through 255 can be defined by an
|
||||
application. As mentioned above, methods that have not been
|
||||
released should use high numbers in that range while methods
|
||||
that have been published will be assigned an official number in
|
||||
the low region of the range (possibly less than 16). Users
|
||||
should be aware that using unpublished compression methods
|
||||
results in unsharable files.
|
||||
|
||||
<p>A compression method has two halves: one have handles
|
||||
compression and the other half handles uncompression. The
|
||||
halves are implemented as functions
|
||||
<code><em>method</em>_c</code> and
|
||||
<code><em>method</em>_u</code> respectively. One should not use
|
||||
the names <code>compress</code> or <code>uncompress</code> since
|
||||
they are likely to conflict with other compression libraries
|
||||
(like the GNU zlib).
|
||||
|
||||
<p>Both the <code><em>method</em>_c</code> and
|
||||
<code><em>method</em>_u</code> functions take the same arguments
|
||||
and return the same values. They are defined with the type:
|
||||
|
||||
<dl>
|
||||
<dt><code>typedef size_t (*H5Z_func_t)(unsigned int
|
||||
<em>flags</em>, size_t <em>cd_size</em>, const void
|
||||
*<em>client_data</em>, size_t <em>src_nbytes</em>, const
|
||||
void *<em>src</em>, size_t <em>dst_nbytes</em>, void
|
||||
*<em>dst</em>/*out*/)</code>
|
||||
<dd>The <em>flags</em> are an 8-bit vector which is stored in
|
||||
the file and which is defined when the compression method is
|
||||
defined. The <em>client_data</em> is a pointer to
|
||||
<em>cd_size</em> bytes of configuration data which is also
|
||||
stored in the file. The function compresses or uncompresses
|
||||
<em>src_nbytes</em> from the source buffer <em>src</em> into
|
||||
at most <em>dst_nbytes</em> of the result buffer <em>dst</em>.
|
||||
The function returns the number of bytes written to the result
|
||||
buffer or zero if an error occurs. But if a result buffer
|
||||
overrun occurs the function should return a value at least as
|
||||
large as <em>dst_size</em> (the uncompressor will see an
|
||||
overrun only for corrupt data).
|
||||
</dl>
|
||||
|
||||
<p>The application associates the pair of functions with a name
|
||||
and a method number by calling <code>H5Zregister()</code>. This
|
||||
function can also be used to remove a compression method from
|
||||
the library by supplying null pointers for the functions.
|
||||
|
||||
<dl>
|
||||
<dt><code>herr_t H5Zregister (H5Z_method_t <em>method</em>,
|
||||
const char *<em>name</em>, H5Z_func_t <em>method_c</em>,
|
||||
H5Z_func_t <em>method_u</em>)</code>
|
||||
<dd>The pair of functions to be used for compression
|
||||
(<em>method_c</em>) and uncompression (<em>method_u</em>) are
|
||||
associated with a short <em>name</em> used for debugging and a
|
||||
<em>method</em> number in the range 16 through 255. This
|
||||
function can be called as often as desired for a particular
|
||||
compression method with each call replacing the information
|
||||
stored by the previous call. Sometimes it's convenient to
|
||||
supply only one half of the compression, for instance in an
|
||||
application that opens files for read-only. Compression
|
||||
statistics for the method are accumulated across calls to this
|
||||
function.
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<caption align=bottom><h4>Example: Registering an
|
||||
Application-Defined Compression Method</h4></caption>
|
||||
<tr>
|
||||
<td>
|
||||
<p>Here's a simple-minded "compression" method
|
||||
that just copies the input value to the output. It's
|
||||
similar to the <code>H5Z_NONE</code> method but
|
||||
slower. Compression and uncompression are performed
|
||||
by the same function.
|
||||
|
||||
<p><code><pre>
|
||||
size_t
|
||||
bogus (unsigned int flags,
|
||||
size_t cd_size, const void *client_data,
|
||||
size_t src_nbytes, const void *src,
|
||||
size_t dst_nbytes, void *dst/*out*/)
|
||||
{
|
||||
memcpy (dst, src, src_nbytes);
|
||||
return src_nbytes;
|
||||
}
|
||||
</pre></code>
|
||||
|
||||
<p>The function could be registered as method 250 as
|
||||
follows:
|
||||
|
||||
<p><code><pre>
|
||||
#define H5Z_BOGUS 250
|
||||
H5Zregister (H5Z_BOGUS, "bogus", bogus, bogus);
|
||||
</pre></code>
|
||||
|
||||
<p>The function can be unregistered by saying:
|
||||
|
||||
<p><code><pre>
|
||||
H5Zregister (H5Z_BUGUS, "bogus", NULL, NULL);
|
||||
</pre></code>
|
||||
|
||||
<p>Notice that we kept the name "bogus" even
|
||||
though we unregistered the functions that perform the
|
||||
compression and uncompression. This makes compression
|
||||
statistics more understandable when they're printed.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>4. Enabling Compression for a Dataset</h2>
|
||||
|
||||
<p>If a dataset is to be compressed then the compression
|
||||
information must be specified when the dataset is created since
|
||||
once a dataset is created compression parameters cannot be
|
||||
adjusted. The compression is specified through the dataset
|
||||
creation property list (see <code>H5Pcreate()</code>).
|
||||
|
||||
<dl>
|
||||
<dt><code>herr_t H5Pset_deflate (hid_t <em>plist</em>, int
|
||||
<em>level</em>)</code>
|
||||
<dd>The compression method for dataset creation property list
|
||||
<em>plist</em> is set to <code>H5Z_DEFLATE</code> and the
|
||||
aggression level is set to <em>level</em>. The <em>level</em>
|
||||
must be a value between one and nine, inclusive, where one
|
||||
indicates no (but fast) compression and nine is aggressive
|
||||
compression.
|
||||
|
||||
<br><br>
|
||||
<dt><code>int H5Pget_deflate (hid_t <em>plist</em>)</code>
|
||||
<dd>If dataset creation property list <em>plist</em> is set to
|
||||
use <code>H5Z_DEFLATE</code> compression then this function
|
||||
will return the aggression level, an integer between one and
|
||||
nine inclusive. If <em>plist</em> isn't a valid dataset
|
||||
creation property list or it isn't set to use the deflate
|
||||
method then a negative value is returned.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Pset_compression (hid_t <em>plist</em>,
|
||||
H5Z_method_t <em>method</em>, unsigned int <em>flags</em>,
|
||||
size_t <em>cd_size</em>, const void *<em>client_data</em>)</code>
|
||||
<dd>This is a catch-all function for defining compresion methods
|
||||
and is intended to be called from a wrapper such as
|
||||
<code>H5Pset_deflate()</code>. The dataset creation property
|
||||
list <em>plist</em> is adjusted to use the specified
|
||||
compression method. The <em>flags</em> is an 8-bit vector
|
||||
which is stored in the file as part of the compression message
|
||||
and passed to the compress and uncompress functions. The
|
||||
<em>client_data</em> is a byte array of length
|
||||
<em>cd_size</em> which is copied to the file and passed to the
|
||||
compress and uncompress methods.
|
||||
|
||||
<br><br>
|
||||
<dt><code>H5Z_method_t H5Pget_compression (hid_t <em>plist</em>,
|
||||
unsigned int *<em>flags</em>, size_t *<em>cd_size</em>, void
|
||||
*<em>client_data</em>)</code>
|
||||
<dd>This is a catch-all function for querying the compression
|
||||
method associated with dataset creation property list
|
||||
<em>plist</em> and is intended to be called from a wrapper
|
||||
function such as <code>H5Pget_deflate()</code>. The
|
||||
compression method (or a negative value on error) is returned
|
||||
by value, and compression flags and client data is returned by
|
||||
argument. The application should allocate the
|
||||
<em>client_data</em> and pass its size as the
|
||||
<em>cd_size</em>. On return, <em>cd_size</em> will contain
|
||||
the actual size of the client data. If <em>client_data</em>
|
||||
is not large enough to hold the entire client data then
|
||||
<em>cd_size</em> bytes are copied into <em>client_data</em>
|
||||
and <em>cd_size</em> is set to the total size of the client
|
||||
data, a value larger than the original.
|
||||
</dl>
|
||||
|
||||
<p>It is possible to set the compression to a method which hasn't
|
||||
been defined with <code>H5Zregister()</code> and which isn't
|
||||
supported as a predefined method (for instance, setting the
|
||||
method to <code>H5Z_DEFLATE</code> when the GNU zlib isn't
|
||||
available). If that happens then data will be written to the
|
||||
file in its uncompressed form and the compression statistics
|
||||
will show failures for the compression.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<caption align=bottom><h4>Example: Statistics for an
|
||||
Unsupported Compression Method</h4></caption>
|
||||
<tr>
|
||||
<td>
|
||||
<p>If an application attempts to use an unsupported
|
||||
method then the compression statistics will show large
|
||||
numbers of compression errors and no data
|
||||
uncompressed.
|
||||
|
||||
<p><code><pre>
|
||||
H5Z: compression statistics accumulated over life of library:
|
||||
Method Total Overrun Errors User System Elapsed Bandwidth
|
||||
------ ----- ------- ------ ---- ------ ------- ---------
|
||||
deflate-c 160000 0 160000 0.00 0.01 0.01 1.884e+07
|
||||
deflate-u 0 0 0 0.00 0.00 0.00 NaN
|
||||
</pre></code>
|
||||
|
||||
<p>This example is from a program that tried to use
|
||||
<code>H5Z_DEFLATE</code> on a system that didn't have
|
||||
the GNU zlib to write to a dataset and then read the
|
||||
result. The read and write both succeeded but the
|
||||
data was not compressed.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>5. Compression Diagnostics</h2>
|
||||
|
||||
<p>If the library is compiled with debugging turned on for the H5Z
|
||||
layer (usually as a result of <code>configure --enable-debug=z</code>)
|
||||
then statistics about data compression are printed when the
|
||||
application exits normally or the library is closed. The
|
||||
statistics are written to the standard error stream and include
|
||||
two lines for each compression method that was used: the first
|
||||
line shows compression statistics while the second shows
|
||||
uncompression statistics. The following fields are displayed:
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table align=center width="80%">
|
||||
<tr>
|
||||
<th width="30%">Field Name</th>
|
||||
<th width="70%">Description</th>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Method</td>
|
||||
<td>This is the name of the method as defined with
|
||||
<code>H5Zregister()</code> with the letters
|
||||
"-c" or "-u" appended to indicate
|
||||
compression or uncompression.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Total</td>
|
||||
<td>The total number of bytes compressed or decompressed
|
||||
including buffer overruns and errors. Bytes of
|
||||
non-compressed data are counted.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Overrun</td>
|
||||
<td>During compression, if the algorithm causes the result
|
||||
to be at least as large as the input then a buffer
|
||||
overrun error occurs. This field shows the total number
|
||||
of bytes from the Total column which can be attributed to
|
||||
overruns. Overruns for decompression can only happen if
|
||||
the data has been corrupted in some way and will result
|
||||
in failure of <code>H5Dread()</code>.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Errors</td>
|
||||
<td>If an error occurs during compression the data is
|
||||
stored in it's uncompressed form; and an error during
|
||||
uncompression causes <code>H5Dread()</code> to return
|
||||
failure. This field shows the number of bytes of the
|
||||
Total column which can be attributed to errors.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>User, System, Elapsed</td>
|
||||
<td>These are the amount of user time, system time, and
|
||||
elapsed time in seconds spent by the library to perform
|
||||
compression. Elapsed time is sensitive to system
|
||||
load. These times may be zero on operating systems that
|
||||
don't support the required operations.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Bandwidth</td>
|
||||
<td>This is the compression bandwidth which is the total
|
||||
number of bytes divided by elapsed time. Since elapsed
|
||||
time is subject to system load the bandwidth numbers
|
||||
cannot always be trusted. Furthermore, the bandwidth
|
||||
includes overrun and error bytes which may significanly
|
||||
taint the value.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<caption align=bottom><h4>Example: Compression
|
||||
Statistics</h4></caption>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code><pre>
|
||||
H5Z: compression statistics accumulated over life of library:
|
||||
Method Total Overrun Errors User System Elapsed Bandwidth
|
||||
------ ----- ------- ------ ---- ------ ------- ---------
|
||||
deflate-c 160000 200 0 0.62 0.74 1.33 1.204e+05
|
||||
deflate-u 120000 0 0 0.11 0.00 0.12 9.885e+05
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<hr>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
<!-- Created: Fri Apr 17 13:39:35 EDT 1998 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Fri Apr 17 16:15:21 EDT 1998
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
</html>
|
||||
76
doc/html/Copyright.html
Normal file
@@ -0,0 +1,76 @@
|
||||
<html>
|
||||
<head><title>
|
||||
HDF5 Copyright Notice
|
||||
</title></head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
<h3>Copyright Notice and Statement for
|
||||
<br>
|
||||
NCSA Hierarchical Data Format (HDF) Software Library and Utilities</h3>
|
||||
<hr>
|
||||
<p>
|
||||
|
||||
|
||||
NCSA Hierarchical Data Format (HDF) Software Library and Utilities
|
||||
<br>
|
||||
Copyright 1998 the Board of Trustees of the University of Illinois
|
||||
<br>
|
||||
<strong>All rights reserved.</strong>
|
||||
<p>
|
||||
|
||||
Contributors: National Center for Supercomputing Applications (NCSA) at
|
||||
the University of Illinois, Lawrence Livermore Nat'l Laboratory (LLNL),
|
||||
Sandia National Laboratories (SNL), Los Alamos National Laboratory (LANL),
|
||||
Jean-loup Gailly and Mark Adler (gzip library)
|
||||
<p>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted for any purpose (including commercial purposes)
|
||||
provided that the following conditions are met:
|
||||
<p>
|
||||
|
||||
<ol>
|
||||
<li>Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
<li>Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or materials provided with the distribution.
|
||||
|
||||
<li>In addition, redistributions of modified forms of the source or binary
|
||||
code must carry prominent notices stating that the original code was
|
||||
changed and the date of the change.
|
||||
|
||||
<li>All publications or advertising materials mentioning features or use of
|
||||
this software must acknowledge that it was developed by the National Center
|
||||
for Supercomputing Applications at the University of Illinois, and credit
|
||||
the Contributors.
|
||||
|
||||
<li>Neither the name of the University nor the names of the Contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission from the University or the Contributors.
|
||||
|
||||
<li>THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND THE CONTRIBUTORS "AS IS"
|
||||
WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. In no event
|
||||
shall the University or the Contributors be liable for any damages suffered
|
||||
by the users arising out of the use of this software, even if advised of
|
||||
the possibility of such damage.
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
|
||||
<br>
|
||||
Last modified: 8 September 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -4,7 +4,67 @@
|
||||
<title>The Dataset Interface (H5D)</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
Datasets
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
<h1>The Dataset Interface (H5D)</h1>
|
||||
|
||||
<h2>1. Introduction</h2>
|
||||
@@ -829,11 +889,83 @@ H5Pset_external (plist, "scan3.data", 0, 16);
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
Datasets
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- Created: Tue Dec 2 09:17:09 EST 1997 -->
|
||||
<!-- hhmts start -->
|
||||
<!--
|
||||
Last modified: Wed May 13 18:57:47 EDT 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,68 @@
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<TITLE>The Data Space Interface (H5S)</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
Dataspaces
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<H1>
|
||||
The Dataspace Interface (H5S)</H1>
|
||||
@@ -162,14 +223,14 @@ would look like this:
|
||||
<br><strong>Example 3: Non-contiguous selection with 1,1 offset</strong>
|
||||
</center>
|
||||
|
||||
<P>Selections also have an linearization ordering of the points selected
|
||||
<P>Selections also have a linearization ordering of the points selected
|
||||
(defaulting to "C" order, ie. last dimension changing fastest). The
|
||||
linearization order may be specified for each point or it may be chosen by
|
||||
the axis of the dataspace. For example, with the default "C" ordering,
|
||||
example 1's selected points are iterated through in this order: (1,1), (2,1),
|
||||
(3,1), (1,2), (2,2), etc. With "FORTRAN" ordering, example 1's selected points
|
||||
would be iterated through in this order: (1,1), (1,2), (1,3), (1,4), (1,5),
|
||||
(2,1), (2,2), etc.
|
||||
example 1's selected points are iterated through in this order: (1,1), (1,2),
|
||||
(1,3), (2,1), (2,2), etc. With "FORTRAN" ordering, example 1's selected points
|
||||
would be iterated through in this order: (1,1), (2,1), (3,1), (4,1), (5,1),
|
||||
(1,2), (2,2), etc.
|
||||
|
||||
<P>A dataspace may be stored in the file as a permanent object, to allow many
|
||||
datasets to use a commonly defined dataspace. Dataspaces with extendable
|
||||
@@ -195,9 +256,8 @@ by calling <TT>H5Sclose()</TT>.
|
||||
|
||||
<DD>
|
||||
This function creates a new dataspace of a particular <I>type</I>. The
|
||||
types currently supported are H5S_SCALAR, H5S_SIMPLE, or H5S_NONE, although
|
||||
others are planned to be added later. The H5S_NONE dataspace can only hold a
|
||||
selection, not an extent.
|
||||
types currently supported are H5S_SCALAR and H5S_SIMPLE;
|
||||
others are planned to be added later.
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
@@ -252,12 +312,12 @@ dataspace identifier after this call is undefined.
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>H5S_class_t H5Sget_class (hid_t <I>space</I>)</TT></DT>
|
||||
<TT>H5S_class_t H5Sextent_class (hid_t <I>space</I>)</TT></DT>
|
||||
|
||||
<DD>
|
||||
Query a dataspace to determine the current class of a dataspace. The value
|
||||
which is returned is one of: H5S_SCALAR, H5S_SIMPLE, or H5S_NONE on success or
|
||||
FAIL on failure.
|
||||
which is returned is one of: H5S_SCALAR, H5S_SIMPLE on success or
|
||||
H5S_NO_CLASS on failure.
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
@@ -284,7 +344,7 @@ H5S_SIMPLE and the extent is set as specified.
|
||||
<TT>herr_t H5Sset_extent_none (hid_t <I>space</I>)</TT></DT>
|
||||
|
||||
<DD>
|
||||
Removes the extent from a dataspace and sets the type to H5S_NONE.
|
||||
Removes the extent from a dataspace and sets the type to H5S_NO_CLASS.
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
@@ -298,7 +358,7 @@ failure.
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>hsize_t H5Sextent_npoints (hid_t <I>space</I>)</TT></DT>
|
||||
<TT>hsize_t H5Sget_simple_extent_npoints (hid_t <I>space</I>)</TT></DT>
|
||||
|
||||
<DD>
|
||||
This function determines the number of elements in a dataspace. For example, a
|
||||
@@ -308,7 +368,7 @@ Returns the number of elements in the dataspace, negative on failure.
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>int H5Sextent_ndims (hid_t <I>space</I>)</TT></DT>
|
||||
<TT>int H5Sget_simple_extent_ndims (hid_t <I>space</I>)</TT></DT>
|
||||
|
||||
<DD>
|
||||
This function determines the dimensionality (or rank) of a dataspace.
|
||||
@@ -316,7 +376,7 @@ Returns the number of dimensions in the dataspace, negative on failure.
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>herr_t H5Sextent_dims (hid_t <I>space</I>, hsize_t *<I>dims</I>,
|
||||
<TT>herr_t H5Sget_simple_extent_dims (hid_t <I>space</I>, hsize_t *<I>dims</I>,
|
||||
hsize_t *<I>max</I>)</TT></DT>
|
||||
|
||||
<DD>
|
||||
@@ -356,11 +416,24 @@ This function selects a hyperslab region to add to the current selected region
|
||||
for the <I>space</I> dataspace. The <I>start</I>, <I>stride</I>, <I>count</I>
|
||||
and <I>block</I> arrays must be the same size as the rank of the dataspace.
|
||||
The selection operator <I>op</I> determines how the new selection is to be
|
||||
combined with the already existing selection for the dataspace. Currently,
|
||||
only the H5S_SELECT_SET operator is supported, which replaces the existing
|
||||
selection with the parameters from this call. Overlapping blocks are not
|
||||
supported with the H5S_SELECT_SET operator.
|
||||
<P>The <I>start</I> array determines the starting coordinates of the hyperslab
|
||||
combined with the already existing selection for the dataspace.
|
||||
Currently, The following operators are supported:
|
||||
<dir>
|
||||
<table width=80% border=0>
|
||||
<tr><td valign=top>
|
||||
<code>H5S_SELECT_SET</code>
|
||||
</td><td valign=top>
|
||||
Replaces the existing selection with the parameters from this call.
|
||||
Overlapping blocks are not supported with this operator.
|
||||
</td></tr><tr><td valign=top>
|
||||
<code>H5S_SELECT_OR</code>
|
||||
</td><td valign=top>
|
||||
Adds the new selection to the existing selection.
|
||||
</td></tr>
|
||||
</table>
|
||||
</dir>
|
||||
<P>
|
||||
The <I>start</I> array determines the starting coordinates of the hyperslab
|
||||
to select. The <I>stride</I> array chooses array locations from the dataspace
|
||||
with each value in the <I>stride</I> array determining how many elements to move
|
||||
in each dimension. Setting a value in the <I>stride</I> array to 1 moves to
|
||||
@@ -398,9 +471,23 @@ iterated through when I/O is performed. Duplicate coordinate locations are not
|
||||
checked for.
|
||||
|
||||
<P>The selection operator <I>op</I> determines how the new selection is to be
|
||||
combined with the already existing selection for the dataspace. Currently,
|
||||
only the H5S_SELECT_SET operator is supported, which replaces the existing
|
||||
selection with the parameters from this call. When operators other than
|
||||
combined with the already existing selection for the dataspace.
|
||||
The following operators are supported:
|
||||
<dir>
|
||||
<table width=80% border=0>
|
||||
<tr><td valign=top>
|
||||
<code>H5S_SELECT_SET</code>
|
||||
</td><td valign=top>
|
||||
Replaces the existing selection with the parameters from this call.
|
||||
Overlapping blocks are not supported with this operator.
|
||||
</td></tr><tr><td valign=top>
|
||||
<code>H5S_SELECT_OR</code>
|
||||
</td><td valign=top>
|
||||
Adds the new selection to the existing selection.
|
||||
</td></tr>
|
||||
</table>
|
||||
</dir>
|
||||
When operators other than
|
||||
H5S_SELECT_SET are used to combine a new selection with an existing selection,
|
||||
the selection ordering is reset to 'C' array ordering.
|
||||
</DD>
|
||||
@@ -481,7 +568,7 @@ the selection or extent is not defined).
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>hsize_t H5Sselect_npoints (hid_t <I>space</I>)</TT></DT>
|
||||
<TT>hsize_t H5Sget_select_npoints (hid_t <I>space</I>)</TT></DT>
|
||||
|
||||
<DD>
|
||||
This function determines the number of elements in the current selection
|
||||
@@ -555,14 +642,87 @@ is returned.
|
||||
|
||||
</DL>
|
||||
|
||||
<HR>
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
Dataspaces
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<ADDRESS>
|
||||
<A HREF="mailto:matzke@llnl.gov">Robb Matzke</A></ADDRESS>
|
||||
|
||||
<ADDRESS>
|
||||
<A HREF="mailto:koziol@ncsa.uiuc.edu">Quincey Koziol</A></ADDRESS>
|
||||
|
||||
<BR><!-- Created: Thu Dec 4 14:57:32 EST 1997 --><!-- hhmts start -->Last
|
||||
modified: Thu May 28 15:12:04 EST 1998 <!-- hhmts end -->
|
||||
<BR>
|
||||
-->
|
||||
<!-- Created: Thu Dec 4 14:57:32 EST 1997 --><!-- hhmts start -->
|
||||
<!--
|
||||
Last modified: Thu May 28 15:12:04 EST 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
|
||||
<br>
|
||||
Last modified: 26 April 1999
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
||||
@@ -4,7 +4,69 @@
|
||||
<title>The Data Type Interface (H5T)</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
Data Types
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>The Data Type Interface (H5T)</h1>
|
||||
|
||||
<h2>1. Introduction</h2>
|
||||
@@ -135,13 +197,12 @@
|
||||
<dl>
|
||||
<dt><code>H5T_class_t H5Tget_class (hid_t <em>type</em>)</code>
|
||||
<dd>This property holds one of the class names:
|
||||
<code>H5T_INTEGER, H5T_FLOAT, H5T_TIME, H5T_STRING,
|
||||
H5T_BITFIELD</code>, or <code>H5T_OPAQUE</code>. This
|
||||
property is read-only and is set when the datatype is
|
||||
created or copied (see <code>H5Tcreate()</code>,
|
||||
<code>H5Tcopy()</code>). If this function fails it returns
|
||||
<code>H5T_NO_CLASS</code> which has a negative value (all
|
||||
other class constants are non-negative).
|
||||
<code>H5T_INTEGER, H5T_FLOAT, H5T_TIME, H5T_STRING, or
|
||||
H5T_BITFIELD</code>. This property is read-only and is set
|
||||
when the datatype is created or copied (see
|
||||
<code>H5Tcreate()</code>, <code>H5Tcopy()</code>). If this
|
||||
function fails it returns <code>H5T_NO_CLASS</code> which has
|
||||
a negative value (all other class constants are non-negative).
|
||||
|
||||
<br><br>
|
||||
<dt><code>size_t H5Tget_size (hid_t <em>type</em>)</code>
|
||||
@@ -156,13 +217,11 @@
|
||||
the significant part of the data still extends beyond the edge
|
||||
of the data type then the <code>precision</code> property is
|
||||
decremented a bit at a time. Decreasing the size of a data
|
||||
type may fail if the precesion must be decremented and the
|
||||
data type is of the <code>H5T_OPAQUE</code> class or the
|
||||
<code>H5T_FLOAT</code> bit fields would extend beyond the
|
||||
significant part of the type. Increasing the size of an
|
||||
<code>H5T_STRING</code> automatically increases the precision
|
||||
as well. On error, <code>H5Tget_size()</code> returns zero
|
||||
which is never a valid size.
|
||||
type may fail if the <code>H5T_FLOAT</code> bit fields would
|
||||
extend beyond the significant part of the type. Adjusting the
|
||||
size of an <code>H5T_STRING</code> automatically adjusts the
|
||||
precision as well. On error, <code>H5Tget_size()</code>
|
||||
returns zero which is never a valid size.
|
||||
|
||||
<br><br>
|
||||
<dt><code>H5T_order_t H5Tget_order (hid_t <em>type</em>)</code>
|
||||
@@ -358,9 +417,6 @@
|
||||
<em>19971205162530</em>; as an integer value in Unix time(2)
|
||||
format; or other variations.
|
||||
|
||||
<p>I'm deferring definition until later since they're probably not
|
||||
as important as the other data types.
|
||||
|
||||
<h3>3.4. Properties of Character String Atomic Types</h3>
|
||||
|
||||
<p>Fixed-length character string types are used to store textual
|
||||
@@ -388,9 +444,33 @@
|
||||
programming language: C usually null terminates strings while
|
||||
Fortran left-justifies and space-pads strings. This property
|
||||
defines the storage mechanism and can be
|
||||
<code>H5T_STR_NULL</code> for C-style strings or
|
||||
<code>H5T_STR_SPACE</code> for Fortran-style
|
||||
strings. <code>H5Tget_strpad()</code> returns
|
||||
|
||||
<p>
|
||||
<dl>
|
||||
<dt><code>H5T_STR_NULLTERM</code>
|
||||
<dd>A C-style string which is guaranteed to be null
|
||||
terminated. When converting from a longer string the
|
||||
value will be truncated and then a null character
|
||||
appended.
|
||||
|
||||
<br><br>
|
||||
<dt><code>H5T_STR_NULLPAD</code>
|
||||
<dd>A C-style string which is padded with null characters
|
||||
but not necessarily null terminated. Conversion from a
|
||||
long string to a shorter <code>H5T_STR_NULLPAD</code>
|
||||
string will truncate but not null terminate. Conversion
|
||||
from a short value to a longer value will append null
|
||||
characters as with <code>H5T_STR_NULLTERM</code>.
|
||||
|
||||
<br><br>
|
||||
<dt><code>H5T_STR_SPACEPAD</code>
|
||||
<dd>A Fortran-style string which is padded with space
|
||||
characters. This is the same as
|
||||
<code>H5T_STR_NULLPAD</code> except the padding character
|
||||
is a space instead of a null.
|
||||
</dl>
|
||||
|
||||
<p><code>H5Tget_strpad()</code> returns
|
||||
<code>H5T_STR_ERROR</code> on failure, a negative value (all
|
||||
successful return values are non-negative).
|
||||
</dl>
|
||||
@@ -403,17 +483,100 @@
|
||||
Otherwise new bits are filled according to the <code>msb</code>
|
||||
padding type.
|
||||
|
||||
<h3>3.6. Properties of Opaque Atomic Types</h3>
|
||||
<h3>3.6 Character and String Datatype Issues</h3>
|
||||
|
||||
<p>Opaque atomic types (<code>class=H5T_OPAQUE</code>) act like
|
||||
bit fields except conversions which change the precision are not
|
||||
allowed. However, padding can be added or removed from either
|
||||
end and the bytes can be reordered. Opaque types can be used to
|
||||
create novel data types not directly supported by the library,
|
||||
but the application is responsible for data conversion of these
|
||||
types.
|
||||
The <code>H5T_NATIVE_CHAR</code> and <code>H5T_NATIVE_UCHAR</code>
|
||||
data types are actually numeric data (1-byte integers). If the
|
||||
application wishes to store character data, then an HDF5
|
||||
<em>string</em> data type should be derived from
|
||||
<code>H5T_C_S1</code> instead.
|
||||
|
||||
<h2>4. Properties of Compound Types</h2>
|
||||
<h4>Motivation</h4>
|
||||
|
||||
HDF5 defines at least three classes of data types:
|
||||
integer data, floating point data, and character data.
|
||||
However, the C language defines only integer and
|
||||
floating point data types; character data in C is
|
||||
overloaded on the 8- or 16-bit integer types and
|
||||
character strings are overloaded on arrays of those
|
||||
integer types which, by convention, are terminated with
|
||||
a zero element.
|
||||
|
||||
In C, the variable <code>unsigned char s[256]</code> is
|
||||
either an array of numeric data, a single character string
|
||||
with at most 255 characters, or an array of 256 characters,
|
||||
depending entirely on usage. For uniformity with the
|
||||
other <code>H5T_NATIVE_</code> types, HDF5 uses the
|
||||
numeric interpretation of <code>H5T_NATIVE_CHAR</code>
|
||||
and <code>H5T_NATIVE_UCHAR</code>.
|
||||
|
||||
|
||||
<h4>Usage</h4>
|
||||
|
||||
To store <code>unsigned char s[256]</code> data as an
|
||||
array of integer values, use the HDF5 data type
|
||||
<code>H5T_NATIVE_UCHAR</code> and a data space that
|
||||
describes the 256-element array. Some other application
|
||||
that reads the data will then be able to read, say, a
|
||||
256-element array of 2-byte integers and HDF5 will
|
||||
perform the numeric translation.
|
||||
|
||||
To store <code>unsigned char s[256]</code> data as a
|
||||
character string, derive a fixed length string data type
|
||||
from <code>H5T_C_S1</code> by increasing its size to
|
||||
256 characters. Some other application that reads the
|
||||
data will be able to read, say, a space padded string
|
||||
of 16-bit characters and HDF5 will perform the character
|
||||
and padding translations.
|
||||
|
||||
<pre>
|
||||
hid_t s256 = H5Tcopy(H5T_C_S1);
|
||||
H5Tset_size(s256, 256);
|
||||
</pre>
|
||||
|
||||
To store <code>unsigned char s[256]</code> data as
|
||||
an array of 256 ASCII characters, use an
|
||||
HDF5 data space to describe the array and derive a
|
||||
one-character string type from <code>H5T_C_S1</code>.
|
||||
Some other application will be able to read a subset
|
||||
of the array as 16-bit characters and HDF5 will
|
||||
perform the character translations.
|
||||
The <code>H5T_STR_NULLPAD</code> is necessary because
|
||||
if <code>H5T_STR_NULLTERM</code> were used
|
||||
(the default) then the single character of storage
|
||||
would be for the null terminator and no useful data
|
||||
would actually be stored (unless the length were
|
||||
incremented to more than one character).
|
||||
|
||||
<pre>
|
||||
hid_t s1 = H5Tcopy(H5T_C_S1);
|
||||
H5Tset_strpad(s1, H5T_STR_NULLPAD);
|
||||
</pre>
|
||||
|
||||
<h4>Summary</h4>
|
||||
|
||||
The C language uses the term <code>char</code> to
|
||||
represent one-byte numeric data and does not make
|
||||
character strings a first-class data type.
|
||||
HDF5 makes a distinction between integer and
|
||||
character data and maps the C <code>signed char</code>
|
||||
(<code>H5T_NATIVE_CHAR</code>) and
|
||||
<code>unsigned char</code> (<code>H5T_NATIVE_UCHAR</code>)
|
||||
data types to the HDF5 integer type class.
|
||||
|
||||
<h2>4. Properties of Opaque Types</h2>
|
||||
|
||||
<p>Opaque types (<code>class=H5T_OPAQUE</code>) provide the
|
||||
application with a mechanism for describing data which cannot be
|
||||
otherwise described by HDF5. The only properties associated with
|
||||
opaque types are a size in bytes and an ASCII tag which is
|
||||
manipulated with <code>H5Tset_tag()</code> and
|
||||
<code>H5Tget_tag()</code> functions. The library contains no
|
||||
predefined conversion functions but the application is free to
|
||||
register conversions between any two opaque types or between an
|
||||
opaque type and some other type.
|
||||
|
||||
<h2>5. Properties of Compound Types</h2>
|
||||
|
||||
<p>A compound data type is similar to a <code>struct</code> in C
|
||||
or a common block in Fortran: it is a collection of one or more
|
||||
@@ -507,7 +670,9 @@
|
||||
<code>H5Tinsert()</code>) and cannot be subsequently modified.
|
||||
This makes it imposible to define recursive data structures.
|
||||
|
||||
<h2>5. Predefined Atomic Data Types</h2>
|
||||
<a name="DTypes-PredefinedAtomic">
|
||||
<h2>6. Predefined Atomic Data Types</h2>
|
||||
</a>
|
||||
|
||||
<p>The library predefines a modest number of data types having
|
||||
names like <code>H5T_<em>arch</em>_<em>base</em></code> where
|
||||
@@ -616,6 +781,10 @@
|
||||
<td align=center>I</td>
|
||||
<td>Signed integer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>R</td>
|
||||
<td>References</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>S</td>
|
||||
<td>Character string</td>
|
||||
@@ -687,6 +856,10 @@
|
||||
<td><code>H5T_CRAY_F64</code></td>
|
||||
<td>Eight-byte Cray floating point</td>
|
||||
</tr>
|
||||
<tr valign=top>
|
||||
<td><code>H5T_STD_ROBJ</code></td>
|
||||
<td>Reference to an entire object in a file</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
@@ -703,6 +876,10 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>H5T_NATIVE_CHAR</code></td>
|
||||
<td><code>char</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>H5T_NATIVE_SCHAR</code></td>
|
||||
<td><code>signed char</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -753,6 +930,22 @@
|
||||
<td><code>H5T_NATIVE_LDOUBLE</code></td>
|
||||
<td><code>long double</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>H5T_NATIVE_HSIZE</code></td>
|
||||
<td><code>hsize_t</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>H5T_NATIVE_HSSIZE</code></td>
|
||||
<td><code>hssize_t</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>H5T_NATIVE_HERR</code></td>
|
||||
<td><code>herr_t</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>H5T_NATIVE_HBOOL</code></td>
|
||||
<td><code>hbool_t</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
@@ -799,7 +992,7 @@ H5Tset_size (str80, 80);
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>6. Defining Compound Data Types</h2>
|
||||
<h2>7. Defining Compound Data Types</h2>
|
||||
|
||||
<p>Unlike atomic data types which are derived from other atomic
|
||||
data types, compound data types are created from scratch. First,
|
||||
@@ -955,7 +1148,21 @@ H5Tinsert (surf_id, "y", HOFFSET(surf_t,y), complex_id);
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>7. Sharing Data Types among Datasets</h2>
|
||||
<a name="Datatypes_Enum"> </a>
|
||||
<h2>8. <a href="DatatypesEnum.html">Enumeration Data Types</a></h2>
|
||||
|
||||
An HDF5 enumeration data type is a 1:1 mapping between a set of
|
||||
symbols and a set of integer values, and an order is imposed on
|
||||
the symbols by their integer values. The symbols are passed
|
||||
between the application and library as character strings and all
|
||||
the values for a particular enumeration type are of the same
|
||||
integer type, which is not necessarily a native type.
|
||||
<p>
|
||||
Details of enumeration data types and the related functions
|
||||
are discussed on a separate
|
||||
<a href="DatatypesEnum.html">Enumeration Data Types</a> page.
|
||||
|
||||
<h2>9. Sharing Data Types among Datasets</h2>
|
||||
|
||||
<p>If a file has lots of datasets which have a common data type
|
||||
then the file could be made smaller by having all the datasets
|
||||
@@ -1000,36 +1207,40 @@ hid_t dset4 = H5Dcreate (file, "dset4", t2, space, H5P_DEFAULT);
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>8. Data Conversion</h2>
|
||||
<a name="Datatypes-DataConversion">
|
||||
<h2>10. Data Conversion</h2>
|
||||
</a>
|
||||
|
||||
<p>The library is capable of converting data from one type to
|
||||
another and does so automatically when reading or writing the
|
||||
raw data of a dataset. The data type interface does not provide
|
||||
functions to the application for changing data types directly,
|
||||
but the user is allowed a certain amount of control over the
|
||||
conversion process.
|
||||
raw data of a dataset, attribute data, or fill values. The
|
||||
application can also change the type of data stored in an array.
|
||||
|
||||
<p>In order to insure that data conversion exceeds disk I/O rates,
|
||||
common data conversion paths can be hand-tuned and optimized for
|
||||
performance. If a hand-tuned conversion function is not
|
||||
performance. The library contains very efficient code for
|
||||
conversions between most native data types and a few non-native
|
||||
data types, but if a hand-tuned conversion function is not
|
||||
available, then the library falls back to a slower but more
|
||||
general conversion function. Although conversion paths include
|
||||
data space conversion, only data type conversions are described
|
||||
here. Most applications will not be concerned with data type
|
||||
conversions since the library will contain hand-tuned conversion
|
||||
functions for many common conversion paths. In fact, if an
|
||||
application does define a conversion function which would be of
|
||||
general interest, we request that the function be submitted to
|
||||
the HDF5 development team for inclusion in the library (there
|
||||
might be less overhead involved with calling an internal
|
||||
conversion functions than calling an application-defined
|
||||
conversion function).
|
||||
general conversion function. The application programmer can
|
||||
define additional conversion functions when the libraries
|
||||
repertoire is insufficient. In fact, if an application does
|
||||
define a conversion function which would be of general interest,
|
||||
we request that the function be submitted to the HDF5
|
||||
development team for inclusion in the library.
|
||||
|
||||
<p><b>Note:</b> The alpha version of the library does not contain
|
||||
a full set of conversions. It can convert from one integer
|
||||
format to another and one struct to another. It can also
|
||||
perform byte swapping when the source and destination types are
|
||||
otherwise the same.
|
||||
<p><b>Note:</b> The HDF5 library contains a deliberately limited
|
||||
set of conversion routines. It can convert from one integer
|
||||
format to another, from one floating point format to another,
|
||||
and from one struct to another. It can also perform byte
|
||||
swapping when the source and destination types are otherwise the
|
||||
same. The library does not contain any functions for converting
|
||||
data between integer and floating point formats. It is
|
||||
anticipated that some users will find it necessary to develop
|
||||
float to integer or integer to float conversion functions at the
|
||||
application level; users are invited to submit those functions
|
||||
to be considered for inclusion in future versions of the
|
||||
library.
|
||||
|
||||
<p>A conversion path contains a source and destination data type
|
||||
and each path contains a <em>hard</em> conversion function
|
||||
@@ -1041,7 +1252,7 @@ hid_t dset4 = H5Dcreate (file, "dset4", t2, space, H5P_DEFAULT);
|
||||
conversion path, then the hard function is favored and when
|
||||
multiple soft functions apply, the one defined last is favored.
|
||||
|
||||
<p>A data conversion function is of type <code>H5T_conv_t</em>
|
||||
<p>A data conversion function is of type <code>H5T_conv_t</code>
|
||||
which is defined as:
|
||||
|
||||
<p>
|
||||
@@ -1089,24 +1300,25 @@ typedef herr_t (*H5T_conv_t)(hid_t <em>src_type</em>,
|
||||
|
||||
<br><br>
|
||||
<dt><code>H5T_CONV_CONV</code>
|
||||
<dd>This is the usually command which indicates that
|
||||
data points should be converted. The conversion function
|
||||
should initialize the <code>priv</code> field of
|
||||
<em>cdata</em> if it wasn't initialize during the
|
||||
<code>H5T_CONV_INIT</code> command and then convert
|
||||
<em>nelmts</em> instances of the <em>src_type</em> to the
|
||||
<em>dst_type</em>. The <em>buffer</em> serves as both input
|
||||
and output. The <em>background</em> buffer is supplied
|
||||
according to the value of the <code>need_bkg</code> field of
|
||||
<em>cdata</em> (the values are described below).
|
||||
<dd>This command indicates that data points should be converted.
|
||||
The conversion function should initialize the
|
||||
<code>priv</code> field of <em>cdata</em> if it wasn't
|
||||
initialize during the <code>H5T_CONV_INIT</code> command and
|
||||
then convert <em>nelmts</em> instances of the
|
||||
<em>src_type</em> to the <em>dst_type</em>. The
|
||||
<em>buffer</em> serves as both input and output. The
|
||||
<em>background</em> buffer is supplied according to the value
|
||||
of the <code>need_bkg</code> field of <em>cdata</em> (the
|
||||
values are described below).
|
||||
|
||||
<br><br>
|
||||
<dt><code>H5T_CONV_FREE</code>
|
||||
<dd>The conversion function is about to be removed from some
|
||||
path and the private data (the
|
||||
<code><em>cdata</em>->priv</code> pointer) should be freed and
|
||||
set to null. All other pointer arguments are null and the
|
||||
<em>nelmts</em> argument is zero.
|
||||
set to null. All other pointer arguments are null, the
|
||||
<em>src_type</em> and <em>dst_type</em> are invalid
|
||||
(negative), and the <em>nelmts</em> argument is zero.
|
||||
|
||||
<br><br>
|
||||
<dt><em>Others...</em>
|
||||
@@ -1133,7 +1345,7 @@ typedef herr_t (*H5T_conv_t)(hid_t <em>src_type</em>,
|
||||
initialized. This is useful for those functions requiring some
|
||||
extra buffer space as the buffer can probably be allocated
|
||||
more efficiently by the library (the application can supply
|
||||
the buffer as part of the dataset transfer template).
|
||||
the buffer as part of the dataset transfer property list).
|
||||
|
||||
<br><br>
|
||||
<dt><code>H5T_BKG_YES</code>
|
||||
@@ -1148,64 +1360,56 @@ typedef herr_t (*H5T_conv_t)(hid_t <em>src_type</em>,
|
||||
destination.
|
||||
</dl>
|
||||
|
||||
<p>Other fields of <em>cdata</em> can be read or written by
|
||||
the conversion functions. Many of these contain
|
||||
performance-measuring fields which can be printed by the
|
||||
conversion function during the <code>H5T_CONV_FREE</code>
|
||||
command which is issued whenever the function is removed from a
|
||||
conversion path.
|
||||
|
||||
<dl>
|
||||
<dt><code>hbool_t recalc</code>
|
||||
<dd>This field is set by the library when any other data type
|
||||
conversion function is registered or unregistered. It allows
|
||||
conversion functions to cache pointers to other conversion
|
||||
functions and be notified when the cache should be
|
||||
recalculated.
|
||||
|
||||
<br><br>
|
||||
<dt><code>unsigned long ncalls</code>
|
||||
<dd>This field contains the number of times the conversion
|
||||
function was called with the command
|
||||
<code>H5T_CONV_CONV</code>. It is updated automatically by
|
||||
the library.
|
||||
|
||||
<br><br>
|
||||
<dt><code>unsigned long nelmts</code>
|
||||
<dd>This is the total number of data points converted by this
|
||||
function and is updated automatically by the library.
|
||||
</dl>
|
||||
|
||||
<p>The <code>recalc</code> field of <em>cdata</em> is set when the
|
||||
conversion path table changes. It can be used by conversion
|
||||
function that cache other conversion paths so they know when
|
||||
their cache needs to be recomputed.
|
||||
|
||||
|
||||
<p>Once a conversion function is written it can be registered and
|
||||
unregistered with these functions:
|
||||
|
||||
<dl>
|
||||
<dt><code>herr_t H5Tregister_hard (const char *<em>name</em>,
|
||||
hid_t <em>src_type</em>, hid_t <em>dest_type</em>,
|
||||
H5T_conv_t <em>func</em>)</code>
|
||||
<dt><code>herr_t H5Tregister(H5T_pers_t <em>pers</em>, const
|
||||
char *<em>name</em>, hid_t <em>src_type</em>, hid_t
|
||||
<em>dest_type</em>, H5T_conv_t <em>func</em>)</code>
|
||||
<dd>Once a conversion function is written, the library must be
|
||||
notified so it can be used. The function can be registered as a
|
||||
hard conversion for one or more conversion paths by calling
|
||||
<code>H5Tregister_hard()</code>, displacing any previous hard
|
||||
conversion for those paths. The <em>name</em> is used only
|
||||
for debugging but must be supplied.
|
||||
notified so it can be used. The function can be registered as
|
||||
a hard (<code>H5T_PERS_HARD</code>) or soft
|
||||
(<code>H5T_PERS_SOFT</code>) conversion depending on the value
|
||||
of <em>pers</em>, displacing any previous conversions for all
|
||||
applicable paths. The <em>name</em> is used only for
|
||||
debugging but must be supplied. If <em>pers</em> is
|
||||
<code>H5T_PERS_SOFT</code> then only the type classes of the
|
||||
<em>src_type</em> and <em>dst_type</em> are used. For
|
||||
instance, to register a general soft conversion function that
|
||||
can be applied to any integer to integer conversion one could
|
||||
say: <code>H5Tregister(H5T_PERS_SOFT, "i2i", H5T_NATIVE_INT,
|
||||
H5T_NATIVE_INT, convert_i2i)</code>. One special conversion
|
||||
path called the "no-op" conversion path is always defined by
|
||||
the library and used as the conversion function when no data
|
||||
transformation is necessary. The application can redefine this
|
||||
path by specifying a new hard conversion function with a
|
||||
negative value for both the source and destination data types,
|
||||
but the library might not call the function under certain
|
||||
circumstances.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Tregister_soft (const char *<em>name</em>,
|
||||
H5T_class_t <em>src_class</em>, H5T_class_t <em>dest_class</em>,
|
||||
H5T_conv_t <em>func</em>)</code>
|
||||
<dd>The function can be registered as a generic function which
|
||||
will be automatically added to any conversion path for which
|
||||
it returns an indication that it applies. The name is used
|
||||
only for debugging but must be supplied.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Tunregister (H5T_conv_t <em>func</em>)</code>
|
||||
<dd>A function can be removed from the set of known conversion
|
||||
functions by calling <code>H5Tunregister()</code>. The
|
||||
function is removed from all conversion paths.
|
||||
<dt><code>herr_t H5Tunregister (H5T_pers_t <em>pers</em>, const
|
||||
char *<em>name</em>, hid_t <em>src_type</em>, hid_t
|
||||
<em>dest_type</em>, H5T_conv_t <em>func</em>)</code>
|
||||
<dd>Any conversion path or function that matches the critera
|
||||
specified by a call to this function is removed from the type
|
||||
conversion table. All fields have the same interpretation as
|
||||
for <code>H5Tregister()</code> with the added feature that any
|
||||
(or all) may be wild cards. The
|
||||
<code>H5T_PERS_DONTCARE</code> constant should be used to
|
||||
indicate a wild card for the <em>pers</em> argument. The wild
|
||||
card <em>name</em> is the null pointer or empty string, the
|
||||
wild card for the <em>src_type</em> and <em>dest_type</em>
|
||||
arguments is any negative value, and the wild card for the
|
||||
<em>func</em> argument is the null pointer. The special no-op
|
||||
conversion path is never removed by this function.
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
@@ -1334,7 +1538,9 @@ typedef herr_t (*H5T_conv_t)(hid_t <em>src_type</em>,
|
||||
paths it can handle.
|
||||
|
||||
<p><code><pre>
|
||||
H5Tregister_soft ("cus2be", H5T_INTEGER, H5T_INTEGER, cray_ushort2be);
|
||||
H5Tregister(H5T_PERS_SOFT, "cus2be",
|
||||
H5T_NATIVE_INT, H5T_NATIVE_INT,
|
||||
cray_ushort2be);
|
||||
</pre></code>
|
||||
|
||||
<p>This causes it to be consulted for any conversion
|
||||
@@ -1359,12 +1565,76 @@ H5Tregister_soft ("cus2be", H5T_INTEGER, H5T_INTEGER, cray_ushort2be);
|
||||
conversion path whether that conversion path was actually used
|
||||
or not.
|
||||
|
||||
<hr>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
<address><a href="mailto:koziol@ncsa.uiuc.edu">Quincey Koziol</a></address>
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
Data Types
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
<!-- Created: Thu Dec 4 14:57:32 EST 1997 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Thu Jun 18 13:59:12 EDT 1998
|
||||
Last modified: Fri Jun 4 16:14:04 EDT 1999
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
921
doc/html/DatatypesEnum.html
Normal file
@@ -0,0 +1,921 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Enumeration Data Types in the Data Type Interface (H5T)</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>The Data Type Interface (H5T) <font size=-1><i>(contitnued)</i></font></h1>
|
||||
|
||||
<p align=right><font size=-1><i>
|
||||
(Return to <a href="Datatypes.html#Datatypes_Enum">Data Types Interface (H5T)</a>.)
|
||||
</font></i>
|
||||
|
||||
<h2>7. Enumeration Data Types</h2>
|
||||
|
||||
<h3>7.1. Introduction</h2>
|
||||
|
||||
<p>An HDF enumeration data type is a 1:1 mapping between a set of
|
||||
symbols and a set of integer values, and an order is imposed on
|
||||
the symbols by their integer values. The symbols are passed
|
||||
between the application and library as character strings and all
|
||||
the values for a particular enumeration type are of the same
|
||||
integer type, which is not necessarily a native type.
|
||||
|
||||
<h3>7.2. Creation</h2>
|
||||
|
||||
<p>Creation of an enumeration data type resembles creation of a
|
||||
compound data type: first an empty enumeration type is created,
|
||||
then members are added to the type, then the type is optionally
|
||||
locked.
|
||||
|
||||
<dl>
|
||||
<dt><code>hid_t H5Tcreate(H5T_class_t <em>type_class</em>,
|
||||
size_t <em>size</em>)</code>
|
||||
<dd>This function creates a new empty enumeration data type based
|
||||
on a native signed integer type. The first argument is the
|
||||
constant <code>H5T_ENUM</code> and the second argument is the
|
||||
size in bytes of the native integer on which the enumeration
|
||||
type is based. If the architecture does not support a native
|
||||
signed integer of the specified size then an error is
|
||||
returned.
|
||||
|
||||
<pre>
|
||||
/* Based on a native signed short */
|
||||
hid_t hdf_en_colors = H5Tcreate(H5T_ENUM, sizeof(short));</pre>
|
||||
|
||||
|
||||
<dt><code>hid_t H5Tenum_create(hid_t <em>base</em>)</code>
|
||||
<dd>This function creates a new empty enumeration data type based
|
||||
on some integer data type <em>base</em> and is a
|
||||
generalization of the <code>H5Tcreate()</code> function. This
|
||||
function is useful when creating an enumeration type based on
|
||||
some non-native integer data type, but it can be used for
|
||||
native types as well.
|
||||
|
||||
<pre>
|
||||
/* Based on a native unsigned short */
|
||||
hid_t hdf_en_colors_1 = H5Tenum_create(H5T_NATIVE_USHORT);
|
||||
|
||||
/* Based on a MIPS 16-bit unsigned integer */
|
||||
hid_t hdf_en_colors_2 = H5Tenum_create(H5T_MIPS_UINT16);
|
||||
|
||||
/* Based on a big-endian 16-bit unsigned integer */
|
||||
hid_t hdf_en_colors_3 = H5Tenum_create(H5T_STD_U16BE);</pre>
|
||||
|
||||
|
||||
<dt><code>herr_t H5Tenum_insert(hid_t <em>etype</em>, const char
|
||||
*<em>symbol</em>, void *<em>value</em>)</code>
|
||||
<dd>Members are inserted into the enumeration data type
|
||||
<em>etype</em> with this function. Each member has a symbolic
|
||||
name <em>symbol</em> and some integer representation
|
||||
<em>value</em>. The <em>value</em> argument must point to a value
|
||||
of the same data type as specified when the enumeration type
|
||||
was created. The order of member insertion is not important
|
||||
but all symbol names and values must be unique within a
|
||||
particular enumeration type.
|
||||
|
||||
<pre>
|
||||
short val;
|
||||
H5Tenum_insert(hdf_en_colors, "RED", (val=0,&val));
|
||||
H5Tenum_insert(hdf_en_colors, "GREEN", (val=1,&val));
|
||||
H5Tenum_insert(hdf_en_colors, "BLUE", (val=2,&val));
|
||||
H5Tenum_insert(hdf_en_colors, "WHITE", (val=3,&val));
|
||||
H5Tenum_insert(hdf_en_colors, "BLACK", (val=4,&val));</pre>
|
||||
|
||||
|
||||
<dt><code>herr_t H5Tlock(hid_t <em>etype</em>)</code>
|
||||
<dd>This function locks a data type so it cannot be modified or
|
||||
freed unless the entire HDF5 library is closed. Its use is
|
||||
completely optional but using it on an application data type
|
||||
makes that data type act like a predefined data type.
|
||||
|
||||
<pre>
|
||||
H5Tlock(hdf_en_colors);</pre>
|
||||
|
||||
</dl>
|
||||
|
||||
<h3>7.3. Integer Operations</h2>
|
||||
|
||||
<p>Because an enumeration data type is derived from an integer
|
||||
data type, any operation which can be performed on integer data
|
||||
types can also be performed on enumeration data types. This
|
||||
includes:
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table>
|
||||
<tr>
|
||||
<td><code>H5Topen()</code></td>
|
||||
<td><code>H5Tcreate()</code></td>
|
||||
<td><code>H5Tcopy()</code></td>
|
||||
<td><code>H5Tclose()</code></td>
|
||||
</tr><tr>
|
||||
<td><code>H5Tequal()</code></td>
|
||||
<td><code>H5Tlock()</code></td>
|
||||
<td><code>H5Tcommit()</code></td>
|
||||
<td><code>H5Tcommitted()</code></td>
|
||||
</tr><tr>
|
||||
<td><code>H5Tget_class()</code></td>
|
||||
<td><code>H5Tget_size()</code></td>
|
||||
<td><code>H5Tget_order()</code></td>
|
||||
<td><code>H5Tget_pad()</code></td>
|
||||
</tr><tr>
|
||||
<td><code>H5Tget_precision()</code></td>
|
||||
<td><code>H5Tget_offset()</code></td>
|
||||
<td><code>H5Tget_sign()</code></td>
|
||||
<td><code>H5Tset_size()</code></td>
|
||||
</tr><tr>
|
||||
<td><code>H5Tset_order()</code></td>
|
||||
<td><code>H5Tset_precision()</code></td>
|
||||
<td><code>H5Tset_offset()</code></td>
|
||||
<td><code>H5Tset_pad()</code></td>
|
||||
</tr><tr>
|
||||
<td><code>H5Tset_sign()</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>In addition, the new function <code>H5Tget_super()</code> will
|
||||
be defined for all data types that are derived from existing
|
||||
types (currently just enumeration types).
|
||||
|
||||
<dl>
|
||||
<dt><code>hid_t H5Tget_super(hid_t <em>type</em>)</code>
|
||||
<dd>Return the data type from which <em>type</em> is
|
||||
derived. When <em>type</em> is an enumeration data type then
|
||||
the returned value will be an integer data type but not
|
||||
necessarily a native type. One use of this function would be
|
||||
to create a new enumeration type based on the same underlying
|
||||
integer type and values but with possibly different symbols.
|
||||
|
||||
<pre>
|
||||
hid_t itype = H5Tget_super(hdf_en_colors);
|
||||
hid_t hdf_fr_colors = H5Tenum_create(itype);
|
||||
H5Tclose(itype);
|
||||
|
||||
short val;
|
||||
H5Tenum_insert(hdf_fr_colors, "ouge", (val=0,&val));
|
||||
H5Tenum_insert(hdf_fr_colors, "vert", (val=1,&val));
|
||||
H5Tenum_insert(hdf_fr_colors, "bleu", (val=2,&val));
|
||||
H5Tenum_insert(hdf_fr_colors, "blanc", (val=3,&val));
|
||||
H5Tenum_insert(hdf_fr_colors, "noir", (val=4,&val));
|
||||
H5Tlock(hdf_fr_colors);</pre>
|
||||
</dl>
|
||||
|
||||
<h3>7.4. Type Functions</h2>
|
||||
|
||||
<p>A small set of functions is available for querying properties
|
||||
of an enumeration type. These functions are likely to be used
|
||||
by browsers to display data type information.
|
||||
|
||||
<dl>
|
||||
<dt><code>int H5Tget_nmembers(hid_t <em>etype</em>)</code>
|
||||
<dd>When given an enumeration data type <em>etype</em> this
|
||||
function returns the number of members defined for that
|
||||
type. This function is already implemented for compound data
|
||||
types.
|
||||
|
||||
<br><br>
|
||||
<dt><code>char *H5Tget_member_name(hid_t <em>etype</em>, int
|
||||
<em>membno</em>)</code>
|
||||
<dd>Given an enumeration data type <em>etype</em> this function
|
||||
returns the symbol name for the member indexed by
|
||||
<em>membno</em>. Members are numbered from zero to
|
||||
<em>N</em>-1 where <em>N</em> is the return value from
|
||||
<code>H5Tget_nmembers()</code>. The members are stored in no
|
||||
particular order. This function is already implemented for
|
||||
compound data types. If an error occurs then the null pointer
|
||||
is returned. The return value should be freed by calling
|
||||
<code>free()</code>.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Tget_member_value(hid_t <em>etype</em>, int
|
||||
<em>membno</em>, void *<em>value</em>/*out*/)</code>
|
||||
<dd>Given an enumeration data type <em>etype</em> this function
|
||||
returns the value associated with the member indexed by
|
||||
<em>membno</em> (as described for
|
||||
<code>H5Tget_member_name()</code>). The value returned
|
||||
is in the domain of the underlying integer
|
||||
data type which is often a native integer type. The
|
||||
application should ensure that the memory pointed to by
|
||||
<em>value</em> is large enough to contain the result (the size
|
||||
can be obtained by calling <code>H5Tget_size()</code> on
|
||||
either the enumeration type or the underlying integer type
|
||||
when the type is not known by the C compiler.
|
||||
|
||||
<pre>
|
||||
int i, n = H5Tget_nmembers(hdf_en_colors);
|
||||
for (i=0; i<n; i++) {
|
||||
char *symbol = H5Tget_member_name(hdf_en_colors, i);
|
||||
short val;
|
||||
H5Tget_member_value(hdf_en_colors, i, &val);
|
||||
printf("#%d %20s = %d\n", i, symbol, val);
|
||||
free(symbol);
|
||||
}</pre>
|
||||
|
||||
<p>
|
||||
Output:
|
||||
<pre>
|
||||
#0 BLACK = 4
|
||||
#1 BLUE = 2
|
||||
#2 GREEN = 1
|
||||
#3 RED = 0
|
||||
#4 WHITE = 3</pre>
|
||||
</dl>
|
||||
|
||||
<h3>7.5. Data Functions</h2>
|
||||
|
||||
<p>In addition to querying about the enumeration type properties,
|
||||
an application may want to make queries about enumerated
|
||||
data. These functions perform efficient mappings between symbol
|
||||
names and values.
|
||||
|
||||
<dl>
|
||||
<dt><code>herr_t H5Tenum_valueof(hid_t <em>etype</em>, const char
|
||||
*<em>symbol</em>, void *<em>value</em>/*out*/)</code>
|
||||
<dd>Given an enumeration data type <em>etype</em> this function
|
||||
returns through <em>value</em> the bit pattern associated with
|
||||
the symbol name <em>symbol</em>. The <em>value</em> argument
|
||||
should point to memory which is large enough to hold the result,
|
||||
which is returned as the underlying integer data type specified
|
||||
when the enumeration type was created, often a native integer
|
||||
type.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Tenum_nameof(hid_t <em>etype</em>, void
|
||||
*<em>value</em>, char *<em>symbol</em>, size_t
|
||||
<em>size</em>)</code>
|
||||
<dd>This function translates a bit pattern pointed to by
|
||||
<em>value</em> to a symbol name according to the mapping
|
||||
defined in the enumeration data type <em>etype</em> and stores
|
||||
at most <em>size</em> characters of that name (counting the
|
||||
null terminator) to the <em>symbol</em> buffer. If the name is
|
||||
longer than the result buffer then the result is not null
|
||||
terminated and the function returns failure. If <em>value</em>
|
||||
points to a bit pattern which is not in the domain of the
|
||||
enumeration type then the first byte of the <em>symbol</em>
|
||||
buffer is set to zero and the function fails.
|
||||
|
||||
<pre>
|
||||
short data[1000] = {4, 2, 0, 0, 5, 1, ...};
|
||||
int i;
|
||||
char symbol[32];
|
||||
|
||||
for (i=0; i<1000; i++) {
|
||||
if (H5Tenum_nameof(hdf_en_colors, data+i, symbol,
|
||||
sizeof symbol))<0) {
|
||||
if (symbol[0]) {
|
||||
strcpy(symbol+sizeof(symbol)-4, "...");
|
||||
} else {
|
||||
strcpy(symbol, "UNKNOWN");
|
||||
}
|
||||
}
|
||||
printf("%d %s\n", data[i], symbol);
|
||||
}
|
||||
printf("}\n");</pre>
|
||||
|
||||
<p>
|
||||
Output:
|
||||
<pre>
|
||||
|
||||
4 BLACK
|
||||
2 BLUE
|
||||
0 RED
|
||||
0 RED
|
||||
5 UNKNOWN
|
||||
1 GREEN
|
||||
...</pre>
|
||||
</dl>
|
||||
|
||||
<h3>7.6. Conversion</h2>
|
||||
|
||||
<p>Enumerated data can be converted from one type to another
|
||||
provided the destination enumeration type contains all the
|
||||
symbols of the source enumeration type. The conversion operates
|
||||
by matching up the symbol names of the source and destination
|
||||
enumeration types to build a mapping from source value to
|
||||
destination value. For instance, if we are translating from an
|
||||
enumeration type that defines a sequence of integers as the
|
||||
values for the colors to a type that defines a different bit for
|
||||
each color then the mapping might look like this:
|
||||
|
||||
<p><img src="EnumMap.gif" alt="Enumeration Mapping">
|
||||
|
||||
<p>That is, a source value of <code>2</code> which corresponds to
|
||||
<code>BLUE</code> would be mapped to <code>0x0004</code>. The
|
||||
following code snippet builds the second data type, then
|
||||
converts a raw data array from one data type to another, and
|
||||
then prints the result.
|
||||
|
||||
<pre>
|
||||
/* Create a new enumeration type */
|
||||
short val;
|
||||
hid_t bits = H5Tcreate(H5T_ENUM, sizeof val);
|
||||
H5Tenum_insert(bits, "RED", (val=0x0001,&val));
|
||||
H5Tenum_insert(bits, "GREEN", (val=0x0002,&val));
|
||||
H5Tenum_insert(bits, "BLUE", (val=0x0004,&val));
|
||||
H5Tenum_insert(bits, "WHITE", (val=0x0008,&val));
|
||||
H5Tenum_insert(bits, "BLACK", (val=0x0010,&val));
|
||||
|
||||
/* The data */
|
||||
short data[6] = {1, 4, 2, 0, 3, 5};
|
||||
|
||||
/* Convert the data from one type to another */
|
||||
H5Tconvert(hdf_en_colors, bits, 5, data, NULL);
|
||||
|
||||
/* Print the data */
|
||||
for (i=0; i<6; i++) {
|
||||
printf("0x%04x\n", (unsigned)(data[i]));
|
||||
}</pre>
|
||||
|
||||
<p>
|
||||
Output:
|
||||
<pre>
|
||||
|
||||
0x0002
|
||||
0x0010
|
||||
0x0004
|
||||
0x0001
|
||||
0x0008
|
||||
0xffff</pre>
|
||||
|
||||
<p>If the source data stream contains values which are not in the
|
||||
domain of the conversion map then an overflow exception is
|
||||
raised within the library, causing the application defined
|
||||
overflow handler to be invoked (see
|
||||
<code>H5Tset_overflow()</code>). If no overflow handler is
|
||||
defined then all bits of the destination value will be set.
|
||||
|
||||
<p>The HDF library will not provide conversions between enumerated
|
||||
data and integers although the application is free to do so
|
||||
(this is a policy we apply to all classes of HDF data
|
||||
types). However, since enumeration types are derived from
|
||||
integer types it is permissible to treat enumerated data as
|
||||
integers and perform integer conversions in that context.
|
||||
|
||||
<h3>7.7. Symbol Order</h2>
|
||||
|
||||
<p>Symbol order is determined by the integer values associated
|
||||
with each symbol. When the integer data type is a native type,
|
||||
testing the relative order of two symbols is an easy process:
|
||||
simply compare the values of the symbols. If only the symbol
|
||||
names are available then the values must first be determined by
|
||||
calling <code>H5Tenum_valueof()</code>.
|
||||
|
||||
<pre>
|
||||
short val1, val2;
|
||||
H5Tenum_valueof(hdf_en_colors, "WHITE", &val1);
|
||||
H5Tenum_valueof(hdf_en_colors, "BLACK", &val2);
|
||||
if (val1 < val2) ...</pre>
|
||||
|
||||
<p>When the underlying integer data type is not a native type then
|
||||
the easiest way to compare symbols is to first create a similar
|
||||
enumeration type that contains all the same symbols but has a
|
||||
native integer type (HDF type conversion features can be used to
|
||||
convert the non-native values to native values). Once we have a
|
||||
native type we can compare symbol order as just described. If
|
||||
<code>foreign</code> is some non-native enumeration type then a
|
||||
native type can be created as follows:
|
||||
|
||||
<pre>
|
||||
int n = H5Tget_nmembers(foreign);
|
||||
hid_t itype = H5Tget_super(foreign);
|
||||
void *val = malloc(n * MAX(H5Tget_size(itype), sizeof(int)));
|
||||
char *name = malloc(n * sizeof(char*));
|
||||
int i;
|
||||
|
||||
/* Get foreign type information */
|
||||
for (i=0; i<n; i++) {
|
||||
name[i] = H5Tget_member_name(foreign, i);
|
||||
H5Tget_member_value(foreign, i,
|
||||
(char*)val+i*H5Tget_size(foreign));
|
||||
}
|
||||
|
||||
/* Convert integer values to new type */
|
||||
H5Tconvert(itype, H5T_NATIVE_INT, n, val, NULL);
|
||||
|
||||
/* Build a native type */
|
||||
hid_t native = H5Tenum_create(H5T_NATIVE_INT);
|
||||
for (i=0; i<n; i++) {
|
||||
H5Tenum_insert(native, name[i], ((int*)val)[i]);
|
||||
free(name[i]);
|
||||
}
|
||||
free(name);
|
||||
free(val);</pre>
|
||||
|
||||
<p>It is also possible to convert enumerated data to a new type
|
||||
that has a different order defined for the symbols. For
|
||||
instance, we can define a new type, <code>reverse</code> that
|
||||
defines the same five colors but in the reverse order.
|
||||
|
||||
<pre>
|
||||
short val;
|
||||
int i;
|
||||
char sym[8];
|
||||
short data[5] = {0, 1, 2, 3, 4};
|
||||
|
||||
hid_t reverse = H5Tenum_create(H5T_NATIVE_SHORT);
|
||||
H5Tenum_insert(reverse, "BLACK", (val=0,&val));
|
||||
H5Tenum_insert(reverse, "WHITE", (val=1,&val));
|
||||
H5Tenum_insert(reverse, "BLUE", (val=2,&val));
|
||||
H5Tenum_insert(reverse, "GREEN", (val=3,&val));
|
||||
H5Tenum_insert(reverse, "RED", (val=4,&val));
|
||||
|
||||
/* Print data */
|
||||
for (i=0; i<5; i++) {
|
||||
H5Tenum_nameof(hdf_en_colors, data+i, sym, sizeof sym);
|
||||
printf ("%d %s\n", data[i], sym);
|
||||
}
|
||||
|
||||
puts("Converting...");
|
||||
H5Tconvert(hdf_en_colors, reverse, 5, data, NULL);
|
||||
|
||||
/* Print data */
|
||||
for (i=0; i<5; i++) {
|
||||
H5Tenum_nameof(reverse, data+i, sym, sizeof sym);
|
||||
printf ("%d %s\n", data[i], sym);
|
||||
}</pre>
|
||||
|
||||
<p>
|
||||
Output:
|
||||
<pre>
|
||||
0 RED
|
||||
1 GREEN
|
||||
2 BLUE
|
||||
3 WHITE
|
||||
4 BLACK
|
||||
Converting...
|
||||
4 RED
|
||||
3 GREEN
|
||||
2 BLUE
|
||||
1 WHITE
|
||||
0 BLACK</pre>
|
||||
|
||||
<h3>7.8. Equality</h2>
|
||||
|
||||
<p>The order that members are inserted into an enumeration type is
|
||||
unimportant; the important part is the associations between the
|
||||
symbol names and the values. Thus, two enumeration data types
|
||||
will be considered equal if and only if both types have the same
|
||||
symbol/value associations and both have equal underlying integer
|
||||
data types. Type equality is tested with the
|
||||
<code>H5Tequal()</code> function.
|
||||
|
||||
<h3>7.9. Interacting with C's <code>enum</code> Type</h2>
|
||||
|
||||
<p>Although HDF enumeration data types are similar to C
|
||||
<code>enum</code> data types, there are some important
|
||||
differences:
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border width="80%">
|
||||
<tr>
|
||||
<th>Difference</th>
|
||||
<th>Motivation/Implications</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top>Symbols are unquoted in C but quoted in
|
||||
HDF.</td>
|
||||
<td valign=top>This allows the application to manipulate
|
||||
symbol names in ways that are not possible with C.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top>The C compiler automatically replaces all
|
||||
symbols with their integer values but HDF requires
|
||||
explicit calls to do the same.</td>
|
||||
<td valign=top>C resolves symbols at compile time while
|
||||
HDF resolves symbols at run time.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top>The mapping from symbols to integers is
|
||||
<em>N</em>:1 in C but 1:1 in HDF.</td>
|
||||
<td valign=top>HDF can translate from value to name
|
||||
uniquely and large <code>switch</code> statements are
|
||||
not necessary to print values in human-readable
|
||||
format.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top>A symbol must appear in only one C
|
||||
<code>enum</code> type but may appear in multiple HDF
|
||||
enumeration types.</td>
|
||||
<td valign=top>The translation from symbol to value in HDF
|
||||
requires the data type to be specified while in C the
|
||||
data type is not necessary because it can be inferred
|
||||
from the symbol.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top>The underlying integer value is always a
|
||||
native integer in C but can be a foreign integer type in
|
||||
HDF.</td>
|
||||
<td valign=top>This allows HDF to describe data that might
|
||||
reside on a foreign architecture, such as data stored in
|
||||
a file.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top>The sign and size of the underlying integer
|
||||
data type is chosen automatically by the C compiler but
|
||||
must be fully specified with HDF.</td>
|
||||
<td valign=top>Since HDF doesn't require finalization of a
|
||||
data type, complete specification of the type must be
|
||||
supplied before the type is used. Requiring that
|
||||
information at the time of type creation was a design
|
||||
decision to simplify the library.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>The examples below use the following C data types:
|
||||
|
||||
<p>
|
||||
<table width="90%" bgcolor="white">
|
||||
<tr>
|
||||
<td>
|
||||
<code><pre>
|
||||
/* English color names */
|
||||
typedef enum {
|
||||
RED,
|
||||
GREEN,
|
||||
BLUE,
|
||||
WHITE,
|
||||
BLACK
|
||||
} c_en_colors;
|
||||
|
||||
/* Spanish color names, reverse order */
|
||||
typedef enum {
|
||||
NEGRO
|
||||
BLANCO,
|
||||
AZUL,
|
||||
VERDE,
|
||||
ROJO,
|
||||
} c_sp_colors;
|
||||
|
||||
/* No enum definition for French names */
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h4>Creating HDF Types from C Types</h3>
|
||||
|
||||
<p>An HDF enumeration data type can be created from a C
|
||||
<code>enum</code> type simply by passing pointers to the C
|
||||
<code>enum</code> values to <code>H5Tenum_insert()</code>. For
|
||||
instance, to create HDF types for the <code>c_en_colors</code>
|
||||
type shown above:
|
||||
|
||||
<p>
|
||||
<table width="90%" bgcolor="white">
|
||||
<tr>
|
||||
<td>
|
||||
<code><pre>
|
||||
|
||||
c_en_colors val;
|
||||
hid_t hdf_en_colors = H5Tcreate(H5T_ENUM, sizeof(c_en_colors));
|
||||
H5Tenum_insert(hdf_en_colors, "RED", (val=RED, &val));
|
||||
H5Tenum_insert(hdf_en_colors, "GREEN", (val=GREEN,&val));
|
||||
H5Tenum_insert(hdf_en_colors, "BLUE", (val=BLUE, &val));
|
||||
H5Tenum_insert(hdf_en_colors, "WHITE", (val=WHITE,&val));
|
||||
H5Tenum_insert(hdf_en_colors, "BLACK", (val=BLACK,&val));</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h4>Name Changes between Applications</h3>
|
||||
|
||||
<p>Occassionally two applicatons wish to exchange data but they
|
||||
use different names for the constants they exchange. For
|
||||
instance, an English and a Spanish program may want to
|
||||
communicate color names although they use different symbols in
|
||||
the C <code>enum</code> definitions. The communication is still
|
||||
possible although the applications must agree on common terms
|
||||
for the colors. The following example shows the Spanish code to
|
||||
read the values assuming that the applications have agreed that
|
||||
the color information will be exchanged using Enlish color
|
||||
names:
|
||||
|
||||
<p>
|
||||
<table width="90%" bgcolor="white">
|
||||
<tr>
|
||||
<td>
|
||||
<code><pre>
|
||||
|
||||
c_sp_colors val, data[1000];
|
||||
hid_t hdf_sp_colors = H5Tcreate(H5T_ENUM, sizeof(c_sp_colors));
|
||||
H5Tenum_insert(hdf_sp_colors, "RED", (val=ROJO, &val));
|
||||
H5Tenum_insert(hdf_sp_colors, "GREEN", (val=VERDE, &val));
|
||||
H5Tenum_insert(hdf_sp_colors, "BLUE", (val=AZUL, &val));
|
||||
H5Tenum_insert(hdf_sp_colors, "WHITE", (val=BLANCO, &val));
|
||||
H5Tenum_insert(hdf_sp_colors, "BLACK", (val=NEGRO, &val));
|
||||
|
||||
H5Dread(dataset, hdf_sp_colors, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<h4>Symbol Ordering across Applications</h3>
|
||||
|
||||
<p>Since symbol ordering is completely determined by the integer values
|
||||
assigned to each symbol in the <code>enum</code> definition,
|
||||
ordering of <code>enum</code> symbols cannot be preserved across
|
||||
files like with HDF enumeration types. HDF can convert from one
|
||||
application's integer values to the other's so a symbol in one
|
||||
application's C <code>enum</code> gets mapped to the same symbol
|
||||
in the other application's C <code>enum</code>, but the relative
|
||||
order of the symbols is not preserved.
|
||||
|
||||
<p>For example, an application may be defined to use the
|
||||
definition of <code>c_en_colors</code> defined above where
|
||||
<code>WHITE</code> is less than <code>BLACK</code>, but some
|
||||
other application might define the colors in some other
|
||||
order. If each application defines an HDF enumeration type based
|
||||
on that application's C <code>enum</code> type then HDF will
|
||||
modify the integer values as data is communicated from one
|
||||
application to the other so that a <code>RED</code> value
|
||||
in the first application is also a <code>RED</code> value in the
|
||||
other application.
|
||||
|
||||
<p>A case of this reordering of symbol names was also shown in the
|
||||
previous code snippet (as well as a change of language), where
|
||||
HDF changed the integer values so 0 (<code>RED</code>) in the
|
||||
input file became 4 (<code>ROJO</code>) in the <code>data</code>
|
||||
array. In the input file, <code>WHITE</code> was less than
|
||||
<code>BLACK</code>; in the application the opposite is true.
|
||||
|
||||
<p>In fact, the ability to change the order of symbols is often
|
||||
convenient when the enumeration type is used only to group
|
||||
related symbols that don't have any well defined order
|
||||
relationship.
|
||||
|
||||
<h4>Internationalization</h3>
|
||||
|
||||
<p>The HDF enumeration type conversion features can also be used
|
||||
to provide internationalization of debugging output. A program
|
||||
written with the <code>c_en_colors</code> data type could define
|
||||
a separate HDF data type for languages such as English, Spanish,
|
||||
and French and cast the enumerated value to one of these HDF
|
||||
types to print the result.
|
||||
|
||||
<p>
|
||||
<table width="90%" bgcolor="white">
|
||||
<tr>
|
||||
<td>
|
||||
<code><pre>
|
||||
|
||||
c_en_colors val, *data=...;
|
||||
|
||||
hid_t hdf_sp_colors = H5Tcreate(H5T_ENUM, sizeof val);
|
||||
H5Tenum_insert(hdf_sp_colors, "ROJO", (val=RED, &val));
|
||||
H5Tenum_insert(hdf_sp_colors, "VERDE", (val=GREEN, &val));
|
||||
H5Tenum_insert(hdf_sp_colors, "AZUL", (val=BLUE, &val));
|
||||
H5Tenum_insert(hdf_sp_colors, "BLANCO", (val=WHITE, &val));
|
||||
H5Tenum_insert(hdf_sp_colors, "NEGRO", (val=BLACK, &val));
|
||||
|
||||
hid_t hdf_fr_colors = H5Tcreate(H5T_ENUM, sizeof val);
|
||||
H5Tenum_insert(hdf_fr_colors, "OUGE", (val=RED, &val));
|
||||
H5Tenum_insert(hdf_fr_colors, "VERT", (val=GREEN, &val));
|
||||
H5Tenum_insert(hdf_fr_colors, "BLEU", (val=BLUE, &val));
|
||||
H5Tenum_insert(hdf_fr_colors, "BLANC", (val=WHITE, &val));
|
||||
H5Tenum_insert(hdf_fr_colors, "NOIR", (val=BLACK, &val));
|
||||
|
||||
void
|
||||
nameof(lang_t language, c_en_colors val, char *name, size_t size)
|
||||
{
|
||||
switch (language) {
|
||||
case ENGLISH:
|
||||
H5Tenum_nameof(hdf_en_colors, &val, name, size);
|
||||
break;
|
||||
case SPANISH:
|
||||
H5Tenum_nameof(hdf_sp_colors, &val, name, size);
|
||||
break;
|
||||
case FRENCH:
|
||||
H5Tenum_nameof(hdf_fr_colors, &val, name, size);
|
||||
break;
|
||||
}
|
||||
}</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>7.10. Goals That Have Been Met</h2>
|
||||
|
||||
<p>The main goal of enumeration types is to provide communication
|
||||
of enumerated data using symbolic equivalence. That is, a
|
||||
symbol written to a dataset by one application should be read as
|
||||
the same symbol by some other application.
|
||||
|
||||
<p>
|
||||
<table width="90%">
|
||||
<tr>
|
||||
<td valign=top><b>Architecture Independence</b></td>
|
||||
<td valign=top>Two applications shall be able to exchange
|
||||
enumerated data even when the underlying integer values
|
||||
have different storage formats. HDF accomplishes this for
|
||||
enumeration types by building them upon integer types.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top><b>Preservation of Order Relationship</b></td>
|
||||
<td valign=top>The relative order of symbols shall be
|
||||
preserved between two applications that use equivalent
|
||||
enumeration data types. Unlike numeric values that have
|
||||
an implicit ordering, enumerated data has an explicit
|
||||
order defined by the enumeration data type and HDF
|
||||
records this order in the file.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top><b>Order Independence</b></td>
|
||||
<td valign=top>An application shall be able to change the
|
||||
relative ordering of the symbols in an enumeration data
|
||||
type. This is accomplished by defining a new type with
|
||||
different integer values and converting data from one type
|
||||
to the other.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top><b>Subsets</b></td>
|
||||
<td valign=top>An application shall be able to read
|
||||
enumerated data from an archived dataset even after the
|
||||
application has defined additional members for the
|
||||
enumeration type. An application shall be able to write
|
||||
to a dataset when the dataset contains a superset of the
|
||||
members defined by the application. Similar rules apply
|
||||
for in-core conversions between enumerated data
|
||||
types.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top><b>Targetable</b></td>
|
||||
<td valign=top>An application shall be able to target a
|
||||
particular architecture or application when storing
|
||||
enumerated data. This is accomplished by allowing
|
||||
non-native underlying integer types and converting the
|
||||
native data to non-native data.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top><b>Efficient Data Transfer</b></td>
|
||||
<td valign=top>An application that defines a file dataset
|
||||
that corresponds to some native C enumerated data array
|
||||
shall be able to read and write to that dataset directly
|
||||
using only Posix read and write functions. HDF already
|
||||
optimizes this case for integers, so the same optimization
|
||||
will apply to enumerated data.
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top><b>Efficient Storage</b></td>
|
||||
<td valign=top>Enumerated data shall be stored in a manner
|
||||
which is space efficient. HDF stores the enumerated data
|
||||
as integers and allows the application to chose the size
|
||||
and format of those integers.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<p align=right><font size=-1><i>
|
||||
(Return to <a href="Datatypes.html#Datatypes_Enum">Data Types Interface (H5T)</a>.)
|
||||
</font></i>
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
Data Types
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
<!-- Created: Thu Dec 4 14:57:32 EST 1997 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: 30 April 1999
|
||||
<!-- hhmts end -->
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
544
doc/html/Debugging.html
Normal file
@@ -0,0 +1,544 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Debugging HDF5 Applications</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
Debugging
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>Debugging HDF5 Applications</h1>
|
||||
|
||||
<h2>Introduction</h2>
|
||||
|
||||
<p>The HDF5 library contains a number of debugging features to
|
||||
make programmers' lives easier including the ability to print
|
||||
detailed error messages, check invariant conditions, display
|
||||
timings and other statistics, and trace API function calls and
|
||||
return values.
|
||||
|
||||
<dl>
|
||||
<dt><b>Error Messages</b>
|
||||
<dd>Error messages are normally displayed automatically on the
|
||||
standard error stream and include a stack trace of the library
|
||||
including file names, line numbers, and function names. The
|
||||
application has complete control over how error messages are
|
||||
displayed and can disable the display on a permanent or
|
||||
temporary basis. Refer to the documentation for the H5E error
|
||||
handling package.
|
||||
|
||||
<br><br>
|
||||
<dt><b>Invariant Conditions</b>
|
||||
<dd>Unless <code>NDEBUG</code> is defined during compiling, the
|
||||
library will include code to verify that invariant conditions
|
||||
have the expected values. When a problem is detected the
|
||||
library will display the file and line number within the
|
||||
library and the invariant condition that failed. A core dump
|
||||
may be generated for post mortem debugging. The code to
|
||||
perform these checks can be included on a per-package bases.
|
||||
|
||||
<br><br>
|
||||
<dt><b>Timings and Statistics</b>
|
||||
<dd>The library can be configured to accumulate certain
|
||||
statistics about things like cache performance, data type
|
||||
conversion, data space conversion, and data filters. The code
|
||||
is included on a per-package basis and enabled at runtime by
|
||||
an environment variable.
|
||||
|
||||
<br><br>
|
||||
<dt><b>API Tracing</b>
|
||||
<dd>All API calls made by an application can be displayed and
|
||||
include formal argument names and actual values and the
|
||||
function return value. This code is also conditionally
|
||||
included at compile time and enabled at runtime.
|
||||
</dl>
|
||||
|
||||
<p>The statistics and tracing can be displayed on any output
|
||||
stream (including streams opened by the shell) with output from
|
||||
different packages even going to different streams.
|
||||
|
||||
<h2>Error Messages</h2>
|
||||
|
||||
<p>By default any API function that fails will print an error
|
||||
stack to the standard error stream.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<p><code><pre>
|
||||
|
||||
HDF5-DIAG: Error detected in thread 0. Back trace follows.
|
||||
#000: H5F.c line 1245 in H5Fopen(): unable to open file
|
||||
major(04): File interface
|
||||
minor(10): Unable to open file
|
||||
#001: H5F.c line 846 in H5F_open(): file does not exist
|
||||
major(04): File interface
|
||||
minor(10): Unable to open file
|
||||
</code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>The error handling package (H5E) is described
|
||||
<a href="Errors.html">elsewhere</a>.
|
||||
|
||||
<h2>Invariant Conditions</h2>
|
||||
|
||||
<p>To include checks for invariant conditions the library should
|
||||
be configured with <code>--disable-production</code>, the
|
||||
default for versions before 1.2. The library designers have made
|
||||
every attempt to handle error conditions gracefully but an
|
||||
invariant condition assertion may fail in certain cases. The
|
||||
output from a failure usually looks something like this:
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<p><code><pre>
|
||||
|
||||
Assertion failed: H5.c:123: i<NELMTS(H5_debug_g)
|
||||
IOT Trap, core dumped.
|
||||
</code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>Timings and Statistics</h2>
|
||||
|
||||
<p>Code to accumulate statistics is included at compile time by
|
||||
using the <code>--enable-debug</code> configure switch. The
|
||||
switch can be followed by an equal sign and a comma-separated
|
||||
list of package names or else a default list is used.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="80%">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Default</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>a</td>
|
||||
<td align=center>No</td>
|
||||
<td>Attributes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>ac</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Meta data cache</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>b</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>B-Trees</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>d</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Datasets</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>e</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Error handling</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>f</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Files</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>g</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Groups</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>hg</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Global heap</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>hl</td>
|
||||
<td align=center>No</td>
|
||||
<td>Local heaps</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>i</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Interface abstraction</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>mf</td>
|
||||
<td align=center>No</td>
|
||||
<td>File memory management</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>mm</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Library memory managment</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>o</td>
|
||||
<td align=center>No</td>
|
||||
<td>Object headers and messages</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>p</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Property lists</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>s</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Data spaces</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>t</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Data types</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>v</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Vectors</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>z</td>
|
||||
<td align=center>Yes</td>
|
||||
<td>Raw data filters</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>In addition to including the code at compile time the
|
||||
application must enable each package at runtime. This is done
|
||||
by listing the package names in the <code>HDF5_DEBUG</code>
|
||||
environment variable. That variable may also contain file
|
||||
descriptor numbers (the default is `2') which control the output
|
||||
for all following packages up to the next file number. The
|
||||
word <code>all</code> refers to all packages. Any word my be
|
||||
preceded by a minus sign to turn debugging off for the package.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<caption align=top><b>Sample debug specifications</b></caption>
|
||||
<tr valign=top>
|
||||
<td><code>all</code></td>
|
||||
<td>This causes debugging output from all packages to be
|
||||
sent to the standard error stream.</td>
|
||||
</tr>
|
||||
<tr valign=top>
|
||||
<td><code>all -t -s</code></td>
|
||||
<td>Debugging output for all packages except data types
|
||||
and data spaces will appear on the standard error
|
||||
stream.</td>
|
||||
</tr>
|
||||
<tr valign=top>
|
||||
<td><code>-all ac 255 t,s</code></td>
|
||||
<td>This disables all debugging even if the default was to
|
||||
debug something, then output from the meta data cache is
|
||||
send to the standard error stream and output from data
|
||||
types and spaces is sent to file descriptor 255 which
|
||||
should be redirected by the shell.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>The components of the <code>HDF5_DEBUG</code> value may be
|
||||
separated by any non-lowercase letter.
|
||||
|
||||
<h2>API Tracing</h2>
|
||||
|
||||
<p>The HDF5 library can trace API calls by printing the
|
||||
function name, the argument names and their values, and the
|
||||
return value. Some people like to see lots of output during
|
||||
program execution instead of using a good symbolic debugger, and
|
||||
this feature is intended for their consumption. For example,
|
||||
the output from <code>h5ls foo</code> after turning on tracing,
|
||||
includes:
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<code><pre>
|
||||
|
||||
H5Tcopy(type=184549388) = 184549419 (type);
|
||||
H5Tcopy(type=184549392) = 184549424 (type);
|
||||
H5Tlock(type=184549424) = SUCCEED;
|
||||
H5Tcopy(type=184549393) = 184549425 (type);
|
||||
H5Tlock(type=184549425) = SUCCEED;
|
||||
H5Fopen(filename="foo", flags=0, access=H5P_DEFAULT) = FAIL;
|
||||
HDF5-DIAG: Error detected in thread 0. Back trace follows.
|
||||
#000: H5F.c line 1245 in H5Fopen(): unable to open file
|
||||
major(04): File interface
|
||||
minor(10): Unable to open file
|
||||
#001: H5F.c line 846 in H5F_open(): file does not exist
|
||||
major(04): File interface
|
||||
minor(10): Unable to open file
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>The code that performs the tracing must be included in the
|
||||
library by specifying the <code>--enable-trace</code>
|
||||
configuration switch (the default for versions before 1.2). Then
|
||||
the word <code>trace</code> must appear in the value of the
|
||||
<code>HDF5_DEBUG</code> variable. The output will appear on the
|
||||
last file descriptor before the word <code>trace</code> or two
|
||||
(standard error) by default.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<tr>
|
||||
<td>To display the trace on the standard error stream:
|
||||
<code><pre>
|
||||
$ env HDF5_DEBUG=trace a.out
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>To send the trace to a file:
|
||||
<code><pre>
|
||||
$ env HDF5_DEBUG="55 trace" a.out 55>trace-output
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h3>Performance</h3>
|
||||
|
||||
<p>If the library was not configured for tracing then there is no
|
||||
unnecessary overhead since all tracing code is excluded.
|
||||
However, if tracing is enabled but not used there is a small
|
||||
penalty. First, code size is larger because of extra
|
||||
statically-declared character strings used to store argument
|
||||
types and names and extra auto variable pointer in each
|
||||
function. Also, execution is slower because each function sets
|
||||
and tests a local variable and each API function calls the
|
||||
<code>H5_trace()</code> function.
|
||||
|
||||
<p>If tracing is enabled and turned on then the penalties from the
|
||||
previous paragraph apply plus the time required to format each
|
||||
line of tracing information. There is also an extra call to
|
||||
H5_trace() for each API function to print the return value.
|
||||
|
||||
<h3>Safety</h3>
|
||||
|
||||
<p>The tracing mechanism is invoked for each API function before
|
||||
arguments are checked for validity. If bad arguments are passed
|
||||
to an API function it could result in a segmentation fault.
|
||||
However, the tracing output is line-buffered so all previous
|
||||
output will appear.
|
||||
|
||||
<h3>Completeness</h3>
|
||||
|
||||
<p>There are two API functions that don't participate in
|
||||
tracing. They are <code>H5Eprint()</code> and
|
||||
<code>H5Eprint_cb()</code> because their participation would
|
||||
mess up output during automatic error reporting.
|
||||
|
||||
<p>On the other hand, a number of API functions are called during
|
||||
library initialization and they print tracing information.
|
||||
|
||||
<h3>Implementation</h3>
|
||||
|
||||
<p>For those interested in the implementation here is a
|
||||
description. Each API function should have a call to one of the
|
||||
<code>H5TRACE()</code> macros immediately after the
|
||||
<code>FUNC_ENTER()</code> macro. The first argument is the
|
||||
return type encoded as a string. The second argument is the
|
||||
types of all the function arguments encoded as a string. The
|
||||
remaining arguments are the function arguments. This macro was
|
||||
designed to be as terse and unobtrousive as possible.
|
||||
|
||||
<p>In order to keep the <code>H5TRACE()</code> calls synchronized
|
||||
with the source code we've written a perl script which gets
|
||||
called automatically just before Makefile dependencies are
|
||||
calculated for the file. However, this only works when one is
|
||||
using GNU make. To reinstrument the tracing explicitly, invoke
|
||||
the <code>trace</code> program from the hdf5 bin directory with
|
||||
the names of the source files that need to be updated. If any
|
||||
file needs to be modified then a backup is created by appending
|
||||
a tilde to the file name.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<caption align=top><b>Explicit Instrumentation</b></caption>
|
||||
<tr>
|
||||
<td>
|
||||
<code><pre>
|
||||
|
||||
$ ../bin/trace *.c
|
||||
H5E.c: in function `H5Ewalk_cb':
|
||||
H5E.c:336: warning: trace info was not inserted
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>Note: The warning message is the result of a comment of the
|
||||
form <code>/*NO TRACE*/</code> somewhere in the function
|
||||
body. Tracing information will not be updated or inserted if
|
||||
such a comment exists.
|
||||
|
||||
<p>Error messages have the same format as a compiler so that they
|
||||
can be parsed from program development environments like
|
||||
Emacs. Any function which generates an error will not be
|
||||
modified.
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
Debugging
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- Created: Wed Jun 17 12:29:12 EDT 1998 -->
|
||||
<!-- hhmts start -->
|
||||
<!--
|
||||
Last modified: Thu Aug 20 10:43:42 PDT 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
BIN
doc/html/EnumMap.gif
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
284
doc/html/Environment.html
Normal file
@@ -0,0 +1,284 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<html>
|
||||
<<<<<<< Environment.html
|
||||
<head>
|
||||
<title>HDF5 Library Environment Variables and Configuration Parameters</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
Environment
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>HDF5 Library Environment Variables and Configuration Parameters</h1>
|
||||
|
||||
<h2>1. Environment Variables</h2>
|
||||
|
||||
The HDF5 library uses UNIX environment variables to control
|
||||
or adjust certain library features at runtime. The variables and
|
||||
their defined effects are as follows:
|
||||
|
||||
<dir>
|
||||
<dl>
|
||||
<dt><tt>HDF5_DEBUG</tt>
|
||||
<dd>Defines a list of debugging switches documented in the
|
||||
<a href="Debugging.html">Debugging</a> section of the
|
||||
<cite>HDF5 User's Guide</cite>.
|
||||
|
||||
<dt><tt>HDF5_NOCLEANUP</tt>
|
||||
<dd>When set to a non-empty value, the programs in the test
|
||||
directory do not remove temporary HDF5 data files.
|
||||
The default is for each test to remove the files before exit.
|
||||
|
||||
<dt><tt>HDF5_MPI_OPT_TYPES</tt>
|
||||
(for parallel beta version only)
|
||||
<dd>When set to <code>1</code>, PHDF5 will use the MPI optimized
|
||||
code to perform parallel read/write accesses to datasets.
|
||||
Currently, this optimization fails when accessing extendable
|
||||
datasets. The default is not to use the optimized code.
|
||||
|
||||
<dt><tt>HDF5_MPI_1_METAWRITE</tt>
|
||||
(for parallel beta version only)
|
||||
<dd>When set to <code>1</code>, PHDF5 will write the metadata
|
||||
via process 0 of each opened parallel HDF5 file. This should
|
||||
improve I/O throughput. The default is not to use this
|
||||
optimization.
|
||||
|
||||
</dl>
|
||||
</dir>
|
||||
|
||||
<h2>2. Configuration Parameters</h2>
|
||||
|
||||
The HDF5 configuration script accepts a list of parameters to control
|
||||
configuration features when creating the Makefiles for the library.
|
||||
The command
|
||||
<br>
|
||||
<code> configure --help </code>
|
||||
<br>
|
||||
will display the current list of parameters and their effects.
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
Environment
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
=======
|
||||
<head>
|
||||
<title>HDF5 Library Environment Variables
|
||||
and Configuration Parameters</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h1>HDF5 Library Environment Variables and Configuration Parameters</h1>
|
||||
|
||||
<h2>1. Environment Variables</h2>
|
||||
|
||||
The HDF5 library uses UNIX environment variables to control
|
||||
or adjust certain library features at runtime. The variables and
|
||||
their defined effects are as follows:
|
||||
|
||||
<center>
|
||||
<table width="90%">
|
||||
<tr>
|
||||
<th>Variable</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>HDF5_DEBUG</code></td>
|
||||
<td>Defines a list of debugging switches documented in the
|
||||
<a href="Debugging.html">Debugging</a> section of the
|
||||
<cite>HDF5 User's Guide</cite>.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>HDF5_NOCLEANUP</code></td>
|
||||
<td>If set then programs in the test directories do not
|
||||
remove temporary files. The default is for each test to
|
||||
remove the files before exit if the test succeeds but to
|
||||
leave the files if the test fails.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>HDF5_PREFIX</code></td>
|
||||
<td>The value of this variable is prepended to all temporary
|
||||
file names created by the test programs and separated from
|
||||
the base name of the file by a slash. The default is no
|
||||
prefix.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><ode>HDF5_DRIVER</code></td>
|
||||
<td>This variable should hold the name of a low-level HDF5
|
||||
file driver such as <code>sec2</code>, <code>stdio</code>,
|
||||
<code>core</code>, <code>split</code>, or
|
||||
<code>family</code>. The family driver also takes an
|
||||
optional real-valued family member size in MB which
|
||||
defaults to 1. If this variable is not set or empty then
|
||||
the library-defined default file driver is used (which can
|
||||
be set at configuration time with the H5F_LOW_DFLT cpp
|
||||
constant, usually <code>sec2</code>).</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>HDF5_MPI_OPT_TYPES</code></td>
|
||||
<td>When set to <code>1</code>, parallel HDF5 will use the
|
||||
MPI-optimized code to perform parallel read/write accesses
|
||||
to datasets. Currently, this optimization fails when
|
||||
accessing extendable datasets. The default is not to use
|
||||
the optimized code.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>HDF5_MPI_1_METAWRITE</code></td>
|
||||
<td>When set to <code>1</code>, parallel HDF5 will write the
|
||||
metadata via process 0 of each opened parallel HDF5 file.
|
||||
This should improve I/O throughput. The default is not to
|
||||
use this optimization.</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<h2>2. Configuration Parameters</h2>
|
||||
|
||||
The HDF5 configuration script accepts a list of parameters to control
|
||||
configuration features when creating the Makefiles for the library.
|
||||
The command
|
||||
<br>
|
||||
<code> configure --help </code>
|
||||
<br>
|
||||
will display the current list of parameters and their effects.
|
||||
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 25 November 1998
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -4,7 +4,69 @@
|
||||
<title>The Error Handling Interface (H5E)</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
Error Handling
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>The Error Handling Interface (H5E)</h1>
|
||||
|
||||
<h2>1. Introduction</h2>
|
||||
@@ -269,13 +331,83 @@ H5Ewalk_cb(int n, H5E_error_t *err_desc, void *client_data)
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
Error Handling
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:hdf5dev@ncsa.uiuc.edu">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- Created: Fri Feb 27 23:42:52 EST 1998 -->
|
||||
<!-- hhmts start -->
|
||||
<!--
|
||||
Last modified: Wed Mar 4 10:06:17 EST 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -110,16 +110,16 @@
|
||||
Currently, the default low-level file driver is used for all
|
||||
family members (H5F_LOW_DFLT, usually set to be Section 2 I/O or
|
||||
Section 3 stdio), but we'll probably eventually want to pass
|
||||
that as a parameter of the file access template, which hasn't
|
||||
been implemented yet. When creating a family, a default family
|
||||
member size is used (defined at the top H5Ffamily.c, currently
|
||||
64MB) but that also should be settable in the file access
|
||||
template. When opening an existing family, the size of the first
|
||||
member is used to determine the member size (flushing/closing a
|
||||
family ensures that the first member is the correct size) but
|
||||
the other family members don't have to be that large (the local
|
||||
address space, however, is logically the same size for all
|
||||
members).
|
||||
that as a parameter of the file access property list, which
|
||||
hasn't been implemented yet. When creating a family, a default
|
||||
family member size is used (defined at the top H5Ffamily.c,
|
||||
currently 64MB) but that also should be settable in the file
|
||||
access property list. When opening an existing family, the size
|
||||
of the first member is used to determine the member size
|
||||
(flushing/closing a family ensures that the first member is the
|
||||
correct size) but the other family members don't have to be that
|
||||
large (the local address space, however, is logically the same
|
||||
size for all members).
|
||||
|
||||
<p>I haven't implemented a split meta/raw family yet but am rather
|
||||
curious to see how it would perform. I was planning to use the
|
||||
@@ -130,7 +130,7 @@
|
||||
then we'll chose the split family and use the default low level
|
||||
driver for each of the two family members. Eventually we'll
|
||||
want to pass these kinds of things through the file access
|
||||
template instead of relying on naming convention.
|
||||
property list instead of relying on naming convention.
|
||||
|
||||
<h3>External Raw Data</h3>
|
||||
|
||||
@@ -198,12 +198,13 @@ struct H5F_mount_t {
|
||||
</pre></code>
|
||||
|
||||
<p>The <code>H5Fmount</code> function takes the ID of an open
|
||||
file, the name of a to-be-mounted file, the name of the mount
|
||||
point, and a file access template (like <code>H5Fopen</code>).
|
||||
file or group, the name of a to-be-mounted file, the name of the mount
|
||||
point, and a file access property list (like <code>H5Fopen</code>).
|
||||
It opens the new file and adds a record to the parent's mount
|
||||
table. The <code>H5Funmount</code> function takes the parent
|
||||
file ID and the name of the mount point and closes the file
|
||||
that's mounted at that point. The <code>H5Fclose</code>
|
||||
file or group ID and the name of the mount point and disassociates
|
||||
the mounted file from the mount point. It does not close the
|
||||
mounted file. The <code>H5Fclose</code>
|
||||
function closes/unmounts files recursively.
|
||||
|
||||
<p>The <code>H5G_iname</code> function which translates a name to
|
||||
@@ -272,7 +273,7 @@ struct H5F_mount_t {
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
<!-- Created: Sat Nov 8 18:08:52 EST 1997 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Wed Nov 12 15:01:14 EST 1997
|
||||
Last modified: Tue Sep 8 14:43:32 EDT 1998
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -4,8 +4,68 @@
|
||||
<title>HDF5 Files</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Files</h1>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
Files
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
<h1>The File Interface (H5F)</h1>
|
||||
|
||||
<h2>1. Introduction</h2>
|
||||
|
||||
@@ -61,7 +121,7 @@
|
||||
set. The <em>access_properties</em> is a file access property
|
||||
list ID or <code>H5P_DEFAULT</code> for the default I/O access
|
||||
parameters. Creating and changing the parameters for access
|
||||
templates is documented further below. Files which are opened
|
||||
property lists is documented further below. Files which are opened
|
||||
more than once return a unique identifier for each
|
||||
<code>H5Fopen()</code> call and can be accessed through all
|
||||
file IDs. The return value is an ID for the open file and it
|
||||
@@ -74,6 +134,15 @@
|
||||
opened by <code>H5Fcreate()</code> or <code>H5Fopen()</code>. After
|
||||
closing a file the <em>file_id</em> should not be used again. This
|
||||
function returns zero for success or a negative value for failure.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Fflush (hid_t <em>object_id</em>,
|
||||
H5F_scope_t <em>scope</em>)</code>
|
||||
<dd>This function will cause all buffers associated with a file
|
||||
to be immediately flushed to the file. The <em>object_id</em>
|
||||
can be any object which is associated with a file, including
|
||||
the file itself. <em>scope</em> specifies whether the flushing
|
||||
action is to be global or local.
|
||||
</dl>
|
||||
|
||||
<h2>4. File Property Lists</h2>
|
||||
@@ -193,40 +262,40 @@
|
||||
an address which is a multiple of some number.
|
||||
</dl> </ul>
|
||||
|
||||
<h2>5. Examples of using file templates</h2>
|
||||
<h2>5. Examples of using file property lists</h2>
|
||||
|
||||
<h3>5.1. Example of using file creation templates</h3>
|
||||
<h3>5.1. Example of using file creation property lists</h3>
|
||||
|
||||
<p>This following example shows how to create a file with 64-bit object
|
||||
offsets and lengths:<br>
|
||||
<pre>
|
||||
hid_t create_template;
|
||||
hid_t create_plist;
|
||||
hid_t file_id;
|
||||
|
||||
create_template = H5Pcreate(H5P_FILE_CREATE);
|
||||
H5Pset_sizes(create_template, 8, 8);
|
||||
create_plist = H5Pcreate(H5P_FILE_CREATE);
|
||||
H5Pset_sizes(create_plist, 8, 8);
|
||||
|
||||
file_id = H5Fcreate("test.h5", H5F_ACC_TRUNC,
|
||||
create_template, H5P_DEFAULT);
|
||||
create_plist, H5P_DEFAULT);
|
||||
.
|
||||
.
|
||||
.
|
||||
H5Fclose(file_id);
|
||||
</pre>
|
||||
|
||||
<h3>5.2. Example of using file creation templates</h3>
|
||||
<h3>5.2. Example of using file creation plist</h3>
|
||||
|
||||
<p>This following example shows how to open an existing file for
|
||||
independent datasets access by MPI parallel I/O:<br>
|
||||
<pre>
|
||||
hid_t access_template;
|
||||
hid_t access_plist;
|
||||
hid_t file_id;
|
||||
|
||||
access_template = H5Pcreate(H5P_FILE_ACCESS);
|
||||
H5Pset_mpi(access_template, MPI_COMM_WORLD, MPI_INFO_NULL);
|
||||
access_plist = H5Pcreate(H5P_FILE_ACCESS);
|
||||
H5Pset_mpi(access_plist, MPI_COMM_WORLD, MPI_INFO_NULL);
|
||||
|
||||
/* H5Fopen must be called collectively */
|
||||
file_id = H5Fopen("test.h5", H5F_ACC_RDWR, access_template);
|
||||
file_id = H5Fopen("test.h5", H5F_ACC_RDWR, access_plist);
|
||||
.
|
||||
.
|
||||
.
|
||||
@@ -245,7 +314,7 @@
|
||||
referred to as an "HDF5 file" regardless of how the space is organized
|
||||
at the storage level.
|
||||
|
||||
<h3>6.1 Unbuffered Permanent Files</h3>
|
||||
<h3>6.1. Unbuffered Permanent Files</h3>
|
||||
|
||||
<p>The <em>sec2</em> driver uses functions from section 2 of the
|
||||
Posix manual to access files stored on a local file system. These are
|
||||
@@ -278,7 +347,7 @@
|
||||
function to match those added to <code>H5Pset_sec2()</code>.
|
||||
</dl>
|
||||
|
||||
<h3>6.2 Buffered Permanent Files</h3>
|
||||
<h3>6.2. Buffered Permanent Files</h3>
|
||||
|
||||
<p>The <em>stdio</em> driver uses the functions declared in the
|
||||
<code>stdio.h</code> header file to access permanent files in a local
|
||||
@@ -310,7 +379,7 @@
|
||||
function to match those added to <code>H5Pset_stdio()</code>.
|
||||
</dl>
|
||||
|
||||
<h3>6.3 Buffered Temporary Files</h3>
|
||||
<h3>6.3. Buffered Temporary Files</h3>
|
||||
|
||||
<p>The <em>core</em> driver uses <code>malloc()</code> and
|
||||
<code>free()</code> to allocated space for a file in the heap. Reading
|
||||
@@ -346,7 +415,7 @@
|
||||
function to match those added to <code>H5Pset_core()</code>.
|
||||
</dl>
|
||||
|
||||
<h3>6.4 Parallel Files</h3>
|
||||
<h3>6.4. Parallel Files</h3>
|
||||
|
||||
<p>This driver uses MPI I/O to provide parallel access to a file.
|
||||
|
||||
@@ -376,7 +445,9 @@
|
||||
added to <code>H5Pset_mpi()</code>.
|
||||
</dl>
|
||||
|
||||
<h3>6.4 File Families</h3>
|
||||
<a name="Files_Families">
|
||||
<h3>6.5. File Families</h3>
|
||||
</a>
|
||||
|
||||
<p>A single HDF5 address space may be split into multiple files which,
|
||||
together, form a file family. Each member of the family must be the
|
||||
@@ -458,7 +529,7 @@
|
||||
match those added to <code>H5Pset_family()</code>.
|
||||
</dl>
|
||||
|
||||
<h3>6.5 Split Meta/Raw Files</h3>
|
||||
<h3>6.6. Split Meta/Raw Files</h3>
|
||||
|
||||
<p>On occasion, it might be useful to separate meta data from raw
|
||||
data. The <em>split</em> driver does this by creating two files: one for
|
||||
@@ -518,12 +589,83 @@
|
||||
</dl>
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
Files
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:koziol@ncsa.uiuc.edu">Quincey Koziol</a></address>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- Created: Tue Jan 27 09:11:27 EST 1998 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Tue Jun 9 15:03:44 EDT 1998
|
||||
<!--
|
||||
Last modified: Tue Sep 8 14:43:31 EDT 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
601
doc/html/Filters.html
Normal file
@@ -0,0 +1,601 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Filters</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
Filters
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>Filters in HDF5</h1>
|
||||
|
||||
<b>Note: Transient pipelines described in this document have not
|
||||
been implemented.</b>
|
||||
|
||||
<h2>1. Introduction</h2>
|
||||
|
||||
<p>HDF5 allows chunked data to pass through user-defined filters
|
||||
on the way to or from disk. The filters operate on chunks of an
|
||||
<code>H5D_CHUNKED</code> dataset can be arranged in a pipeline
|
||||
so output of one filter becomes the input of the next filter.
|
||||
|
||||
<p>Each filter has a two-byte identification number (type
|
||||
<code>H5Z_filter_t</code>) allocated by NCSA and can also be
|
||||
passed application-defined integer resources to control its
|
||||
behavior. Each filter also has an optional ASCII comment
|
||||
string.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table align=center width="80%">
|
||||
<caption alignment=top>
|
||||
<b>Values for <code>H5Z_filter_t</code></b>
|
||||
</caption>
|
||||
|
||||
<tr>
|
||||
<th width="30%">Value</th>
|
||||
<th width="70%">Description</th>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>0-255</code></td>
|
||||
<td>These values are reserved for filters predefined and
|
||||
registered by the HDF5 library and of use to the general
|
||||
public. They are described in a separate section
|
||||
below.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>256-511</code></td>
|
||||
<td>Filter numbers in this range are used for testing only
|
||||
and can be used temporarily by any organization. No
|
||||
attempt is made to resolve numbering conflicts since all
|
||||
definitions are by nature temporary.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>512-65535</code></td>
|
||||
<td>Reserved for future assignment. Please contact the
|
||||
<a href="mailto:hdf5dev@ncsa.uiuc.edu">HDF5 development
|
||||
team</a> to reserve a value or range of values for
|
||||
use by your filters.</td>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>2. Defining and Querying the Filter Pipeline</h2>
|
||||
|
||||
<p>Two types of filters can be applied to raw data I/O: permanent
|
||||
filters and transient filters. The permanent filter pipeline is
|
||||
defned when the dataset is created while the transient pipeline
|
||||
is defined for each I/O operation. During an
|
||||
<code>H5Dwrite()</code> the transient filters are applied first
|
||||
in the order defined and then the permanent filters are applied
|
||||
in the order defined. For an <code>H5Dread()</code> the
|
||||
opposite order is used: permanent filters in reverse order, then
|
||||
transient filters in reverse order. An <code>H5Dread()</code>
|
||||
must result in the same amount of data for a chunk as the
|
||||
original <code>H5Dwrite()</code>.
|
||||
|
||||
<p>The permanent filter pipeline is defined by calling
|
||||
<code>H5Pset_filter()</code> for a dataset creation property
|
||||
list while the transient filter pipeline is defined by calling
|
||||
that function for a dataset transfer property list.
|
||||
|
||||
<dl>
|
||||
<dt><code>herr_t H5Pset_filter (hid_t <em>plist</em>,
|
||||
H5Z_filter_t <em>filter</em>, unsigned int <em>flags</em>,
|
||||
size_t <em>cd_nelmts</em>, const unsigned int
|
||||
<em>cd_values</em>[])</code>
|
||||
<dd>This function adds the specified <em>filter</em> and
|
||||
corresponding properties to the end of the transient or
|
||||
permanent output filter pipeline (depending on whether
|
||||
<em>plist</em> is a dataset creation or dataset transfer
|
||||
property list). The <em>flags</em> argument specifies certain
|
||||
general properties of the filter and is documented below. The
|
||||
<em>cd_values</em> is an array of <em>cd_nelmts</em> integers
|
||||
which are auxiliary data for the filter. The integer values
|
||||
will be stored in the dataset object header as part of the
|
||||
filter information.
|
||||
|
||||
<br><br>
|
||||
<dt><code>int H5Pget_nfilters (hid_t <em>plist</em>)</code>
|
||||
<dd>This function returns the number of filters defined in the
|
||||
permanent or transient filter pipeline depending on whether
|
||||
<em>plist</em> is a dataset creation or dataset transfer
|
||||
property list. In each pipeline the filters are numbered from
|
||||
0 through <em>N</em>-1 where <em>N</em> is the value returned
|
||||
by this function. During output to the file the filters of a
|
||||
pipeline are applied in increasing order (the inverse is true
|
||||
for input). Zero is returned if there are no filters in the
|
||||
pipeline and a negative value is returned for errors.
|
||||
|
||||
<br><br>
|
||||
<dt><code>H5Z_filter_t H5Pget_filter (hid_t <em>plist</em>,
|
||||
int <em>filter_number</em>, unsigned int *<em>flags</em>,
|
||||
size_t *<em>cd_nelmts</em>, unsigned int
|
||||
*<em>cd_values</em>, size_t namelen, char name[])</code>
|
||||
<dd>This is the query counterpart of
|
||||
<code>H5Pset_filter()</code> and returns information about a
|
||||
particular filter number in a permanent or transient pipeline
|
||||
depending on whether <em>plist</em> is a dataset creation or
|
||||
dataset transfer property list. On input, <em>cd_nelmts</em>
|
||||
indicates the number of entries in the <em>cd_values</em>
|
||||
array allocated by the caller while on exit it contains the
|
||||
number of values defined by the filter. The
|
||||
<em>filter_number</em> should be a value between zero and
|
||||
<em>N</em>-1 as described for <code>H5Pget_nfilters()</code>
|
||||
and the function will return failure (a negative value) if the
|
||||
filter number is out of range. If <em>name</em> is a pointer
|
||||
to an array of at least <em>namelen</em> bytes then the filter
|
||||
name will be copied into that array. The name will be null
|
||||
terminated if the <em>namelen</em> is large enough. The
|
||||
filter name returned will be the name appearing in the file or
|
||||
else the name registered for the filter or else an empty string.
|
||||
</dl>
|
||||
|
||||
<p>The flags argument to the functions above is a bit vector of
|
||||
the following fields:
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table align=center width="80%">
|
||||
<caption align=top>
|
||||
<b>Values for the <em>flags</em> argument</b>
|
||||
</caption>
|
||||
|
||||
<tr>
|
||||
<th width="30%">Value</th>
|
||||
<th width="70%">Description</th>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td><code>H5Z_FLAG_OPTIONAL</code></td>
|
||||
<td>If this bit is set then the filter is optional. If
|
||||
the filter fails (see below) during an
|
||||
<code>H5Dwrite()</code> operation then the filter is
|
||||
just excluded from the pipeline for the chunk for which
|
||||
it failed; the filter will not participate in the
|
||||
pipeline during an <code>H5Dread()</code> of the chunk.
|
||||
This is commonly used for compression filters: if the
|
||||
compression result would be larger than the input then
|
||||
the compression filter returns failure and the
|
||||
uncompressed data is stored in the file. If this bit is
|
||||
clear and a filter fails then the
|
||||
<code>H5Dwrite()</code> or <code>H5Dread()</code> also
|
||||
fails.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>3. Defining Filters</h2>
|
||||
|
||||
<p>Each filter is bidirectional, handling both input and output to
|
||||
the file, and a flag is passed to the filter to indicate the
|
||||
direction. In either case the filter reads a chunk of data from
|
||||
a buffer, usually performs some sort of transformation on the
|
||||
data, places the result in the same or new buffer, and returns
|
||||
the buffer pointer and size to the caller. If something goes
|
||||
wrong the filter should return zero to indicate a failure.
|
||||
|
||||
<p>During output, a filter that fails or isn't defined and is
|
||||
marked as optional is silently excluded from the pipeline and
|
||||
will not be used when reading that chunk of data. A required
|
||||
filter that fails or isn't defined causes the entire output
|
||||
operation to fail. During input, any filter that has not been
|
||||
excluded from the pipeline during output and fails or is not
|
||||
defined will cause the entire input operation to fail.
|
||||
|
||||
<p>Filters are defined in two phases. The first phase is to
|
||||
define a function to act as the filter and link the function
|
||||
into the application. The second phase is to register the
|
||||
function, associating the function with an
|
||||
<code>H5Z_filter_t</code> identification number and a comment.
|
||||
|
||||
<dl>
|
||||
<dt><code>typedef size_t (*H5Z_func_t)(unsigned int
|
||||
<em>flags</em>, size_t <em>cd_nelmts</em>, const unsigned int
|
||||
<em>cd_values</em>[], size_t <em>nbytes</em>, size_t
|
||||
*<em>buf_size</em>, void **<em>buf</em>)</code>
|
||||
<dd>The <em>flags</em>, <em>cd_nelmts</em>, and
|
||||
<em>cd_values</em> are the same as for the
|
||||
<code>H5Pset_filter()</code> function with the additional flag
|
||||
<code>H5Z_FLAG_REVERSE</code> which is set when the filter is
|
||||
called as part of the input pipeline. The input buffer is
|
||||
pointed to by <em>*buf</em> and has a total size of
|
||||
<em>*buf_size</em> bytes but only <em>nbytes</em> are valid
|
||||
data. The filter should perform the transformation in place if
|
||||
possible and return the number of valid bytes or zero for
|
||||
failure. If the transformation cannot be done in place then
|
||||
the filter should allocate a new buffer with
|
||||
<code>malloc()</code> and assign it to <em>*buf</em>,
|
||||
assigning the allocated size of that buffer to
|
||||
<em>*buf_size</em>. The old buffer should be freed
|
||||
by calling <code>free()</code>.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Zregister (H5Z_filter_t <em>filter_id</em>,
|
||||
const char *<em>comment</em>, H5Z_func_t
|
||||
<em>filter</em>)</code>
|
||||
<dd>The <em>filter</em> function is associated with a filter
|
||||
number and a short ASCII comment which will be stored in the
|
||||
hdf5 file if the filter is used as part of a permanent
|
||||
pipeline during dataset creation.
|
||||
</dl>
|
||||
|
||||
|
||||
<h2>4. Predefined Filters</h2>
|
||||
|
||||
<p>If <code>zlib</code> version 1.1.2 or later was found
|
||||
during configuration then the library will define a filter whose
|
||||
<code>H5Z_filter_t</code> number is
|
||||
<code>H5Z_FILTER_DEFLATE</code>. Since this compression method
|
||||
has the potential for generating compressed data which is larger
|
||||
than the original, the <code>H5Z_FLAG_OPTIONAL</code> flag
|
||||
should be turned on so such cases can be handled gracefully by
|
||||
storing the original data instead of the compressed data. The
|
||||
<em>cd_nvalues</em> should be one with <em>cd_value[0]</em>
|
||||
being a compression agression level between zero and nine,
|
||||
inclusive (zero is the fastest compression while nine results in
|
||||
the best compression ratio).
|
||||
|
||||
<p>A convenience function for adding the
|
||||
<code>H5Z_FILTER_DEFLATE</code> filter to a pipeline is:
|
||||
|
||||
<dl>
|
||||
<dt><code>herr_t H5Pset_deflate (hid_t <em>plist</em>, unsigned
|
||||
<em>aggression</em>)</code>
|
||||
<dd>The deflate compression method is added to the end of the
|
||||
permanent or transient filter pipeline depending on whether
|
||||
<em>plist</em> is a dataset creation or dataset transfer
|
||||
property list. The <em>aggression</em> is a number between
|
||||
zero and nine (inclusive) to indicate the tradeoff between
|
||||
speed and compression ratio (zero is fastest, nine is best
|
||||
ratio).
|
||||
</dl>
|
||||
|
||||
<p>Even if the <code>zlib</code> isn't detected during
|
||||
configuration the application can define
|
||||
<code>H5Z_FILTER_DEFLATE</code> as a permanent filter. If the
|
||||
filter is marked as optional (as with
|
||||
<code>H5Pset_deflate()</code>) then it will always fail and be
|
||||
automatically removed from the pipeline. Applications that read
|
||||
data will fail only if the data is actually compressed; they
|
||||
won't fail if <code>H5Z_FILTER_DEFLATE</code> was part of the
|
||||
permanent output pipeline but was automatically excluded because
|
||||
it didn't exist when the data was written.
|
||||
|
||||
<h2>5. Example</h2>
|
||||
|
||||
<p>This example shows how to define and register a simple filter
|
||||
that adds a checksum capability to the data stream.
|
||||
|
||||
<p>The function that acts as the filter always returns zero
|
||||
(failure) if the <code>md5()</code> function was not detected at
|
||||
configuration time (left as an excercise for the reader).
|
||||
Otherwise the function is broken down to an input and output
|
||||
half. The output half calculates a checksum, increases the size
|
||||
of the output buffer if necessary, and appends the checksum to
|
||||
the end of the buffer. The input half calculates the checksum
|
||||
on the first part of the buffer and compares it to the checksum
|
||||
already stored at the end of the buffer. If the two differ then
|
||||
zero (failure) is returned, otherwise the buffer size is reduced
|
||||
to exclude the checksum.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<p><code><pre>
|
||||
|
||||
size_t
|
||||
md5_filter(unsigned int flags, size_t cd_nelmts,
|
||||
const unsigned int cd_values[], size_t nbytes,
|
||||
size_t *buf_size, void **buf)
|
||||
{
|
||||
#ifdef HAVE_MD5
|
||||
unsigned char cksum[16];
|
||||
|
||||
if (flags & H5Z_REVERSE) {
|
||||
/* Input */
|
||||
assert(nbytes>=16);
|
||||
md5(nbytes-16, *buf, cksum);
|
||||
|
||||
/* Compare */
|
||||
if (memcmp(cksum, (char*)(*buf)+nbytes-16, 16)) {
|
||||
return 0; /*fail*/
|
||||
}
|
||||
|
||||
/* Strip off checksum */
|
||||
return nbytes-16;
|
||||
|
||||
} else {
|
||||
/* Output */
|
||||
md5(nbytes, *buf, cksum);
|
||||
|
||||
/* Increase buffer size if necessary */
|
||||
if (nbytes+16>*buf_size) {
|
||||
*buf_size = nbytes + 16;
|
||||
*buf = realloc(*buf, *buf_size);
|
||||
}
|
||||
|
||||
/* Append checksum */
|
||||
memcpy((char*)(*buf)+nbytes, cksum, 16);
|
||||
return nbytes+16;
|
||||
}
|
||||
#else
|
||||
return 0; /*fail*/
|
||||
#endif
|
||||
}
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>Once the filter function is defined it must be registered so
|
||||
the HDF5 library knows about it. Since we're testing this
|
||||
filter we choose one of the <code>H5Z_filter_t</code> numbers
|
||||
from the reserved range. We'll randomly choose 305.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<p><code><pre>
|
||||
|
||||
#define FILTER_MD5 305
|
||||
herr_t status = H5Zregister(FILTER_MD5, "md5 checksum", md5_filter);
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>Now we can use the filter in a pipeline. We could have added
|
||||
the filter to the pipeline before defining or registering the
|
||||
filter as long as the filter was defined and registered by time
|
||||
we tried to use it (if the filter is marked as optional then we
|
||||
could have used it without defining it and the library would
|
||||
have automatically removed it from the pipeline for each chunk
|
||||
written before the filter was defined and registered).
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<p><code><pre>
|
||||
|
||||
hid_t dcpl = H5Pcreate(H5P_DATASET_CREATE);
|
||||
hsize_t chunk_size[3] = {10,10,10};
|
||||
H5Pset_chunk(dcpl, 3, chunk_size);
|
||||
H5Pset_filter(dcpl, FILTER_MD5, 0, 0, NULL);
|
||||
hid_t dset = H5Dcreate(file, "dset", H5T_NATIVE_DOUBLE, space, dcpl);
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<h2>6. Filter Diagnostics</h2>
|
||||
|
||||
<p>If the library is compiled with debugging turned on for the H5Z
|
||||
layer (usually as a result of <code>configure
|
||||
--enable-debug=z</code>) then filter statistics are printed when
|
||||
the application exits normally or the library is closed. The
|
||||
statistics are written to the standard error stream and include
|
||||
two lines for each filter that was used: one for input and one
|
||||
for output. The following fields are displayed:
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table align=center width="80%">
|
||||
<tr>
|
||||
<th width="30%">Field Name</th>
|
||||
<th width="70%">Description</th>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Method</td>
|
||||
<td>This is the name of the method as defined with
|
||||
<code>H5Zregister()</code> with the charaters
|
||||
"< or ">" prepended to indicate
|
||||
input or output.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Total</td>
|
||||
<td>The total number of bytes processed by the filter
|
||||
including errors. This is the maximum of the
|
||||
<em>nbytes</em> argument or the return value.
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Errors</td>
|
||||
<td>This field shows the number of bytes of the Total
|
||||
column which can be attributed to errors.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>User, System, Elapsed</td>
|
||||
<td>These are the amount of user time, system time, and
|
||||
elapsed time in seconds spent in the filter function.
|
||||
Elapsed time is sensitive to system load. These times
|
||||
may be zero on operating systems that don't support the
|
||||
required operations.</td>
|
||||
</tr>
|
||||
|
||||
<tr valign=top>
|
||||
<td>Bandwidth</td>
|
||||
<td>This is the filter bandwidth which is the total
|
||||
number of bytes processed divided by elapsed time.
|
||||
Since elapsed time is subject to system load the
|
||||
bandwidth numbers cannot always be trusted.
|
||||
Furthermore, the bandwidth includes bytes attributed to
|
||||
errors which may significanly taint the value if the
|
||||
function is able to detect errors without much
|
||||
expense.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table border align=center width="100%">
|
||||
<caption align=bottom>
|
||||
<b>Example: Filter Statistics</b>
|
||||
</caption>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code><pre>
|
||||
H5Z: filter statistics accumulated over life of library:
|
||||
Method Total Errors User System Elapsed Bandwidth
|
||||
------ ----- ------ ---- ------ ------- ---------
|
||||
>deflate 160000 40000 0.62 0.74 1.33 117.5 kBs
|
||||
<deflate 120000 0 0.11 0.00 0.12 1.000 MBs
|
||||
</pre></code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
Filters
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- Created: Fri Apr 17 13:39:35 EDT 1998 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Mon Jan 18 13:32:14 EST 1999
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,5 +1,5 @@
|
||||
<html><head><title>
|
||||
HDF5 Draft Glossary
|
||||
HDF5 Glossary
|
||||
</title></head>
|
||||
|
||||
<body>
|
||||
@@ -25,23 +25,29 @@ Glossary
|
||||
<h1>HDF5 Glossary</h1>
|
||||
</center>
|
||||
|
||||
<i>(<b>Under construction!</b>
|
||||
This is the bare beginning of a Glossary to accompany the HDF5 documentation;
|
||||
it is by no means complete.)</i>
|
||||
<i>(<b>Under construction!</b>
|
||||
This is the bare beginning of a Glossary to accompany the HDF5
|
||||
documentation; it is by no means complete.)</i>
|
||||
|
||||
<ol type=A>
|
||||
<li><a href="#Glossary-Basic">Basic Types</a>
|
||||
<li><a href="#Glossary-Complex">Complex Types</a>
|
||||
<li><a href="#Glossary-DiskIO">Disk I/O Types</a>
|
||||
</ol>
|
||||
<ul>
|
||||
<li><a href="#Glossary-Basic">basic data types</a>
|
||||
<li><a href="#Glossary-Complex">complex data types</a>
|
||||
<li>data types
|
||||
<ul>
|
||||
<li><a href="#Glossary-Basic">basic data types</a>
|
||||
<li><a href="#Glossary-Complex">complex data types</a>
|
||||
<li><a href="#Glossary-DiskIO">disk I/O data types</a>
|
||||
</ul>
|
||||
<li><a href="#Glossary-DiskIO">disk I/O data types</a>
|
||||
</ul>
|
||||
|
||||
<P>Since many of the typedefs in the HDF5 API are not well-defined yet,
|
||||
the types below may change radically en route to a final API...
|
||||
|
||||
<hr>
|
||||
|
||||
<a name="Glossary-Basic">Basic Types:</a>
|
||||
<a name="Glossary-Basic">basic data types:</a>
|
||||
<ul>
|
||||
<li><em>(Some data types may change substantially en route to
|
||||
Release 1.0.)</em>
|
||||
<li>char - 8-bit character (only for ASCII information)
|
||||
<li>int8 - 8-bit signed integer
|
||||
<li>uint8 - 8-bit unsigned integer
|
||||
@@ -57,8 +63,10 @@ the types below may change radically en route to a final API...
|
||||
<li>float64 - 64-bit IEEE float
|
||||
</ul>
|
||||
|
||||
<a name="Glossary-Complex">Complex Types:</a>
|
||||
<a name="Glossary-Complex">Complex data types:</a>
|
||||
<ul>
|
||||
<li><em>(Some data types may change substantially en route to
|
||||
Release 1.0.)</em>
|
||||
<li>hid_t - 32-bit unsigned integer used as ID for memory objects
|
||||
<li>hoid_t - 32-bit unsigned integer (currently) used as ID for disk-based
|
||||
objects
|
||||
@@ -66,8 +74,10 @@ the types below may change radically en route to a final API...
|
||||
<li>herr_t - 32-bit integer to indicate succeed/fail codes from functions
|
||||
</ul>
|
||||
|
||||
<a name="Glossary-DiskIO">Disk I/O Types:</a>
|
||||
<a name="Glossary-DiskIO">disk I/O data types:</a>
|
||||
<ul>
|
||||
<li><em>(Some data types may change substantially en route to
|
||||
Release 1.0.)</em>
|
||||
<li>hoff_t - (64-bit?) offset on disk in bytes
|
||||
<li>hlen_t - (64-bit?) length on disk in bytes
|
||||
</ul>
|
||||
|
||||
@@ -4,8 +4,70 @@
|
||||
<title>Groups</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Groups</h1>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
Groups
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<h1>The Group Interface (H5G)</h1>
|
||||
|
||||
<h2>1. Introduction</h2>
|
||||
|
||||
@@ -51,7 +113,7 @@
|
||||
name which begins with a slash is an <em>absolute</em> name
|
||||
which is looked up beginning at the root group of the file while
|
||||
all other <em>relative</em> names are looked up beginning at the
|
||||
current working group (described below) or a specified group.
|
||||
specified group.
|
||||
Multiple consecutive slashes in a full name are treated as
|
||||
single slashes and trailing slashes are not significant. A
|
||||
special case is the name "/" (or equivalent) which refers to the
|
||||
@@ -75,7 +137,7 @@
|
||||
<td>File ID</td>
|
||||
<td><code>/foo/bar</code></td>
|
||||
<td>The object <code>bar</code> in group <code>foo</code>
|
||||
in the root group of the specified file.</td>
|
||||
in the root group.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
@@ -104,9 +166,7 @@
|
||||
<td>File ID</td>
|
||||
<td><code>foo/bar</code></td>
|
||||
<td>The object <code>bar</code> in group <code>foo</code>
|
||||
in the current working group of the specified file. The
|
||||
initial current working group is the root group of the
|
||||
file as described below.</td>
|
||||
in the specified group.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
@@ -119,7 +179,7 @@
|
||||
<tr>
|
||||
<td>File ID</td>
|
||||
<td><code>.</code></td>
|
||||
<td>The current working group of the specified file.</td>
|
||||
<td>The root group of the file.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
@@ -181,51 +241,7 @@
|
||||
returns zero for success or a negative value for failure.
|
||||
</dl>
|
||||
|
||||
<h2>4. Current Working Group</h2>
|
||||
|
||||
<p>Each file handle (<code>hid_t <em>file_id</em></code>) has a
|
||||
current working group, initially the root group of the file.
|
||||
Names which do not begin with a slash are relative to the
|
||||
specified group or to the current working group as described
|
||||
above. For instance, the name "/Foo/Bar/Baz" is resolved by
|
||||
first looking up "Foo" in the root group. But the name
|
||||
"Foo/Bar/Baz" is resolved by first looking up "Foo" in the
|
||||
current working group.
|
||||
|
||||
<dl>
|
||||
<dt><code>herr_t H5Gset (hid_t <em>location_id</em>, const char
|
||||
*<em>name</em>)</code>
|
||||
<dd>The group with the specified name is made the current
|
||||
working group for the file which contains it. The
|
||||
<em>location_id</em> can be a file handle or a group handle
|
||||
and the name is resolved as described above. Each file handle
|
||||
has it's own current working group and if the
|
||||
<em>location_id</em> is a group handle then the file handle is
|
||||
derived from the group handle. This function returns zero for
|
||||
success or negative for failure.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Gpush (hid_t <em>location_id</em>, const char
|
||||
*<em>name</em>)</code>
|
||||
<dd>Each file handle has a stack of groups and the top group on
|
||||
that stack is the current working group. The stack initially
|
||||
contains only the root group. This function pushes a new
|
||||
group onto the stack and returns zero for success or negative
|
||||
for failure.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Gpop (hid_t <em>location_id</em>)</code>
|
||||
<dd>This function pops one group off the group stack for the
|
||||
specified file (if the <em>location_id</em> is a group then
|
||||
the file is derived from that group), changing the current
|
||||
working group to the new top-of-stack group. The function
|
||||
returns zero for success or negative for failure (failure
|
||||
includes attempting to pop from an empty stack). If the last
|
||||
item is popped from the stack then the current working group
|
||||
is set to the root group.
|
||||
</dl>
|
||||
|
||||
<h2>5. Objects with Multiple Names</h2>
|
||||
<h2>4. Objects with Multiple Names</h2>
|
||||
|
||||
<p>An object (including a group) can have more than one
|
||||
name. Creating the object gives it the first name, and then
|
||||
@@ -263,8 +279,7 @@
|
||||
<code>H5T_LINK_SOFT</code> a soft link is created which is an
|
||||
alias for the <em>current_name</em>. When creating a soft
|
||||
link the object need not exist. This function returns zero
|
||||
for success or negative for failure. <b>This function is not
|
||||
part of the prototype API.</b>
|
||||
for success or negative for failure.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Gunlink (hid_t <em>file_id</em>, const char
|
||||
@@ -274,15 +289,112 @@
|
||||
to the object and when the hard link count reaches zero the
|
||||
object can be removed from the file (but objects which are
|
||||
open are not removed until all handles to the object are
|
||||
closed). <b>This function is not part of the prototype
|
||||
API.</b>
|
||||
closed).
|
||||
</dl>
|
||||
|
||||
<h2>5. Comments</h2>
|
||||
|
||||
<p>Objects can have a comment associated with them. The comment
|
||||
is set and queried with these two functions:
|
||||
|
||||
<dl>
|
||||
<dt><code>herr_t H5Gset_comment (hid_t <em>loc_id</em>, const
|
||||
char *<em>name</em>, const char *<em>comment</em>)</code>
|
||||
<dd>The previous comment (if any) for the specified object is
|
||||
replace with a new comment. If the <em>comment</em> argument
|
||||
is the empty string or a null pointer then the comment message
|
||||
is removed from the object. Comments should be relatively
|
||||
short, null-terminated, ASCII strings.
|
||||
|
||||
<br><br>
|
||||
<dt><code>herr_t H5Gget_comment (hid_t <em>loc_id</em>, const
|
||||
char *<em>name</em>, size_t <em>bufsize</em>, char
|
||||
*<em>comment</em>)</code>
|
||||
<dd>The comment string for an object is returned through the
|
||||
<em>comment</em> buffer. At most <em>bufsize</em> characters
|
||||
including a null terminator are copied, and the result is
|
||||
not null terminated if the comment is longer than the supplied
|
||||
buffer. If an object doesn't have a comment then the empty
|
||||
string is returned.
|
||||
</dl>
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
Groups
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- Created: Tue Jan 27 09:11:27 EST 1998 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Tue Mar 24 15:52:14 EST 1998
|
||||
<!--
|
||||
Last modified: Wed Jul 22 14:24:34 EDT 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
4611
doc/html/H5.api.html
@@ -29,7 +29,7 @@ overwrite the previous file's information.
|
||||
<code> <pre>
|
||||
hid_t file_id;
|
||||
|
||||
file_id=<A HREF="H5.apiv2.html#File-Create">H5Fcreate</a>("example1.h5",H5F_ACC_EXCL,H5P_DEFAULT_TEMPLATE,H5P_DEFAULT_TEMPLATE);
|
||||
file_id=<A HREF="H5.apiv2.html#File-Create">H5Fcreate</a>("example1.h5",H5F_ACC_EXCL,H5P_DEFAULT,H5P_DEFAULT);
|
||||
|
||||
<A HREF="H5.apiv2.html#File-Close">H5Fclose</a>(file_id);
|
||||
|
||||
|
||||
135
doc/html/H5.user.PrintGen.html
Normal file
@@ -0,0 +1,135 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
HDF5 User's Guide -- Single Print
|
||||
</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
<center><h1>A User's Guide for HDF5</h1></center>
|
||||
|
||||
This page provides a means of printing the <cite>HDF5 User's Guide</cite>
|
||||
with a single print command as follows:
|
||||
<ol><li>Open this page in Internet Explorer, version 4.0 or or later.
|
||||
(Sorry, but as of this writing, Netscape does not offer the required
|
||||
print feature.)
|
||||
<li>On the <strong>File</strong> menu, select <strong>Print</strong>.
|
||||
<li>In the <strong>Print</strong> dialogue box, select
|
||||
<strong>Print all linked documents</strong>.
|
||||
<li>Select <strong>OK</strong>. Depending on the print settings of your
|
||||
browser, this will produce a 100- to 200-page set of documents,
|
||||
one chapter or section at a time.
|
||||
<li>Once the print job is complete, discard the first page printed (this page).
|
||||
The rest of the printout should form a complete copy of the
|
||||
<cite>HDF5 User's Guide</cite>.
|
||||
</ol>
|
||||
|
||||
|
||||
<br><br>
|
||||
<center>
|
||||
<table border=0 width=85%>
|
||||
|
||||
<tr><td valign=top><a href="H5.user.PrintTpg.html" target="PrintWin">Title Page</a>
|
||||
</td><td> </td>
|
||||
<td valign=top>Title page.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Copyright.html" target="PrintWin">Copyright</a>
|
||||
</td><td> </td>
|
||||
<td valign=top>The HDF5 copyright notice, contact information,
|
||||
and other <i>back-of-the-title-page</i> material.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="H5.user.html" target="PrintWin">TOC</a>
|
||||
</td><td> </td>
|
||||
<td valign=top>Table of contents.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Files.html" target="PrintWin">HDF5 Files</a>
|
||||
</td><td> </td>
|
||||
<td valign=top>A guide to the <strong>H5F</strong> interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Datasets.html" target="PrintWin">Datasets</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5D</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Datatypes.html" target="PrintWin">Data Types</a> and
|
||||
<br>
|
||||
<a href="DatatypesEnum.html" target="PrintWin">Enumeration Data Types</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5T</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Dataspaces.html" target="PrintWin">Dataspaces</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5S</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Groups.html" target="PrintWin">Groups</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5G</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="References.html" target="PrintWin">References and
|
||||
Identifiers</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5R</strong>
|
||||
and <strong>H5I</strong> interfaces.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Attributes.html" target="PrintWin">Attributes</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5A</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Properties.html" target="PrintWin">Property Lists</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5P</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Errors.html" target="PrintWin">Error Handling</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5E</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Filters.html" target="PrintWin">Filters</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5Z</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Caching.html" target="PrintWin">Caching</a>
|
||||
</td><td></td><td valign=top>A guide for meta and raw data caching.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Chunking.html" target="PrintWin">Dataset Chunking</a>
|
||||
</td><td></td><td valign=top>A guide to the issues and pitfalls
|
||||
of dataset chunking.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Debugging.html" target="PrintWin">Debugging</a>
|
||||
</td><td></td><td valign=top>A guide to debugging HDF5 API calls.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Environment.html" target="PrintWin">Environment Variables
|
||||
and Configuration Parameters</a>
|
||||
</td><td></td><td valign=top>A list of HDF5 environment variables
|
||||
and <br> configuration parameters.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="ddl.html" target="PrintWin">DDL for HDF5</a>
|
||||
</td><td></td><td valign=top>A DDL in BNF for HDF5.
|
||||
</td></tr>
|
||||
<tr><td valign=top><hr noshade size=1><a href="Ragged.html" target="PrintWin">Ragged Arrays</a>
|
||||
</td><td></td><td valign=top><hr noshade size=1>A guide to the
|
||||
<strong>H5RA</strong> interface.
|
||||
<em><font color=red>(Experimental)</font></em>
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<br><br>
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
<address>
|
||||
<table width=100% border=0>
|
||||
<tr><td align=left valign=top>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
<br>
|
||||
Last modified: 1 June 1999
|
||||
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
75
doc/html/H5.user.PrintTpg.html
Normal file
@@ -0,0 +1,75 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
HDF5 User's Guide
|
||||
</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<br>
|
||||
<br><br>
|
||||
|
||||
<center>
|
||||
|
||||
<font size=7>
|
||||
A User's Guide for HDF5
|
||||
</font>
|
||||
|
||||
<br><br><br>
|
||||
<hr>
|
||||
<hr>
|
||||
<br><br><br>
|
||||
|
||||
<font size=6>
|
||||
Release 1.0
|
||||
<br>
|
||||
January 1999
|
||||
</font>
|
||||
|
||||
<br><br><br><br>
|
||||
|
||||
<font size=3>
|
||||
Hierarchical Data Format (HDF) Group
|
||||
<br>
|
||||
National Center for Supercomputing Applications (NCSA)
|
||||
<br>
|
||||
University of Illinois at Urbana-Champaign (UIUC)
|
||||
</font>
|
||||
|
||||
</center>
|
||||
|
||||
<br><br><br>
|
||||
<hr>
|
||||
<hr>
|
||||
<br><br><br>
|
||||
<br><br><br>
|
||||
|
||||
<blockquote>
|
||||
<strong>A Note to the Reader:</strong>
|
||||
The primary HDF5 user documents are the online HTML documents
|
||||
distributed with the HDF5 code and binaries and found on the HDF5 website.
|
||||
Several users have expressed a desire for documents in an alternative format:
|
||||
<ul>
|
||||
<li>Some have requested a version that can be reasonably printed in a
|
||||
single print operation.
|
||||
<li>Others have requested an easily searchable version.
|
||||
</ul>
|
||||
This PDF file has been created expressly to meet these needs.
|
||||
<p>
|
||||
The reader will note that each section of this document looks very much
|
||||
as the corresponding HTML page would look in a web browser. That is not
|
||||
accidental as the HTML version remains the HDF5 development team's primary
|
||||
documentation vehicle.
|
||||
</blockquote>
|
||||
|
||||
|
||||
<br><br>
|
||||
<hr>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,39 +1,156 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
HDF5 Uer's Guide
|
||||
HDF5 User's Guide
|
||||
</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<center><h1>A User Guide for HDF5</h1></center>
|
||||
<body bgcolor="#FFFFFF">
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
|
||||
<!--
|
||||
|
||||
And in this document, the
|
||||
HDF5 User's Guide:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
-->
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<hr>
|
||||
|
||||
|
||||
<center><h1>A User's Guide for HDF5</h1></center>
|
||||
|
||||
<p>The following documents form a loosely organized user's guide
|
||||
to the HDF5 library.
|
||||
|
||||
<ul>
|
||||
<li><a href="Files.html">HDF5 Files</a> -
|
||||
A guide to the H5F interface.
|
||||
<li><a href="Datasets.html">Datasets</a> -
|
||||
A guide to the H5D interface.
|
||||
<li><a href="Datatypes.html">Data types</a> -
|
||||
A guide to the H5T interface.
|
||||
<li><a href="Dataspaces.html">Data spaces</a> -
|
||||
A guide to the H5S interface.
|
||||
<li><a href="Groups.html">Groups</a> -
|
||||
A guide to the H5G interface.
|
||||
<li><a href="Attributes.html">Attributes</a> -
|
||||
A guide to the H5A interface.
|
||||
<li><a href="Properties.html">Property lists</a> -
|
||||
A guide to the H5P interface.
|
||||
<li><a href="Errors.html">Error handling</a> -
|
||||
A guide to the H5E interface.
|
||||
<li><a href="Caching.html">Caching</a> -
|
||||
A guide for meta and raw data caching.
|
||||
<li><a href="tracing.html">API Tracing</a> -
|
||||
A guide to debugging HDF5 API calls.
|
||||
</ul>
|
||||
<center>
|
||||
<table border=0>
|
||||
|
||||
<tr><td valign=top><a href="Files.html">HDF5 Files</a>
|
||||
</td><td> </td>
|
||||
<td valign=top>A guide to the <strong>H5F</strong> interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Datasets.html">Datasets</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5D</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Datatypes.html">Data Types</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5T</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Dataspaces.html">Dataspaces</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5S</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Groups.html">Groups</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5G</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="References.html">References and
|
||||
Identifiers</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5R</strong>
|
||||
and <strong>H5I</strong> interfaces.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Attributes.html">Attributes</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5A</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Properties.html">Property Lists</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5P</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Errors.html">Error Handling</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5E</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Filters.html">Filters</a>
|
||||
</td><td></td><td valign=top>A guide to the <strong>H5Z</strong>
|
||||
interface.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Caching.html">Caching</a>
|
||||
</td><td></td><td valign=top>A guide for meta and raw data caching.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Chunking.html">Dataset Chunking</a>
|
||||
</td><td></td><td valign=top>A guide to the issues and pitfalls
|
||||
of dataset chunking.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Debugging.html">Debugging</a>
|
||||
</td><td></td><td valign=top>A guide to debugging HDF5 API calls.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="Environment.html">Environment Variables
|
||||
and</a>
|
||||
<br> <a href="Environment.html">Configuration
|
||||
Parameters</a>
|
||||
</td><td></td><td valign=top>A list of HDF5 environment variables
|
||||
and <br> configuration parameters.
|
||||
</td></tr>
|
||||
<tr><td valign=top><a href="ddl.html">DDL for HDF5</a>
|
||||
</td><td></td><td valign=top>A DDL in BNF for HDF5.
|
||||
</td></tr>
|
||||
<tr><td valign=top><hr noshade size=1><a href="Ragged.html">Ragged Arrays</a>
|
||||
</td><td></td><td valign=top><hr noshade size=1>A guide to the
|
||||
<strong>H5RA</strong> interface.
|
||||
<em><font color=red>(Experimental)</font></em>
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
<br>
|
||||
|
||||
<!--
|
||||
<p>The following documents form a loosely organized developer's guide to
|
||||
aspects of the HDF5 library. (Some of the following documents
|
||||
may be rather out of date as they were working papers for design
|
||||
@@ -44,30 +161,109 @@
|
||||
A description of HDF5 version numbers.
|
||||
<li><a href="IOPipe.html">I/O Pipeline</a> -
|
||||
A description of the raw data I/O pipeline.
|
||||
<li><a href="Compression.html">Compression</a> -
|
||||
A guide to the use of compression for datasets.
|
||||
<li><a href="ExternalFiles.html">Working with external files</a> -
|
||||
<li><a href="ExternalFiles.html">Working with External Files</a> -
|
||||
A guide to the use of multiple files with HDF5.
|
||||
<li><a href="Big.html">Large Datasets</a> -
|
||||
A guide to accessing large datasets on small computers.
|
||||
<li><a href="MemoryManagement.html">Memory management</a> -
|
||||
<li><a href="MemoryManagement.html">Memory Management</a> -
|
||||
A white paper about memory management issues in HDF5.
|
||||
<li><a href="Coding.html">Coding style</a> -
|
||||
<li><a href="Coding.html">Coding Style</a> -
|
||||
A white paper about coding style in the HDF5 library code.
|
||||
<li><a href="compat.html">HDF4/HDF5 compatibility</a> -
|
||||
<li><a href="compat.html">HDF4/HDF5 Compatibility</a> -
|
||||
A white paper about compatibility issues between HDF4 and HDF5.
|
||||
<li><a href="study.html">Chunking performance study</a> -
|
||||
<li><a href="study.html">Chunking Performance Study</a> -
|
||||
A white paper describing the HDF5 chunking performance.
|
||||
</ul>
|
||||
-->
|
||||
|
||||
|
||||
<hr>
|
||||
<center>
|
||||
<table border=0 width=98%>
|
||||
<tr><td valign=top align=left>
|
||||
<a href="H5.intro.html">Introduction to HDF5</a> <br>
|
||||
<a href="RM_H5Front.html">HDF5 Reference Manual</a> <br>
|
||||
<a href="index.html">Other HDF5 documents and links</a> <br>
|
||||
<!--
|
||||
<a href="Glossary.html">Glossary</a><br>
|
||||
-->
|
||||
</td>
|
||||
<td valign=top align=right>
|
||||
|
||||
<!--
|
||||
|
||||
And in this document, the
|
||||
HDF5 User's Guide:
|
||||
<a href="Files.html">Files</a>
|
||||
<br>
|
||||
<a href="Datasets.html">Datasets</a>
|
||||
<a href="Datatypes.html">Data Types</a>
|
||||
<a href="Dataspaces.html">Dataspaces</a>
|
||||
<a href="Groups.html">Groups</a>
|
||||
<a href="References.html">References</a>
|
||||
<br>
|
||||
<a href="Attributes.html">Attributes</a>
|
||||
<a href="Properties.html">Property Lists</a>
|
||||
<a href="Errors.html">Error Handling</a>
|
||||
<a href="Filters.html">Filters</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<br>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
<a href="Ragged.html">Ragged Arrays</a>
|
||||
-->
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
And in this document, the
|
||||
<a href="H5.user.html">HDF5 User's Guide</a>:
|
||||
<a href="Attributes.html">H5A</a>
|
||||
<a href="Datasets.html">H5D</a>
|
||||
<a href="Errors.html">H5E</a>
|
||||
<a href="Files.html">H5F</a>
|
||||
<a href="Groups.html">H5G</a>
|
||||
<a href="Properties.html">H5P</a>
|
||||
<a href="References.html">H5R & H5I</a>
|
||||
<a href="Ragged.html">H5RA</a>
|
||||
<a href="Dataspaces.html">H5S</a>
|
||||
<a href="Datatypes.html">H5T</a>
|
||||
<a href="Filters.html">H5Z</a>
|
||||
<a href="Caching.html">Caching</a>
|
||||
<a href="Chunking.html">Chunking</a>
|
||||
<a href="Debugging.html">Debugging</a>
|
||||
<a href="Environment.html">Environment</a>
|
||||
<a href="ddl.html">DDL</a>
|
||||
-->
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
|
||||
<!--
|
||||
<hr>
|
||||
<address><a href="mailto:koziol@ncsa.uiuc.edu">Quincey Koziol</a></address>
|
||||
<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
|
||||
-->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Wed Jul 8 14:10:50 EDT 1998
|
||||
<!--
|
||||
Last modified: Wed Aug 19 15:29:11 PDT 1998
|
||||
-->
|
||||
<!-- hhmts end -->
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<table width=100% border=0>
|
||||
<tr><td align=left valign=top>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
<br>
|
||||
Last modified: 30 October 1998
|
||||
|
||||
</td><td align=right valign=top>
|
||||
<a href="Copyright.html">Copyright</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
BIN
doc/html/IH_map1.gif
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
doc/html/IH_map2.gif
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
doc/html/IH_map3.gif
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
doc/html/IH_map4.gif
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
doc/html/IH_mapFoot.gif
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
doc/html/IH_mapHead.gif
Normal file
|
After Width: | Height: | Size: 2.0 KiB |