Compare commits
701 Commits
libpng-1.6
...
v1.6.35
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c17d164b44 | ||
|
|
46aedd8961 | ||
|
|
2471434d29 | ||
|
|
8a05766cb7 | ||
|
|
a74aa9a002 | ||
|
|
916117d970 | ||
|
|
7784cd3f6f | ||
|
|
cde1e1fe79 | ||
|
|
0e06b5948c | ||
|
|
3fecfeada1 | ||
|
|
140f3aa280 | ||
|
|
eb91c0e4ed | ||
|
|
d5e4915ebe | ||
|
|
fe669f6f38 | ||
|
|
84e6e35675 | ||
|
|
28d0ee757d | ||
|
|
f07b985ddb | ||
|
|
d532334ef5 | ||
|
|
fc32eb1662 | ||
|
|
7ca2f0e078 | ||
|
|
babae66b48 | ||
|
|
3403a6e387 | ||
|
|
b196bd6566 | ||
|
|
f23b41d7b1 | ||
|
|
7125401411 | ||
|
|
4b52ef8e76 | ||
|
|
5d7b4ab289 | ||
|
|
7ee802a5a2 | ||
|
|
2f8b82ebca | ||
|
|
aea0ec4346 | ||
|
|
af08094ba6 | ||
|
|
9bddba26de | ||
|
|
3b5bcea010 | ||
|
|
adefba1b03 | ||
|
|
48a2460393 | ||
|
|
2be0f33e7c | ||
|
|
ccc77d2a8d | ||
|
|
f648294931 | ||
|
|
83f27f018c | ||
|
|
fefe0affc1 | ||
|
|
a3d1057a73 | ||
|
|
12384eae6f | ||
|
|
357af1f095 | ||
|
|
ab791fc9d6 | ||
|
|
f5f8b98dbb | ||
|
|
293b6aaa59 | ||
|
|
98a3b2a5c2 | ||
|
|
78ad1208d6 | ||
|
|
477a241c10 | ||
|
|
edb1f47139 | ||
|
|
0f9f170e9f | ||
|
|
99d4a62c9a | ||
|
|
2227793efc | ||
|
|
b78804f9a2 | ||
|
|
345fc37fdc | ||
|
|
2ee8cb0559 | ||
|
|
414de98047 | ||
|
|
0512c63533 | ||
|
|
cae11e3e43 | ||
|
|
4f0a0b9a94 | ||
|
|
dc22583aca | ||
|
|
346cbf2c2a | ||
|
|
8eb79b3435 | ||
|
|
13a158690f | ||
|
|
e4c8312d31 | ||
|
|
3d2d0b52a3 | ||
|
|
073fe76f6a | ||
|
|
4b7635ce72 | ||
|
|
96333b6bea | ||
|
|
90dd185aed | ||
|
|
8746d57184 | ||
|
|
0165badb9d | ||
|
|
60d297d592 | ||
|
|
2da37077db | ||
|
|
e1220aefc4 | ||
|
|
5efa483265 | ||
|
|
5f0c9fabbc | ||
|
|
397c7eea38 | ||
|
|
066cb34268 | ||
|
|
721b96ef90 | ||
|
|
562a68513e | ||
|
|
a7722aee32 | ||
|
|
413de0a56a | ||
|
|
04e16d2817 | ||
|
|
d1a0937cae | ||
|
|
1c98b85886 | ||
|
|
4de130c255 | ||
|
|
4ddead1e1c | ||
|
|
d7edcc40e4 | ||
|
|
7d40b53fbf | ||
|
|
76b269b1f4 | ||
|
|
61d29bfc80 | ||
|
|
0f2adc19eb | ||
|
|
1aabcfdbae | ||
|
|
b5ae93d72e | ||
|
|
6a2a762914 | ||
|
|
50c9e15a7d | ||
|
|
c0f02a8078 | ||
|
|
3789cba2f2 | ||
|
|
8592873f24 | ||
|
|
051dcaf877 | ||
|
|
95046512a4 | ||
|
|
4e9839d453 | ||
|
|
d17041f052 | ||
|
|
cbcb39932c | ||
|
|
52a566af97 | ||
|
|
9050c32365 | ||
|
|
4911714f74 | ||
|
|
c77de19ba9 | ||
|
|
051d6cc19b | ||
|
|
61e0a38091 | ||
|
|
fca1862ac9 | ||
|
|
c2c8b398a9 | ||
|
|
9495ab477b | ||
|
|
62a2463211 | ||
|
|
dcd3edaf87 | ||
|
|
b47e0f5ceb | ||
|
|
84a5bf83ff | ||
|
|
f3a22d396a | ||
|
|
eb2f42aa97 | ||
|
|
47aa798127 | ||
|
|
5c27e93f51 | ||
|
|
efaf42e5df | ||
|
|
d3220babe2 | ||
|
|
a1b5be044f | ||
|
|
58720d3c06 | ||
|
|
d64c5ea1a8 | ||
|
|
50d2d49220 | ||
|
|
d2b9af04ac | ||
|
|
321c24b0d7 | ||
|
|
14a8996fe6 | ||
|
|
ef76b1f688 | ||
|
|
5c616548a0 | ||
|
|
da923d334d | ||
|
|
e06ec26906 | ||
|
|
f6ca33d42c | ||
|
|
df7e9dae0c | ||
|
|
4760bac13d | ||
|
|
737f347f23 | ||
|
|
1257369169 | ||
|
|
de315dfaad | ||
|
|
ba5f7f6a3e | ||
|
|
b0d14c7d13 | ||
|
|
735fde494a | ||
|
|
d2533b96f3 | ||
|
|
ddabd0c70a | ||
|
|
945759162e | ||
|
|
bcb739a864 | ||
|
|
90b437e372 | ||
|
|
ab3ea490fd | ||
|
|
d19e8b9a4b | ||
|
|
c5f801c82b | ||
|
|
7b8b7115d9 | ||
|
|
646fad9d55 | ||
|
|
06ec4252a4 | ||
|
|
33848546a3 | ||
|
|
fa2f72258a | ||
|
|
7653aaa4b1 | ||
|
|
c362a8c80e | ||
|
|
c339da7fc2 | ||
|
|
33787340a4 | ||
|
|
cf713fb0ab | ||
|
|
c82ae40e9f | ||
|
|
099558d100 | ||
|
|
8ed418b042 | ||
|
|
39d84f4f6a | ||
|
|
c5c778bcfc | ||
|
|
1ebe4f75cc | ||
|
|
13bc0b6b1f | ||
|
|
fcd1bb9312 | ||
|
|
c33d624988 | ||
|
|
0ec733ce61 | ||
|
|
dbdeb1f3fa | ||
|
|
3d7f3e57b5 | ||
|
|
a64c8ca9e9 | ||
|
|
378e926d78 | ||
|
|
3a957dd96f | ||
|
|
554d4400ab | ||
|
|
2037030d50 | ||
|
|
207392821d | ||
|
|
2dca15686f | ||
|
|
469317d9bd | ||
|
|
894a9869dd | ||
|
|
c14be73428 | ||
|
|
2dbef2f2a9 | ||
|
|
4ac8b5e0d6 | ||
|
|
9d4215e6c0 | ||
|
|
d683af0f12 | ||
|
|
095b4ce16b | ||
|
|
bfdabdacff | ||
|
|
6f89dff45e | ||
|
|
d930d36155 | ||
|
|
a1fe2c9848 | ||
|
|
6b53a5ed7b | ||
|
|
70041f4038 | ||
|
|
96b65b3644 | ||
|
|
347538efbd | ||
|
|
2b37d46564 | ||
|
|
2df5c96352 | ||
|
|
3fa1df48a1 | ||
|
|
f30f1ae3ea | ||
|
|
7c709f039f | ||
|
|
f8de55da04 | ||
|
|
fd6b87253c | ||
|
|
821b1dcf34 | ||
|
|
611b29acd8 | ||
|
|
71a56180e5 | ||
|
|
cb628b2e4e | ||
|
|
bc68c41d5f | ||
|
|
4aad3c0eb0 | ||
|
|
68a80b10fe | ||
|
|
c17b7b38b0 | ||
|
|
91540c56af | ||
|
|
90d3ff290f | ||
|
|
619cf868e6 | ||
|
|
3524b0d201 | ||
|
|
3e753f5cbe | ||
|
|
c77274ffa9 | ||
|
|
323c8655cf | ||
|
|
40afb68570 | ||
|
|
4ab78af90a | ||
|
|
b73c891891 | ||
|
|
9fcb846402 | ||
|
|
136b3203f4 | ||
|
|
1ed0b3f7ca | ||
|
|
a354e5c1ff | ||
|
|
3de6fa1122 | ||
|
|
db16b27d11 | ||
|
|
d2fcc41eec | ||
|
|
cd37210184 | ||
|
|
a5b6751bbd | ||
|
|
cd8eb93ecb | ||
|
|
68cb0aaee3 | ||
|
|
40943eb67a | ||
|
|
f78a3e7326 | ||
|
|
72d07d3202 | ||
|
|
ecea632c4c | ||
|
|
fd9c48fd9c | ||
|
|
f2621c5137 | ||
|
|
a947052ec2 | ||
|
|
0a9d2719c5 | ||
|
|
aa6e0482fa | ||
|
|
77a063af16 | ||
|
|
5cc23552a7 | ||
|
|
76b3a7e78f | ||
|
|
2b80b401be | ||
|
|
f16c3406cd | ||
|
|
918a6ac2b4 | ||
|
|
bd5a826d37 | ||
|
|
50b6df5389 | ||
|
|
857ef82edf | ||
|
|
f380ae5243 | ||
|
|
23b51990e3 | ||
|
|
77417b8ea0 | ||
|
|
eed9efec4e | ||
|
|
b5c16f8bfc | ||
|
|
89b8c133e7 | ||
|
|
54126d5c59 | ||
|
|
660ce58597 | ||
|
|
9f7134c3fc | ||
|
|
145361aaac | ||
|
|
58649f19cb | ||
|
|
14be73c8a3 | ||
|
|
87cd2dc07d | ||
|
|
2d306c4b15 | ||
|
|
5aaf6e889c | ||
|
|
c548328904 | ||
|
|
11629b1c1a | ||
|
|
774922da91 | ||
|
|
7da2ea45b9 | ||
|
|
95f3c07d6f | ||
|
|
a315efe3b2 | ||
|
|
6155c6629d | ||
|
|
d40ac082ef | ||
|
|
d2ac910a53 | ||
|
|
a1577bf965 | ||
|
|
e486c76253 | ||
|
|
30d1f909ed | ||
|
|
8359b90057 | ||
|
|
11c25c0e9e | ||
|
|
b99308a33c | ||
|
|
170a44b222 | ||
|
|
0808d75851 | ||
|
|
2eff8ef504 | ||
|
|
60d8ae1003 | ||
|
|
53f22aed41 | ||
|
|
13370c536c | ||
|
|
054be18721 | ||
|
|
64f81108db | ||
|
|
ead7079f1d | ||
|
|
82add753e5 | ||
|
|
b3ffdc5991 | ||
|
|
e744ee1338 | ||
|
|
ab8dbdcce5 | ||
|
|
7bbd665b34 | ||
|
|
dce241c107 | ||
|
|
8c50acb9d2 | ||
|
|
92fcd25e9d | ||
|
|
9b0170dd03 | ||
|
|
2239961279 | ||
|
|
18834ff62b | ||
|
|
03a6f3f9c9 | ||
|
|
d42e88d5b3 | ||
|
|
fae874c8ca | ||
|
|
0b1f7e412b | ||
|
|
a8de1a70d1 | ||
|
|
7db98a18fe | ||
|
|
a7029a5b4c | ||
|
|
4f31b7f242 | ||
|
|
b475d0593c | ||
|
|
862a2858b0 | ||
|
|
364450bf8d | ||
|
|
f6d358ff42 | ||
|
|
7980c79d69 | ||
|
|
5e8c50cc8d | ||
|
|
7218761fe1 | ||
|
|
3644db298b | ||
|
|
29775cef5e | ||
|
|
a343882c74 | ||
|
|
6f6c396604 | ||
|
|
483bcad21d | ||
|
|
310dee21f7 | ||
|
|
d1c12e85c1 | ||
|
|
99d7285f20 | ||
|
|
d4bdca45b3 | ||
|
|
58e9d5d59d | ||
|
|
7428ca944d | ||
|
|
ae15e839d9 | ||
|
|
8a242668fd | ||
|
|
b42e8bce3a | ||
|
|
b1be78460a | ||
|
|
d57bed7838 | ||
|
|
b8afc73b73 | ||
|
|
19425d32f3 | ||
|
|
9bd58f9387 | ||
|
|
f2b829166d | ||
|
|
ab2a639a2a | ||
|
|
0aa1b967f0 | ||
|
|
80041d15b2 | ||
|
|
2cc569eab7 | ||
|
|
bea573d370 | ||
|
|
d0d310f1cb | ||
|
|
3907feb306 | ||
|
|
acb155d893 | ||
|
|
c47ddcf22b | ||
|
|
565d4beea2 | ||
|
|
c43aaa8b20 | ||
|
|
6ddcd33daa | ||
|
|
24b27e5948 | ||
|
|
f604c74a5f | ||
|
|
c3f4e5fb1a | ||
|
|
adbf1d6d1c | ||
|
|
9b0311a4d8 | ||
|
|
b455622aa8 | ||
|
|
ccef5edbfe | ||
|
|
91acd4baf8 | ||
|
|
6ff408d423 | ||
|
|
ee5804fa14 | ||
|
|
2b6e59d968 | ||
|
|
ae794eefaa | ||
|
|
dd24a6ca15 | ||
|
|
a0e3160ad4 | ||
|
|
4c0740c8de | ||
|
|
8c6c9e6d56 | ||
|
|
f8fe5f8560 | ||
|
|
eaca53a2d9 | ||
|
|
bef76802de | ||
|
|
ebede25ceb | ||
|
|
4ddac468c4 | ||
|
|
17ad597dba | ||
|
|
b784934049 | ||
|
|
93b3476358 | ||
|
|
6df2225c55 | ||
|
|
562751dcc9 | ||
|
|
3785125faf | ||
|
|
edef058e18 | ||
|
|
16fe975928 | ||
|
|
24dfd3f2d7 | ||
|
|
f8bdbd4d8f | ||
|
|
f981826204 | ||
|
|
14e885a54c | ||
|
|
dd8aa3e939 | ||
|
|
29b9fd605e | ||
|
|
aa5bb2c3dd | ||
|
|
993bd61329 | ||
|
|
b9b490c7f5 | ||
|
|
09fae1b5d3 | ||
|
|
e9c3d83d5a | ||
|
|
812768d7a9 | ||
|
|
a3b5edc934 | ||
|
|
aaed6782e8 | ||
|
|
fd3a683b2a | ||
|
|
08d00b25d8 | ||
|
|
61a9a054fd | ||
|
|
bf90247a63 | ||
|
|
4708ca268e | ||
|
|
7bb00afec3 | ||
|
|
13a354f81e | ||
|
|
8187ba1518 | ||
|
|
dbb5fce3d8 | ||
|
|
d65a92b951 | ||
|
|
a69dd76eac | ||
|
|
e36003e9b8 | ||
|
|
2accfbd6f3 | ||
|
|
858cb585d7 | ||
|
|
0c440812db | ||
|
|
436ce2c6e9 | ||
|
|
a1312f7b19 | ||
|
|
01e99bbac1 | ||
|
|
dd6d7f031f | ||
|
|
f7fe4db91b | ||
|
|
a106899acd | ||
|
|
ffaeff82d3 | ||
|
|
13bdd8bcdf | ||
|
|
7d7694ae6a | ||
|
|
b3540f9932 | ||
|
|
a5084f1522 | ||
|
|
565a751ca2 | ||
|
|
f6497e03d1 | ||
|
|
b7b59b7fe9 | ||
|
|
890611200a | ||
|
|
ce45f85c61 | ||
|
|
761d833372 | ||
|
|
3875d9af4c | ||
|
|
ad3318ddc8 | ||
|
|
7184475a98 | ||
|
|
c180e7a437 | ||
|
|
fbe3e002bc | ||
|
|
b5b77a72b4 | ||
|
|
97dfccb632 | ||
|
|
319c9852bf | ||
|
|
1b363fa6b0 | ||
|
|
fa24421216 | ||
|
|
d84fd77bf8 | ||
|
|
04dab1e82d | ||
|
|
394be58371 | ||
|
|
217546ae43 | ||
|
|
8aa1638ccc | ||
|
|
89ea081433 | ||
|
|
7835716cef | ||
|
|
cb1787f033 | ||
|
|
1842d7c865 | ||
|
|
bc2bb96cd7 | ||
|
|
5cb1700702 | ||
|
|
7dc0329250 | ||
|
|
90ea4af4a1 | ||
|
|
a744b11975 | ||
|
|
597b1a1b5e | ||
|
|
f0b453bc3e | ||
|
|
c9d7b865b6 | ||
|
|
e3a6631123 | ||
|
|
434aecf327 | ||
|
|
abd88841ef | ||
|
|
42e5441888 | ||
|
|
01b6ca34b7 | ||
|
|
4ade4e8a0d | ||
|
|
d1f14c829a | ||
|
|
b43133b361 | ||
|
|
2e2330bf25 | ||
|
|
0a2d496d58 | ||
|
|
000f07bfbe | ||
|
|
2e7c3a6e70 | ||
|
|
05a4db1fcd | ||
|
|
ee5e39835c | ||
|
|
143434ac78 | ||
|
|
4dc4b2efac | ||
|
|
e175eb1ffb | ||
|
|
4be85e1b37 | ||
|
|
9cab7a24fd | ||
|
|
39df0ced18 | ||
|
|
2705f55221 | ||
|
|
4679be7c2b | ||
|
|
935676cdad | ||
|
|
8ff2ed2fe1 | ||
|
|
6bdaf38d12 | ||
|
|
e018ab98be | ||
|
|
92a7c79db2 | ||
|
|
19fefd3a4b | ||
|
|
cdc0e74ee6 | ||
|
|
b50d5cea2b | ||
|
|
3d3c23b39f | ||
|
|
2bb9ee89fa | ||
|
|
96db0fff50 | ||
|
|
99663e95f8 | ||
|
|
1153ddccb6 | ||
|
|
8d091a640b | ||
|
|
2c0b7a8ff6 | ||
|
|
faa3e537e1 | ||
|
|
0a5e99d7ee | ||
|
|
d1f9149d8a | ||
|
|
ee079481c9 | ||
|
|
639b48625f | ||
|
|
dd70604cec | ||
|
|
34c783e2fe | ||
|
|
82d0009885 | ||
|
|
baed0e32f9 | ||
|
|
3c7c436303 | ||
|
|
9b14f5f85a | ||
|
|
0fd9a249de | ||
|
|
7a18a2de59 | ||
|
|
5d7c7d5132 | ||
|
|
192e92d681 | ||
|
|
1b9f4817c8 | ||
|
|
d9940f6207 | ||
|
|
f7d5419816 | ||
|
|
9928ee0a52 | ||
|
|
66f796e74c | ||
|
|
a3eac818d5 | ||
|
|
cfc19ff1b6 | ||
|
|
80495124b2 | ||
|
|
2c21a4778d | ||
|
|
14b8dee96f | ||
|
|
11c88033d4 | ||
|
|
25bb30c9b8 | ||
|
|
54feb0ad2a | ||
|
|
b733c50bc0 | ||
|
|
a93744423d | ||
|
|
9957c45073 | ||
|
|
0ac91cc657 | ||
|
|
d9779744f9 | ||
|
|
ed5a01d922 | ||
|
|
d43f93ff93 | ||
|
|
3f2879bf60 | ||
|
|
ee1e535298 | ||
|
|
4b4a9583b4 | ||
|
|
da2ba024a5 | ||
|
|
e5d468ea9c | ||
|
|
21d9e6e0fb | ||
|
|
98af505439 | ||
|
|
1df0ace0b4 | ||
|
|
4af267c07b | ||
|
|
6c7c5a04b8 | ||
|
|
42069e9432 | ||
|
|
36762ac4b4 | ||
|
|
147dc568da | ||
|
|
29135161d7 | ||
|
|
9c04f57cab | ||
|
|
e1123aa80c | ||
|
|
4a8105e925 | ||
|
|
51df269afe | ||
|
|
bf2613b975 | ||
|
|
5c6b7e177c | ||
|
|
428f5ddabd | ||
|
|
a4b26efa1f | ||
|
|
ed6db9d86b | ||
|
|
ee3c4e43ae | ||
|
|
6d4e4d0cce | ||
|
|
89158b9ad1 | ||
|
|
1fdac25f66 | ||
|
|
1017744c94 | ||
|
|
f757d74898 | ||
|
|
bd2370c054 | ||
|
|
dbfd68ae3a | ||
|
|
801b925edf | ||
|
|
a201f859cd | ||
|
|
84cc738166 | ||
|
|
81f0273d54 | ||
|
|
3f46c67c69 | ||
|
|
6c7459e455 | ||
|
|
8d16725373 | ||
|
|
4e34fd3b8a | ||
|
|
ac43a87820 | ||
|
|
474751e6b2 | ||
|
|
37ab4d946c | ||
|
|
d6e5a72c84 | ||
|
|
add4581894 | ||
|
|
45ad37b31b | ||
|
|
f6ca49c863 | ||
|
|
7fa1b5b26c | ||
|
|
0794fee913 | ||
|
|
319a7b842b | ||
|
|
50d41533d2 | ||
|
|
8e89b13c47 | ||
|
|
f962ee9dc6 | ||
|
|
a271625928 | ||
|
|
9f642c1bbc | ||
|
|
21939d36ec | ||
|
|
8c754b1834 | ||
|
|
2b9f68631c | ||
|
|
830608b4b8 | ||
|
|
eefd9127ca | ||
|
|
0392e36e94 | ||
|
|
a967818235 | ||
|
|
8eaa434163 | ||
|
|
af9d06e06a | ||
|
|
703944c39d | ||
|
|
e81f16bf5d | ||
|
|
7572840cd0 | ||
|
|
569a1d27b4 | ||
|
|
d642eede9a | ||
|
|
5b0a0ded05 | ||
|
|
819b125e6e | ||
|
|
fa551df95e | ||
|
|
76531da252 | ||
|
|
daf2169797 | ||
|
|
e0acad59cb | ||
|
|
5765a22249 | ||
|
|
f47e1d4995 | ||
|
|
8f506d3257 | ||
|
|
d960ced6e1 | ||
|
|
7cf9a34ade | ||
|
|
5ef8d1bfbf | ||
|
|
6ee90f06ab | ||
|
|
46861bc41e | ||
|
|
12e63e91af | ||
|
|
edad4639cf | ||
|
|
1a3fa1e091 | ||
|
|
9295264b6f | ||
|
|
46c47291e8 | ||
|
|
e25323e81b | ||
|
|
2a25fc41f6 | ||
|
|
4b4700ceca | ||
|
|
0df91242a2 | ||
|
|
9821954ecc | ||
|
|
e2d113cadf | ||
|
|
b4f9f5d041 | ||
|
|
6c3d5bd2a0 | ||
|
|
da9d1d7aa6 | ||
|
|
52846504da | ||
|
|
d06d66e899 | ||
|
|
cdd9a23fd4 | ||
|
|
4233766b1d | ||
|
|
f78d1cd47a | ||
|
|
c3a45944e2 | ||
|
|
342c4eab2a | ||
|
|
fb375429b5 | ||
|
|
9a308a3344 | ||
|
|
0348a407e5 | ||
|
|
5bc58a0ebc | ||
|
|
577c1f0305 | ||
|
|
f84f957881 | ||
|
|
9c946e22fc | ||
|
|
1099cdcb5a | ||
|
|
0c27c8633e | ||
|
|
baf301d122 | ||
|
|
08bd7654bc | ||
|
|
7684bcae7d | ||
|
|
461c7e45b5 | ||
|
|
a4a54aa1bf | ||
|
|
337c694971 | ||
|
|
05591abeb1 | ||
|
|
196a50a4bd | ||
|
|
84a5b7a0f8 | ||
|
|
ed23815985 | ||
|
|
f1eafe8b01 | ||
|
|
2d3bd021d0 | ||
|
|
2a28a4320a | ||
|
|
8fb55653d1 | ||
|
|
e717842a54 | ||
|
|
74e481c743 | ||
|
|
98c6fa2495 | ||
|
|
4dac51d260 | ||
|
|
ac796d3f9a | ||
|
|
e0ce90ea0a | ||
|
|
f6a23fe205 | ||
|
|
d2b8d46658 | ||
|
|
93a3bc7343 | ||
|
|
7f576964d8 | ||
|
|
0873ae8242 | ||
|
|
571abc9a67 | ||
|
|
c68f20cecc | ||
|
|
94f4e972b5 | ||
|
|
175a126a1a | ||
|
|
95d2726ecc | ||
|
|
b8dbd78de8 | ||
|
|
777dbf46dc | ||
|
|
e8558d2160 | ||
|
|
5031c77d85 | ||
|
|
fc0786a442 | ||
|
|
780079e771 | ||
|
|
253326c52d | ||
|
|
81dfc2163b | ||
|
|
9b54f0037a | ||
|
|
b416dc5fc8 | ||
|
|
ecc022ee5f | ||
|
|
092b8d7bf3 | ||
|
|
912f030532 | ||
|
|
66db757dd4 | ||
|
|
9616bf6882 | ||
|
|
dea53bb460 | ||
|
|
35a5a6c16d | ||
|
|
42b438b7dc | ||
|
|
18765d0032 | ||
|
|
4aa590288b | ||
|
|
315b39c73a | ||
|
|
2225ca0a54 | ||
|
|
ad29c03711 | ||
|
|
0a4967ce0c | ||
|
|
b3d3a5ed6a | ||
|
|
4d8de33979 | ||
|
|
32629bb522 | ||
|
|
0bc972fbc2 | ||
|
|
6cc84b3c44 | ||
|
|
c5e81c51d9 | ||
|
|
cbe5d34f6f | ||
|
|
975cbbb029 | ||
|
|
f3da771890 | ||
|
|
2edfd187f2 | ||
|
|
2c8a90ef52 | ||
|
|
0de0101fdd | ||
|
|
1dbfb07c08 |
66
ANNOUNCE
@@ -1,52 +1,48 @@
|
|||||||
Libpng 1.6.20 - December 3, 2015
|
Libpng 1.6.35 - July 15, 2018
|
||||||
|
|
||||||
This is a public release of libpng, intended for use in production codes.
|
This is a public release of libpng, intended for use in production code.
|
||||||
|
|
||||||
Files available for download:
|
Files available for download:
|
||||||
|
|
||||||
Source files with LF line endings (for Unix/Linux) and with a
|
Source files with LF line endings (for Unix/Linux):
|
||||||
"configure" script
|
|
||||||
|
|
||||||
libpng-1.6.20.tar.xz (LZMA-compressed, recommended)
|
libpng-1.6.35.tar.xz (LZMA-compressed, recommended)
|
||||||
libpng-1.6.20.tar.gz
|
libpng-1.6.35.tar.gz
|
||||||
|
|
||||||
Source files with CRLF line endings (for Windows), without the
|
Source files with CRLF line endings (for Windows):
|
||||||
"configure" script
|
|
||||||
|
|
||||||
/scratch/glennrp/Libpng16/lpng1620.7z (LZMA-compressed, recommended)
|
lp1635.7z (LZMA-compressed, recommended)
|
||||||
/scratch/glennrp/Libpng16/lpng1620.zip
|
lp1635.zip
|
||||||
|
|
||||||
Other information:
|
Other information:
|
||||||
|
|
||||||
libpng-1.6.20-README.txt
|
libpng-1.6.35-README.txt
|
||||||
libpng-1.6.20-LICENSE.txt
|
libpng-1.6.35-LICENSE.txt
|
||||||
libpng-1.6.20-*.asc (armored detached GPG signatures)
|
|
||||||
|
|
||||||
Changes since the last public release (1.6.19):
|
Changes since the last public release (1.6.34):
|
||||||
Avoid potential pointer overflow/underflow in png_handle_sPLT() and
|
|
||||||
png_handle_pCAL() (Bug report by John Regehr).
|
Restored 21 of the contrib/pngsuite/i*.png, which do not cause test
|
||||||
Fixed incorrect implementation of png_set_PLTE() that uses png_ptr
|
failures. Placed the remainder in contrib/pngsuite/interlaced/i*.png.
|
||||||
not info_ptr, that left png_set_PLTE() open to the CVE-2015-8126
|
Added calls to png_set_*() transforms commonly used by browsers to
|
||||||
vulnerability.
|
the fuzzer.
|
||||||
Backported tests from libpng-1.7.0beta69.
|
Removed some unnecessary brackets in pngrtran.c
|
||||||
Fixed an error in handling of bad zlib CMINFO field in pngfix, found by
|
Fixed miscellaneous typos (Patch by github user "luzpaz").
|
||||||
American Fuzzy Lop, reported by Brian Carpenter. inflate() doesn't
|
Change "ASM C" to "C ASM" in CMakeLists.txt
|
||||||
immediately fault a bad CMINFO field; instead a 'too far back' error
|
Fixed incorrect handling of bKGD chunk in sub-8-bit files (Cosmin)
|
||||||
happens later (at least some times). pngfix failed to limit CMINFO to
|
Added hardware optimization directories to zip and 7z distributions.
|
||||||
the allowed values but then assumed that window_bits was in range,
|
Fixed incorrect bitmask for options.
|
||||||
triggering an assert. The bug is mostly harmless; the PNG file cannot
|
Fixed many spelling typos.
|
||||||
be fixed.
|
Make png_get_iCCP consistent with man page (allow compression-type argument
|
||||||
In libpng 1.6 zlib initialization was changed to use the window size
|
to be NULL, bug report by Lenard Szolnoki).
|
||||||
in the zlib stream, not a fixed value. This causes some invalid images,
|
Replaced the remaining uses of png_size_t with size_t (Cosmin)
|
||||||
where CINFO is too large, to display 'correctly' if the rest of the
|
Fixed the calculation of row_factor in png_check_chunk_length
|
||||||
data is valid. This provides a workaround for zlib versions where the
|
(reported by Thuan Pham in SourceForge issue #278)
|
||||||
error arises (ones that support the API change to use the window size
|
Added missing parentheses to a macro definition
|
||||||
in the stream).
|
(suggested by "irwir" in GitHub issue #216)
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
||||||
(subscription required; visit
|
(subscription required; visit
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
||||||
to subscribe)
|
to subscribe).
|
||||||
or to glennrp at users.sourceforge.net
|
|
||||||
|
|
||||||
Glenn R-P
|
Glenn R-P
|
||||||
|
|||||||
651
CHANGES
@@ -1,4 +1,3 @@
|
|||||||
#if 0
|
|
||||||
CHANGES - changes for libpng
|
CHANGES - changes for libpng
|
||||||
|
|
||||||
version 0.1 [March 29, 1995]
|
version 0.1 [March 29, 1995]
|
||||||
@@ -593,7 +592,7 @@ Version 1.0.5e [November 30, 1999]
|
|||||||
with trailing compressed parts easier in the future, and added new functions
|
with trailing compressed parts easier in the future, and added new functions
|
||||||
png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
|
png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
|
||||||
png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
|
png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
|
||||||
NOTE: Applications that write text chunks MUST define png_text->lang
|
NOTE: Applications that write text chunks MUST define png_text->lang
|
||||||
before calling png_set_text(). It must be set to NULL if you want to
|
before calling png_set_text(). It must be set to NULL if you want to
|
||||||
write tEXt or zTXt chunks. If you want your application to be able to
|
write tEXt or zTXt chunks. If you want your application to be able to
|
||||||
run with older versions of libpng, use
|
run with older versions of libpng, use
|
||||||
@@ -833,7 +832,7 @@ Version 1.0.7beta11 [May 7, 2000]
|
|||||||
Removed the new PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT modes
|
Removed the new PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT modes
|
||||||
which are no longer used.
|
which are no longer used.
|
||||||
Eliminated the three new members of png_text when PNG_LEGACY_SUPPORTED is
|
Eliminated the three new members of png_text when PNG_LEGACY_SUPPORTED is
|
||||||
defined or when neither PNG_READ_iTXt_SUPPORTED nor PNG_WRITE_iTXT_SUPPORTED
|
defined or when neither PNG_READ_iTXt_SUPPORTED nor PNG_WRITE_iTXt_SUPPORTED
|
||||||
is defined.
|
is defined.
|
||||||
Made PNG_NO_READ|WRITE_iTXt the default setting, to avoid memory
|
Made PNG_NO_READ|WRITE_iTXt the default setting, to avoid memory
|
||||||
overrun when old applications fill the info_ptr->text structure directly.
|
overrun when old applications fill the info_ptr->text structure directly.
|
||||||
@@ -1454,7 +1453,7 @@ Version 1.2.6beta4 [July 28, 2004]
|
|||||||
sequential read support.
|
sequential read support.
|
||||||
Added some "#if PNG_WRITE_SUPPORTED" blocks.
|
Added some "#if PNG_WRITE_SUPPORTED" blocks.
|
||||||
Added #ifdef to remove some redundancy in png_malloc_default().
|
Added #ifdef to remove some redundancy in png_malloc_default().
|
||||||
Use png_malloc instead of png_zalloc to allocate the pallete.
|
Use png_malloc instead of png_zalloc to allocate the palette.
|
||||||
|
|
||||||
Version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004]
|
Version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004]
|
||||||
Fixed buffer overflow vulnerability (CVE-2004-0597) in png_handle_tRNS().
|
Fixed buffer overflow vulnerability (CVE-2004-0597) in png_handle_tRNS().
|
||||||
@@ -3259,7 +3258,7 @@ Version 1.5.2beta01 [February 13, 2011]
|
|||||||
Revised PNG_EXPORTA macro to not use an empty parameter, to accommodate the
|
Revised PNG_EXPORTA macro to not use an empty parameter, to accommodate the
|
||||||
old VisualC++ preprocessor.
|
old VisualC++ preprocessor.
|
||||||
Turned on interlace handling in png_read_png().
|
Turned on interlace handling in png_read_png().
|
||||||
Fixed gcc pendantic warnings.
|
Fixed gcc pedantic warnings.
|
||||||
Handle longjmp in Cygwin.
|
Handle longjmp in Cygwin.
|
||||||
Fixed png_get_current_row_number() in the interlaced case.
|
Fixed png_get_current_row_number() in the interlaced case.
|
||||||
Cleaned up ALPHA flags and transformations.
|
Cleaned up ALPHA flags and transformations.
|
||||||
@@ -3359,7 +3358,7 @@ Version 1.5.3beta05 [May 6, 2011]
|
|||||||
Pass "" instead of '\0' to png_default_error() in png_err(). This mistake
|
Pass "" instead of '\0' to png_default_error() in png_err(). This mistake
|
||||||
was introduced in libpng-1.2.20beta01. This fixes CVE-2011-2691.
|
was introduced in libpng-1.2.20beta01. This fixes CVE-2011-2691.
|
||||||
Added PNG_WRITE_OPTIMIZE_CMF_SUPPORTED macro to make the zlib "CMF" byte
|
Added PNG_WRITE_OPTIMIZE_CMF_SUPPORTED macro to make the zlib "CMF" byte
|
||||||
optimization configureable.
|
optimization configurable.
|
||||||
IDAT compression failed if preceded by a compressed text chunk (bug
|
IDAT compression failed if preceded by a compressed text chunk (bug
|
||||||
introduced in libpng-1.5.3beta01-02). This was because the attempt to
|
introduced in libpng-1.5.3beta01-02). This was because the attempt to
|
||||||
reset the zlib stream in png_write_IDAT happened after the first IDAT
|
reset the zlib stream in png_write_IDAT happened after the first IDAT
|
||||||
@@ -3643,7 +3642,7 @@ Version 1.5.6beta05 [October 12, 2011]
|
|||||||
Fixed bug in png_write_chunk_header() debug print, introduced in 1.5.6beta01.
|
Fixed bug in png_write_chunk_header() debug print, introduced in 1.5.6beta01.
|
||||||
|
|
||||||
Version 1.5.6beta06 [October 17, 2011]
|
Version 1.5.6beta06 [October 17, 2011]
|
||||||
Removed two redundant tests for unitialized row.
|
Removed two redundant tests for uninitialized row.
|
||||||
Fixed a relatively harmless memory overwrite in compressed text writing
|
Fixed a relatively harmless memory overwrite in compressed text writing
|
||||||
with a 1 byte zlib buffer.
|
with a 1 byte zlib buffer.
|
||||||
Add ability to call png_read_update_info multiple times to pngvalid.c.
|
Add ability to call png_read_update_info multiple times to pngvalid.c.
|
||||||
@@ -3689,7 +3688,7 @@ Version 1.5.7beta01 [November 4, 2011]
|
|||||||
crash. The pngmem.c implementation of png_malloc() included a cast
|
crash. The pngmem.c implementation of png_malloc() included a cast
|
||||||
to png_size_t which would fail on large allocations on 16-bit systems.
|
to png_size_t which would fail on large allocations on 16-bit systems.
|
||||||
Fix for the preprocessor of the Intel C compiler. The preprocessor
|
Fix for the preprocessor of the Intel C compiler. The preprocessor
|
||||||
splits adjacent @ signs with a space; this changes the concatentation
|
splits adjacent @ signs with a space; this changes the concatenation
|
||||||
token from @-@-@ to PNG_JOIN; that should work with all compiler
|
token from @-@-@ to PNG_JOIN; that should work with all compiler
|
||||||
preprocessors.
|
preprocessors.
|
||||||
Paeth filter speed improvements from work by Siarhei Siamashka. This
|
Paeth filter speed improvements from work by Siarhei Siamashka. This
|
||||||
@@ -3735,7 +3734,7 @@ Version 1.5.7beta03 [November 17, 2011]
|
|||||||
gray (on palette) itself.
|
gray (on palette) itself.
|
||||||
Fixes for C++ compilation using g++ When libpng source is compiled
|
Fixes for C++ compilation using g++ When libpng source is compiled
|
||||||
using g++. The compiler imposes C++ rules on the C source; thus it
|
using g++. The compiler imposes C++ rules on the C source; thus it
|
||||||
is desireable to make the source work with either C or C++ rules
|
is desirable to make the source work with either C or C++ rules
|
||||||
without throwing away useful error information. This change adds
|
without throwing away useful error information. This change adds
|
||||||
png_voidcast to allow C semantic (void*) cases or the corresponding
|
png_voidcast to allow C semantic (void*) cases or the corresponding
|
||||||
C++ static_cast operation, as appropriate.
|
C++ static_cast operation, as appropriate.
|
||||||
@@ -4061,7 +4060,7 @@ Version 1.6.0beta17 [March 10, 2012]
|
|||||||
possible to call png_inflate() incrementally. A warning is no longer
|
possible to call png_inflate() incrementally. A warning is no longer
|
||||||
issued if the language tag or translated keyword in the iTXt chunk
|
issued if the language tag or translated keyword in the iTXt chunk
|
||||||
has zero length.
|
has zero length.
|
||||||
If benign errors are disabled use maximum window on ancilliary inflate.
|
If benign errors are disabled use maximum window on ancillary inflate.
|
||||||
This works round a bug introduced in 1.5.4 where compressed ancillary
|
This works round a bug introduced in 1.5.4 where compressed ancillary
|
||||||
chunks could end up with a too-small windowBits value in the deflate
|
chunks could end up with a too-small windowBits value in the deflate
|
||||||
header.
|
header.
|
||||||
@@ -4176,7 +4175,7 @@ Version 1.6.0beta27 [August 11, 2012]
|
|||||||
declared even though the functions are never actually defined. This
|
declared even though the functions are never actually defined. This
|
||||||
change provides a dummy definition so that the declarations work, yet any
|
change provides a dummy definition so that the declarations work, yet any
|
||||||
implementation will fail to compile because of an incomplete type.
|
implementation will fail to compile because of an incomplete type.
|
||||||
Re-eliminated the use of strcpy() in pngtest.c. An unncessary use of
|
Re-eliminated the use of strcpy() in pngtest.c. An unnecessary use of
|
||||||
strcpy() was accidentally re-introduced in libpng16; this change replaces
|
strcpy() was accidentally re-introduced in libpng16; this change replaces
|
||||||
it with strncpy().
|
it with strncpy().
|
||||||
Eliminated use of png_sizeof(); use sizeof() instead.
|
Eliminated use of png_sizeof(); use sizeof() instead.
|
||||||
@@ -4309,7 +4308,7 @@ Version 1.6.0beta31 [November 1, 2012]
|
|||||||
resulting in VS2010 having to update the files.
|
resulting in VS2010 having to update the files.
|
||||||
Removed non-working ICC profile support code that was mostly added to
|
Removed non-working ICC profile support code that was mostly added to
|
||||||
libpng-1.6.0beta29 and beta30. There was too much code for too little
|
libpng-1.6.0beta29 and beta30. There was too much code for too little
|
||||||
gain; implementing full ICC color correction may be desireable but is left
|
gain; implementing full ICC color correction may be desirable but is left
|
||||||
up to applications.
|
up to applications.
|
||||||
|
|
||||||
Version 1.6.0beta32 [November 25, 2012]
|
Version 1.6.0beta32 [November 25, 2012]
|
||||||
@@ -4592,7 +4591,7 @@ Version 1.6.3beta07 [June 8, 2013]
|
|||||||
the optimizations ('check' vs 'api') are exposed in the public header files
|
the optimizations ('check' vs 'api') are exposed in the public header files
|
||||||
except that the new setting PNG_ARM_NEON_OPT documents how libpng makes the
|
except that the new setting PNG_ARM_NEON_OPT documents how libpng makes the
|
||||||
decision about whether or not to use the optimizations.
|
decision about whether or not to use the optimizations.
|
||||||
Protect symbol prefixing against CC/CPPFLAGS/CFLAGS useage.
|
Protect symbol prefixing against CC/CPPFLAGS/CFLAGS usage.
|
||||||
Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test
|
Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test
|
||||||
on __ARM_NEON__ from configure time to compile time. This breaks symbol
|
on __ARM_NEON__ from configure time to compile time. This breaks symbol
|
||||||
prefixing because the definition of the special png_init_filter_functions
|
prefixing because the definition of the special png_init_filter_functions
|
||||||
@@ -5063,7 +5062,8 @@ Version 1.6.15beta04 [November 4, 2014]
|
|||||||
Version 1.6.15beta05 [November 5, 2014]
|
Version 1.6.15beta05 [November 5, 2014]
|
||||||
Use png_get_libpng_ver(NULL) instead of PNG_LIBPNG_VER_STRING in
|
Use png_get_libpng_ver(NULL) instead of PNG_LIBPNG_VER_STRING in
|
||||||
example.c, pngtest.c, and applications in the contrib directory.
|
example.c, pngtest.c, and applications in the contrib directory.
|
||||||
Avoid out-of-bounds memory access in png_user_version_check().
|
Fixed an out-of-range read in png_user_version_check() (Bug report from
|
||||||
|
Qixue Xiao, CVE-2015-8540).
|
||||||
Simplified and future-proofed png_user_version_check().
|
Simplified and future-proofed png_user_version_check().
|
||||||
Fixed GCC unsigned int->float warnings. Various versions of GCC
|
Fixed GCC unsigned int->float warnings. Various versions of GCC
|
||||||
seem to generate warnings when an unsigned value is implicitly
|
seem to generate warnings when an unsigned value is implicitly
|
||||||
@@ -5421,7 +5421,7 @@ Version 1.6.20beta01 [November 20, 2015]
|
|||||||
Version 1.6.20beta02 [November 23, 2015]
|
Version 1.6.20beta02 [November 23, 2015]
|
||||||
Fixed incorrect implementation of png_set_PLTE() that uses png_ptr
|
Fixed incorrect implementation of png_set_PLTE() that uses png_ptr
|
||||||
not info_ptr, that left png_set_PLTE() open to the CVE-2015-8126
|
not info_ptr, that left png_set_PLTE() open to the CVE-2015-8126
|
||||||
vulnerability.
|
vulnerability. Fixes CVE-2015-8472.
|
||||||
|
|
||||||
Version 1.6.20beta03 [November 24, 2015]
|
Version 1.6.20beta03 [November 24, 2015]
|
||||||
Backported tests from libpng-1.7.0beta69.
|
Backported tests from libpng-1.7.0beta69.
|
||||||
@@ -5446,11 +5446,626 @@ Version 1.6.20rc02 [November 29, 2015]
|
|||||||
Version 1.6.20 [December 3, 2015]
|
Version 1.6.20 [December 3, 2015]
|
||||||
No changes.
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.21beta01 [December 11, 2015]
|
||||||
|
Fixed syntax "$(command)" in tests/pngstest that some shells other than
|
||||||
|
bash could not parse (Bug report by Nelson Beebe). Use `command` instead.
|
||||||
|
|
||||||
|
Version 1.6.21beta02 [December 14, 2015]
|
||||||
|
Moved png_check_keyword() from pngwutil.c to pngset.c
|
||||||
|
Removed LE/BE dependencies in pngvalid, to 'fix' the current problem
|
||||||
|
in the BigEndian tests by not testing it, making the BE code the same
|
||||||
|
as the LE version.
|
||||||
|
Fixes to pngvalid for various reduced build configurations (eliminate unused
|
||||||
|
statics) and a fix for the case in rgb_to_gray when the digitize option
|
||||||
|
reduces graylo to 0, producing a large error.
|
||||||
|
|
||||||
|
Version 1.6.21beta03 [December 18, 2015]
|
||||||
|
Widened the 'limit' check on the internally calculated error limits in
|
||||||
|
the 'DIGITIZE' case (the code used prior to 1.7 for rgb_to_gray error
|
||||||
|
checks) and changed the check to only operate in non-release builds
|
||||||
|
(base build type not RC or RELEASE.)
|
||||||
|
Fixed undefined behavior in pngvalid.c, undefined because
|
||||||
|
(png_byte) << shift is undefined if it changes the signed bit
|
||||||
|
(because png_byte is promoted to int). The libpng exported functions
|
||||||
|
png_get_uint_32 and png_get_uint_16 handle this. (Bug reported by
|
||||||
|
David Drysdale as a result of reports from UBSAN in clang 3.8).
|
||||||
|
This changes pngvalid to use BE random numbers; this used to produce
|
||||||
|
errors but these should not be fixed as a result of the previous changes.
|
||||||
|
|
||||||
|
Version 1.6.21rc01 [January 4, 2016]
|
||||||
|
In projects/vstudio, combined readme.txt and WARNING into README.txt
|
||||||
|
|
||||||
|
Version 1.6.21rc02 [January 7, 2016]
|
||||||
|
Relocated assert() in contrib/tools/pngfix.c, bug found by American
|
||||||
|
Fuzzy Lop, reported by Brian Carpenter.
|
||||||
|
Marked 'limit' UNUSED in transform_range_check(). This only affects
|
||||||
|
release builds.
|
||||||
|
|
||||||
|
Version 1.6.21 [January 15, 2016]
|
||||||
|
Worked around a false-positive Coverity issue in pngvalid.c.
|
||||||
|
|
||||||
|
Version 1.6.22beta01 [January 23, 2016]
|
||||||
|
Changed PNG_USE_MKSTEMP to __COVERITY__ to select alternate
|
||||||
|
"tmpfile()" implementation in contrib/libtests/pngstest.c
|
||||||
|
Fixed NO_STDIO build of pngunknown.c to skip calling png_init_io()
|
||||||
|
if there is no stdio.h support.
|
||||||
|
Added a png_image_write_to_memory() API and a number of assist macros
|
||||||
|
to allow an application that uses the simplified API write to bypass
|
||||||
|
stdio and write directly to memory.
|
||||||
|
Added some warnings (png.h) and some check code to detect *possible*
|
||||||
|
overflow in the ROW_STRIDE and simplified image SIZE macros. This
|
||||||
|
disallows image width/height/format that *might* overflow. This is
|
||||||
|
a quiet API change that limits in-memory image size (uncompressed) to
|
||||||
|
less than 4GByte and image row size (stride) to less than 2GByte.
|
||||||
|
Revised workaround for false-positive Coverity issue in pngvalid.c.
|
||||||
|
|
||||||
|
Version 1.6.22beta02 [February 8, 2016]
|
||||||
|
Only use exit(77) in configure builds.
|
||||||
|
Corrected error in PNG_IMAGE_PNG_SIZE_MAX. This new macro underreported
|
||||||
|
the palette size because it failed to take into account that the memory
|
||||||
|
palette has to be expanded to full RGB when it is written to PNG.
|
||||||
|
Updated CMakeLists.txt, added supporting scripts/gen*.cmake.in
|
||||||
|
and test.cmake.in (Roger Leigh).
|
||||||
|
Relaxed limit checks on gamma values in pngrtran.c. As suggested in
|
||||||
|
the comments gamma values outside the range currently permitted
|
||||||
|
by png_set_alpha_mode are useful for HDR data encoding. These values
|
||||||
|
are already permitted by png_set_gamma so it is reasonable caution to
|
||||||
|
extend the png_set_alpha_mode range as HDR imaging systems are starting
|
||||||
|
to emerge.
|
||||||
|
|
||||||
|
Version 1.6.22beta03 [March 9, 2016]
|
||||||
|
Added a common-law trademark notice and export control information
|
||||||
|
to the LICENSE file, png.h, and the man page.
|
||||||
|
Restored "& 0xff" in png_save_uint_16() and png_save_uint_32() that
|
||||||
|
were accidentally removed from libpng-1.6.17.
|
||||||
|
Changed PNG_INFO_cHNK and PNG_FREE_cHNK from 0xnnnn to 0xnnnnU in png.h
|
||||||
|
(Robert C. Seacord).
|
||||||
|
Removed dubious "#if INT_MAX" test from png.h that was added to
|
||||||
|
libpng-1.6.19beta02 (John Bowler).
|
||||||
|
Add ${INCLUDES} in scripts/genout.cmake.in (Bug report by Nixon Kwok).
|
||||||
|
Updated LICENSE to say files in the contrib directory are not
|
||||||
|
necessarily under the libpng license, and that some makefiles have
|
||||||
|
other copyright owners.
|
||||||
|
Added INTEL-SSE2 support (Mike Klein and Matt Sarett, Google, Inc.).
|
||||||
|
Made contrib/libtests/timepng more robust. The code no longer gives
|
||||||
|
up/fails on invalid PNG data, it just skips it (with error messages).
|
||||||
|
The code no longer fails on PNG files with data beyond IEND. Options
|
||||||
|
exist to use png_read_png (reading the whole image, not by row) and, in
|
||||||
|
that case, to apply any of the supported transforms. This makes for
|
||||||
|
more realistic testing; the decoded data actually gets used in a
|
||||||
|
meaningful fashion (John Bowler).
|
||||||
|
Fixed some misleading indentation (Krishnaraj Bhat).
|
||||||
|
|
||||||
|
Version 1.6.22beta04 [April 5, 2016]
|
||||||
|
Force GCC compilation to C89 if needed (Dagobert Michelsen).
|
||||||
|
SSE filter speed improvements for bpp=3:
|
||||||
|
memcpy-free implementations of load3() / store3().
|
||||||
|
call load3() only when needed at the end of a scanline.
|
||||||
|
|
||||||
|
Version 1.6.22beta05 [April 27, 2016]
|
||||||
|
Added PNG_FAST_FILTERS macro (defined as
|
||||||
|
PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP).
|
||||||
|
Various fixes for contrib/libtests/timepng.c
|
||||||
|
Moved INTEL-SSE code from pngpriv.h into contrib/intel/intel_sse.patch.
|
||||||
|
Fixed typo (missing underscore) in #define PNG_READ_16_TO_8_SUPPORTED
|
||||||
|
(Bug report by Y.Ohashik).
|
||||||
|
|
||||||
|
Version 1.6.22beta06 [May 5, 2016]
|
||||||
|
Rebased contrib/intel_sse.patch.
|
||||||
|
Quieted two Coverity issues in contrib/libtests/timepng.c.
|
||||||
|
Fixed issues with scripts/genout.cmake.in (David Capello, Nixon Kwok):
|
||||||
|
Added support to use multiple directories in ZLIBINCDIR variable,
|
||||||
|
Fixed CMAKE_C_FLAGS with multiple values when genout is compiled on MSVC,
|
||||||
|
Fixed pnglibconf.c compilation on OS X including the sysroot path.
|
||||||
|
|
||||||
|
Version 1.6.22rc01 [May 14, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.22rc02 [May 16, 2016]
|
||||||
|
Removed contrib/timepng from default build; it does not build on platforms
|
||||||
|
that don't supply clock_gettime().
|
||||||
|
|
||||||
|
Version 1.6.22rc03 [May 17, 2016]
|
||||||
|
Restored contrib/timepng to default build but check for the presence
|
||||||
|
of clock_gettime() in configure.ac and Makefile.am.
|
||||||
|
|
||||||
|
Version 1.6.22 [May 26, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.23beta01 [May 29, 2016]
|
||||||
|
Stop a potential memory leak in png_set_tRNS() (Bug report by Ted Ying).
|
||||||
|
Fixed the progressive reader to handle empty first IDAT chunk properly
|
||||||
|
(patch by Timothy Nikkel). This bug was introduced in libpng-1.6.0 and
|
||||||
|
only affected the libpng16 branch.
|
||||||
|
Added tests in pngvalid.c to check zero-length IDAT chunks in various
|
||||||
|
positions. Fixed the sequential reader to handle these more robustly
|
||||||
|
(John Bowler).
|
||||||
|
|
||||||
|
Version 1.6.23rc01 [June 2, 2016]
|
||||||
|
Corrected progressive read input buffer in pngvalid.c. The previous version
|
||||||
|
the code invariably passed just one byte at a time to libpng. The intent
|
||||||
|
was to pass a random number of bytes in the range 0..511.
|
||||||
|
Moved sse2 prototype from pngpriv.h to contrib/intel/intel_sse.patch.
|
||||||
|
Added missing ")" in pngerror.c (Matt Sarrett).
|
||||||
|
|
||||||
|
Version 1.6.23rc02 [June 4, 2016]
|
||||||
|
Fixed undefined behavior in png_push_save_buffer(). Do not call
|
||||||
|
memcpy() with a null source, even if count is zero (Leon Scroggins III).
|
||||||
|
|
||||||
|
Version 1.6.23 [June 9, 2016]
|
||||||
|
Fixed bad link to RFC2083 in png.5 (Nikola Forro).
|
||||||
|
|
||||||
|
Version 1.6.24beta01 [June 11, 2016]
|
||||||
|
Avoid potential overflow of the PNG_IMAGE_SIZE macro. This macro
|
||||||
|
is not used within libpng, but is used in some of the examples.
|
||||||
|
|
||||||
|
Version 1.6.24beta02 [June 23, 2016]
|
||||||
|
Correct filter heuristic overflow handling. This was broken when the
|
||||||
|
write filter code was moved out-of-line; if there is a single filter and
|
||||||
|
the heuristic sum overflows the calculation of the filtered line is not
|
||||||
|
completed. In versions prior to 1.6 the code was duplicated in-line
|
||||||
|
and the check not performed, so the filter operation completed; however,
|
||||||
|
in the multi-filter case where the sum is performed the 'none' filter would
|
||||||
|
be selected if all the sums overflowed, even if it wasn't in the filter
|
||||||
|
list. The fix to the first problem is simply to provide PNG_SIZE_MAX as
|
||||||
|
the current lmins sum value; this means the sum can never exceed it and
|
||||||
|
overflows silently. A reasonable compiler that does choose to inline
|
||||||
|
the code will simply eliminate the sum check.
|
||||||
|
The fix to the second problem is to use high precision arithmetic (this is
|
||||||
|
implemented in 1.7), however a simple safe fix here is to chose the lowest
|
||||||
|
numbered filter in the list from png_set_filter (this only works if the
|
||||||
|
first problem is also fixed) (John Bowler).
|
||||||
|
Use a more efficient absolute value calculation on SSE2 (Matthieu Darbois).
|
||||||
|
Fixed the case where PNG_IMAGE_BUFFER_SIZE can overflow in the application
|
||||||
|
as a result of the application using an increased 'row_stride'; previously
|
||||||
|
png_image_finish_read only checked for overflow on the base calculation of
|
||||||
|
components. (I.e. it checked for overflow of a 32-bit number on the total
|
||||||
|
number of pixel components in the output format, not the possibly padded row
|
||||||
|
length and not the number of bytes, which for linear formats is twice the
|
||||||
|
number of components.)
|
||||||
|
MSVC does not like '-(unsigned)', so replaced it with 0U-(unsigned)
|
||||||
|
MSVC does not like (uInt) = -(unsigned) (i.e. as an initializer), unless
|
||||||
|
the conversion is explicitly invoked by a cast.
|
||||||
|
Put the SKIP definition in the correct place. It needs to come after the
|
||||||
|
png.h include (see all the other .c files in contrib/libtests) because it
|
||||||
|
depends on PNG_LIBPNG_VER.
|
||||||
|
Removed the three compile warning options from the individual project
|
||||||
|
files into the zlib.props globals. It increases the warning level from 4
|
||||||
|
to All and adds a list of the warnings that need to be turned off. This is
|
||||||
|
semi-documentary; the intent is to tell libpng users which warnings have
|
||||||
|
been examined and judged non-fixable at present. The warning about
|
||||||
|
structure padding is fixable, but it would be a significant change (moving
|
||||||
|
structure members around).
|
||||||
|
|
||||||
|
Version 1.6.24beta03 [July 4, 2016]
|
||||||
|
Optimized absolute value calculation in filter selection, similar to
|
||||||
|
code in the PAETH decoder in pngrutil.c. Build with PNG_USE_ABS to
|
||||||
|
use this.
|
||||||
|
Added pngcp to the build together with a pngcp.dfa configuration test.
|
||||||
|
Added high resolution timing to pngcp.
|
||||||
|
Added "Common linking failures" section to INSTALL.
|
||||||
|
Relocated misplaced #endif in png.c sRGB profile checking.
|
||||||
|
Fixed two Coverity issues in pngcp.c.
|
||||||
|
|
||||||
|
Version 1.6.24beta04 [July 8, 2016]
|
||||||
|
Avoid filter-selection heuristic sum calculations in cases where only one
|
||||||
|
filter is a candidate for selection. This trades off code size (added
|
||||||
|
private png_setup_*_row_only() functions) for speed.
|
||||||
|
|
||||||
|
Version 1.6.24beta05 [July 13, 2016]
|
||||||
|
Fixed some indentation to comply with our coding style.
|
||||||
|
Added contrib/tools/reindent.
|
||||||
|
|
||||||
|
Version 1.6.24beta06 [July 18, 2016]
|
||||||
|
Fixed more indentation to comply with our coding style.
|
||||||
|
Eliminated unnecessary tests of boolean png_isaligned() vs 0.
|
||||||
|
|
||||||
|
Version 1.6.24rc01 [July 25, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.24rc02 [August 1, 2016]
|
||||||
|
Conditionally compile SSE2 headers in contrib/intel/intel_sse.patch
|
||||||
|
Conditionally compile png_decompress_chunk().
|
||||||
|
|
||||||
|
Version 1.6.24rc03 [August 2, 2016]
|
||||||
|
Conditionally compile ARM_NEON headers in pngpriv.h
|
||||||
|
Updated contrib/intel/intel_sse.patch
|
||||||
|
|
||||||
|
Version 1.6.24[August 4, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.25beta01 [August 12, 2016]
|
||||||
|
Reject oversized iCCP profile immediately.
|
||||||
|
Cleaned up PNG_DEBUG compile of pngtest.c.
|
||||||
|
Conditionally compile png_inflate().
|
||||||
|
|
||||||
|
Version 1.6.25beta02 [August 18, 2016]
|
||||||
|
Don't install pngcp; it conflicts with pngcp in the pngtools package.
|
||||||
|
Minor editing of INSTALL, (whitespace, added copyright line)
|
||||||
|
|
||||||
|
Version 1.6.25rc01 [August 24, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.25rc02 [August 29, 2016]
|
||||||
|
Added MIPS support (Mandar Sahastrabuddhe <Mandar.Sahastrabuddhe@imgtec.com>).
|
||||||
|
Only the UP filter is currently implemented.
|
||||||
|
|
||||||
|
Version 1.6.25rc03 [August 29, 2016]
|
||||||
|
Rebased contrib/intel/intel_sse.patch after the MIPS implementation.
|
||||||
|
|
||||||
|
Version 1.6.25rc04 [August 30, 2016]
|
||||||
|
Added MIPS support for SUB, AVG, and PAETH filters (Mandar Sahastrabuddhe).
|
||||||
|
|
||||||
|
Version 1.6.25rc05 [August 30, 2016]
|
||||||
|
Rebased contrib/intel/intel_sse.patch after the MIPS implementation update..
|
||||||
|
|
||||||
|
Version 1.6.25 [September 1, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.26beta01 [September 26, 2016]
|
||||||
|
Fixed handling zero length IDAT in pngfix (bug report by Agostino Sarubbo,
|
||||||
|
bugfix by John Bowler).
|
||||||
|
Do not issue a png_error() on read in png_set_pCAL() because png_handle_pCAL
|
||||||
|
has allocated memory that libpng needs to free.
|
||||||
|
Conditionally compile png_set_benign_errors() in pngread.c and pngtest.c
|
||||||
|
Issue a png_benign_error instead of a png_error on ADLER32 mismatch
|
||||||
|
while decoding compressed data chunks.
|
||||||
|
Changed PNG_ZLIB_VERNUM to ZLIB_VERNUM in pngpriv.h, pngstruct.h, and
|
||||||
|
pngrutil.c.
|
||||||
|
If CRC handling of critical chunks has been set to PNG_CRC_QUIET_USE,
|
||||||
|
ignore the ADLER32 checksum in the IDAT chunk as well as the chunk CRCs.
|
||||||
|
Issue png_benign_error() on ADLER32 checksum mismatch instead of png_error().
|
||||||
|
Add tests/badcrc.png and tests/badadler.png to tests/pngtest.
|
||||||
|
Merged pngtest.c with libpng-1.7.0beta84/pngtest.c
|
||||||
|
|
||||||
|
Version 1.6.26beta02 [October 1, 2016]
|
||||||
|
Updated the documentation about CRC and ADLER32 handling.
|
||||||
|
Quieted 117 warnings from clang-3.8 in pngtrans.c, pngread.c,
|
||||||
|
pngwrite.c, pngunknown.c, and pngvalid.c.
|
||||||
|
Quieted 58 (out of 144) -Wconversion compiler warnings by changing
|
||||||
|
flag definitions in pngpriv.h from 0xnnnn to 0xnnnnU and trivial changes
|
||||||
|
in png.c, pngread.c, and pngwutil.c.
|
||||||
|
|
||||||
|
Version 1.6.26beta03 [October 2, 2016]
|
||||||
|
Removed contrib/libtests/*.orig and *.rej that slipped into the tarballs.
|
||||||
|
Quieted the 86 remaining -Wconversion compiler warnings by
|
||||||
|
revising the png_isaligned() macro and trivial changes in png.c,
|
||||||
|
pngerror.c, pngget.c, pngmem.c, pngset.c, pngrtran.c, pngrutil.c,
|
||||||
|
pngwtran.c, pngwrite.c, and pngwutil.c.
|
||||||
|
|
||||||
|
Version 1.6.26beta04 [October 3, 2016]
|
||||||
|
Quieted (bogus?) clang warnings about "absolute value has no effect"
|
||||||
|
when PNG_USE_ABS is defined.
|
||||||
|
Fixed offsets in contrib/intel/intel_sse.patch
|
||||||
|
|
||||||
|
Version 1.6.26beta05 [October 6, 2016]
|
||||||
|
Changed integer constant 4294967294 to unsigned 4294967294U in pngconf.h
|
||||||
|
to avoid a signed/unsigned compare in the preprocessor.
|
||||||
|
|
||||||
|
Version 1.6.26beta06 [October 7, 2016]
|
||||||
|
Use zlib-1.2.8.1 inflateValidate() instead of inflateReset2() to
|
||||||
|
optionally avoid ADLER32 evaluation.
|
||||||
|
|
||||||
|
Version 1.6.26rc01 [October 12, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.26 [October 20, 2016]
|
||||||
|
Cosmetic change, "ptr != 0" to "ptr != NULL" in png.c and pngrutil.c
|
||||||
|
Despammed email addresses (replaced "@" with " at ").
|
||||||
|
|
||||||
|
Version 1.6.27beta01 [November 2, 2016]
|
||||||
|
Restrict the new ADLER32-skipping to IDAT chunks. It broke iCCP chunk
|
||||||
|
handling: an erroneous iCCP chunk would throw a png_error and reject the
|
||||||
|
entire PNG image instead of rejecting just the iCCP chunk with a warning,
|
||||||
|
if built with zlib-1.2.8.1.
|
||||||
|
|
||||||
|
Version 1.6.27rc01 [December 27, 2016]
|
||||||
|
Control ADLER32 checking with new PNG_IGNORE_ADLER32 option. Fixes
|
||||||
|
an endless loop when handling erroneous ADLER32 checksums; bug
|
||||||
|
introduced in libpng-1.6.26.
|
||||||
|
Removed the use of a macro containing the pre-processor 'defined'
|
||||||
|
operator. It is unclear whether this is valid; a macro that
|
||||||
|
"generates" 'defined' is not permitted, but the use of the word
|
||||||
|
"generates" within the C90 standard seems to imply more than simple
|
||||||
|
substitution of an expression itself containing a well-formed defined
|
||||||
|
operation.
|
||||||
|
Added ARM support to CMakeLists.txt (Andreas Franek).
|
||||||
|
|
||||||
|
Version 1.6.27 [December 29, 2016]
|
||||||
|
Fixed a potential null pointer dereference in png_set_text_2() (bug report
|
||||||
|
and patch by Patrick Keshishian, CVE-2016-10087).
|
||||||
|
|
||||||
|
Version 1.6.28rc01 [January 3, 2017]
|
||||||
|
Fixed arm/aarch64 detection in CMakeLists.txt (Gianfranco Costamagna).
|
||||||
|
Added option to Cmake build allowing a custom location of zlib to be
|
||||||
|
specified in a scenario where libpng is being built as a subproject
|
||||||
|
alongside zlib by another project (Sam Serrels).
|
||||||
|
Changed png_ptr->options from a png_byte to png_uint_32, to accommodate
|
||||||
|
up to 16 options.
|
||||||
|
|
||||||
|
Version 1.6.28rc02 [January 4, 2017]
|
||||||
|
Added "include(GNUInstallDirs)" to CMakeLists.txt (Gianfranco Costamagna).
|
||||||
|
Moved SSE2 optimization code into the main libpng source directory.
|
||||||
|
Configure libpng with "configure --enable-intel-sse" or compile
|
||||||
|
libpng with "-DPNG_INTEL_SSE" in CPPFLAGS to enable it.
|
||||||
|
|
||||||
|
Version 1.6.28rc03 [January 4, 2017]
|
||||||
|
Backed out the SSE optimization and last CMakeLists.txt to allow time for QA.
|
||||||
|
|
||||||
|
Version 1.6.28 [January 5, 2017]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.29beta01 [January 12, 2017]
|
||||||
|
Readded "include(GNUInstallDirs)" to CMakeLists.txt (Gianfranco Costamagna).
|
||||||
|
Moved SSE2 optimization code into the main libpng source directory.
|
||||||
|
Configure libpng with "configure --enable-intel-sse" or compile
|
||||||
|
libpng with "-DPNG_INTEL_SSE" in CPPFLAGS to enable it.
|
||||||
|
Simplified conditional compilation in pngvalid.c, for AIX (Michael Felt).
|
||||||
|
|
||||||
|
Version 1.6.29beta02 [February 22, 2017]
|
||||||
|
Avoid conditional directives that break statements in pngrutil.c (Romero
|
||||||
|
Malaquias)
|
||||||
|
The contrib/examples/pngtopng.c recovery code was in the wrong "if"
|
||||||
|
branches; the comments were correct.
|
||||||
|
Added code for PowerPC VSX optimisation (Vadim Barkov).
|
||||||
|
|
||||||
|
Version 1.6.29beta03 [March 1, 2017]
|
||||||
|
Avoid potential overflow of shift operations in png_do_expand() (Aaron Boxer).
|
||||||
|
Change test ZLIB_VERNUM >= 0x1281 to ZLIB_VERNUM >= 0x1290 in pngrutil.c
|
||||||
|
because Solaris 11 distributes zlib-1.2.8.f that is older than 1.2.8.1,
|
||||||
|
as suggested in zlib FAQ, item 24.
|
||||||
|
Suppress clang warnings about implicit sign changes in png.c
|
||||||
|
|
||||||
|
Version 1.6.29 [March 16, 2017]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.30beta01 [April 1, 2017]
|
||||||
|
Added missing "$(CPPFLAGS)" to the compile line for c.pic.o in
|
||||||
|
makefile.linux and makefile.solaris-x86 (Cosmin).
|
||||||
|
Revised documentation of png_get_error_ptr() in the libpng manual.
|
||||||
|
Silence clang -Wcomma and const drop warnings (Viktor Szakats).
|
||||||
|
Update Sourceforge URLs in documentation (https instead of http).
|
||||||
|
|
||||||
|
Version 1.6.30beta02 [April 22, 2017]
|
||||||
|
Document need to check for integer overflow when allocating a pixel
|
||||||
|
buffer for multiple rows in contrib/gregbook, contrib/pngminus,
|
||||||
|
example.c, and in the manual (suggested by Jaeseung Choi). This
|
||||||
|
is similar to the bug reported against pngquant in CVE-2016-5735.
|
||||||
|
Removed reference to the obsolete PNG_SAFE_LIMITS macro in the documentation.
|
||||||
|
|
||||||
|
Version 1.6.30beta03 [May 22, 2017]
|
||||||
|
Check for integer overflow in contrib/visupng and contrib/tools/genpng.
|
||||||
|
Do not double evaluate CMAKE_SYSTEM_PROCESSOR in CMakeLists.txt.
|
||||||
|
Test CMAKE_HOST_WIN32 instead of WIN32 in CMakeLists.txt.
|
||||||
|
Fix some URL in documentation.
|
||||||
|
|
||||||
|
Version 1.6.30beta04 [June 7, 2017]
|
||||||
|
Avoid writing an empty IDAT when the last IDAT exactly fills the
|
||||||
|
compression buffer (bug report by Brian Baird). This bug was
|
||||||
|
introduced in libpng-1.6.0.
|
||||||
|
|
||||||
|
Version 1.6.30rc01 [June 14, 2017]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.30rc02 [June 25, 2017]
|
||||||
|
Update copyright year in pnglibconf.h, make ltmain.sh executable.
|
||||||
|
Add a reference to the libpng.download site in README.
|
||||||
|
|
||||||
|
Version 1.6.30 [June 28, 2017]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.31beta01 [July 5, 2017]
|
||||||
|
Guard the definition of _POSIX_SOURCE in pngpriv.h (AIX already defines it;
|
||||||
|
bug report by Michael Felt).
|
||||||
|
Revised pngpriv.h to work around failure to compile arm/filter_neon.S
|
||||||
|
("typedef" directive is unrecognized by the assembler). The problem
|
||||||
|
was introduced in libpng-1.6.30beta01.
|
||||||
|
Added "Requires: zlib" to libpng.pc.in (Pieter Neerincx).
|
||||||
|
Added special case for FreeBSD in arm/filter_neon.S (Maya Rashish).
|
||||||
|
|
||||||
|
Version 1.6.31beta02 [July 8, 2017]
|
||||||
|
Added instructions for disabling hardware optimizations in INSTALL.
|
||||||
|
Added "--enable-hardware-optimizations" configuration flag to enable
|
||||||
|
or disable all hardware optimizations with one flag.
|
||||||
|
|
||||||
|
Version 1.6.31beta03 [July 9, 2017]
|
||||||
|
Updated CMakeLists.txt to add INTEL_SSE and MIPS_MSA platforms.
|
||||||
|
Changed "int" to "png_size_t" in intel/filter_sse2.c to prevent
|
||||||
|
possible integer overflow (Bug report by John Bowler).
|
||||||
|
Quieted "declaration after statement" warnings in intel/filter_sse2.c.
|
||||||
|
Added scripts/makefile-linux-opt, which has hardware optimizations enabled.
|
||||||
|
|
||||||
|
Version 1.6.31beta04 [July 11, 2017]
|
||||||
|
Removed one of the GCC-7.1.0 'strict-overflow' warnings that result when
|
||||||
|
integers appear on both sides of a compare. Worked around the others by
|
||||||
|
forcing the strict-overflow setting in the relevant functions to a level
|
||||||
|
where they are not reported (John Bowler).
|
||||||
|
Changed "FALL THROUGH" comments to "FALLTHROUGH" because GCC doesn't like
|
||||||
|
the space.
|
||||||
|
Worked around some C-style casts from (void*) because g++ 5.4.0 objects
|
||||||
|
to them.
|
||||||
|
Increased the buffer size for 'sprint' to pass the gcc 7.1.0 'sprint
|
||||||
|
overflow' check that is on by default with -Wall -Wextra.
|
||||||
|
|
||||||
|
Version 1.6.31beta05 [July 13, 2017]
|
||||||
|
Added eXIf chunk support.
|
||||||
|
|
||||||
|
Version 1.6.31beta06 [July 17, 2017]
|
||||||
|
Added a minimal eXIf chunk (with Orientation and FocalLengthIn35mmFilm
|
||||||
|
tags) to pngtest.png.
|
||||||
|
|
||||||
|
Version 1.6.31beta07 [July 18, 2017]
|
||||||
|
Revised the eXIf chunk in pngtest.png to fix "Bad IFD1 Directory" warning.
|
||||||
|
|
||||||
|
Version 1.6.31rc01 [July 19, 2017]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.31rc02 [July 25, 2017]
|
||||||
|
Fixed typo in example.c (png_free_image should be png_image_free) (Bug
|
||||||
|
report by John Smith)
|
||||||
|
|
||||||
|
Version 1.6.31 [July 27, 2017]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.32beta01 [July 31, 2017]
|
||||||
|
Avoid possible NULL dereference in png_handle_eXIf when benign_errors
|
||||||
|
are allowed. Avoid leaking the input buffer "eXIf_buf".
|
||||||
|
Eliminated png_ptr->num_exif member from pngstruct.h and added num_exif
|
||||||
|
to arguments for png_get_eXIf() and png_set_eXIf().
|
||||||
|
Added calls to png_handle_eXIf(() in pngread.c and png_write_eXIf() in
|
||||||
|
pngwrite.c, and made various other fixes to png_write_eXIf().
|
||||||
|
Changed name of png_get_eXIF and png_set_eXIf() to png_get_eXIf_1() and
|
||||||
|
png_set_eXIf_1(), respectively, to avoid breaking API compatibility
|
||||||
|
with libpng-1.6.31.
|
||||||
|
|
||||||
|
Version 1.6.32beta02 [August 1, 2017]
|
||||||
|
Updated contrib/libtests/pngunknown.c with eXIf chunk.
|
||||||
|
|
||||||
|
Version 1.6.32beta03 [August 2, 2017]
|
||||||
|
Initialized btoa[] in pngstest.c
|
||||||
|
Stop memory leak when returning from png_handle_eXIf() with an error
|
||||||
|
(Bug report from the OSS-fuzz project).
|
||||||
|
|
||||||
|
Version 1.6.32beta04 [August 2, 2017]
|
||||||
|
Replaced local eXIf_buf with info_ptr-eXIf_buf in png_handle_eXIf().
|
||||||
|
Update libpng.3 and libpng-manual.txt about eXIf functions.
|
||||||
|
|
||||||
|
Version 1.6.32beta05 [August 2, 2017]
|
||||||
|
Restored png_get_eXIf() and png_set_eXIf() to maintain API compatibility.
|
||||||
|
|
||||||
|
Version 1.6.32beta06 [August 2, 2017]
|
||||||
|
Removed png_get_eXIf_1() and png_set_eXIf_1().
|
||||||
|
|
||||||
|
Version 1.6.32beta07 [August 3, 2017]
|
||||||
|
Check length of all chunks except IDAT against user limit to fix an
|
||||||
|
OSS-fuzz issue (Fixes CVE-2017-12652).
|
||||||
|
|
||||||
|
Version 1.6.32beta08 [August 3, 2017]
|
||||||
|
Check length of IDAT against maximum possible IDAT size, accounting
|
||||||
|
for height, rowbytes, interlacing and zlib/deflate overhead.
|
||||||
|
Restored png_get_eXIf_1() and png_set_eXIf_1(), because strlen(eXIf_buf)
|
||||||
|
does not work (the eXIf chunk data can contain zeroes).
|
||||||
|
|
||||||
|
Version 1.6.32beta09 [August 3, 2017]
|
||||||
|
Require cmake-2.8.8 in CMakeLists.txt. Revised symlink creation,
|
||||||
|
no longer using deprecated cmake LOCATION feature (Clifford Yapp).
|
||||||
|
Fixed five-byte error in the calculation of IDAT maximum possible size.
|
||||||
|
|
||||||
|
Version 1.6.32beta10 [August 5, 2017]
|
||||||
|
Moved chunk-length check into a png_check_chunk_length() private
|
||||||
|
function (Suggested by Max Stepin).
|
||||||
|
Moved bad pngs from tests to contrib/libtests/crashers
|
||||||
|
Moved testing of bad pngs into a separate tests/pngtest-badpngs script
|
||||||
|
Added the --xfail (expected FAIL) option to pngtest.c. It writes XFAIL
|
||||||
|
in the output but PASS for the libpng test.
|
||||||
|
Require cmake-3.0.2 in CMakeLists.txt (Clifford Yapp).
|
||||||
|
Fix "const" declaration info_ptr argument to png_get_eXIf_1() and the
|
||||||
|
num_exif argument to png_get_eXIf_1() (Github Issue 171).
|
||||||
|
|
||||||
|
Version 1.6.32beta11 [August 7, 2017]
|
||||||
|
Added "eXIf" to "chunks_to_ignore[]" in png_set_keep_unknown_chunks().
|
||||||
|
Added huge_IDAT.png and empty_ancillary_chunks.png to testpngs/crashers.
|
||||||
|
Make pngtest --strict, --relax, --xfail options imply -m (multiple).
|
||||||
|
Removed unused chunk_name parameter from png_check_chunk_length().
|
||||||
|
Relocated setting free_me for eXIf data, to stop an OSS-fuzz leak.
|
||||||
|
Initialize profile_header[] in png_handle_iCCP() to fix OSS-fuzz issue.
|
||||||
|
Initialize png_ptr->row_buf[0] to 255 in png_read_row() to fix OSS-fuzz UMR.
|
||||||
|
Attempt to fix a UMR in png_set_text_2() to fix OSS-fuzz issue.
|
||||||
|
Increase minimum zlib stream from 9 to 14 in png_handle_iCCP(), to account
|
||||||
|
for the minimum 'deflate' stream, and relocate the test to a point
|
||||||
|
after the keyword has been read.
|
||||||
|
Check that the eXIf chunk has at least 2 bytes and begins with "II" or "MM".
|
||||||
|
|
||||||
|
Version 1.6.32rc01 [August 18, 2017]
|
||||||
|
Added a set of "huge_xxxx_chunk.png" files to contrib/testpngs/crashers,
|
||||||
|
one for each known chunk type, with length = 2GB-1.
|
||||||
|
Check for 0 return from png_get_rowbytes() and added some (size_t) typecasts
|
||||||
|
in contrib/pngminus/*.c to stop some Coverity issues (162705, 162706,
|
||||||
|
and 162707).
|
||||||
|
Renamed chunks in contrib/testpngs/crashers to avoid having files whose
|
||||||
|
names differ only in case; this causes problems with some platforms
|
||||||
|
(github issue #172).
|
||||||
|
|
||||||
|
Version 1.6.32rc02 [August 22, 2017]
|
||||||
|
Added contrib/oss-fuzz directory which contains files used by the oss-fuzz
|
||||||
|
project (https://github.com/google/oss-fuzz/tree/master/projects/libpng).
|
||||||
|
|
||||||
|
Version 1.6.32 [August 24, 2017]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.33beta01 [August 28, 2017]
|
||||||
|
Added PNGMINUS_UNUSED macro to contrib/pngminus/p*.c and added missing
|
||||||
|
parenthesis in contrib/pngminus/pnm2png.c (bug report by Christian Hesse).
|
||||||
|
Fixed off-by-one error in png_do_check_palette_indexes() (Bug report
|
||||||
|
by Mick P., Source Forge Issue #269).
|
||||||
|
|
||||||
|
Version 1.6.33beta02 [September 3, 2017]
|
||||||
|
Initialize png_handler.row_ptr in contrib/oss-fuzz/libpng_read_fuzzer.cc
|
||||||
|
to fix shortlived oss-fuzz issue 3234.
|
||||||
|
Compute a larger limit on IDAT because some applications write a deflate
|
||||||
|
buffer for each row (Bug report by Andrew Church).
|
||||||
|
Use current date (DATE) instead of release-date (RDATE) in last
|
||||||
|
changed date of contrib/oss-fuzz files.
|
||||||
|
Enabled ARM support in CMakeLists.txt (Bernd Kuhls).
|
||||||
|
|
||||||
|
Version 1.6.33beta03 [September 14, 2017]
|
||||||
|
Fixed incorrect typecast of some arguments to png_malloc() and
|
||||||
|
png_calloc() that were png_uint_32 instead of png_alloc_size_t
|
||||||
|
(Bug report by "irwir" in Github libpng issue #175).
|
||||||
|
Use pnglibconf.h.prebuilt when building for ANDROID with cmake (Github
|
||||||
|
issue 162, by rcdailey).
|
||||||
|
|
||||||
|
Version 1.6.33rc01 [September 20, 2017]
|
||||||
|
Initialize memory allocated by png_inflate to zero, using memset, to
|
||||||
|
stop an oss-fuzz "use of uninitialized value" detection in png_set_text_2()
|
||||||
|
due to truncated iTXt or zTXt chunk.
|
||||||
|
Initialize memory allocated by png_read_buffer to zero, using memset, to
|
||||||
|
stop an oss-fuzz "use of uninitialized value" detection in
|
||||||
|
png_icc_check_tag_table() due to truncated iCCP chunk.
|
||||||
|
Removed a redundant test (suggested by "irwir" in Github issue #180).
|
||||||
|
|
||||||
|
Version 1.6.33rc02 [September 23, 2017]
|
||||||
|
Added an interlaced version of each file in contrib/pngsuite.
|
||||||
|
Relocate new memset() call in pngrutil.c.
|
||||||
|
Removed more redundant tests (suggested by "irwir" in Github issue #180).
|
||||||
|
Add support for loading images with associated alpha in the Simplified
|
||||||
|
API (Samuel Williams).
|
||||||
|
|
||||||
|
Version 1.6.33 [September 28, 2017]
|
||||||
|
Revert contrib/oss-fuzz/libpng_read_fuzzer.cc to libpng-1.6.32 state.
|
||||||
|
Initialize png_handler.row_ptr in contrib/oss-fuzz/libpng_read_fuzzer.cc
|
||||||
|
Add end_info structure and png_read_end() to the libpng fuzzer.
|
||||||
|
|
||||||
|
Version 1.6.34 [September 29, 2017]
|
||||||
|
Removed contrib/pngsuite/i*.png; some of them caused test failures.
|
||||||
|
|
||||||
|
Version 1.6.35beta01 [March 6, 2018]
|
||||||
|
Restored 21 of the contrib/pngsuite/i*.png, which do not cause test
|
||||||
|
failures. Placed the remainder in contrib/pngsuite/interlaced/i*.png.
|
||||||
|
Added calls to png_set_*() transforms commonly used by browsers to
|
||||||
|
the fuzzer.
|
||||||
|
Removed some unnecessary brackets in pngrtran.c
|
||||||
|
Fixed miscellaneous typos (Patch by github user "luzpaz").
|
||||||
|
Change "ASM C" to "C ASM" in CMakeLists.txt
|
||||||
|
Fixed incorrect handling of bKGD chunk in sub-8-bit files (Cosmin)
|
||||||
|
Added hardware optimization directories to zip and 7z distributions.
|
||||||
|
Fixed incorrect bitmask for options.
|
||||||
|
Fixed many spelling typos.
|
||||||
|
|
||||||
|
Version 1.6.35beta02 [March 28, 2018]
|
||||||
|
Make png_get_iCCP consistent with man page (allow compression-type argument
|
||||||
|
to be NULL, bug report by Lenard Szolnoki).
|
||||||
|
|
||||||
|
Version 1.6.35 [July 15, 2018]
|
||||||
|
Replaced the remaining uses of png_size_t with size_t (Cosmin)
|
||||||
|
Fixed the calculation of row_factor in png_check_chunk_length
|
||||||
|
(reported by Thuan Pham in SourceForge issue #278)
|
||||||
|
Added missing parentheses to a macro definition
|
||||||
|
(suggested by "irwir" in GitHub issue #216)
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
||||||
(subscription required; visit
|
(subscription required; visit
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
||||||
to subscribe)
|
to subscribe).
|
||||||
or to glennrp at users.sourceforge.net
|
|
||||||
|
|
||||||
Glenn R-P
|
Glenn R-P
|
||||||
#endif
|
|
||||||
|
|||||||
817
CMakeLists.txt
@@ -1,28 +1,57 @@
|
|||||||
# CMakeLists.txt
|
# CMakeLists.txt
|
||||||
|
|
||||||
# Copyright (C) 2007-2015 Glenn Randers-Pehrson
|
# Copyright (C) 2007,2009-2018 Glenn Randers-Pehrson
|
||||||
|
# Written by Christian Ehrlicher, 2007
|
||||||
|
# Revised by Roger Lowman, 2009-2010
|
||||||
|
# Revised by Clifford Yapp, 2011-2012
|
||||||
|
# Revised by Roger Leigh, 2016
|
||||||
|
# Revised by Andreas Franek, 2016
|
||||||
|
|
||||||
# This code is released under the libpng license.
|
# This code is released under the libpng license.
|
||||||
# For conditions of distribution and use, see the disclaimer
|
# For conditions of distribution and use, see the disclaimer
|
||||||
# and license in png.h
|
# and license in png.h
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.4.4)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
|
cmake_policy(VERSION 3.0.2)
|
||||||
|
|
||||||
|
# Set MacOSX @rpath usage globally.
|
||||||
|
if (POLICY CMP0020)
|
||||||
|
cmake_policy(SET CMP0020 NEW)
|
||||||
|
endif(POLICY CMP0020)
|
||||||
|
if (POLICY CMP0042)
|
||||||
|
cmake_policy(SET CMP0042 NEW)
|
||||||
|
endif(POLICY CMP0042)
|
||||||
|
# Use new variable expansion policy.
|
||||||
|
if (POLICY CMP0053)
|
||||||
|
cmake_policy(SET CMP0053 NEW)
|
||||||
|
endif(POLICY CMP0053)
|
||||||
|
if (POLICY CMP0054)
|
||||||
|
cmake_policy(SET CMP0054 NEW)
|
||||||
|
endif(POLICY CMP0054)
|
||||||
|
|
||||||
set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")
|
set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")
|
||||||
|
|
||||||
project(libpng C)
|
project(libpng C ASM)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
set(PNGLIB_MAJOR 1)
|
set(PNGLIB_MAJOR 1)
|
||||||
set(PNGLIB_MINOR 6)
|
set(PNGLIB_MINOR 6)
|
||||||
set(PNGLIB_RELEASE 20)
|
set(PNGLIB_RELEASE 35)
|
||||||
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
||||||
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
|
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
|
||||||
|
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
# needed packages
|
# needed packages
|
||||||
find_package(ZLIB REQUIRED)
|
|
||||||
include_directories(${ZLIB_INCLUDE_DIR})
|
#Allow users to specify location of Zlib,
|
||||||
|
# Useful if zlib is being built alongside this as a sub-project
|
||||||
|
option(PNG_BUILD_ZLIB "Custom zlib Location, else find_package is used" OFF)
|
||||||
|
|
||||||
|
IF(NOT PNG_BUILD_ZLIB)
|
||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
include_directories(${ZLIB_INCLUDE_DIR})
|
||||||
|
ENDIF(NOT PNG_BUILD_ZLIB)
|
||||||
|
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
find_library(M_LIBRARY
|
find_library(M_LIBRARY
|
||||||
@@ -47,32 +76,391 @@ option(PNG_FRAMEWORK "Build OS X framework" OFF)
|
|||||||
option(PNG_DEBUG "Build with debug output" OFF)
|
option(PNG_DEBUG "Build with debug output" OFF)
|
||||||
option(PNGARG "Disable ANSI-C prototypes" OFF)
|
option(PNGARG "Disable ANSI-C prototypes" OFF)
|
||||||
|
|
||||||
|
option(PNG_HARDWARE_OPTIMIZATIONS "Enable Hardware Optimizations" ON)
|
||||||
|
|
||||||
|
|
||||||
|
set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names")
|
||||||
|
set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings")
|
||||||
|
|
||||||
|
if(PNG_HARDWARE_OPTIMIZATIONS)
|
||||||
|
# set definitions and sources for arm
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
|
||||||
|
set(PNG_ARM_NEON_POSSIBLE_VALUES check on off)
|
||||||
|
set(PNG_ARM_NEON "check" CACHE STRING "Enable ARM NEON optimizations:
|
||||||
|
check: (default) use internal checking code;
|
||||||
|
off: disable the optimizations;
|
||||||
|
on: turn on unconditionally.")
|
||||||
|
set_property(CACHE PNG_ARM_NEON PROPERTY STRINGS
|
||||||
|
${PNG_ARM_NEON_POSSIBLE_VALUES})
|
||||||
|
list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index)
|
||||||
|
if(index EQUAL -1)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
" PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]")
|
||||||
|
elseif(NOT ${PNG_ARM_NEON} STREQUAL "no")
|
||||||
|
set(libpng_arm_sources
|
||||||
|
arm/arm_init.c
|
||||||
|
arm/filter_neon.S
|
||||||
|
arm/filter_neon_intrinsics.c)
|
||||||
|
|
||||||
|
if(${PNG_ARM_NEON} STREQUAL "on")
|
||||||
|
add_definitions(-DPNG_ARM_NEON_OPT=2)
|
||||||
|
elseif(${PNG_ARM_NEON} STREQUAL "check")
|
||||||
|
add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-DPNG_ARM_NEON_OPT=0)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for powerpc
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*" )
|
||||||
|
set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off)
|
||||||
|
set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations:
|
||||||
|
off: disable the optimizations.")
|
||||||
|
set_property(CACHE PNG_POWERPC_VSX PROPERTY STRINGS
|
||||||
|
${PNG_POWERPC_VSX_POSSIBLE_VALUES})
|
||||||
|
list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index)
|
||||||
|
if(index EQUAL -1)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
" PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]")
|
||||||
|
elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "no")
|
||||||
|
set(libpng_powerpc_sources
|
||||||
|
powerpc/powerpc_init.c
|
||||||
|
powerpc/filter_vsx_intrinsics.c)
|
||||||
|
if(${PNG_POWERPC_VSX} STREQUAL "on")
|
||||||
|
add_definitions(-DPNG_POWERPC_VSX_OPT=2)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-DPNG_POWERPC_VSX_OPT=0)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for intel
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*" )
|
||||||
|
set(PNG_INTEL_SSE_POSSIBLE_VALUES on off)
|
||||||
|
set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations:
|
||||||
|
off: disable the optimizations")
|
||||||
|
set_property(CACHE PNG_INTEL_SSE PROPERTY STRINGS
|
||||||
|
${PNG_INTEL_SSE_POSSIBLE_VALUES})
|
||||||
|
list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index)
|
||||||
|
if(index EQUAL -1)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
" PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]")
|
||||||
|
elseif(NOT ${PNG_INTEL_SSE} STREQUAL "no")
|
||||||
|
set(libpng_intel_sources
|
||||||
|
intel/intel_init.c
|
||||||
|
intel/filter_sse2_intrinsics.c)
|
||||||
|
if(${PNG_INTEL_SSE} STREQUAL "on")
|
||||||
|
add_definitions(-DPNG_INTEL_SSE_OPT=1)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-DPNG_INTEL_SSE_OPT=0)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for MIPS
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*" )
|
||||||
|
set(PNG_MIPS_MSA_POSSIBLE_VALUES on off)
|
||||||
|
set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations:
|
||||||
|
off: disable the optimizations")
|
||||||
|
set_property(CACHE PNG_MIPS_MSA PROPERTY STRINGS
|
||||||
|
${PNG_MIPS_MSA_POSSIBLE_VALUES})
|
||||||
|
list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index)
|
||||||
|
if(index EQUAL -1)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
" PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]")
|
||||||
|
elseif(NOT ${PNG_MIPS_MSA} STREQUAL "no")
|
||||||
|
set(libpng_mips_sources
|
||||||
|
mips/mips_init.c
|
||||||
|
mips/filter_msa_intrinsics.c)
|
||||||
|
if(${PNG_MIPS_MSA} STREQUAL "on")
|
||||||
|
add_definitions(-DPNG_MIPS_MSA_OPT=2)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-DPNG_MIPS_MSA_OPT=0)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif(PNG_HARDWARE_OPTIMIZATIONS)
|
||||||
|
|
||||||
# SET LIBNAME
|
# SET LIBNAME
|
||||||
set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
||||||
|
|
||||||
# to distinguish between debug and release lib
|
# to distinguish between debug and release lib
|
||||||
set(CMAKE_DEBUG_POSTFIX "d")
|
set(CMAKE_DEBUG_POSTFIX "d")
|
||||||
|
|
||||||
# Use the prebuilt pnglibconf.h file from the scripts folder
|
include(CheckCSourceCompiles)
|
||||||
# TODO: fix this by building with awk; without this no cmake build can be
|
option(ld-version-script "Enable linker version script" ON)
|
||||||
# configured directly (to do so indirectly use your local awk to build a
|
if(ld-version-script AND NOT APPLE)
|
||||||
# pnglibconf.h in the build directory.)
|
# Check if LD supports linker scripts.
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" "VERS_1 {
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
|
global: sym;
|
||||||
|
local: *;
|
||||||
|
};
|
||||||
|
|
||||||
|
VERS_2 {
|
||||||
|
global: sym2;
|
||||||
|
main;
|
||||||
|
} VERS_1;
|
||||||
|
")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'")
|
||||||
|
check_c_source_compiles("void sym(void) {}
|
||||||
|
void sym2(void) {}
|
||||||
|
int main(void) {return 0;}
|
||||||
|
" HAVE_LD_VERSION_SCRIPT)
|
||||||
|
if(NOT HAVE_LD_VERSION_SCRIPT)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE} "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
|
||||||
|
check_c_source_compiles("void sym(void) {}
|
||||||
|
void sym2(void) {}
|
||||||
|
int main(void) {return 0;}
|
||||||
|
" HAVE_SOLARIS_LD_VERSION_SCRIPT)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
|
||||||
|
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Find symbol prefix. Likely obsolete and unnecessary with recent
|
||||||
|
# toolchains (it's not done in many other projects).
|
||||||
|
function(symbol_prefix)
|
||||||
|
set(SYMBOL_PREFIX)
|
||||||
|
|
||||||
|
execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E" "-"
|
||||||
|
INPUT_FILE /dev/null
|
||||||
|
OUTPUT_VARIABLE OUT
|
||||||
|
RESULT_VARIABLE STATUS)
|
||||||
|
|
||||||
|
if(CPP_FAIL)
|
||||||
|
message(WARNING "Failed to run the C preprocessor")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REPLACE "\n" ";" OUT "${OUT}")
|
||||||
|
foreach(line ${OUT})
|
||||||
|
string(REGEX MATCH "^PREFIX=" found_match "${line}")
|
||||||
|
if(found_match)
|
||||||
|
STRING(REGEX REPLACE "^PREFIX=(.*\)" "\\1" prefix "${line}")
|
||||||
|
string(REGEX MATCH "__USER_LABEL_PREFIX__" found_match "${prefix}")
|
||||||
|
if(found_match)
|
||||||
|
STRING(REGEX REPLACE "(.*)__USER_LABEL_PREFIX__(.*)" "\\1\\2" prefix "${prefix}")
|
||||||
|
endif()
|
||||||
|
set(SYMBOL_PREFIX "${prefix}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
message(STATUS "Symbol prefix: ${SYMBOL_PREFIX}")
|
||||||
|
set(SYMBOL_PREFIX "${SYMBOL_PREFIX}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if(UNIX)
|
||||||
|
symbol_prefix()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(AWK NAMES gawk awk)
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
|
if(NOT AWK OR ANDROID)
|
||||||
|
# No awk available to generate sources; use pre-built pnglibconf.h
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
|
||||||
|
add_custom_target(genfiles) # Dummy
|
||||||
|
else()
|
||||||
|
include(CMakeParseArguments)
|
||||||
|
# Generate .chk from .out with awk
|
||||||
|
# generate_chk(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]])
|
||||||
|
function(generate_chk)
|
||||||
|
set(options)
|
||||||
|
set(oneValueArgs INPUT OUTPUT)
|
||||||
|
set(multiValueArgs DEPENDS)
|
||||||
|
cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
if (NOT _GC_INPUT)
|
||||||
|
message(FATAL_ERROR "Invalid arguments. generate_out requires input.")
|
||||||
|
endif()
|
||||||
|
if (NOT _GC_OUTPUT)
|
||||||
|
message(FATAL_ERROR "Invalid arguments. generate_out requires output.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT "${_GC_OUTPUT}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DINPUT=${_GC_INPUT}"
|
||||||
|
"-DOUTPUT=${_GC_OUTPUT}"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake"
|
||||||
|
DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Generate .out from .c with awk
|
||||||
|
# generate_out(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]])
|
||||||
|
function(generate_out)
|
||||||
|
set(options)
|
||||||
|
set(oneValueArgs INPUT OUTPUT)
|
||||||
|
set(multiValueArgs DEPENDS)
|
||||||
|
cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
if (NOT _GO_INPUT)
|
||||||
|
message(FATAL_ERROR "Invalid arguments. generate_out requires input.")
|
||||||
|
endif()
|
||||||
|
if (NOT _GO_OUTPUT)
|
||||||
|
message(FATAL_ERROR "Invalid arguments. generate_out requires output.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT "${_GO_OUTPUT}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DINPUT=${_GO_INPUT}"
|
||||||
|
"-DOUTPUT=${_GO_OUTPUT}"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake"
|
||||||
|
DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Generate specific source file with awk
|
||||||
|
# generate_source(OUTPUT outputfile [DEPENDS dep1 [dep2...]])
|
||||||
|
function(generate_source)
|
||||||
|
set(options)
|
||||||
|
set(oneValueArgs OUTPUT)
|
||||||
|
set(multiValueArgs DEPENDS)
|
||||||
|
cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
if (NOT _GSO_OUTPUT)
|
||||||
|
message(FATAL_ERROR "Invalid arguments. generate_source requires output.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DOUTPUT=${_GSO_OUTPUT}"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake"
|
||||||
|
DEPENDS ${_GSO_DEPENDS}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Copy file
|
||||||
|
function(generate_copy source destination)
|
||||||
|
add_custom_command(OUTPUT "${destination}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E remove "${destination}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E copy "${source}"
|
||||||
|
"${destination}"
|
||||||
|
DEPENDS "${source}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Generate scripts/pnglibconf.h
|
||||||
|
generate_source(OUTPUT "scripts/pnglibconf.c"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h")
|
||||||
|
|
||||||
|
# Generate pnglibconf.c
|
||||||
|
generate_source(OUTPUT "pnglibconf.c"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h")
|
||||||
|
|
||||||
|
if(PNG_PREFIX)
|
||||||
|
set(PNGLIBCONF_H_EXTRA_DEPENDS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/macro.lst")
|
||||||
|
set(PNGPREFIX_H_EXTRA_DEPENDS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out")
|
||||||
|
|
||||||
|
# Generate pnglibconf.h
|
||||||
|
generate_source(OUTPUT "pnglibconf.h"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out"
|
||||||
|
${PNGLIBCONF_H_EXTRA_DEPENDS})
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/intprefix.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h")
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/prefix.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out")
|
||||||
|
|
||||||
|
# Generate pngprefix.h
|
||||||
|
generate_source(OUTPUT "pngprefix.h"
|
||||||
|
DEPENDS ${PNGPREFIX_H_EXTRA_DEPENDS})
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/sym.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h")
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt")
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/vers.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h")
|
||||||
|
|
||||||
|
generate_chk(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def")
|
||||||
|
|
||||||
|
add_custom_target(symbol-check DEPENDS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk")
|
||||||
|
|
||||||
|
generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/libpng.sym")
|
||||||
|
generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/libpng.vers")
|
||||||
|
|
||||||
|
add_custom_target(genvers DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers")
|
||||||
|
add_custom_target(gensym DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym")
|
||||||
|
|
||||||
|
add_custom_target("genprebuilt"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DOUTPUT=scripts/pnglibconf.h.prebuilt"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake"
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
|
||||||
|
# A single target handles generation of all generated files. If
|
||||||
|
# they are depended upon separately by multiple targets, this
|
||||||
|
# confuses parallel make (it would require a separate top-level
|
||||||
|
# target for each file to track the dependencies properly).
|
||||||
|
add_custom_target(genfiles DEPENDS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/libpng.sym"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/libpng.vers"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out")
|
||||||
|
endif(NOT AWK OR ANDROID)
|
||||||
|
|
||||||
# OUR SOURCES
|
# OUR SOURCES
|
||||||
set(libpng_public_hdrs
|
set(libpng_public_hdrs
|
||||||
png.h
|
png.h
|
||||||
pngconf.h
|
pngconf.h
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h"
|
||||||
)
|
)
|
||||||
set(libpng_sources
|
set(libpng_private_hdrs
|
||||||
${libpng_public_hdrs}
|
pngpriv.h
|
||||||
pngdebug.h
|
pngdebug.h
|
||||||
pnginfo.h
|
pnginfo.h
|
||||||
pngpriv.h
|
|
||||||
pngstruct.h
|
pngstruct.h
|
||||||
|
)
|
||||||
|
if(AWK AND NOT ANDROID)
|
||||||
|
list(APPEND libpng_private_hdrs "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h")
|
||||||
|
endif()
|
||||||
|
set(libpng_sources
|
||||||
|
${libpng_public_hdrs}
|
||||||
|
${libpng_private_hdrs}
|
||||||
png.c
|
png.c
|
||||||
pngerror.c
|
pngerror.c
|
||||||
pngget.c
|
pngget.c
|
||||||
@@ -88,6 +476,10 @@ set(libpng_sources
|
|||||||
pngwrite.c
|
pngwrite.c
|
||||||
pngwtran.c
|
pngwtran.c
|
||||||
pngwutil.c
|
pngwutil.c
|
||||||
|
${libpng_arm_sources}
|
||||||
|
${libpng_intel_sources}
|
||||||
|
${libpng_mips_sources}
|
||||||
|
${libpng_powerpc_sources}
|
||||||
)
|
)
|
||||||
set(pngtest_sources
|
set(pngtest_sources
|
||||||
pngtest.c
|
pngtest.c
|
||||||
@@ -98,7 +490,18 @@ set(pngvalid_sources
|
|||||||
set(pngstest_sources
|
set(pngstest_sources
|
||||||
contrib/libtests/pngstest.c
|
contrib/libtests/pngstest.c
|
||||||
)
|
)
|
||||||
# SOME NEEDED DEFINITIONS
|
set(pngunknown_sources
|
||||||
|
contrib/libtests/pngunknown.c
|
||||||
|
)
|
||||||
|
set(pngimage_sources
|
||||||
|
contrib/libtests/pngimage.c
|
||||||
|
)
|
||||||
|
set(pngfix_sources
|
||||||
|
contrib/tools/pngfix.c
|
||||||
|
)
|
||||||
|
set(png_fix_itxt_sources
|
||||||
|
contrib/tools/png-fix-itxt.c
|
||||||
|
)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
|
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
|
||||||
@@ -114,33 +517,59 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
|
|||||||
unset(PNG_LIB_TARGETS)
|
unset(PNG_LIB_TARGETS)
|
||||||
|
|
||||||
if(PNG_SHARED)
|
if(PNG_SHARED)
|
||||||
add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
|
add_library(png SHARED ${libpng_sources})
|
||||||
set(PNG_LIB_TARGETS ${PNG_LIB_NAME})
|
set(PNG_LIB_TARGETS png)
|
||||||
|
set_target_properties(png PROPERTIES OUTPUT_NAME ${PNG_LIB_NAME})
|
||||||
|
add_dependencies(png genfiles)
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# msvc does not append 'lib' - do it here to have consistent name
|
# msvc does not append 'lib' - do it here to have consistent name
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
|
set_target_properties(png PROPERTIES PREFIX "lib")
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES IMPORT_PREFIX "lib")
|
set_target_properties(png PROPERTIES IMPORT_PREFIX "lib")
|
||||||
|
endif()
|
||||||
|
target_link_libraries(png ${ZLIB_LIBRARY} ${M_LIBRARY})
|
||||||
|
|
||||||
|
if(UNIX AND AWK)
|
||||||
|
if(HAVE_LD_VERSION_SCRIPT)
|
||||||
|
set_target_properties(png PROPERTIES LINK_FLAGS
|
||||||
|
"-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'")
|
||||||
|
elseif(HAVE_SOLARIS_LD_VERSION_SCRIPT)
|
||||||
|
set_target_properties(png PROPERTIES LINK_FLAGS
|
||||||
|
"-Wl,-M -Wl,'${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PNG_STATIC)
|
if(PNG_STATIC)
|
||||||
# does not work without changing name
|
# does not work without changing name
|
||||||
set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
|
set(PNG_LIB_NAME_STATIC png_static)
|
||||||
add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
|
add_library(png_static STATIC ${libpng_sources})
|
||||||
list(APPEND PNG_LIB_TARGETS ${PNG_LIB_NAME_STATIC})
|
add_dependencies(png_static genfiles)
|
||||||
|
# MSVC doesn't use a different file extension for shared vs. static
|
||||||
|
# libs. We are able to change OUTPUT_NAME to remove the _static
|
||||||
|
# for all other platforms.
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_target_properties(png_static PROPERTIES
|
||||||
|
OUTPUT_NAME "${PNG_LIB_NAME}"
|
||||||
|
CLEAN_DIRECT_OUTPUT 1)
|
||||||
|
else()
|
||||||
|
set_target_properties(png_static PROPERTIES
|
||||||
|
OUTPUT_NAME "${PNG_LIB_NAME}_static"
|
||||||
|
CLEAN_DIRECT_OUTPUT 1)
|
||||||
|
endif()
|
||||||
|
list(APPEND PNG_LIB_TARGETS png_static)
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# msvc does not append 'lib' - do it here to have consistent name
|
# msvc does not append 'lib' - do it here to have consistent name
|
||||||
set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
|
set_target_properties(png_static PROPERTIES PREFIX "lib")
|
||||||
endif()
|
endif()
|
||||||
target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
|
target_link_libraries(png_static ${ZLIB_LIBRARY} ${M_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PNG_FRAMEWORK)
|
if(PNG_FRAMEWORK)
|
||||||
set(PNG_LIB_NAME_FRAMEWORK ${PNG_LIB_NAME}_framework)
|
set(PNG_LIB_NAME_FRAMEWORK png_framework)
|
||||||
add_library(${PNG_LIB_NAME_FRAMEWORK} SHARED ${libpng_sources})
|
add_library(png_framework SHARED ${libpng_sources})
|
||||||
list(APPEND PNG_LIB_TARGETS ${PNG_LIB_NAME_FRAMEWORK})
|
add_dependencies(png_framework genfiles)
|
||||||
set_target_properties(${PNG_LIB_NAME_FRAMEWORK} PROPERTIES
|
list(APPEND PNG_LIB_TARGETS png_framework)
|
||||||
|
set_target_properties(png_framework PROPERTIES
|
||||||
FRAMEWORK TRUE
|
FRAMEWORK TRUE
|
||||||
FRAMEWORK_VERSION ${PNGLIB_VERSION}
|
FRAMEWORK_VERSION ${PNGLIB_VERSION}
|
||||||
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PNGLIB_MAJOR}.${PNGLIB_MINOR}
|
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PNGLIB_MAJOR}.${PNGLIB_MINOR}
|
||||||
@@ -149,7 +578,7 @@ if(PNG_FRAMEWORK)
|
|||||||
XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
|
XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
|
||||||
PUBLIC_HEADER "${libpng_public_hdrs}"
|
PUBLIC_HEADER "${libpng_public_hdrs}"
|
||||||
OUTPUT_NAME png)
|
OUTPUT_NAME png)
|
||||||
target_link_libraries(${PNG_LIB_NAME_FRAMEWORK} ${ZLIB_LIBRARY} ${M_LIBRARY})
|
target_link_libraries(png_framework ${ZLIB_LIBRARY} ${M_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT PNG_LIB_TARGETS)
|
if(NOT PNG_LIB_TARGETS)
|
||||||
@@ -160,79 +589,233 @@ if(NOT PNG_LIB_TARGETS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PNG_SHARED AND WIN32)
|
if(PNG_SHARED AND WIN32)
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
|
set_target_properties(png PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
function(png_add_test)
|
||||||
|
set(options)
|
||||||
|
set(oneValueArgs NAME COMMAND)
|
||||||
|
set(multiValueArgs OPTIONS FILES)
|
||||||
|
cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
|
||||||
|
if (NOT _PAT_NAME)
|
||||||
|
message(FATAL_ERROR "Invalid arguments. png_add_test requires name.")
|
||||||
|
endif()
|
||||||
|
if (NOT _PAT_COMMAND)
|
||||||
|
message(FATAL_ERROR "Invalid arguments. png_add_test requires command.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(TEST_OPTIONS "${_PAT_OPTIONS}")
|
||||||
|
set(TEST_FILES "${_PAT_FILES}")
|
||||||
|
|
||||||
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/test.cmake.in"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake" @ONLY)
|
||||||
|
if(CMAKE_MAJOR_VERSION GREATER 2) # have generator expressions
|
||||||
|
add_test(NAME "${_PAT_NAME}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DLIBPNG=$<TARGET_FILE:png>"
|
||||||
|
"-DTEST_COMMAND=$<TARGET_FILE:${_PAT_COMMAND}>"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake")
|
||||||
|
else() # old 2.x add_test; limited and won't work well on Windows
|
||||||
|
# Note LIBPNG is a dummy value as there are no generator expressions
|
||||||
|
add_test("${_PAT_NAME}" "${CMAKE_COMMAND}"
|
||||||
|
"-DLIBPNG=${CMAKE_CURRENT_BINARY_DIR}/libpng.so"
|
||||||
|
"-DTEST_COMMAND=./${_PAT_COMMAND}"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
if(PNG_TESTS AND PNG_SHARED)
|
if(PNG_TESTS AND PNG_SHARED)
|
||||||
# does not work with msvc due to png_lib_ver issue
|
# Find test PNG files by globbing, but sort lists to ensure
|
||||||
|
# consistency between different filesystems.
|
||||||
|
file(GLOB PNGSUITE_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/*.png")
|
||||||
|
list(SORT PNGSUITE_PNGS)
|
||||||
|
file(GLOB TEST_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/testpngs/*.png")
|
||||||
|
list(SORT TEST_PNGS)
|
||||||
|
|
||||||
|
set(PNGTEST_PNG "${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png")
|
||||||
|
|
||||||
add_executable(pngtest ${pngtest_sources})
|
add_executable(pngtest ${pngtest_sources})
|
||||||
target_link_libraries(pngtest ${PNG_LIB_NAME})
|
target_link_libraries(pngtest png)
|
||||||
add_test(pngtest ./pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
|
|
||||||
#
|
png_add_test(NAME pngtest COMMAND pngtest FILES "${PNGTEST_PNG}")
|
||||||
|
|
||||||
add_executable(pngvalid ${pngvalid_sources})
|
add_executable(pngvalid ${pngvalid_sources})
|
||||||
target_link_libraries(pngvalid ${PNG_LIB_NAME})
|
target_link_libraries(pngvalid png)
|
||||||
add_test(pngvalid ./pngvalid)
|
|
||||||
|
png_add_test(NAME pngvalid-gamma-16-to-8
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-16-to-8)
|
||||||
|
png_add_test(NAME pngvalid-gamma-alpha-mode
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-alpha-mode)
|
||||||
|
png_add_test(NAME pngvalid-gamma-background
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-background)
|
||||||
|
png_add_test(NAME pngvalid-gamma-expand16-alpha-mode
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-alpha-mode --expand16)
|
||||||
|
png_add_test(NAME pngvalid-gamma-expand16-background
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-background --expand16)
|
||||||
|
png_add_test(NAME pngvalid-gamma-expand16-transform
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-transform --expand16)
|
||||||
|
png_add_test(NAME pngvalid-gamma-sbit
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-sbit)
|
||||||
|
png_add_test(NAME pngvalid-gamma-threshold
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-threshold)
|
||||||
|
png_add_test(NAME pngvalid-gamma-transform
|
||||||
|
COMMAND pngvalid OPTIONS --gamma-transform)
|
||||||
|
png_add_test(NAME pngvalid-progressive-interlace-standard
|
||||||
|
COMMAND pngvalid OPTIONS --standard --progressive-read --interlace)
|
||||||
|
png_add_test(NAME pngvalid-progressive-size
|
||||||
|
COMMAND pngvalid OPTIONS --size --progressive-read)
|
||||||
|
png_add_test(NAME pngvalid-progressive-standard
|
||||||
|
COMMAND pngvalid OPTIONS --standard --progressive-read)
|
||||||
|
png_add_test(NAME pngvalid-standard
|
||||||
|
COMMAND pngvalid OPTIONS --standard)
|
||||||
|
png_add_test(NAME pngvalid-transform
|
||||||
|
COMMAND pngvalid OPTIONS --transform)
|
||||||
|
|
||||||
add_executable(pngstest ${pngstest_sources})
|
add_executable(pngstest ${pngstest_sources})
|
||||||
target_link_libraries(pngstest ${PNG_LIB_NAME})
|
target_link_libraries(pngstest png)
|
||||||
add_test(pngstest ./pngstest
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g01.png
|
foreach(gamma_type 1.8 linear none sRGB)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g02.png
|
foreach(alpha_type none alpha)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g04.png
|
set(PNGSTEST_FILES)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g08.png
|
foreach(test_png ${TEST_PNGS})
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g16.png
|
string(REGEX MATCH ".*-linear[-.].*" TEST_PNG_LINEAR "${test_png}")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn2c08.png
|
string(REGEX MATCH ".*-sRGB[-.].*" TEST_PNG_SRGB "${test_png}")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn2c16.png
|
string(REGEX MATCH ".*-1.8[-.].*" TEST_PNG_G18 "${test_png}")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p01.png
|
string(REGEX MATCH ".*-alpha-.*" TEST_PNG_ALPHA "${test_png}")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p02.png
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p04.png
|
set(TEST_PNG_VALID TRUE)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p08.png
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn4a08.png
|
if(TEST_PNG_ALPHA)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn4a16.png
|
if (NOT "${alpha_type}" STREQUAL "alpha")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn6a08.png
|
set(TEST_PNG_VALID FALSE)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn6a16.png
|
endif()
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g01.png
|
else()
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g02.png
|
if ("${alpha_type}" STREQUAL "alpha")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g04.png
|
set(TEST_PNG_VALID FALSE)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn2c16.png
|
endif()
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn3p08.png
|
endif()
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbgn2c16.png
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbgn3p08.png
|
if(TEST_PNG_LINEAR)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbrn2c08.png
|
if(NOT "${gamma_type}" STREQUAL "linear")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbwn0g16.png
|
set(TEST_PNG_VALID FALSE)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbwn3p08.png
|
endif()
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbyn3p08.png
|
elseif(TEST_PNG_SRGB)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n0g08.png
|
if(NOT "${gamma_type}" STREQUAL "sRGB")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n2c08.png
|
set(TEST_PNG_VALID FALSE)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n3p08.png
|
endif()
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp1n3p08.png
|
elseif(TEST_PNG_G18)
|
||||||
)
|
if(NOT "${gamma_type}" STREQUAL "1.8")
|
||||||
|
set(TEST_PNG_VALID FALSE)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if(NOT "${gamma_type}" STREQUAL "none")
|
||||||
|
set(TEST_PNG_VALID FALSE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TEST_PNG_VALID)
|
||||||
|
list(APPEND PNGSTEST_FILES "${test_png}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
# Should already be sorted, but sort anyway to be certain.
|
||||||
|
list(SORT PNGSTEST_FILES)
|
||||||
|
png_add_test(NAME pngstest-${gamma_type}-${alpha_type}
|
||||||
|
COMMAND pngstest
|
||||||
|
OPTIONS --tmpfile "${gamma_type}-${alpha_type}-" --log
|
||||||
|
FILES ${PNGSTEST_FILES})
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_executable(pngunknown ${pngunknown_sources})
|
||||||
|
target_link_libraries(pngunknown png)
|
||||||
|
|
||||||
|
png_add_test(NAME pngunknown-discard COMMAND pngunknown OPTIONS --strict default=discard FILES "${PNGTEST_PNG}")
|
||||||
|
png_add_test(NAME pngunknown-IDAT COMMAND pngunknown OPTIONS --strict default=discard IDAT=save FILES "${PNGTEST_PNG}")
|
||||||
|
png_add_test(NAME pngunknown-if-safe COMMAND pngunknown OPTIONS --strict default=if-safe FILES "${PNGTEST_PNG}")
|
||||||
|
png_add_test(NAME pngunknown-sAPI COMMAND pngunknown OPTIONS --strict bKGD=save cHRM=save gAMA=save all=discard iCCP=save sBIT=save sRGB=save FILES "${PNGTEST_PNG}")
|
||||||
|
png_add_test(NAME pngunknown-save COMMAND pngunknown OPTIONS --strict default=save FILES "${PNGTEST_PNG}")
|
||||||
|
png_add_test(NAME pngunknown-sTER COMMAND pngunknown OPTIONS --strict sTER=if-safe FILES "${PNGTEST_PNG}")
|
||||||
|
png_add_test(NAME pngunknown-vpAg COMMAND pngunknown OPTIONS --strict vpAg=if-safe FILES "${PNGTEST_PNG}")
|
||||||
|
|
||||||
|
add_executable(pngimage ${pngimage_sources})
|
||||||
|
target_link_libraries(pngimage png)
|
||||||
|
|
||||||
|
png_add_test(NAME pngimage-quick COMMAND pngimage OPTIONS --list-combos --log FILES ${PNGSUITE_PNGS})
|
||||||
|
png_add_test(NAME pngimage-full COMMAND pngimage OPTIONS --exhaustive --list-combos --log FILES ${PNGSUITE_PNGS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Ensure the CMAKE_LIBRARY_OUTPUT_DIRECTORY is set
|
if(PNG_SHARED)
|
||||||
IF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
|
add_executable(pngfix ${pngfix_sources})
|
||||||
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
|
target_link_libraries(pngfix png)
|
||||||
ENDIF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
|
set(PNG_BIN_TARGETS pngfix)
|
||||||
|
|
||||||
|
add_executable(png-fix-itxt ${png_fix_itxt_sources})
|
||||||
|
target_link_libraries(png-fix-itxt ${ZLIB_LIBRARY} ${M_LIBRARY})
|
||||||
|
list(APPEND PNG_BIN_TARGETS png-fix-itxt)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Set a variable with CMake code which:
|
# Set a variable with CMake code which:
|
||||||
# Creates a symlink from src to dest (if possible) or alternatively
|
# Creates a symlink from src to dest (if possible) or alternatively
|
||||||
# copies if different.
|
# copies if different.
|
||||||
macro(CREATE_SYMLINK SRC_FILE DEST_FILE)
|
include(CMakeParseArguments)
|
||||||
FILE(REMOVE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
|
|
||||||
if(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
function(CREATE_SYMLINK DEST_FILE)
|
||||||
ADD_CUSTOM_COMMAND(
|
|
||||||
OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
|
cmake_parse_arguments(S "" "FILE;TARGET" "" ${ARGN})
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SRC_FILE}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SRC_FILE}" ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
|
if(NOT S_TARGET AND NOT S_FILE)
|
||||||
DEPENDS ${PNG_LIB_TARGETS}
|
message(FATAL_ERROR "Specify either a TARGET or a FILE for CREATE_SYMLINK to link to.")
|
||||||
)
|
endif(NOT S_TARGET AND NOT S_FILE)
|
||||||
ADD_CUSTOM_TARGET(${DEST_FILE}_COPY ALL DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
|
|
||||||
else(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
if(S_TARGET AND S_FILE)
|
||||||
get_filename_component(LINK_TARGET "${SRC_FILE}" NAME)
|
message(FATAL_ERROR "CREATE_SYMLINK called with both source file ${S_FILE} and build target ${S_TARGET} arguments - can only handle 1 type per call.")
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
|
endif(S_TARGET AND S_FILE)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
if(S_FILE)
|
||||||
endif(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
# If we don't need to symlink something that's coming from a build target,
|
||||||
endmacro()
|
# we can go ahead and symlink/copy at configure time.
|
||||||
|
|
||||||
|
if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${S_FILE} ${DEST_FILE}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
)
|
||||||
|
else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E create_symlink ${S_FILE} ${DEST_FILE}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
)
|
||||||
|
endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
|
endif(S_FILE)
|
||||||
|
|
||||||
|
if(S_TARGET)
|
||||||
|
# We need to use generator expressions, which can be a bit tricky, so for
|
||||||
|
# simplicity make the symlink a POST_BUILD step and use the TARGET
|
||||||
|
# signature of add_custom_command.
|
||||||
|
|
||||||
|
if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
|
add_custom_command(TARGET ${S_TARGET} POST_BUILD
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE}
|
||||||
|
)
|
||||||
|
else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
|
add_custom_command(TARGET ${S_TARGET} POST_BUILD
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E create_symlink $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE}
|
||||||
|
)
|
||||||
|
endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
|
|
||||||
|
endif(S_TARGET)
|
||||||
|
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Create source generation scripts.
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genchk.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake @ONLY)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genout.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake @ONLY)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/gensrc.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake @ONLY)
|
||||||
|
|
||||||
|
|
||||||
# libpng is a library so default to 'lib'
|
# libpng is a library so default to 'lib'
|
||||||
if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
|
if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
|
||||||
@@ -251,31 +834,21 @@ if(NOT WIN32 OR CYGWIN OR MINGW)
|
|||||||
set(LIBS "-lz -lm")
|
set(LIBS "-lz -lm")
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
|
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
|
||||||
CREATE_SYMLINK(${PNGLIB_NAME}.pc libpng.pc)
|
CREATE_SYMLINK(libpng.pc FILE ${PNGLIB_NAME}.pc)
|
||||||
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
|
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
|
||||||
CREATE_SYMLINK(${PNGLIB_NAME}-config libpng-config)
|
CREATE_SYMLINK(libpng-config FILE ${PNGLIB_NAME}-config)
|
||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
|
|
||||||
# SET UP LINKS
|
# SET UP LINKS
|
||||||
if(PNG_SHARED)
|
if(PNG_SHARED)
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES
|
set_target_properties(png PROPERTIES
|
||||||
# VERSION 16.${PNGLIB_RELEASE}.1.6.20
|
# VERSION 16.${PNGLIB_RELEASE}.1.6.35
|
||||||
VERSION 16.${PNGLIB_RELEASE}.0
|
VERSION 16.${PNGLIB_RELEASE}.0
|
||||||
SOVERSION 16
|
SOVERSION 16
|
||||||
CLEAN_DIRECT_OUTPUT 1)
|
CLEAN_DIRECT_OUTPUT 1)
|
||||||
endif()
|
endif()
|
||||||
if(PNG_STATIC)
|
|
||||||
# MSVC doesn't use a different file extension for shared vs. static
|
|
||||||
# libs. We are able to change OUTPUT_NAME to remove the _static
|
|
||||||
# for all other platforms.
|
|
||||||
if(NOT MSVC)
|
|
||||||
set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
|
|
||||||
OUTPUT_NAME ${PNG_LIB_NAME}
|
|
||||||
CLEAN_DIRECT_OUTPUT 1)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# If CMake > 2.4.x, we set a variable used below to export
|
# If CMake > 2.4.x, we set a variable used below to export
|
||||||
# targets to an export file.
|
# targets to an export file.
|
||||||
@@ -298,26 +871,20 @@ if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
|
|||||||
if(PNG_SHARED)
|
if(PNG_SHARED)
|
||||||
# Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
|
# Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
|
||||||
if(CYGWIN OR MINGW)
|
if(CYGWIN OR MINGW)
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
|
CREATE_SYMLINK(libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} TARGET png)
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
|
install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif(CYGWIN OR MINGW)
|
endif(CYGWIN OR MINGW)
|
||||||
|
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
|
CREATE_SYMLINK(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png)
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
|
install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif(NOT WIN32)
|
endif(NOT WIN32)
|
||||||
endif(PNG_SHARED)
|
endif(PNG_SHARED)
|
||||||
|
|
||||||
if(PNG_STATIC)
|
if(PNG_STATIC)
|
||||||
if(NOT WIN32 OR CYGWIN OR MINGW)
|
if(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
|
CREATE_SYMLINK( libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static)
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
|
install(FILES $<TARGET_LINKER_FILE_DIR:png_static>/libpng${CMAKE_STATIC_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -334,6 +901,11 @@ if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
|
|||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL )
|
||||||
|
install(TARGETS ${PNG_BIN_TARGETS}
|
||||||
|
RUNTIME DESTINATION bin)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
|
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
|
||||||
# Install man pages
|
# Install man pages
|
||||||
if(NOT PNG_MAN_DIR)
|
if(NOT PNG_MAN_DIR)
|
||||||
@@ -342,7 +914,7 @@ if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
|
|||||||
install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
|
install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
|
||||||
install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
|
install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
|
||||||
# Install pkg-config files
|
# Install pkg-config files
|
||||||
if(NOT WIN32 OR CYGWIN OR MINGW)
|
if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW)
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
|
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
|
||||||
@@ -351,7 +923,7 @@ if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
|
|||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
|
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
|
||||||
DESTINATION bin)
|
DESTINATION bin)
|
||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
endif(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# On versions of CMake that support it, create an export file CMake
|
# On versions of CMake that support it, create an export file CMake
|
||||||
@@ -371,4 +943,3 @@ endif()
|
|||||||
# to create msvc import lib for mingw compiled shared lib
|
# to create msvc import lib for mingw compiled shared lib
|
||||||
# pexports libpng.dll > libpng.def
|
# pexports libpng.dll > libpng.def
|
||||||
# lib /def:libpng.def /machine:x86
|
# lib /def:libpng.def /machine:x86
|
||||||
|
|
||||||
|
|||||||
178
INSTALL
@@ -1,24 +1,26 @@
|
|||||||
|
|
||||||
Installing libpng
|
Installing libpng
|
||||||
|
|
||||||
Contents
|
Contents
|
||||||
|
|
||||||
I. Simple installation
|
I. Simple installation
|
||||||
II. Rebuilding the configure scripts
|
II. Rebuilding the configure scripts
|
||||||
III. Using scripts/makefile*
|
III. Using scripts/makefile*
|
||||||
IV. Using cmake
|
IV. Using cmake
|
||||||
V. Directory structure
|
V. Directory structure
|
||||||
VI. Building with project files
|
VI. Building with project files
|
||||||
VII. Building with makefiles
|
VII. Building with makefiles
|
||||||
VIII. Configuring libpng for 16-bit platforms
|
VIII. Configuring libpng for 16-bit platforms
|
||||||
IX. Configuring for DOS
|
IX. Configuring for DOS
|
||||||
X. Configuring for Medium Model
|
X. Configuring for Medium Model
|
||||||
XI. Prepending a prefix to exported symbols
|
XI. Prepending a prefix to exported symbols
|
||||||
XII. Configuring for compiler xxx:
|
XII. Configuring for compiler xxx:
|
||||||
XIII. Removing unwanted object code
|
XIII. Removing unwanted object code
|
||||||
XIV. Changes to the build and configuration of libpng in libpng-1.5.x
|
XIV. Enabling or disabling hardware optimizations
|
||||||
XV. Setjmp/longjmp issues
|
XV. Changes to the build and configuration of libpng in libpng-1.5.x
|
||||||
XVI. Other sources of information about libpng
|
XVI. Setjmp/longjmp issues
|
||||||
|
XVII. Common linking failures
|
||||||
|
XVIII. Other sources of information about libpng
|
||||||
|
|
||||||
I. Simple installation
|
I. Simple installation
|
||||||
|
|
||||||
@@ -47,7 +49,9 @@ If configure does not work on your system, or if you have a need to
|
|||||||
change configure.ac or Makefile.am, and you have a reasonably
|
change configure.ac or Makefile.am, and you have a reasonably
|
||||||
up-to-date set of tools, running ./autogen.sh in a git clone before
|
up-to-date set of tools, running ./autogen.sh in a git clone before
|
||||||
running ./configure may fix the problem. To be really sure that you
|
running ./configure may fix the problem. To be really sure that you
|
||||||
aren't using any of the included pre-built scripts, you can do this:
|
aren't using any of the included pre-built scripts, especially if you
|
||||||
|
are building from a tar distribution instead of a git distribution,
|
||||||
|
do this:
|
||||||
|
|
||||||
./configure --enable-maintainer-mode
|
./configure --enable-maintainer-mode
|
||||||
make maintainer-clean
|
make maintainer-clean
|
||||||
@@ -75,8 +79,8 @@ Or you can use one of the "projects" in the "projects" directory.
|
|||||||
|
|
||||||
Before installing libpng, you must first install zlib, if it
|
Before installing libpng, you must first install zlib, if it
|
||||||
is not already on your system. zlib can usually be found
|
is not already on your system. zlib can usually be found
|
||||||
wherever you got libpng; otherwise go to http://zlib.net. You can place
|
wherever you got libpng; otherwise go to https://zlib.net/. You can
|
||||||
zlib in in the same directory as libpng or in another directory.
|
place zlib in the same directory as libpng or in another directory.
|
||||||
|
|
||||||
If your system already has a preinstalled zlib you will still need
|
If your system already has a preinstalled zlib you will still need
|
||||||
to have access to the zlib.h and zconf.h include files that
|
to have access to the zlib.h and zconf.h include files that
|
||||||
@@ -87,22 +91,24 @@ standard library search path, put ZLIBLIB, ZLIBINC, CPPFLAGS, LDFLAGS,
|
|||||||
and LD_LIBRARY_PATH in your environment before running "make test"
|
and LD_LIBRARY_PATH in your environment before running "make test"
|
||||||
or "make distcheck":
|
or "make distcheck":
|
||||||
|
|
||||||
ZLIBLIB=/path/to/lib export ZLIBLIB
|
ZLIBLIB=/path/to/lib export ZLIBLIB
|
||||||
ZLIBINC=/path/to/include export ZLIBINC
|
ZLIBINC=/path/to/include export ZLIBINC
|
||||||
CPPFLAGS="-I$ZLIBINC" export CPPFLAGS
|
CPPFLAGS="-I$ZLIBINC" export CPPFLAGS
|
||||||
LDFLAGS="-L$ZLIBLIB" export LDFLAGS
|
LDFLAGS="-L$ZLIBLIB" export LDFLAGS
|
||||||
LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
|
LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
|
||||||
|
|
||||||
If you are using one of the makefile scripts, put ZLIBLIB and ZLIBINC
|
If you are using one of the makefile scripts, put ZLIBLIB and ZLIBINC
|
||||||
in your environment and type "make ZLIBLIB=$ZLIBLIB ZLIBINC=$ZLIBINC test".
|
in your environment and type
|
||||||
|
|
||||||
|
make ZLIBLIB=$ZLIBLIB ZLIBINC=$ZLIBINC test
|
||||||
|
|
||||||
IV. Using cmake
|
IV. Using cmake
|
||||||
|
|
||||||
If you want to use "cmake" (see www.cmake.org), type
|
If you want to use "cmake" (see www.cmake.org), type
|
||||||
|
|
||||||
cmake . -DCMAKE_INSTALL_PREFIX=/path
|
cmake . -DCMAKE_INSTALL_PREFIX=/path
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
|
|
||||||
As when using the simple configure method described above, "/path" points to
|
As when using the simple configure method described above, "/path" points to
|
||||||
the installation directory where you want to put the libpng "lib", "include",
|
the installation directory where you want to put the libpng "lib", "include",
|
||||||
@@ -116,8 +122,8 @@ or "zlib128") so that you have directories called "zlib" and "libpng".
|
|||||||
|
|
||||||
Your directory structure should look like this:
|
Your directory structure should look like this:
|
||||||
|
|
||||||
.. (the parent directory)
|
.. (the parent directory)
|
||||||
libpng (this directory)
|
libpng (this directory)
|
||||||
INSTALL (this file)
|
INSTALL (this file)
|
||||||
README
|
README
|
||||||
*.h, *.c => libpng source files
|
*.h, *.c => libpng source files
|
||||||
@@ -160,10 +166,15 @@ VII. Building with makefiles
|
|||||||
Copy the file (or files) that you need from the
|
Copy the file (or files) that you need from the
|
||||||
scripts directory into this directory, for example
|
scripts directory into this directory, for example
|
||||||
|
|
||||||
MSDOS example: copy scripts\makefile.msc makefile
|
MSDOS example:
|
||||||
copy scripts\pnglibconf.h.prebuilt pnglibconf.h
|
|
||||||
UNIX example: cp scripts/makefile.std makefile
|
copy scripts\makefile.msc makefile
|
||||||
cp scripts/pnglibconf.h.prebuilt pnglibconf.h
|
copy scripts\pnglibconf.h.prebuilt pnglibconf.h
|
||||||
|
|
||||||
|
UNIX example:
|
||||||
|
|
||||||
|
cp scripts/makefile.std makefile
|
||||||
|
cp scripts/pnglibconf.h.prebuilt pnglibconf.h
|
||||||
|
|
||||||
Read the makefile to see if you need to change any source or
|
Read the makefile to see if you need to change any source or
|
||||||
target directories to match your preferences.
|
target directories to match your preferences.
|
||||||
@@ -239,7 +250,7 @@ libpng are compiled. All the defines end in _SUPPORTED. If you are
|
|||||||
never going to use a capability, you can change the #define to #undef
|
never going to use a capability, you can change the #define to #undef
|
||||||
before recompiling libpng and save yourself code and data space, or
|
before recompiling libpng and save yourself code and data space, or
|
||||||
you can turn off individual capabilities with defines that begin with
|
you can turn off individual capabilities with defines that begin with
|
||||||
PNG_NO_.
|
"PNG_NO_".
|
||||||
|
|
||||||
In libpng-1.5.0 and later, the #define's are in pnglibconf.h instead.
|
In libpng-1.5.0 and later, the #define's are in pnglibconf.h instead.
|
||||||
|
|
||||||
@@ -271,7 +282,57 @@ library to fail if they call functions not available in your library.
|
|||||||
The size of the library itself should not be an issue, because only
|
The size of the library itself should not be an issue, because only
|
||||||
those sections that are actually used will be loaded into memory.
|
those sections that are actually used will be loaded into memory.
|
||||||
|
|
||||||
XIV. Changes to the build and configuration of libpng in libpng-1.5.x
|
XIV. Enabling or disabling hardware optimizations
|
||||||
|
|
||||||
|
Certain hardware capabilities, such as the Intel SSE instructions,
|
||||||
|
are normally detected at run time. Enable them with configure options
|
||||||
|
such as one of
|
||||||
|
|
||||||
|
--enable-arm-neon=yes
|
||||||
|
--enable-mips-msa=yes
|
||||||
|
--enable-intel-sse=yes
|
||||||
|
--enable-powerpc-vsx=yes
|
||||||
|
|
||||||
|
or enable them all at once with
|
||||||
|
|
||||||
|
--enable-hardware-optimizations=yes
|
||||||
|
|
||||||
|
or, if you are not using "configure", you can use one
|
||||||
|
or more of
|
||||||
|
|
||||||
|
CPPFLAGS += "-DPNG_ARM_NEON"
|
||||||
|
CPPFLAGS += "-DPNG_MIPS_MSA"
|
||||||
|
CPPFLAGS += "-DPNG_INTEL_SSE"
|
||||||
|
CPPFLAGS += "-DPNG_POWERPC_VSX"
|
||||||
|
|
||||||
|
See for example scripts/makefile.linux-opt
|
||||||
|
|
||||||
|
If you wish to avoid using them,
|
||||||
|
you can disable them via the configure option
|
||||||
|
|
||||||
|
--disable-hardware-optimizations
|
||||||
|
|
||||||
|
to disable them all, or
|
||||||
|
|
||||||
|
--enable-intel-sse=no
|
||||||
|
|
||||||
|
to disable a particular one,
|
||||||
|
or via compiler-command options such as
|
||||||
|
|
||||||
|
CPPFLAGS += "-DPNG_ARM_NEON_OPT=0, -DPNG_MIPS_MSA_OPT=0,
|
||||||
|
-DPNG_INTEL_SSE_OPT=0, -DPNG_POWERPC_VSX_OPT=0"
|
||||||
|
|
||||||
|
If you are using cmake, hardware optimizations are "on"
|
||||||
|
by default. To disable them, use
|
||||||
|
|
||||||
|
cmake . -DPNG_ARM_NEON=no -DPNG_INTEL_SSE=no \
|
||||||
|
-DPNG_MIPS_MSA=no -DPNG_POWERPC_VSX=no
|
||||||
|
|
||||||
|
or disable them all at once with
|
||||||
|
|
||||||
|
cmake . -DPNG_HARDWARE_OPTIMIZATIONS=no
|
||||||
|
|
||||||
|
XV. Changes to the build and configuration of libpng in libpng-1.5.x
|
||||||
|
|
||||||
Details of internal changes to the library code can be found in the CHANGES
|
Details of internal changes to the library code can be found in the CHANGES
|
||||||
file and in the GIT repository logs. These will be of no concern to the vast
|
file and in the GIT repository logs. These will be of no concern to the vast
|
||||||
@@ -307,7 +368,7 @@ only png_longjmp_ptr, which must match the C longjmp function.) The new
|
|||||||
approach is documented in pngconf.h
|
approach is documented in pngconf.h
|
||||||
|
|
||||||
Despite these changes, libpng 1.5.0 only supports the native C function
|
Despite these changes, libpng 1.5.0 only supports the native C function
|
||||||
calling standard on those platforms tested so far (__cdecl on Microsoft
|
calling standard on those platforms tested so far ("__cdecl" on Microsoft
|
||||||
Windows). This is because the support requirements for alternative
|
Windows). This is because the support requirements for alternative
|
||||||
calling conventions seem to no longer exist. Developers who find it
|
calling conventions seem to no longer exist. Developers who find it
|
||||||
necessary to set PNG_API_RULE to 1 should advise the mailing list
|
necessary to set PNG_API_RULE to 1 should advise the mailing list
|
||||||
@@ -362,7 +423,7 @@ $PREFIX/include directory). Do not edit pnglibconf.h after you have built
|
|||||||
libpng, because than the settings would not accurately reflect the settings
|
libpng, because than the settings would not accurately reflect the settings
|
||||||
that were used to build libpng.
|
that were used to build libpng.
|
||||||
|
|
||||||
XV. Setjmp/longjmp issues
|
XVI. Setjmp/longjmp issues
|
||||||
|
|
||||||
Libpng uses setjmp()/longjmp() for error handling. Unfortunately setjmp()
|
Libpng uses setjmp()/longjmp() for error handling. Unfortunately setjmp()
|
||||||
is known to be not thread-safe on some platforms and we don't know of
|
is known to be not thread-safe on some platforms and we don't know of
|
||||||
@@ -371,7 +432,7 @@ your application is going to be using multiple threads, you should
|
|||||||
configure libpng with PNG_NO_SETJMP in your pngusr.dfa file, with
|
configure libpng with PNG_NO_SETJMP in your pngusr.dfa file, with
|
||||||
-DPNG_NO_SETJMP on your compile line, or with
|
-DPNG_NO_SETJMP on your compile line, or with
|
||||||
|
|
||||||
#undef PNG_SETJMP_SUPPORTED
|
#undef PNG_SETJMP_SUPPORTED
|
||||||
|
|
||||||
in your pnglibconf.h or pngusr.h.
|
in your pnglibconf.h or pngusr.h.
|
||||||
|
|
||||||
@@ -380,28 +441,25 @@ This requires setjmp/longjmp, so you must either build the library
|
|||||||
with PNG_SETJMP_SUPPORTED defined, or with PNG_SIMPLIFIED_READ_SUPPORTED
|
with PNG_SETJMP_SUPPORTED defined, or with PNG_SIMPLIFIED_READ_SUPPORTED
|
||||||
and PNG_SIMPLIFIED_WRITE_SUPPORTED undefined.
|
and PNG_SIMPLIFIED_WRITE_SUPPORTED undefined.
|
||||||
|
|
||||||
XVI. Other sources of information about libpng:
|
XVII. Common linking failures
|
||||||
|
|
||||||
|
If your application fails to find libpng or zlib entries while linking:
|
||||||
|
|
||||||
|
Be sure "-lz" appears after "-lpng" on your linking command.
|
||||||
|
|
||||||
|
Be sure you have built libpng, zlib, and your application for the
|
||||||
|
same platform (e.g., 32-bit or 64-bit).
|
||||||
|
|
||||||
|
If you are using the vstudio project, observe the WARNING in
|
||||||
|
project/vstudio/README.txt.
|
||||||
|
|
||||||
|
XVIII. Other sources of information about libpng:
|
||||||
|
|
||||||
Further information can be found in the README and libpng-manual.txt
|
Further information can be found in the README and libpng-manual.txt
|
||||||
files, in the individual makefiles, in png.h, and the manual pages
|
files, in the individual makefiles, in png.h, and the manual pages
|
||||||
libpng.3 and png.5.
|
libpng.3 and png.5.
|
||||||
|
|
||||||
Using the ./configure script -- 16 December 2002.
|
Copyright (c) 1998-2002,2006-2016 Glenn Randers-Pehrson
|
||||||
=================================================
|
This document is released under the libpng license.
|
||||||
|
For conditions of distribution and use, see the disclaimer
|
||||||
The ./configure script should work compatibly with what scripts/makefile.*
|
and license in png.h.
|
||||||
did, however there are some options you might need to add to configure
|
|
||||||
explicitly, which previously was done semi-automatically (if you didn't edit
|
|
||||||
scripts/makefile.* yourself, that is)
|
|
||||||
|
|
||||||
CFLAGS="-Wall -O -funroll-loops \
|
|
||||||
-malign-loops=2 -malign-functions=2" ./configure --prefix=/usr/include \
|
|
||||||
--with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include
|
|
||||||
|
|
||||||
You can alternatively specify --includedir=/usr/include, /usr/local/include,
|
|
||||||
/usr/include/libpng16, or whatever.
|
|
||||||
|
|
||||||
If you find that the configure script is out-of-date or is not supporting
|
|
||||||
your platform properly, try running autogen.sh to regenerate "configure",
|
|
||||||
"Makefile.in", and the other configuration files. Then try configure again.
|
|
||||||
|
|
||||||
|
|||||||
37
LICENSE
@@ -10,8 +10,8 @@ this sentence.
|
|||||||
|
|
||||||
This code is released under the libpng license.
|
This code is released under the libpng license.
|
||||||
|
|
||||||
libpng versions 1.0.7, July 1, 2000, through 1.6.20, December 3, 2015, are
|
libpng versions 1.0.7, July 1, 2000 through 1.6.35, July 15, 2018 are
|
||||||
Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, are
|
Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are
|
||||||
derived from libpng-1.0.6, and are distributed according to the same
|
derived from libpng-1.0.6, and are distributed according to the same
|
||||||
disclaimer and license as libpng-1.0.6 with the following individuals
|
disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
added to the list of Contributing Authors:
|
added to the list of Contributing Authors:
|
||||||
@@ -22,6 +22,9 @@ added to the list of Contributing Authors:
|
|||||||
Cosmin Truta
|
Cosmin Truta
|
||||||
Gilles Vollant
|
Gilles Vollant
|
||||||
James Yu
|
James Yu
|
||||||
|
Mandar Sahastrabuddhe
|
||||||
|
Google Inc.
|
||||||
|
Vadim Barkov
|
||||||
|
|
||||||
and with the following additions to the disclaimer:
|
and with the following additions to the disclaimer:
|
||||||
|
|
||||||
@@ -32,6 +35,10 @@ and with the following additions to the disclaimer:
|
|||||||
risk of satisfactory quality, performance, accuracy, and effort is with
|
risk of satisfactory quality, performance, accuracy, and effort is with
|
||||||
the user.
|
the user.
|
||||||
|
|
||||||
|
Some files in the "contrib" directory and some configure-generated
|
||||||
|
files that are distributed with libpng have other copyright owners and
|
||||||
|
are released under other open source licenses.
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||||
libpng-0.96, and are distributed according to the same disclaimer and
|
libpng-0.96, and are distributed according to the same disclaimer and
|
||||||
@@ -55,6 +62,9 @@ Contributing Authors:
|
|||||||
Greg Roelofs
|
Greg Roelofs
|
||||||
Tom Tanner
|
Tom Tanner
|
||||||
|
|
||||||
|
Some files in the "scripts" directory have other copyright owners
|
||||||
|
but are released under this license.
|
||||||
|
|
||||||
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
@@ -95,18 +105,29 @@ appreciated.
|
|||||||
|
|
||||||
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||||
|
|
||||||
A "png_get_copyright" function is available, for convenient use in "about"
|
TRADEMARK:
|
||||||
boxes and the like:
|
|
||||||
|
|
||||||
printf("%s", png_get_copyright(NULL));
|
The name "libpng" has not been registered by the Copyright owner
|
||||||
|
as a trademark in any jurisdiction. However, because libpng has
|
||||||
|
been distributed and maintained world-wide, continually since 1995,
|
||||||
|
the Copyright owner claims "common-law trademark protection" in any
|
||||||
|
jurisdiction where common-law trademark is recognized.
|
||||||
|
|
||||||
Also, the PNG logo (in PNG format, of course) is supplied in the
|
OSI CERTIFICATION:
|
||||||
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
|
||||||
|
|
||||||
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
||||||
a certification mark of the Open Source Initiative. OSI has not addressed
|
a certification mark of the Open Source Initiative. OSI has not addressed
|
||||||
the additional disclaimers inserted at version 1.0.7.
|
the additional disclaimers inserted at version 1.0.7.
|
||||||
|
|
||||||
|
EXPORT CONTROL:
|
||||||
|
|
||||||
|
The Copyright owner believes that the Export Control Classification
|
||||||
|
Number (ECCN) for libpng is EAR99, which means not subject to export
|
||||||
|
controls or International Traffic in Arms Regulations (ITAR) because
|
||||||
|
it is open source, publicly available software, that does not contain
|
||||||
|
any encryption software. See the EAR, paragraphs 734.3(b)(3) and
|
||||||
|
734.7(b).
|
||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
glennrp at users.sourceforge.net
|
||||||
December 3, 2015
|
July 15, 2018
|
||||||
|
|||||||
37
Makefile.am
@@ -1,13 +1,21 @@
|
|||||||
# Makefile.am:
|
# Makefile.am, the source file for Makefile.in (and hence Makefile), is
|
||||||
# Source file for Makefile.in (and hence Makefile)
|
|
||||||
#
|
#
|
||||||
|
# Copyright (c) 2004-2016 Glenn Randers-Pehrson
|
||||||
|
# Last changed in libpng 1.6.25 [September 1, 2016]
|
||||||
|
#
|
||||||
|
# This code is released under the libpng license.
|
||||||
|
# For conditions of distribution and use, see the disclaimer
|
||||||
|
# and license in png.h
|
||||||
|
|
||||||
PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@
|
PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I scripts
|
ACLOCAL_AMFLAGS = -I scripts
|
||||||
|
|
||||||
# test programs - run on make check, make distcheck
|
# test programs - run on make check, make distcheck
|
||||||
check_PROGRAMS= pngtest pngunknown pngstest pngvalid pngimage
|
check_PROGRAMS= pngtest pngunknown pngstest pngvalid pngimage pngcp
|
||||||
|
if HAVE_CLOCK_GETTIME
|
||||||
|
check_PROGRAMS += timepng
|
||||||
|
endif
|
||||||
|
|
||||||
# Utilities - installed
|
# Utilities - installed
|
||||||
bin_PROGRAMS= pngfix png-fix-itxt
|
bin_PROGRAMS= pngfix png-fix-itxt
|
||||||
@@ -37,15 +45,22 @@ pngunknown_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
|||||||
pngimage_SOURCES = contrib/libtests/pngimage.c
|
pngimage_SOURCES = contrib/libtests/pngimage.c
|
||||||
pngimage_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
pngimage_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
|
|
||||||
|
timepng_SOURCES = contrib/libtests/timepng.c
|
||||||
|
timepng_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
|
|
||||||
pngfix_SOURCES = contrib/tools/pngfix.c
|
pngfix_SOURCES = contrib/tools/pngfix.c
|
||||||
pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
|
|
||||||
png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c
|
png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c
|
||||||
|
|
||||||
|
pngcp_SOURCES = contrib/tools/pngcp.c
|
||||||
|
pngcp_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
|
|
||||||
# Generally these are single line shell scripts to run a test with a particular
|
# Generally these are single line shell scripts to run a test with a particular
|
||||||
# set of parameters:
|
# set of parameters:
|
||||||
TESTS =\
|
TESTS =\
|
||||||
tests/pngtest\
|
tests/pngtest\
|
||||||
|
tests/pngtest-badpngs\
|
||||||
tests/pngvalid-gamma-16-to-8 tests/pngvalid-gamma-alpha-mode\
|
tests/pngvalid-gamma-16-to-8 tests/pngvalid-gamma-alpha-mode\
|
||||||
tests/pngvalid-gamma-background tests/pngvalid-gamma-expand16-alpha-mode\
|
tests/pngvalid-gamma-background tests/pngvalid-gamma-expand16-alpha-mode\
|
||||||
tests/pngvalid-gamma-expand16-background\
|
tests/pngvalid-gamma-expand16-background\
|
||||||
@@ -83,6 +98,21 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/arm_init.c\
|
|||||||
arm/filter_neon.S arm/filter_neon_intrinsics.c
|
arm/filter_neon.S arm/filter_neon_intrinsics.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if PNG_MIPS_MSA
|
||||||
|
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += mips/mips_init.c\
|
||||||
|
mips/filter_msa_intrinsics.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
if PNG_INTEL_SSE
|
||||||
|
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += intel/intel_init.c\
|
||||||
|
intel/filter_sse2_intrinsics.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
if PNG_POWERPC_VSX
|
||||||
|
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += powerpc/powerpc_init.c\
|
||||||
|
powerpc/filter_vsx_intrinsics.c
|
||||||
|
endif
|
||||||
|
|
||||||
nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h
|
nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h
|
||||||
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined -export-dynamic \
|
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined -export-dynamic \
|
||||||
@@ -219,6 +249,7 @@ contrib/libtests/timepng.o: pnglibconf.h
|
|||||||
|
|
||||||
contrib/tools/makesRGB.o: pnglibconf.h
|
contrib/tools/makesRGB.o: pnglibconf.h
|
||||||
contrib/tools/pngfix.o: pnglibconf.h
|
contrib/tools/pngfix.o: pnglibconf.h
|
||||||
|
contrib/tools/pngcp.o: pnglibconf.h
|
||||||
|
|
||||||
# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
|
# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
|
||||||
# be built with PNG_USE_READ_MACROS; this prevents the read macros from
|
# be built with PNG_USE_READ_MACROS; this prevents the read macros from
|
||||||
|
|||||||
2419
Makefile.in
Normal file
21
README
@@ -1,4 +1,4 @@
|
|||||||
README for libpng version 1.6.20 - December 3, 2015 (shared library 16.0)
|
README for libpng version 1.6.35 - July 15, 2018 (shared library 16.0)
|
||||||
See the note about version numbers near the top of png.h
|
See the note about version numbers near the top of png.h
|
||||||
|
|
||||||
See INSTALL for instructions on how to install libpng.
|
See INSTALL for instructions on how to install libpng.
|
||||||
@@ -23,7 +23,7 @@ earlier versions if you are using a shared library. The type of the
|
|||||||
png_uint_32, which will affect shared-library applications that use
|
png_uint_32, which will affect shared-library applications that use
|
||||||
this function.
|
this function.
|
||||||
|
|
||||||
To avoid problems with changes to the internals of png info_struct,
|
To avoid problems with changes to the internals of the png info_struct,
|
||||||
new APIs have been made available in 0.95 to avoid direct application
|
new APIs have been made available in 0.95 to avoid direct application
|
||||||
access to info_ptr. These functions are the png_set_<chunk> and
|
access to info_ptr. These functions are the png_set_<chunk> and
|
||||||
png_get_<chunk> functions. These functions should be used when
|
png_get_<chunk> functions. These functions should be used when
|
||||||
@@ -88,11 +88,11 @@ zlib should be available at the same place that libpng is, or at zlib.net.
|
|||||||
|
|
||||||
You may also want a copy of the PNG specification. It is available
|
You may also want a copy of the PNG specification. It is available
|
||||||
as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find
|
as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find
|
||||||
these at http://www.libpng.org/pub/png/documents/
|
these at http://www.libpng.org/pub/png/pngdocs.html .
|
||||||
|
|
||||||
This code is currently being archived at libpng.sf.net in the
|
This code is currently being archived at libpng.sourceforge.io in the
|
||||||
[DOWNLOAD] area, and at ftp://ftp.simplesystems.org. If you can't find it
|
[DOWNLOAD] area, and at http://libpng.download/src . If you
|
||||||
in any of those places, e-mail me, and I'll help you find it.
|
can't find it in any of those places, e-mail me, and I'll help you find it.
|
||||||
|
|
||||||
I am not a lawyer, but I believe that the Export Control Classification
|
I am not a lawyer, but I believe that the Export Control Classification
|
||||||
Number (ECCN) for libpng is EAR99, which means not subject to export
|
Number (ECCN) for libpng is EAR99, which means not subject to export
|
||||||
@@ -118,7 +118,7 @@ development group.
|
|||||||
Send comments/corrections/commendations to png-mng-implement at
|
Send comments/corrections/commendations to png-mng-implement at
|
||||||
lists.sourceforge.net (subscription required; visit
|
lists.sourceforge.net (subscription required; visit
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
||||||
to subscribe) or to glennrp at users.sourceforge.net
|
to subscribe).
|
||||||
|
|
||||||
You can't reach Guy, the original libpng author, at the addresses
|
You can't reach Guy, the original libpng author, at the addresses
|
||||||
given in previous versions of this document. He and Andreas will
|
given in previous versions of this document. He and Andreas will
|
||||||
@@ -179,18 +179,25 @@ Files in this distribution:
|
|||||||
pngwtran.c => Write data transformations
|
pngwtran.c => Write data transformations
|
||||||
pngwutil.c => Write utility functions
|
pngwutil.c => Write utility functions
|
||||||
arm => Contains optimized code for the ARM platform
|
arm => Contains optimized code for the ARM platform
|
||||||
|
powerpc => Contains optimized code for the PowerPC platform
|
||||||
contrib => Contributions
|
contrib => Contributions
|
||||||
|
arm-neon => Optimized code for ARM-NEON platform
|
||||||
|
powerpc-vsx => Optimized code for POWERPC-VSX platform
|
||||||
examples => Example programs
|
examples => Example programs
|
||||||
gregbook => source code for PNG reading and writing, from
|
gregbook => source code for PNG reading and writing, from
|
||||||
Greg Roelofs' "PNG: The Definitive Guide",
|
Greg Roelofs' "PNG: The Definitive Guide",
|
||||||
O'Reilly, 1999
|
O'Reilly, 1999
|
||||||
libtests => Test programs
|
libtests => Test programs
|
||||||
|
mips-msa => Optimized code for MIPS-MSA platform
|
||||||
pngminim => Minimal decoder, encoder, and progressive decoder
|
pngminim => Minimal decoder, encoder, and progressive decoder
|
||||||
programs demonstrating use of pngusr.dfa
|
programs demonstrating use of pngusr.dfa
|
||||||
pngminus => Simple pnm2png and png2pnm programs
|
pngminus => Simple pnm2png and png2pnm programs
|
||||||
pngsuite => Test images
|
pngsuite => Test images
|
||||||
|
testpngs
|
||||||
tools => Various tools
|
tools => Various tools
|
||||||
visupng => Contains a MSVC workspace for VisualPng
|
visupng => Contains a MSVC workspace for VisualPng
|
||||||
|
intel => Optimized code for INTEL-SSE2 platform
|
||||||
|
mips => Optimized code for MIPS platform
|
||||||
projects => Contains project files and workspaces for
|
projects => Contains project files and workspaces for
|
||||||
building a DLL
|
building a DLL
|
||||||
owatcom => Contains a WATCOM project for building libpng
|
owatcom => Contains a WATCOM project for building libpng
|
||||||
|
|||||||
7
TODO
@@ -5,13 +5,14 @@ Final bug fixes.
|
|||||||
Better C++ wrapper/full C++ implementation?
|
Better C++ wrapper/full C++ implementation?
|
||||||
Fix problem with C++ and EXTERN "C".
|
Fix problem with C++ and EXTERN "C".
|
||||||
cHRM transformation.
|
cHRM transformation.
|
||||||
Remove setjmp/longjmp usage in favor of returning error codes.
|
Remove setjmp/longjmp usage in favor of returning error codes. As a start on
|
||||||
|
this, minimize the use of png_error(), replacing them with
|
||||||
|
png_warning(); return(0); or similar.
|
||||||
Palette creation.
|
Palette creation.
|
||||||
Add "grayscale->palette" transformation and "palette->grayscale" detection.
|
Add "grayscale->palette" transformation and "palette->grayscale" detection.
|
||||||
Improved dithering.
|
Improved dithering.
|
||||||
Multi-lingual error and warning message support.
|
Multi-lingual error and warning message support.
|
||||||
Complete sRGB transformation (presently it simply uses gamma=0.45455).
|
Complete sRGB transformation (presently it simply uses gamma=0.45455).
|
||||||
Make profile checking optional via a png_set_something() call.
|
|
||||||
Man pages for function calls.
|
Man pages for function calls.
|
||||||
Better documentation.
|
Better documentation.
|
||||||
Better filter selection
|
Better filter selection
|
||||||
@@ -23,7 +24,7 @@ Use greater precision when changing to linear gamma for compositing against
|
|||||||
background and doing rgb-to-gray transformation.
|
background and doing rgb-to-gray transformation.
|
||||||
Investigate pre-incremented loop counters and other loop constructions.
|
Investigate pre-incremented loop counters and other loop constructions.
|
||||||
Add interpolated method of handling interlacing.
|
Add interpolated method of handling interlacing.
|
||||||
Switch to the simpler zlib (zlib/libpng) license if legally possible.
|
|
||||||
Extend pngvalid.c to validate more of the libpng transformations.
|
Extend pngvalid.c to validate more of the libpng transformations.
|
||||||
|
Refactor preprocessor conditionals to compile entire statements
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
1196
aclocal.m4
vendored
Normal file
@@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
/* arm_init.c - NEON optimised filter functions
|
/* arm_init.c - NEON optimised filter functions
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014 Glenn Randers-Pehrson
|
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
|
||||||
* Written by Mans Rullgard, 2011.
|
* Written by Mans Rullgard, 2011.
|
||||||
* Last changed in libpng 1.6.16 [December 22, 2014]
|
* Last changed in libpng 1.6.22 [May 26, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -66,6 +66,7 @@ png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
|
|||||||
* wrong order of the 'ON' and 'default' cases. UNSET now defaults to OFF,
|
* wrong order of the 'ON' and 'default' cases. UNSET now defaults to OFF,
|
||||||
* as documented in png.h
|
* as documented in png.h
|
||||||
*/
|
*/
|
||||||
|
png_debug(1, "in png_init_filter_functions_neon");
|
||||||
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
||||||
switch ((pp->options >> PNG_ARM_NEON) & 3)
|
switch ((pp->options >> PNG_ARM_NEON) & 3)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
/* filter_neon.S - NEON optimised filter functions
|
/* filter_neon.S - NEON optimised filter functions
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014 Glenn Randers-Pehrson
|
* Copyright (c) 2014,2017 Glenn Randers-Pehrson
|
||||||
* Written by Mans Rullgard, 2011.
|
* Written by Mans Rullgard, 2011.
|
||||||
* Last changed in libpng 1.6.16 [December 22, 2014]
|
* Last changed in libpng 1.6.31 [July 27, 2017]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
#define PNG_VERSION_INFO_ONLY
|
#define PNG_VERSION_INFO_ONLY
|
||||||
#include "../pngpriv.h"
|
#include "../pngpriv.h"
|
||||||
|
|
||||||
#if defined(__linux__) && defined(__ELF__)
|
#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__ELF__)
|
||||||
.section .note.GNU-stack,"",%progbits /* mark stack as non-executable */
|
.section .note.GNU-stack,"",%progbits /* mark stack as non-executable */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* filter_neon_intrinsics.c - NEON optimised filter functions
|
/* filter_neon_intrinsics.c - NEON optimised filter functions
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014 Glenn Randers-Pehrson
|
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
|
||||||
* Written by James Yu <james.yu at linaro.org>, October 2013.
|
* Written by James Yu <james.yu at linaro.org>, October 2013.
|
||||||
* Based on filter_neon.S, written by Mans Rullgard, 2011.
|
* Based on filter_neon.S, written by Mans Rullgard, 2011.
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.16 [December 22, 2014]
|
* Last changed in libpng 1.6.22 [May 26, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -47,6 +47,8 @@ png_read_filter_row_up_neon(png_row_infop row_info, png_bytep row,
|
|||||||
png_bytep rp_stop = row + row_info->rowbytes;
|
png_bytep rp_stop = row + row_info->rowbytes;
|
||||||
png_const_bytep pp = prev_row;
|
png_const_bytep pp = prev_row;
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_filter_row_up_neon");
|
||||||
|
|
||||||
for (; rp < rp_stop; rp += 16, pp += 16)
|
for (; rp < rp_stop; rp += 16, pp += 16)
|
||||||
{
|
{
|
||||||
uint8x16_t qrp, qpp;
|
uint8x16_t qrp, qpp;
|
||||||
@@ -72,6 +74,8 @@ png_read_filter_row_sub3_neon(png_row_infop row_info, png_bytep row,
|
|||||||
uint8x8x4_t vdest;
|
uint8x8x4_t vdest;
|
||||||
vdest.val[3] = vdup_n_u8(0);
|
vdest.val[3] = vdup_n_u8(0);
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_filter_row_sub3_neon");
|
||||||
|
|
||||||
for (; rp < rp_stop;)
|
for (; rp < rp_stop;)
|
||||||
{
|
{
|
||||||
uint8x8_t vtmp1, vtmp2;
|
uint8x8_t vtmp1, vtmp2;
|
||||||
@@ -113,6 +117,8 @@ png_read_filter_row_sub4_neon(png_row_infop row_info, png_bytep row,
|
|||||||
uint8x8x4_t vdest;
|
uint8x8x4_t vdest;
|
||||||
vdest.val[3] = vdup_n_u8(0);
|
vdest.val[3] = vdup_n_u8(0);
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_filter_row_sub4_neon");
|
||||||
|
|
||||||
for (; rp < rp_stop; rp += 16)
|
for (; rp < rp_stop; rp += 16)
|
||||||
{
|
{
|
||||||
uint32x2x4_t vtmp = vld4_u32(png_ptr(uint32_t,rp));
|
uint32x2x4_t vtmp = vld4_u32(png_ptr(uint32_t,rp));
|
||||||
@@ -148,6 +154,8 @@ png_read_filter_row_avg3_neon(png_row_infop row_info, png_bytep row,
|
|||||||
vrpt = png_ptr(uint8x8x2_t,&vtmp);
|
vrpt = png_ptr(uint8x8x2_t,&vtmp);
|
||||||
vrp = *vrpt;
|
vrp = *vrpt;
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_filter_row_avg3_neon");
|
||||||
|
|
||||||
for (; rp < rp_stop; pp += 12)
|
for (; rp < rp_stop; pp += 12)
|
||||||
{
|
{
|
||||||
uint8x8_t vtmp1, vtmp2, vtmp3;
|
uint8x8_t vtmp1, vtmp2, vtmp3;
|
||||||
@@ -207,6 +215,8 @@ png_read_filter_row_avg4_neon(png_row_infop row_info, png_bytep row,
|
|||||||
uint8x8x4_t vdest;
|
uint8x8x4_t vdest;
|
||||||
vdest.val[3] = vdup_n_u8(0);
|
vdest.val[3] = vdup_n_u8(0);
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_filter_row_avg4_neon");
|
||||||
|
|
||||||
for (; rp < rp_stop; rp += 16, pp += 16)
|
for (; rp < rp_stop; rp += 16, pp += 16)
|
||||||
{
|
{
|
||||||
uint32x2x4_t vtmp;
|
uint32x2x4_t vtmp;
|
||||||
@@ -280,6 +290,8 @@ png_read_filter_row_paeth3_neon(png_row_infop row_info, png_bytep row,
|
|||||||
vrpt = png_ptr(uint8x8x2_t,&vtmp);
|
vrpt = png_ptr(uint8x8x2_t,&vtmp);
|
||||||
vrp = *vrpt;
|
vrp = *vrpt;
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_filter_row_paeth3_neon");
|
||||||
|
|
||||||
for (; rp < rp_stop; pp += 12)
|
for (; rp < rp_stop; pp += 12)
|
||||||
{
|
{
|
||||||
uint8x8x2_t *vppt;
|
uint8x8x2_t *vppt;
|
||||||
@@ -339,6 +351,8 @@ png_read_filter_row_paeth4_neon(png_row_infop row_info, png_bytep row,
|
|||||||
uint8x8x4_t vdest;
|
uint8x8x4_t vdest;
|
||||||
vdest.val[3] = vdup_n_u8(0);
|
vdest.val[3] = vdup_n_u8(0);
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_filter_row_paeth4_neon");
|
||||||
|
|
||||||
for (; rp < rp_stop; rp += 16, pp += 16)
|
for (; rp < rp_stop; rp += 16, pp += 16)
|
||||||
{
|
{
|
||||||
uint32x2x4_t vtmp;
|
uint32x2x4_t vtmp;
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ case "$mode" in
|
|||||||
if test -d .git
|
if test -d .git
|
||||||
then
|
then
|
||||||
exec >&2
|
exec >&2
|
||||||
echo "ERROR: running autoreconf on an initialized sytem"
|
echo "ERROR: running autoreconf on an initialized system"
|
||||||
echo " This is not necessary; it is only necessary to remake the"
|
echo " This is not necessary; it is only necessary to remake the"
|
||||||
echo " autotools generated files if Makefile.am or configure.ac"
|
echo " autotools generated files if Makefile.am or configure.ac"
|
||||||
echo " change and make does the right thing with:"
|
echo " change and make does the right thing with:"
|
||||||
|
|||||||
348
compile
Executable file
@@ -0,0 +1,348 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Wrapper for compilers which do not understand '-c -o'.
|
||||||
|
|
||||||
|
scriptversion=2018-03-07.03; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 1999-2018 Free Software Foundation, Inc.
|
||||||
|
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||||
|
#
|
||||||
|
# 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, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# This file is maintained in Automake, please report
|
||||||
|
# bugs to <bug-automake@gnu.org> or send patches to
|
||||||
|
# <automake-patches@gnu.org>.
|
||||||
|
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
|
||||||
|
# We need space, tab and new line, in precisely that order. Quoting is
|
||||||
|
# there to prevent tools from complaining about whitespace usage.
|
||||||
|
IFS=" "" $nl"
|
||||||
|
|
||||||
|
file_conv=
|
||||||
|
|
||||||
|
# func_file_conv build_file lazy
|
||||||
|
# Convert a $build file to $host form and store it in $file
|
||||||
|
# Currently only supports Windows hosts. If the determined conversion
|
||||||
|
# type is listed in (the comma separated) LAZY, no conversion will
|
||||||
|
# take place.
|
||||||
|
func_file_conv ()
|
||||||
|
{
|
||||||
|
file=$1
|
||||||
|
case $file in
|
||||||
|
/ | /[!/]*) # absolute file, and not a UNC file
|
||||||
|
if test -z "$file_conv"; then
|
||||||
|
# lazily determine how to convert abs files
|
||||||
|
case `uname -s` in
|
||||||
|
MINGW*)
|
||||||
|
file_conv=mingw
|
||||||
|
;;
|
||||||
|
CYGWIN*)
|
||||||
|
file_conv=cygwin
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
file_conv=wine
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
case $file_conv/,$2, in
|
||||||
|
*,$file_conv,*)
|
||||||
|
;;
|
||||||
|
mingw/*)
|
||||||
|
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
||||||
|
;;
|
||||||
|
cygwin/*)
|
||||||
|
file=`cygpath -m "$file" || echo "$file"`
|
||||||
|
;;
|
||||||
|
wine/*)
|
||||||
|
file=`winepath -w "$file" || echo "$file"`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# func_cl_dashL linkdir
|
||||||
|
# Make cl look for libraries in LINKDIR
|
||||||
|
func_cl_dashL ()
|
||||||
|
{
|
||||||
|
func_file_conv "$1"
|
||||||
|
if test -z "$lib_path"; then
|
||||||
|
lib_path=$file
|
||||||
|
else
|
||||||
|
lib_path="$lib_path;$file"
|
||||||
|
fi
|
||||||
|
linker_opts="$linker_opts -LIBPATH:$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# func_cl_dashl library
|
||||||
|
# Do a library search-path lookup for cl
|
||||||
|
func_cl_dashl ()
|
||||||
|
{
|
||||||
|
lib=$1
|
||||||
|
found=no
|
||||||
|
save_IFS=$IFS
|
||||||
|
IFS=';'
|
||||||
|
for dir in $lib_path $LIB
|
||||||
|
do
|
||||||
|
IFS=$save_IFS
|
||||||
|
if $shared && test -f "$dir/$lib.dll.lib"; then
|
||||||
|
found=yes
|
||||||
|
lib=$dir/$lib.dll.lib
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
if test -f "$dir/$lib.lib"; then
|
||||||
|
found=yes
|
||||||
|
lib=$dir/$lib.lib
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
if test -f "$dir/lib$lib.a"; then
|
||||||
|
found=yes
|
||||||
|
lib=$dir/lib$lib.a
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS=$save_IFS
|
||||||
|
|
||||||
|
if test "$found" != yes; then
|
||||||
|
lib=$lib.lib
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# func_cl_wrapper cl arg...
|
||||||
|
# Adjust compile command to suit cl
|
||||||
|
func_cl_wrapper ()
|
||||||
|
{
|
||||||
|
# Assume a capable shell
|
||||||
|
lib_path=
|
||||||
|
shared=:
|
||||||
|
linker_opts=
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if test -n "$eat"; then
|
||||||
|
eat=
|
||||||
|
else
|
||||||
|
case $1 in
|
||||||
|
-o)
|
||||||
|
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||||
|
eat=1
|
||||||
|
case $2 in
|
||||||
|
*.o | *.[oO][bB][jJ])
|
||||||
|
func_file_conv "$2"
|
||||||
|
set x "$@" -Fo"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
func_file_conv "$2"
|
||||||
|
set x "$@" -Fe"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
-I)
|
||||||
|
eat=1
|
||||||
|
func_file_conv "$2" mingw
|
||||||
|
set x "$@" -I"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-I*)
|
||||||
|
func_file_conv "${1#-I}" mingw
|
||||||
|
set x "$@" -I"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-l)
|
||||||
|
eat=1
|
||||||
|
func_cl_dashl "$2"
|
||||||
|
set x "$@" "$lib"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-l*)
|
||||||
|
func_cl_dashl "${1#-l}"
|
||||||
|
set x "$@" "$lib"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-L)
|
||||||
|
eat=1
|
||||||
|
func_cl_dashL "$2"
|
||||||
|
;;
|
||||||
|
-L*)
|
||||||
|
func_cl_dashL "${1#-L}"
|
||||||
|
;;
|
||||||
|
-static)
|
||||||
|
shared=false
|
||||||
|
;;
|
||||||
|
-Wl,*)
|
||||||
|
arg=${1#-Wl,}
|
||||||
|
save_ifs="$IFS"; IFS=','
|
||||||
|
for flag in $arg; do
|
||||||
|
IFS="$save_ifs"
|
||||||
|
linker_opts="$linker_opts $flag"
|
||||||
|
done
|
||||||
|
IFS="$save_ifs"
|
||||||
|
;;
|
||||||
|
-Xlinker)
|
||||||
|
eat=1
|
||||||
|
linker_opts="$linker_opts $2"
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
||||||
|
func_file_conv "$1"
|
||||||
|
set x "$@" -Tp"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
||||||
|
func_file_conv "$1" mingw
|
||||||
|
set x "$@" "$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
if test -n "$linker_opts"; then
|
||||||
|
linker_opts="-link$linker_opts"
|
||||||
|
fi
|
||||||
|
exec "$@" $linker_opts
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
eat=
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
'')
|
||||||
|
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
-h | --h*)
|
||||||
|
cat <<\EOF
|
||||||
|
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||||
|
|
||||||
|
Wrapper for compilers which do not understand '-c -o'.
|
||||||
|
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||||
|
arguments, and rename the output as expected.
|
||||||
|
|
||||||
|
If you are trying to build a whole package this is not the
|
||||||
|
right script to run: please start by reading the file 'INSTALL'.
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "compile $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
||||||
|
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
|
||||||
|
func_cl_wrapper "$@" # Doesn't return...
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ofile=
|
||||||
|
cfile=
|
||||||
|
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if test -n "$eat"; then
|
||||||
|
eat=
|
||||||
|
else
|
||||||
|
case $1 in
|
||||||
|
-o)
|
||||||
|
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||||
|
# So we strip '-o arg' only if arg is an object.
|
||||||
|
eat=1
|
||||||
|
case $2 in
|
||||||
|
*.o | *.obj)
|
||||||
|
ofile=$2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set x "$@" -o "$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*.c)
|
||||||
|
cfile=$1
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -z "$ofile" || test -z "$cfile"; then
|
||||||
|
# If no '-o' option was seen then we might have been invoked from a
|
||||||
|
# pattern rule where we don't need one. That is ok -- this is a
|
||||||
|
# normal compilation that the losing compiler can handle. If no
|
||||||
|
# '.c' file was seen then we are probably linking. That is also
|
||||||
|
# ok.
|
||||||
|
exec "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Name of file we expect compiler to create.
|
||||||
|
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
||||||
|
|
||||||
|
# Create the lock directory.
|
||||||
|
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
||||||
|
# that we are using for the .o file. Also, base the name on the expected
|
||||||
|
# object file name, since that is what matters with a parallel build.
|
||||||
|
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
||||||
|
while true; do
|
||||||
|
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
# FIXME: race condition here if user kills between mkdir and trap.
|
||||||
|
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||||
|
|
||||||
|
# Run the compile.
|
||||||
|
"$@"
|
||||||
|
ret=$?
|
||||||
|
|
||||||
|
if test -f "$cofile"; then
|
||||||
|
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
||||||
|
elif test -f "${cofile}bj"; then
|
||||||
|
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rmdir "$lockdir"
|
||||||
|
exit $ret
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-indentation: 2
|
||||||
|
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
1476
config.guess
vendored
Executable file
129
config.h.in
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
#undef HAVE_DLFCN_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `feenableexcept' function. */
|
||||||
|
#undef HAVE_FEENABLEEXCEPT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#undef HAVE_INTTYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `m' library (-lm). */
|
||||||
|
#undef HAVE_LIBM
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `z' library (-lz). */
|
||||||
|
#undef HAVE_LIBZ
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#undef HAVE_MEMORY_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memset' function. */
|
||||||
|
#undef HAVE_MEMSET
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pow' function. */
|
||||||
|
#undef HAVE_POW
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#undef HAVE_STDINT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#undef HAVE_STDLIB_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#undef HAVE_STRINGS_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#undef HAVE_STRING_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#undef HAVE_SYS_STAT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#undef HAVE_SYS_TYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
|
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||||
|
#undef LT_OBJDIR
|
||||||
|
|
||||||
|
/* Name of package */
|
||||||
|
#undef PACKAGE
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#undef PACKAGE_BUGREPORT
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#undef PACKAGE_NAME
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#undef PACKAGE_STRING
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#undef PACKAGE_URL
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
/* Turn on ARM Neon optimizations at run-time */
|
||||||
|
#undef PNG_ARM_NEON_API_SUPPORTED
|
||||||
|
|
||||||
|
/* Check for ARM Neon support at run-time */
|
||||||
|
#undef PNG_ARM_NEON_CHECK_SUPPORTED
|
||||||
|
|
||||||
|
/* Enable ARM Neon optimizations */
|
||||||
|
#undef PNG_ARM_NEON_OPT
|
||||||
|
|
||||||
|
/* Enable Intel SSE optimizations */
|
||||||
|
#undef PNG_INTEL_SSE_OPT
|
||||||
|
|
||||||
|
/* Turn on MIPS MSA optimizations at run-time */
|
||||||
|
#undef PNG_MIPS_MSA_API_SUPPORTED
|
||||||
|
|
||||||
|
/* Check for MIPS MSA support at run-time */
|
||||||
|
#undef PNG_MIPS_MSA_CHECK_SUPPORTED
|
||||||
|
|
||||||
|
/* Enable MIPS MSA optimizations */
|
||||||
|
#undef PNG_MIPS_MSA_OPT
|
||||||
|
|
||||||
|
/* Turn on POWERPC VSX optimizations at run-time */
|
||||||
|
#undef PNG_POWERPC_VSX_API_SUPPORTED
|
||||||
|
|
||||||
|
/* Check for POWERPC VSX support at run-time */
|
||||||
|
#undef PNG_POWERPC_VSX_CHECK_SUPPORTED
|
||||||
|
|
||||||
|
/* Enable POWERPC VSX optimizations */
|
||||||
|
#undef PNG_POWERPC_VSX_OPT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
|
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
|
||||||
|
#undef TM_IN_SYS_TIME
|
||||||
|
|
||||||
|
/* Version number of package */
|
||||||
|
#undef VERSION
|
||||||
|
|
||||||
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
|
#undef const
|
||||||
|
|
||||||
|
/* Define to the equivalent of the C99 'restrict' keyword, or to
|
||||||
|
nothing if this is not supported. Do not define if restrict is
|
||||||
|
supported directly. */
|
||||||
|
#undef restrict
|
||||||
|
/* Work around a bug in Sun C++: it does not support _Restrict or
|
||||||
|
__restrict__, even though the corresponding Sun C compiler ends up with
|
||||||
|
"#define restrict _Restrict" or "#define restrict __restrict__" in the
|
||||||
|
previous line. Perhaps some future version of Sun C++ will work with
|
||||||
|
restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
|
||||||
|
#if defined __SUNPRO_CC && !defined __RESTRICT
|
||||||
|
# define _Restrict
|
||||||
|
# define __restrict__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||||
|
#undef size_t
|
||||||
1801
config.sub
vendored
Executable file
219
configure.ac
@@ -1,5 +1,12 @@
|
|||||||
# configure.ac
|
# configure.ac
|
||||||
|
|
||||||
|
# Copyright (c) 2004-2016 Glenn Randers-Pehrson
|
||||||
|
# Last changed in libpng 1.6.25 [September 1, 2016]
|
||||||
|
|
||||||
|
# This code is released under the libpng license.
|
||||||
|
# For conditions of distribution and use, see the disclaimer
|
||||||
|
# and license in png.h
|
||||||
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
dnl
|
dnl
|
||||||
dnl Minor upgrades (compatible ABI): increment the package version
|
dnl Minor upgrades (compatible ABI): increment the package version
|
||||||
@@ -18,7 +25,7 @@ AC_PREREQ([2.68])
|
|||||||
|
|
||||||
dnl Version number stuff here:
|
dnl Version number stuff here:
|
||||||
|
|
||||||
AC_INIT([libpng],[1.6.20],[png-mng-implement@lists.sourceforge.net])
|
AC_INIT([libpng],[1.6.35],[png-mng-implement@lists.sourceforge.net])
|
||||||
AC_CONFIG_MACRO_DIR([scripts])
|
AC_CONFIG_MACRO_DIR([scripts])
|
||||||
|
|
||||||
# libpng does not follow GNU file name conventions (hence 'foreign')
|
# libpng does not follow GNU file name conventions (hence 'foreign')
|
||||||
@@ -29,7 +36,7 @@ AC_CONFIG_MACRO_DIR([scripts])
|
|||||||
# 1.13 is required for parallel tests
|
# 1.13 is required for parallel tests
|
||||||
AM_INIT_AUTOMAKE([1.13 foreign dist-xz color-tests silent-rules subdir-objects])
|
AM_INIT_AUTOMAKE([1.13 foreign dist-xz color-tests silent-rules subdir-objects])
|
||||||
# The following line causes --disable-maintainer-mode to be the default to
|
# The following line causes --disable-maintainer-mode to be the default to
|
||||||
# configure, this is necessary because libpng distributions cannot rely on the
|
# configure. This is necessary because libpng distributions cannot rely on the
|
||||||
# time stamps of the autotools generated files being correct
|
# time stamps of the autotools generated files being correct
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
@@ -39,10 +46,10 @@ dnl automake, so the following is not necessary (and is not defined anyway):
|
|||||||
dnl AM_PREREQ([1.11.2])
|
dnl AM_PREREQ([1.11.2])
|
||||||
dnl stop configure from automagically running automake
|
dnl stop configure from automagically running automake
|
||||||
|
|
||||||
PNGLIB_VERSION=1.6.20
|
PNGLIB_VERSION=1.6.35
|
||||||
PNGLIB_MAJOR=1
|
PNGLIB_MAJOR=1
|
||||||
PNGLIB_MINOR=6
|
PNGLIB_MINOR=6
|
||||||
PNGLIB_RELEASE=20
|
PNGLIB_RELEASE=35
|
||||||
|
|
||||||
dnl End of version number stuff
|
dnl End of version number stuff
|
||||||
|
|
||||||
@@ -60,7 +67,7 @@ AC_PROG_INSTALL
|
|||||||
AC_PROG_LN_S
|
AC_PROG_LN_S
|
||||||
AC_PROG_MAKE_SET
|
AC_PROG_MAKE_SET
|
||||||
|
|
||||||
dnl libtool/libtoolize; version 2.4.2 is the tested version, this or any
|
dnl libtool/libtoolize; version 2.4.2 is the tested version. This or any
|
||||||
dnl compatible later version may be used
|
dnl compatible later version may be used
|
||||||
LT_INIT([win32-dll])
|
LT_INIT([win32-dll])
|
||||||
LT_PREREQ([2.4.2])
|
LT_PREREQ([2.4.2])
|
||||||
@@ -107,6 +114,25 @@ AC_ARG_ENABLE(werror,
|
|||||||
CFLAGS="$sav_CFLAGS"
|
CFLAGS="$sav_CFLAGS"
|
||||||
fi],)
|
fi],)
|
||||||
|
|
||||||
|
# For GCC 5 the default mode for C is -std=gnu11 instead of -std=gnu89
|
||||||
|
# In pngpriv.h we request just the POSIX 1003.1 and C89 APIs by defining _POSIX_SOURCE to 1
|
||||||
|
# This is incompatible with the new default mode, so we test for that and force the
|
||||||
|
# "-std=c89" compiler option:
|
||||||
|
AC_MSG_CHECKING([if we need to force back C standard to C89])
|
||||||
|
AC_COMPILE_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([
|
||||||
|
[#define _POSIX_SOURCE 1]
|
||||||
|
[#include <stdio.h>]
|
||||||
|
])],
|
||||||
|
AC_MSG_RESULT(no),[
|
||||||
|
if test "x$GCC" != "xyes"; then
|
||||||
|
AC_MSG_ERROR(
|
||||||
|
[Forcing back to C89 is required but the flags are only known for GCC])
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
CFLAGS="$CFLAGS -std=c89"
|
||||||
|
])
|
||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
|
|
||||||
@@ -120,6 +146,12 @@ AC_C_RESTRICT
|
|||||||
AC_FUNC_STRTOD
|
AC_FUNC_STRTOD
|
||||||
AC_CHECK_FUNCS([memset], , AC_MSG_ERROR(memset not found in libc))
|
AC_CHECK_FUNCS([memset], , AC_MSG_ERROR(memset not found in libc))
|
||||||
AC_CHECK_FUNCS([pow], , AC_CHECK_LIB(m, pow, , AC_MSG_ERROR(cannot find pow)) )
|
AC_CHECK_FUNCS([pow], , AC_CHECK_LIB(m, pow, , AC_MSG_ERROR(cannot find pow)) )
|
||||||
|
|
||||||
|
# Some later POSIX 1003.1 functions are required for test programs, failure here
|
||||||
|
# is soft (the corresponding test program is not built).
|
||||||
|
AC_CHECK_FUNC([clock_gettime],,[AC_MSG_WARN([not building timepng])])
|
||||||
|
AM_CONDITIONAL([HAVE_CLOCK_GETTIME], [test "$ac_cv_func_clock_gettime" = "yes"])
|
||||||
|
|
||||||
AC_ARG_WITH(zlib-prefix,
|
AC_ARG_WITH(zlib-prefix,
|
||||||
AS_HELP_STRING([[[--with-zlib-prefix]]],
|
AS_HELP_STRING([[[--with-zlib-prefix]]],
|
||||||
[prefix that may have been used in installed zlib]),
|
[prefix that may have been used in installed zlib]),
|
||||||
@@ -268,6 +300,55 @@ AM_CONDITIONAL([DO_INSTALL_LIBPNG_CONFIG],
|
|||||||
# HOST SPECIFIC OPTIONS
|
# HOST SPECIFIC OPTIONS
|
||||||
# =====================
|
# =====================
|
||||||
#
|
#
|
||||||
|
# DEFAULT
|
||||||
|
# =======
|
||||||
|
#
|
||||||
|
AC_ARG_ENABLE([hardware-optimizations],
|
||||||
|
AS_HELP_STRING([[[--enable-hardware-optimizations]]],
|
||||||
|
[Enable hardware optimizations: =no/off, yes/on:]),
|
||||||
|
[case "$enableval" in
|
||||||
|
no|off)
|
||||||
|
# disable hardware optimization on all systems:
|
||||||
|
enable_arm_neon=no
|
||||||
|
AC_DEFINE([PNG_ARM_NEON_OPT], [0],
|
||||||
|
[Disable ARM_NEON optimizations])
|
||||||
|
enable_mips_msa=no
|
||||||
|
AC_DEFINE([PNG_MIPS_MSA_OPT], [0],
|
||||||
|
[Disable MIPS_MSA optimizations])
|
||||||
|
enable_powerpc_vsx=no
|
||||||
|
AC_DEFINE([PNG_POWERPC_VSX_OPT], [0],
|
||||||
|
[Disable POWERPC VSX optimizations])
|
||||||
|
enable_intel_sse=no
|
||||||
|
AC_DEFINE([PNG_INTEL_SSE_OPT], [0],
|
||||||
|
[Disable INTEL_SSE optimizations])
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# allow enabling hardware optimization on any system:
|
||||||
|
case "$host_cpu" in
|
||||||
|
arm*|aarch64*)
|
||||||
|
enable_arm_neon=yes
|
||||||
|
AC_DEFINE([PNG_ARM_NEON_OPT], [0],
|
||||||
|
[Enable ARM_NEON optimizations])
|
||||||
|
;;
|
||||||
|
mipsel*|mips64el*)
|
||||||
|
enable_mips_msa=yes
|
||||||
|
AC_DEFINE([PNG_MIPS_MSA_OPT], [0],
|
||||||
|
[Enable MIPS_MSA optimizations])
|
||||||
|
;;
|
||||||
|
i?86|x86_64)
|
||||||
|
enable_intel_sse=yes
|
||||||
|
AC_DEFINE([PNG_INTEL_SSE_OPT], [1],
|
||||||
|
[Enable Intel SSE optimizations])
|
||||||
|
;;
|
||||||
|
powerpc*|ppc64*)
|
||||||
|
enable_powerpc_vsx=yes
|
||||||
|
AC_DEFINE([PNG_POWERPC_VSX_OPT], [2],
|
||||||
|
[Enable POWERPC VSX optimizations])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac])
|
||||||
|
|
||||||
# ARM
|
# ARM
|
||||||
# ===
|
# ===
|
||||||
#
|
#
|
||||||
@@ -314,6 +395,134 @@ AM_CONDITIONAL([PNG_ARM_NEON],
|
|||||||
*) test "$enable_arm_neon" != '';;
|
*) test "$enable_arm_neon" != '';;
|
||||||
esac])
|
esac])
|
||||||
|
|
||||||
|
# MIPS
|
||||||
|
# ===
|
||||||
|
#
|
||||||
|
# MIPS MSA (SIMD) support.
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([mips-msa],
|
||||||
|
AS_HELP_STRING([[[--enable-mips-msa]]],
|
||||||
|
[Enable MIPS MSA optimizations: =no/off, check, api, yes/on:]
|
||||||
|
[no/off: disable the optimizations; check: use internal checking code]
|
||||||
|
[(deprecated and poorly supported); api: disable by default, enable by]
|
||||||
|
[a call to png_set_option; yes/on: turn on unconditionally.]
|
||||||
|
[If not specified: determined by the compiler.]),
|
||||||
|
[case "$enableval" in
|
||||||
|
no|off)
|
||||||
|
# disable the default enabling on __mips_msa systems:
|
||||||
|
AC_DEFINE([PNG_MIPS_MSA_OPT], [0],
|
||||||
|
[Disable MIPS MSA optimizations])
|
||||||
|
# Prevent inclusion of the assembler files below:
|
||||||
|
enable_mips_msa=no;;
|
||||||
|
check)
|
||||||
|
AC_DEFINE([PNG_MIPS_MSA_CHECK_SUPPORTED], [],
|
||||||
|
[Check for MIPS MSA support at run-time]);;
|
||||||
|
api)
|
||||||
|
AC_DEFINE([PNG_MIPS_MSA_API_SUPPORTED], [],
|
||||||
|
[Turn on MIPS MSA optimizations at run-time]);;
|
||||||
|
yes|on)
|
||||||
|
AC_DEFINE([PNG_MIPS_MSA_OPT], [2],
|
||||||
|
[Enable MIPS MSA optimizations])
|
||||||
|
AC_MSG_WARN([--enable-mips-msa: please specify 'check' or 'api', if]
|
||||||
|
[you want the optimizations unconditionally pass '-mmsa -mfp64']
|
||||||
|
[to the compiler.]);;
|
||||||
|
*)
|
||||||
|
AC_MSG_ERROR([--enable-mips-msa=${enable_mips_msa}: invalid value])
|
||||||
|
esac])
|
||||||
|
|
||||||
|
# Add MIPS specific files to all builds where the host_cpu is mips ('mips*') or
|
||||||
|
# where MIPS optimizations were explicitly requested (this allows a fallback if a
|
||||||
|
# future host CPU does not match 'mips*')
|
||||||
|
|
||||||
|
AM_CONDITIONAL([PNG_MIPS_MSA],
|
||||||
|
[test "$enable_mips_msa" != 'no' &&
|
||||||
|
case "$host_cpu" in
|
||||||
|
mipsel*|mips64el*) :;;
|
||||||
|
esac])
|
||||||
|
|
||||||
|
# INTEL
|
||||||
|
# =====
|
||||||
|
#
|
||||||
|
# INTEL SSE (SIMD) support.
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([intel-sse],
|
||||||
|
AS_HELP_STRING([[[--enable-intel-sse]]],
|
||||||
|
[Enable Intel SSE optimizations: =no/off, yes/on:]
|
||||||
|
[no/off: disable the optimizations;]
|
||||||
|
[yes/on: enable the optimizations.]
|
||||||
|
[If not specified: determined by the compiler.]),
|
||||||
|
[case "$enableval" in
|
||||||
|
no|off)
|
||||||
|
# disable the default enabling:
|
||||||
|
AC_DEFINE([PNG_INTEL_SSE_OPT], [0],
|
||||||
|
[Disable Intel SSE optimizations])
|
||||||
|
# Prevent inclusion of the assembler files below:
|
||||||
|
enable_intel_sse=no;;
|
||||||
|
yes|on)
|
||||||
|
AC_DEFINE([PNG_INTEL_SSE_OPT], [1],
|
||||||
|
[Enable Intel SSE optimizations]);;
|
||||||
|
*)
|
||||||
|
AC_MSG_ERROR([--enable-intel-sse=${enable_intel_sse}: invalid value])
|
||||||
|
esac])
|
||||||
|
|
||||||
|
# Add Intel specific files to all builds where the host_cpu is Intel ('x86*')
|
||||||
|
# or where Intel optimizations were explicitly requested (this allows a
|
||||||
|
# fallback if a future host CPU does not match 'x86*')
|
||||||
|
AM_CONDITIONAL([PNG_INTEL_SSE],
|
||||||
|
[test "$enable_intel_sse" != 'no' &&
|
||||||
|
case "$host_cpu" in
|
||||||
|
i?86|x86_64) :;;
|
||||||
|
*) test "$enable_intel_sse" != '';;
|
||||||
|
esac])
|
||||||
|
|
||||||
|
# PowerPC
|
||||||
|
# ===
|
||||||
|
#
|
||||||
|
# PowerPC VSX (SIMD) support.
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([powerpc-vsx],
|
||||||
|
AS_HELP_STRING([[[--enable-powerpc-vsx]]],
|
||||||
|
[Enable POWERPC VSX optimizations: =no/off, check, api, yes/on:]
|
||||||
|
[no/off: disable the optimizations; check: use internal checking code]
|
||||||
|
[api: disable by default, enable by a call to png_set_option]
|
||||||
|
[yes/on: turn on unconditionally.]
|
||||||
|
[If not specified: determined by the compiler.]),
|
||||||
|
[case "$enableval" in
|
||||||
|
no|off)
|
||||||
|
# disable the default enabling on __ppc64__ systems:
|
||||||
|
AC_DEFINE([PNG_POWERPC_VSX_OPT], [0],
|
||||||
|
[Disable POWERPC VSX optimizations])
|
||||||
|
# Prevent inclusion of the platform specific files below:
|
||||||
|
enable_powerpc_vsx=no;;
|
||||||
|
check)
|
||||||
|
AC_DEFINE([PNG_POWERPC_VSX_CHECK_SUPPORTED], [],
|
||||||
|
[Check for POWERPC VSX support at run-time])
|
||||||
|
AC_MSG_WARN([--enable-powerpc-vsx Please check contrib/powerpc/README file]
|
||||||
|
[for the list of supported OSes.]);;
|
||||||
|
api)
|
||||||
|
AC_DEFINE([PNG_POWERPC_VSX_API_SUPPORTED], [],
|
||||||
|
[Turn on POWERPC VSX optimizations at run-time]);;
|
||||||
|
yes|on)
|
||||||
|
AC_DEFINE([PNG_POWERPC_VSX_OPT], [2],
|
||||||
|
[Enable POWERPC VSX optimizations])
|
||||||
|
AC_MSG_WARN([--enable-powerpc-vsx: please specify 'check' or 'api', if]
|
||||||
|
[you want the optimizations unconditionally pass '-maltivec -mvsx']
|
||||||
|
[or '-mcpu=power8'to the compiler.]);;
|
||||||
|
*)
|
||||||
|
AC_MSG_ERROR([--enable-powerpc-vsx=${enable_powerpc_vsx}: invalid value])
|
||||||
|
esac])
|
||||||
|
|
||||||
|
# Add PowerPC specific files to all builds where the host_cpu is powerpc('powerpc*') or
|
||||||
|
# where POWERPC optimizations were explicitly requested (this allows a fallback if a
|
||||||
|
# future host CPU does not match 'powerpc*')
|
||||||
|
|
||||||
|
AM_CONDITIONAL([PNG_POWERPC_VSX],
|
||||||
|
[test "$enable_powerpc_vsx" != 'no' &&
|
||||||
|
case "$host_cpu" in
|
||||||
|
powerpc*|ppc64*) :;;
|
||||||
|
esac])
|
||||||
|
|
||||||
|
|
||||||
AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])
|
AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])
|
||||||
|
|
||||||
# Config files, substituting as above
|
# Config files, substituting as above
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
*
|
*
|
||||||
* Documentation:
|
* Documentation:
|
||||||
* http://www.kandroid.org/ndk/docs/CPU-ARM-NEON.html
|
* http://www.kandroid.org/ndk/docs/CPU-ARM-NEON.html
|
||||||
* http://code.google.com/p/android/issues/detail?id=49065
|
* https://code.google.com/p/android/issues/detail?id=49065
|
||||||
*
|
*
|
||||||
* NOTE: this requires that libpng is built against the Android NDK and linked
|
* NOTE: this requires that libpng is built against the Android NDK and linked
|
||||||
* with an implementation of the Android ARM 'cpu-features' library. The code
|
* with an implementation of the Android ARM 'cpu-features' library. The code
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/* contrib/arm-neon/linux.c
|
/* contrib/arm-neon/linux.c
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014 Glenn Randers-Pehrson
|
* Last changed in libpng 1.6.31 [July 27, 2017]
|
||||||
* Written by John Bowler, 2014.
|
* Copyright (c) 2014, 2017 Glenn Randers-Pehrson
|
||||||
* Last changed in libpng 1.6.16 [December 22, 2014]
|
* Written by John Bowler, 2014, 2017.
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -62,7 +62,7 @@ png_have_neon(png_structp png_ptr)
|
|||||||
|
|
||||||
counter=0;
|
counter=0;
|
||||||
state = Feature;
|
state = Feature;
|
||||||
/* FALL THROUGH */
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
case Feature:
|
case Feature:
|
||||||
/* Match 'FEATURE', ASCII case insensitive. */
|
/* Match 'FEATURE', ASCII case insensitive. */
|
||||||
@@ -75,7 +75,7 @@ png_have_neon(png_structp png_ptr)
|
|||||||
|
|
||||||
/* did not match 'feature' */
|
/* did not match 'feature' */
|
||||||
state = SkipLine;
|
state = SkipLine;
|
||||||
/* FALL THROUGH */
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
case SkipLine:
|
case SkipLine:
|
||||||
skipLine:
|
skipLine:
|
||||||
@@ -110,7 +110,7 @@ png_have_neon(png_structp png_ptr)
|
|||||||
|
|
||||||
state = Neon;
|
state = Neon;
|
||||||
counter = 0;
|
counter = 0;
|
||||||
/* FALL THROUGH */
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
case Neon:
|
case Neon:
|
||||||
/* Look for 'neon' tag */
|
/* Look for 'neon' tag */
|
||||||
@@ -122,7 +122,7 @@ png_have_neon(png_structp png_ptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
state = SkipTag;
|
state = SkipTag;
|
||||||
/* FALL THROUGH */
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
case SkipTag:
|
case SkipTag:
|
||||||
/* Skip non-space characters */
|
/* Skip non-space characters */
|
||||||
|
|||||||
57
contrib/conftest/pngcp.dfa
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# pngcp.dfa
|
||||||
|
# Build time configuration of libpng
|
||||||
|
#
|
||||||
|
# Author: John Bowler
|
||||||
|
# Copyright: (c) John Bowler, 2016
|
||||||
|
# Usage rights:
|
||||||
|
# To the extent possible under law, the author has waived all copyright and
|
||||||
|
# related or neighboring rights to this work. This work is published from:
|
||||||
|
# United States.
|
||||||
|
#
|
||||||
|
# Build libpng with support for pngcp. This means just png_read_png,
|
||||||
|
# png_write_png and small number of configuration settings.
|
||||||
|
#
|
||||||
|
everything = off
|
||||||
|
|
||||||
|
# This option is specific to this configuration; it adds a #define to the
|
||||||
|
# generated pnglibconf.h which turns on the (not portable) timing option for
|
||||||
|
# pngcp. Note that any option is automatically preceded by PNG_; there is no
|
||||||
|
# way round this and this is deliberate.
|
||||||
|
option PNGCP_TIMING
|
||||||
|
|
||||||
|
# Because of the everything off above the option must also be turned on. This
|
||||||
|
# may not be done in one step because it is safer and avoids mis-spelled options
|
||||||
|
# in user .dfa files to error out if an unrecognized option is turned on.
|
||||||
|
option PNGCP_TIMING on
|
||||||
|
|
||||||
|
# Options to turn on png_read_png and png_write_png:
|
||||||
|
option INFO_IMAGE on
|
||||||
|
option SEQUENTIAL_READ on
|
||||||
|
option EASY_ACCESS on
|
||||||
|
option WRITE on
|
||||||
|
option WRITE_16BIT on
|
||||||
|
option WRITE_FILTER on
|
||||||
|
|
||||||
|
# pngcp needs this to preserve unknown chunks, switching all these on means that
|
||||||
|
# pngcp can work without explicit known chunk reading support
|
||||||
|
option UNKNOWN_CHUNKS on
|
||||||
|
option SET_UNKNOWN_CHUNKS on
|
||||||
|
option HANDLE_AS_UNKNOWN on
|
||||||
|
option SAVE_UNKNOWN_CHUNKS on
|
||||||
|
option WRITE_UNKNOWN_CHUNKS on
|
||||||
|
|
||||||
|
# pngcp needs this to handle palette files with invalid indices:
|
||||||
|
option CHECK_FOR_INVALID_INDEX on
|
||||||
|
option GET_PALETTE_MAX on
|
||||||
|
|
||||||
|
# Pre-libpng 1.7 pngcp has to stash text chunks manually, post 1.7 without this
|
||||||
|
# text chunks should be handled as unknown ok.
|
||||||
|
option TEXT on
|
||||||
|
|
||||||
|
# this is used to turn off limits:
|
||||||
|
option USER_LIMITS on
|
||||||
|
option SET_USER_LIMITS on
|
||||||
|
|
||||||
|
# these are are just required for specific customizations
|
||||||
|
option WRITE_CUSTOMIZE_ZTXT_COMPRESSION on
|
||||||
|
option WRITE_CUSTOMIZE_COMPRESSION on
|
||||||
@@ -21,4 +21,4 @@ ORIGINAL AUTHORS
|
|||||||
of the people below claim any rights with regard to the contents of this
|
of the people below claim any rights with regard to the contents of this
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
John Bowler <jbowler@acm.org>
|
John Bowler <jbowler at acm.org>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
* without processing the image. Notice that some header information may occur
|
* without processing the image. Notice that some header information may occur
|
||||||
* after the image data. Textual data and comments are an example; the approach
|
* after the image data. Textual data and comments are an example; the approach
|
||||||
* in this file won't work reliably for such data because it only looks for the
|
* in this file won't work reliably for such data because it only looks for the
|
||||||
* information in the section of the file that preceeds the image data.
|
* information in the section of the file that precedes the image data.
|
||||||
*
|
*
|
||||||
* Compile and link against libpng and zlib, plus anything else required on the
|
* Compile and link against libpng and zlib, plus anything else required on the
|
||||||
* system you use.
|
* system you use.
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
/*- pngtopng
|
/*- pngtopng
|
||||||
*
|
*
|
||||||
* COPYRIGHT: Written by John Cunningham Bowler, 2011.
|
* COPYRIGHT: Written by John Cunningham Bowler, 2011, 2017.
|
||||||
* To the extent possible under law, the author has waived all copyright and
|
* To the extent possible under law, the author has waived all copyright and
|
||||||
* related or neighboring rights to this work. This work is published from:
|
* related or neighboring rights to this work. This work is published from:
|
||||||
* United States.
|
* United States.
|
||||||
*
|
*
|
||||||
|
* Last changed in libpng 1.6.29 [March 16, 2017]
|
||||||
|
*
|
||||||
* Read a PNG and write it out in a fixed format, using the 'simplified API'
|
* Read a PNG and write it out in a fixed format, using the 'simplified API'
|
||||||
* that was introduced in libpng-1.6.0.
|
* that was introduced in libpng-1.6.0.
|
||||||
*
|
*
|
||||||
@@ -59,26 +61,27 @@ int main(int argc, const char **argv)
|
|||||||
else
|
else
|
||||||
fprintf(stderr, "pngtopng: write %s: %s\n", argv[2],
|
fprintf(stderr, "pngtopng: write %s: %s\n", argv[2],
|
||||||
image.message);
|
image.message);
|
||||||
|
|
||||||
free(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
fprintf(stderr, "pngtopng: read %s: %s\n", argv[1],
|
fprintf(stderr, "pngtopng: read %s: %s\n", argv[1],
|
||||||
image.message);
|
image.message);
|
||||||
|
|
||||||
/* This is the only place where a 'free' is required; libpng does
|
free(buffer);
|
||||||
* the cleanup on error and success, but in this case we couldn't
|
|
||||||
* complete the read because of running out of memory.
|
|
||||||
*/
|
|
||||||
png_image_free(&image);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
fprintf(stderr, "pngtopng: out of memory: %lu bytes\n",
|
fprintf(stderr, "pngtopng: out of memory: %lu bytes\n",
|
||||||
(unsigned long)PNG_IMAGE_SIZE(image));
|
(unsigned long)PNG_IMAGE_SIZE(image));
|
||||||
|
|
||||||
|
/* This is the only place where a 'free' is required; libpng does
|
||||||
|
* the cleanup on error and success, but in this case we couldn't
|
||||||
|
* complete the read because of running out of memory and so libpng
|
||||||
|
* has not got to the point where it can do cleanup.
|
||||||
|
*/
|
||||||
|
png_image_free(&image);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ of PBMPLUS/NetPBM) and converts them to PNG.
|
|||||||
|
|
||||||
The source code for all three demo programs currently compiles under
|
The source code for all three demo programs currently compiles under
|
||||||
Unix, OpenVMS, and 32-bit Windows. (Special thanks to Martin Zinser,
|
Unix, OpenVMS, and 32-bit Windows. (Special thanks to Martin Zinser,
|
||||||
zinser@decus.de, for making the necessary changes for OpenVMS and for
|
zinser at decus.de, for making the necessary changes for OpenVMS and for
|
||||||
providing an appropriate build script.) Build instructions can be found
|
providing an appropriate build script.) Build instructions can be found
|
||||||
below.
|
below.
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ mation and links to the latest version of the source code, and Chapters
|
|||||||
13-15 of the book for detailed discussion of the three programs.
|
13-15 of the book for detailed discussion of the three programs.
|
||||||
|
|
||||||
Greg Roelofs
|
Greg Roelofs
|
||||||
http://pobox.com/~newt/greg_contact.html
|
https://pobox.com/~newt/greg_contact.html
|
||||||
16 March 2008
|
16 March 2008
|
||||||
|
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ BUILD INSTRUCTIONS
|
|||||||
|
|
||||||
- Prerequisites (in order of compilation):
|
- Prerequisites (in order of compilation):
|
||||||
|
|
||||||
- zlib http://zlib.net/
|
- zlib https://zlib.net/
|
||||||
- libpng http://www.libpng.org/pub/png/libpng.html
|
- libpng http://www.libpng.org/pub/png/libpng.html
|
||||||
- pngbook http://www.libpng.org/pub/png/book/sources.html
|
- pngbook http://www.libpng.org/pub/png/book/sources.html
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2007,2017 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -264,6 +264,12 @@ uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
|
|||||||
*pRowbytes = rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
*pRowbytes = rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
||||||
*pChannels = (int)png_get_channels(png_ptr, info_ptr);
|
*pChannels = (int)png_get_channels(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
/* Guard against integer overflow */
|
||||||
|
if (height > ((size_t)(-1))/rowbytes) {
|
||||||
|
fprintf(stderr, "readpng: image_data buffer would be too large\n",
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if ((image_data = (uch *)malloc(rowbytes*height)) == NULL) {
|
if ((image_data = (uch *)malloc(rowbytes*height)) == NULL) {
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -54,7 +54,8 @@
|
|||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Changelog:
|
Changelog:
|
||||||
%RDATE% - Check return value of png_get_bKGD() (Glenn R-P)
|
2015-11-12 - Check return value of png_get_bKGD() (Glenn R-P)
|
||||||
|
2017-04-22 - Guard against integer overflow (Glenn R-P)
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2007,2017 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -154,12 +154,17 @@ uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
|
|||||||
*pRowbytes = rowbytes = channels*width;
|
*pRowbytes = rowbytes = channels*width;
|
||||||
*pChannels = channels;
|
*pChannels = channels;
|
||||||
|
|
||||||
if ((image_data = (uch *)malloc(rowbytes*height)) == NULL) {
|
Trace((stderr, "readpng_get_image: rowbytes = %ld, height = %ld\n", rowbytes, height));
|
||||||
|
|
||||||
|
/* Guard against integer overflow */
|
||||||
|
if (height > ((size_t)(-1))/rowbytes) {
|
||||||
|
fprintf(stderr, PROGNAME ": image_data buffer would be too large\n",
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Trace((stderr, "readpng_get_image: rowbytes = %ld, height = %ld\n", rowbytes, height));
|
if ((image_data = (uch *)malloc(rowbytes*height)) == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* now we can go ahead and just read the whole image */
|
/* now we can go ahead and just read the whole image */
|
||||||
|
|
||||||
|
|||||||
@@ -24,10 +24,11 @@
|
|||||||
- 1.10: enabled "message window"/console (thanks to David Geldreich)
|
- 1.10: enabled "message window"/console (thanks to David Geldreich)
|
||||||
- 2.00: dual-licensed (added GNU GPL)
|
- 2.00: dual-licensed (added GNU GPL)
|
||||||
- 2.01: fixed improper display of usage screen on PNG error(s)
|
- 2.01: fixed improper display of usage screen on PNG error(s)
|
||||||
|
- 2.02: check for integer overflow (Glenn R-P)
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2008, 2017 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -182,7 +183,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
#ifndef __CYGWIN__
|
#ifndef __CYGWIN__
|
||||||
/* First reenable console output, which normally goes to the bit bucket
|
/* First reenable console output, which normally goes to the bit bucket
|
||||||
* for windowed apps. Closing the console window will terminate the
|
* for windowed apps. Closing the console window will terminate the
|
||||||
* app. Thanks to David.Geldreich@realviz.com for supplying the magical
|
* app. Thanks to David.Geldreich at realviz.com for supplying the magical
|
||||||
* incantation. */
|
* incantation. */
|
||||||
|
|
||||||
AllocConsole();
|
AllocConsole();
|
||||||
@@ -496,6 +497,12 @@ static int rpng_win_create_window(HINSTANCE hInst, int showmode)
|
|||||||
|
|
||||||
wimage_rowbytes = ((3*image_width + 3L) >> 2) << 2;
|
wimage_rowbytes = ((3*image_width + 3L) >> 2) << 2;
|
||||||
|
|
||||||
|
/* Guard against integer overflow */
|
||||||
|
if (image_height > ((size_t)(-1))/wimage_rowbytes) {
|
||||||
|
fprintf(stderr, PROGNAME ": image_data buffer would be too large\n");
|
||||||
|
return 4; /* fail */
|
||||||
|
}
|
||||||
|
|
||||||
if (!(dib = (uch *)malloc(sizeof(BITMAPINFOHEADER) +
|
if (!(dib = (uch *)malloc(sizeof(BITMAPINFOHEADER) +
|
||||||
wimage_rowbytes*image_height)))
|
wimage_rowbytes*image_height)))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,10 +28,11 @@
|
|||||||
- 2.01: fixed improper display of usage screen on PNG error(s)
|
- 2.01: fixed improper display of usage screen on PNG error(s)
|
||||||
- 2.02: Added "void(argc);" statement to quiet pedantic compiler warnings
|
- 2.02: Added "void(argc);" statement to quiet pedantic compiler warnings
|
||||||
about unused variable (GR-P)
|
about unused variable (GR-P)
|
||||||
|
- 2.03: check for integer overflow (Glenn R-P)
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2008, 2017 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
|
|||||||
@@ -33,12 +33,11 @@
|
|||||||
- 2.02: fixed improper display of usage screen on PNG error(s); fixed
|
- 2.02: fixed improper display of usage screen on PNG error(s); fixed
|
||||||
unexpected-EOF and file-read-error cases
|
unexpected-EOF and file-read-error cases
|
||||||
- 2.03: removed runtime MMX-enabling/disabling and obsolete -mmx* options
|
- 2.03: removed runtime MMX-enabling/disabling and obsolete -mmx* options
|
||||||
- 2.04:
|
- 2.04: check for integer overflow (Glenn R-P)
|
||||||
(GR-P)
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2008, 2017 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -301,7 +300,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
#ifndef __CYGWIN__
|
#ifndef __CYGWIN__
|
||||||
/* Next reenable console output, which normally goes to the bit bucket
|
/* Next reenable console output, which normally goes to the bit bucket
|
||||||
* for windowed apps. Closing the console window will terminate the
|
* for windowed apps. Closing the console window will terminate the
|
||||||
* app. Thanks to David.Geldreich@realviz.com for supplying the magical
|
* app. Thanks to David.Geldreich at realviz.com for supplying the magical
|
||||||
* incantation. */
|
* incantation. */
|
||||||
|
|
||||||
AllocConsole();
|
AllocConsole();
|
||||||
@@ -650,6 +649,13 @@ static void rpng2_win_init()
|
|||||||
Trace((stderr, " width = %ld\n", rpng2_info.width))
|
Trace((stderr, " width = %ld\n", rpng2_info.width))
|
||||||
Trace((stderr, " height = %ld\n", rpng2_info.height))
|
Trace((stderr, " height = %ld\n", rpng2_info.height))
|
||||||
|
|
||||||
|
/* Guard against integer overflow */
|
||||||
|
if (rpng2_info.height > ((size_t)(-1))/rowbytes) {
|
||||||
|
fprintf(stderr, PROGNAME ": image_data buffer would be too large\n",
|
||||||
|
readpng2_cleanup(&rpng2_info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
rpng2_info.image_data = (uch *)malloc(rowbytes * rpng2_info.height);
|
rpng2_info.image_data = (uch *)malloc(rowbytes * rpng2_info.height);
|
||||||
if (!rpng2_info.image_data) {
|
if (!rpng2_info.image_data) {
|
||||||
readpng2_cleanup(&rpng2_info);
|
readpng2_cleanup(&rpng2_info);
|
||||||
|
|||||||
@@ -44,9 +44,11 @@
|
|||||||
- 2.04: Added "void(foo);" statements to quiet pedantic compiler warnings
|
- 2.04: Added "void(foo);" statements to quiet pedantic compiler warnings
|
||||||
about unused variables (GR-P)
|
about unused variables (GR-P)
|
||||||
- 2.05: Use nanosleep() instead of usleep(), which is deprecated (GR-P).
|
- 2.05: Use nanosleep() instead of usleep(), which is deprecated (GR-P).
|
||||||
|
- 2.06: check for integer overflow (Glenn R-P)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2010, 2014-2015 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2010, 2014-2015, 2017 Greg Roelofs. All rights
|
||||||
|
reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -780,6 +782,13 @@ static void rpng2_x_init(void)
|
|||||||
Trace((stderr, " width = %ld\n", rpng2_info.width))
|
Trace((stderr, " width = %ld\n", rpng2_info.width))
|
||||||
Trace((stderr, " height = %ld\n", rpng2_info.height))
|
Trace((stderr, " height = %ld\n", rpng2_info.height))
|
||||||
|
|
||||||
|
/* Guard against integer overflow */
|
||||||
|
if (rpng2_info.height > ((size_t)(-1))/rpng2_info.rowbytes) {
|
||||||
|
fprintf(stderr, PROGNAME ": image_data buffer would be too large\n");
|
||||||
|
readpng2_cleanup(&rpng2_info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
rpng2_info.image_data = (uch *)malloc(rowbytes * rpng2_info.height);
|
rpng2_info.image_data = (uch *)malloc(rowbytes * rpng2_info.height);
|
||||||
if (!rpng2_info.image_data) {
|
if (!rpng2_info.image_data) {
|
||||||
readpng2_cleanup(&rpng2_info);
|
readpng2_cleanup(&rpng2_info);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
- 1.04: fixed DOS/OS2/Win32 detection, including partial Cygwin fix
|
- 1.04: fixed DOS/OS2/Win32 detection, including partial Cygwin fix
|
||||||
(see http://home.att.net/~perlspinr/diffs/GregBook_cygwin.diff)
|
(see http://home.att.net/~perlspinr/diffs/GregBook_cygwin.diff)
|
||||||
- 2.00: dual-licensed (added GNU GPL)
|
- 2.00: dual-licensed (added GNU GPL)
|
||||||
|
- 2.01: check for integer overflow (Glenn R-P)
|
||||||
|
|
||||||
[REPORTED BUG (win32 only): "contrib/gregbook/wpng.c - cmd line
|
[REPORTED BUG (win32 only): "contrib/gregbook/wpng.c - cmd line
|
||||||
dose not work! In order to do something useful I needed to redirect
|
dose not work! In order to do something useful I needed to redirect
|
||||||
@@ -38,7 +39,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2007, 2017 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -702,7 +703,18 @@ int main(int argc, char **argv)
|
|||||||
if (wpng_info.interlaced) {
|
if (wpng_info.interlaced) {
|
||||||
long i;
|
long i;
|
||||||
ulg bytes;
|
ulg bytes;
|
||||||
ulg image_bytes = rowbytes * wpng_info.height; /* overflow? */
|
ulg image_bytes;
|
||||||
|
|
||||||
|
/* Guard against integer overflow */
|
||||||
|
if (wpng_info_height > ((size_t)(-1)/rowbytes ||
|
||||||
|
wpng_info_height > ((ulg)(-1)/rowbytes) {
|
||||||
|
fprintf(stderr, PROGNAME ": image_data buffer too large\n");
|
||||||
|
writepng_cleanup(&wpng_info);
|
||||||
|
wpng_cleanup();
|
||||||
|
exit(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
image_bytes = rowbytes * wpng_info.height;
|
||||||
|
|
||||||
wpng_info.image_data = (uch *)malloc(image_bytes);
|
wpng_info.image_data = (uch *)malloc(image_bytes);
|
||||||
wpng_info.row_pointers = (uch **)malloc(wpng_info.height*sizeof(uch *));
|
wpng_info.row_pointers = (uch **)malloc(wpng_info.height*sizeof(uch *));
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2007, 2017 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
/* Copyright: */
|
/* Copyright: */
|
||||||
#define COPYRIGHT "\251 2013,2015 John Cunningham Bowler"
|
#define COPYRIGHT "\251 2013,2015 John Cunningham Bowler"
|
||||||
/*
|
/*
|
||||||
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
|
* Last changed in libpng 1.6.20 [November 24, 2015]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -950,7 +950,7 @@ write_png(const char **name, FILE *fp, int color_type, int bit_depth,
|
|||||||
int passes = 1;
|
int passes = 1;
|
||||||
# endif /* !WRITE_INTERLACING */
|
# endif /* !WRITE_INTERLACING */
|
||||||
int pass;
|
int pass;
|
||||||
png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
||||||
|
|
||||||
row = malloc(rowbytes);
|
row = malloc(rowbytes);
|
||||||
|
|
||||||
@@ -1094,7 +1094,7 @@ load_file(png_const_charp name, png_bytepp result)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static png_size_t
|
static size_t
|
||||||
load_fake(png_charp param, png_bytepp profile)
|
load_fake(png_charp param, png_bytepp profile)
|
||||||
{
|
{
|
||||||
char *endptr = NULL;
|
char *endptr = NULL;
|
||||||
@@ -1164,7 +1164,7 @@ insert_iCCP(png_structp png_ptr, png_infop info_ptr, int nparams,
|
|||||||
{
|
{
|
||||||
case '<':
|
case '<':
|
||||||
{
|
{
|
||||||
png_size_t filelen = load_file(params[1]+1, &profile);
|
size_t filelen = load_file(params[1]+1, &profile);
|
||||||
if (filelen > 0xfffffffc) /* Maximum profile length */
|
if (filelen > 0xfffffffc) /* Maximum profile length */
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: file too long (%lu) for an ICC profile\n",
|
fprintf(stderr, "%s: file too long (%lu) for an ICC profile\n",
|
||||||
@@ -1179,7 +1179,7 @@ insert_iCCP(png_structp png_ptr, png_infop info_ptr, int nparams,
|
|||||||
case '0': case '1': case '2': case '3': case '4':
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
case '5': case '6': case '7': case '8': case '9':
|
case '5': case '6': case '7': case '8': case '9':
|
||||||
{
|
{
|
||||||
png_size_t fake_len = load_fake(params[1], &profile);
|
size_t fake_len = load_fake(params[1], &profile);
|
||||||
|
|
||||||
if (fake_len > 0) /* else a simple parameter */
|
if (fake_len > 0) /* else a simple parameter */
|
||||||
{
|
{
|
||||||
@@ -1274,7 +1274,7 @@ set_text(png_structp png_ptr, png_infop info_ptr, png_textp text,
|
|||||||
case '5': case '6': case '7': case '8': case '9':
|
case '5': case '6': case '7': case '8': case '9':
|
||||||
{
|
{
|
||||||
png_bytep data = NULL;
|
png_bytep data = NULL;
|
||||||
png_size_t fake_len = load_fake(param, &data);
|
size_t fake_len = load_fake(param, &data);
|
||||||
|
|
||||||
if (fake_len > 0) /* else a simple parameter */
|
if (fake_len > 0) /* else a simple parameter */
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/* pngimage.c
|
/* pngimage.c
|
||||||
*
|
*
|
||||||
* Copyright (c) 2015 John Cunningham Bowler
|
* Copyright (c) 2015,2016 John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.20 [December 3, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -36,8 +36,28 @@
|
|||||||
# include <setjmp.h> /* because png.h did *not* include this */
|
# include <setjmp.h> /* because png.h did *not* include this */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_INFO_IMAGE_SUPPORTED) && defined(PNG_SEQUENTIAL_READ_SUPPORTED)\
|
/* 1.6.1 added support for the configure test harness, which uses 77 to indicate
|
||||||
&& (defined(PNG_READ_PNG_SUPPORTED) || PNG_LIBPNG_VER < 10700)
|
* a skipped test, in earlier versions we need to succeed on a skipped test, so:
|
||||||
|
*/
|
||||||
|
#if PNG_LIBPNG_VER >= 10601 && defined(HAVE_CONFIG_H)
|
||||||
|
# define SKIP 77
|
||||||
|
#else
|
||||||
|
# define SKIP 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if PNG_LIBPNG_VER < 10700
|
||||||
|
/* READ_PNG and WRITE_PNG were not defined, so: */
|
||||||
|
# ifdef PNG_INFO_IMAGE_SUPPORTED
|
||||||
|
# ifdef PNG_SEQUENTIAL_READ_SUPPORTED
|
||||||
|
# define PNG_READ_PNG_SUPPORTED
|
||||||
|
# endif /* SEQUENTIAL_READ */
|
||||||
|
# ifdef PNG_WRITE_SUPPORTED
|
||||||
|
# define PNG_WRITE_PNG_SUPPORTED
|
||||||
|
# endif /* WRITE */
|
||||||
|
# endif /* INFO_IMAGE */
|
||||||
|
#endif /* pre 1.7.0 */
|
||||||
|
|
||||||
|
#ifdef PNG_READ_PNG_SUPPORTED
|
||||||
/* If a transform is valid on both read and write this implies that if the
|
/* If a transform is valid on both read and write this implies that if the
|
||||||
* transform is applied to read it must also be applied on write to produce
|
* transform is applied to read it must also be applied on write to produce
|
||||||
* meaningful data. This is because these transforms when performed on read
|
* meaningful data. This is because these transforms when performed on read
|
||||||
@@ -386,7 +406,7 @@ buffer_destroy(struct buffer *buffer)
|
|||||||
buffer_destroy_list(list);
|
buffer_destroy_list(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
static void
|
static void
|
||||||
buffer_start_write(struct buffer *buffer)
|
buffer_start_write(struct buffer *buffer)
|
||||||
{
|
{
|
||||||
@@ -531,7 +551,7 @@ struct display
|
|||||||
png_structp original_pp; /* used on the original read */
|
png_structp original_pp; /* used on the original read */
|
||||||
png_infop original_ip; /* set by the original read */
|
png_infop original_ip; /* set by the original read */
|
||||||
|
|
||||||
png_size_t original_rowbytes; /* of the original rows: */
|
size_t original_rowbytes; /* of the original rows: */
|
||||||
png_bytepp original_rows; /* from the original read */
|
png_bytepp original_rows; /* from the original read */
|
||||||
|
|
||||||
/* Original chunks valid */
|
/* Original chunks valid */
|
||||||
@@ -556,7 +576,7 @@ struct display
|
|||||||
png_structp read_pp;
|
png_structp read_pp;
|
||||||
png_infop read_ip;
|
png_infop read_ip;
|
||||||
|
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
/* Used to write a new image (the original info_ptr is used) */
|
/* Used to write a new image (the original info_ptr is used) */
|
||||||
png_structp write_pp;
|
png_structp write_pp;
|
||||||
struct buffer written_file; /* where the file gets written */
|
struct buffer written_file; /* where the file gets written */
|
||||||
@@ -583,7 +603,7 @@ display_init(struct display *dp)
|
|||||||
dp->read_ip = NULL;
|
dp->read_ip = NULL;
|
||||||
buffer_init(&dp->original_file);
|
buffer_init(&dp->original_file);
|
||||||
|
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
dp->write_pp = NULL;
|
dp->write_pp = NULL;
|
||||||
buffer_init(&dp->written_file);
|
buffer_init(&dp->written_file);
|
||||||
# endif
|
# endif
|
||||||
@@ -596,7 +616,7 @@ display_clean_read(struct display *dp)
|
|||||||
png_destroy_read_struct(&dp->read_pp, &dp->read_ip, NULL);
|
png_destroy_read_struct(&dp->read_pp, &dp->read_ip, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
static void
|
static void
|
||||||
display_clean_write(struct display *dp)
|
display_clean_write(struct display *dp)
|
||||||
{
|
{
|
||||||
@@ -608,7 +628,7 @@ display_clean_write(struct display *dp)
|
|||||||
static void
|
static void
|
||||||
display_clean(struct display *dp)
|
display_clean(struct display *dp)
|
||||||
{
|
{
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
display_clean_write(dp);
|
display_clean_write(dp);
|
||||||
# endif
|
# endif
|
||||||
display_clean_read(dp);
|
display_clean_read(dp);
|
||||||
@@ -626,7 +646,7 @@ static void
|
|||||||
display_destroy(struct display *dp)
|
display_destroy(struct display *dp)
|
||||||
{
|
{
|
||||||
/* Release any memory held in the display. */
|
/* Release any memory held in the display. */
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
buffer_destroy(&dp->written_file);
|
buffer_destroy(&dp->written_file);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@@ -787,7 +807,7 @@ display_cache_file(struct display *dp, const char *filename)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
buffer_read(struct display *dp, struct buffer *bp, png_bytep data,
|
buffer_read(struct display *dp, struct buffer *bp, png_bytep data,
|
||||||
png_size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
struct buffer_list *last = bp->current;
|
struct buffer_list *last = bp->current;
|
||||||
size_t read_count = bp->read_count;
|
size_t read_count = bp->read_count;
|
||||||
@@ -835,7 +855,7 @@ buffer_read(struct display *dp, struct buffer *bp, png_bytep data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void PNGCBAPI
|
static void PNGCBAPI
|
||||||
read_function(png_structp pp, png_bytep data, png_size_t size)
|
read_function(png_structp pp, png_bytep data, size_t size)
|
||||||
{
|
{
|
||||||
buffer_read(get_dp(pp), get_buffer(pp), data, size);
|
buffer_read(get_dp(pp), get_buffer(pp), data, size);
|
||||||
}
|
}
|
||||||
@@ -907,7 +927,7 @@ update_display(struct display *dp)
|
|||||||
png_structp pp;
|
png_structp pp;
|
||||||
png_infop ip;
|
png_infop ip;
|
||||||
|
|
||||||
/* Now perform the initial read with a 0 tranform. */
|
/* Now perform the initial read with a 0 transform. */
|
||||||
read_png(dp, &dp->original_file, "original read", 0/*no transform*/);
|
read_png(dp, &dp->original_file, "original read", 0/*no transform*/);
|
||||||
|
|
||||||
/* Move the result to the 'original' fields */
|
/* Move the result to the 'original' fields */
|
||||||
@@ -1073,6 +1093,7 @@ compare_read(struct display *dp, int applied_transforms)
|
|||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
# ifdef PNG_sBIT_SUPPORTED
|
||||||
{
|
{
|
||||||
unsigned long y;
|
unsigned long y;
|
||||||
int bpp; /* bits-per-pixel then bytes-per-pixel */
|
int bpp; /* bits-per-pixel then bytes-per-pixel */
|
||||||
@@ -1234,15 +1255,19 @@ compare_read(struct display *dp, int applied_transforms)
|
|||||||
}
|
}
|
||||||
} /* for y */
|
} /* for y */
|
||||||
}
|
}
|
||||||
|
# else /* !sBIT */
|
||||||
|
display_log(dp, INTERNAL_ERROR,
|
||||||
|
"active shift transform but no sBIT support");
|
||||||
|
# endif /* !sBIT */
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1; /* compare succeeded */
|
return 1; /* compare succeeded */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
static void
|
static void
|
||||||
buffer_write(struct display *dp, struct buffer *buffer, png_bytep data,
|
buffer_write(struct display *dp, struct buffer *buffer, png_bytep data,
|
||||||
png_size_t size)
|
size_t size)
|
||||||
/* Generic write function used both from the write callback provided to
|
/* Generic write function used both from the write callback provided to
|
||||||
* libpng and from the generic read code.
|
* libpng and from the generic read code.
|
||||||
*/
|
*/
|
||||||
@@ -1286,7 +1311,7 @@ buffer_write(struct display *dp, struct buffer *buffer, png_bytep data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void PNGCBAPI
|
static void PNGCBAPI
|
||||||
write_function(png_structp pp, png_bytep data, png_size_t size)
|
write_function(png_structp pp, png_bytep data, size_t size)
|
||||||
{
|
{
|
||||||
buffer_write(get_dp(pp), get_buffer(pp), data, size);
|
buffer_write(get_dp(pp), get_buffer(pp), data, size);
|
||||||
}
|
}
|
||||||
@@ -1338,7 +1363,7 @@ write_png(struct display *dp, png_infop ip, int transforms)
|
|||||||
*/
|
*/
|
||||||
display_clean_write(dp);
|
display_clean_write(dp);
|
||||||
}
|
}
|
||||||
#endif /* WRITE_SUPPORTED */
|
#endif /* WRITE_PNG */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
skip_transform(struct display *dp, int tr)
|
skip_transform(struct display *dp, int tr)
|
||||||
@@ -1400,7 +1425,7 @@ test_one_file(struct display *dp, const char *filename)
|
|||||||
return; /* no point testing more */
|
return; /* no point testing more */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
/* Second test: write the original PNG data out to a new file (to test the
|
/* Second test: write the original PNG data out to a new file (to test the
|
||||||
* write side) then read the result back in and make sure that it hasn't
|
* write side) then read the result back in and make sure that it hasn't
|
||||||
* changed.
|
* changed.
|
||||||
@@ -1441,7 +1466,7 @@ test_one_file(struct display *dp, const char *filename)
|
|||||||
* out and read it back in again (without the reversible transforms)
|
* out and read it back in again (without the reversible transforms)
|
||||||
* we should get back to the place where we started.
|
* we should get back to the place where we started.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
if ((current & write_transforms) == current)
|
if ((current & write_transforms) == current)
|
||||||
{
|
{
|
||||||
/* All transforms reversible: write the PNG with the transformations
|
/* All transforms reversible: write the PNG with the transformations
|
||||||
@@ -1677,11 +1702,11 @@ main(const int argc, const char * const * const argv)
|
|||||||
return errors != 0;
|
return errors != 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* !INFO_IMAGE || !SEQUENTIAL_READ || !READ_PNG*/
|
#else /* !READ_PNG */
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "pngimage: no support for png_read/write_image\n");
|
fprintf(stderr, "pngimage: no support for png_read/write_image\n");
|
||||||
return 77;
|
return SKIP;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
/*-
|
/*-
|
||||||
* pngstest.c
|
* pngstest.c
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013-2015 John Cunningham Bowler
|
* Last changed in libpng 1.6.31 [July 27, 2017]
|
||||||
*
|
* Copyright (c) 2013-2017 John Cunningham Bowler
|
||||||
* Last changed in libpng 1.6.19 [(PENDING RELEASE)]
|
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -35,6 +34,15 @@
|
|||||||
# include "../../png.h"
|
# include "../../png.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* 1.6.1 added support for the configure test harness, which uses 77 to indicate
|
||||||
|
* a skipped test, in earlier versions we need to succeed on a skipped test, so:
|
||||||
|
*/
|
||||||
|
#if PNG_LIBPNG_VER >= 10601 && defined(HAVE_CONFIG_H)
|
||||||
|
# define SKIP 77
|
||||||
|
#else
|
||||||
|
# define SKIP 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED /* Else nothing can be done */
|
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED /* Else nothing can be done */
|
||||||
#include "../tools/sRGB.h"
|
#include "../tools/sRGB.h"
|
||||||
|
|
||||||
@@ -99,10 +107,18 @@ make_random_bytes(png_uint_32* seed, void* pv, size_t size)
|
|||||||
seed[1] = u1;
|
seed[1] = u1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static png_uint_32 color_seed[2];
|
||||||
|
|
||||||
|
static void
|
||||||
|
reseed(void)
|
||||||
|
{
|
||||||
|
color_seed[0] = 0x12345678U;
|
||||||
|
color_seed[1] = 0x9abcdefU;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
random_color(png_colorp color)
|
random_color(png_colorp color)
|
||||||
{
|
{
|
||||||
static png_uint_32 color_seed[2] = { 0x12345678, 0x9abcdef };
|
|
||||||
make_random_bytes(color_seed, color, sizeof *color);
|
make_random_bytes(color_seed, color, sizeof *color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +323,7 @@ compare_16bit(int v1, int v2, int error_limit, int multiple_algorithms)
|
|||||||
}
|
}
|
||||||
#endif /* unused */
|
#endif /* unused */
|
||||||
|
|
||||||
#define READ_FILE 1 /* else memory */
|
#define USE_FILE 1 /* else memory */
|
||||||
#define USE_STDIO 2 /* else use file name */
|
#define USE_STDIO 2 /* else use file name */
|
||||||
#define STRICT 4 /* fail on warnings too */
|
#define STRICT 4 /* fail on warnings too */
|
||||||
#define VERBOSE 8
|
#define VERBOSE 8
|
||||||
@@ -316,16 +332,19 @@ compare_16bit(int v1, int v2, int error_limit, int multiple_algorithms)
|
|||||||
#define ACCUMULATE 64
|
#define ACCUMULATE 64
|
||||||
#define FAST_WRITE 128
|
#define FAST_WRITE 128
|
||||||
#define sRGB_16BIT 256
|
#define sRGB_16BIT 256
|
||||||
|
#define NO_RESEED 512 /* do not reseed on each new file */
|
||||||
|
#define GBG_ERROR 1024 /* do not ignore the gamma+background_rgb_to_gray
|
||||||
|
* libpng warning. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_opts(png_uint_32 opts)
|
print_opts(png_uint_32 opts)
|
||||||
{
|
{
|
||||||
if (opts & READ_FILE)
|
if (opts & USE_FILE)
|
||||||
printf(" --file");
|
printf(" --file");
|
||||||
if (opts & USE_STDIO)
|
if (opts & USE_STDIO)
|
||||||
printf(" --stdio");
|
printf(" --stdio");
|
||||||
if (opts & STRICT)
|
if (!(opts & STRICT))
|
||||||
printf(" --strict");
|
printf(" --nostrict");
|
||||||
if (opts & VERBOSE)
|
if (opts & VERBOSE)
|
||||||
printf(" --verbose");
|
printf(" --verbose");
|
||||||
if (opts & KEEP_TMPFILES)
|
if (opts & KEEP_TMPFILES)
|
||||||
@@ -338,6 +357,12 @@ print_opts(png_uint_32 opts)
|
|||||||
printf(" --slow");
|
printf(" --slow");
|
||||||
if (opts & sRGB_16BIT)
|
if (opts & sRGB_16BIT)
|
||||||
printf(" --sRGB-16bit");
|
printf(" --sRGB-16bit");
|
||||||
|
if (opts & NO_RESEED)
|
||||||
|
printf(" --noreseed");
|
||||||
|
#if PNG_LIBPNG_VER < 10700 /* else on by default */
|
||||||
|
if (opts & GBG_ERROR)
|
||||||
|
printf(" --fault-gbg-warning");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FORMAT_NO_CHANGE 0x80000000 /* additional flag */
|
#define FORMAT_NO_CHANGE 0x80000000 /* additional flag */
|
||||||
@@ -553,11 +578,11 @@ typedef struct
|
|||||||
int stride_extra;
|
int stride_extra;
|
||||||
FILE *input_file;
|
FILE *input_file;
|
||||||
png_voidp input_memory;
|
png_voidp input_memory;
|
||||||
png_size_t input_memory_size;
|
size_t input_memory_size;
|
||||||
png_bytep buffer;
|
png_bytep buffer;
|
||||||
ptrdiff_t stride;
|
ptrdiff_t stride;
|
||||||
png_size_t bufsize;
|
size_t bufsize;
|
||||||
png_size_t allocsize;
|
size_t allocsize;
|
||||||
char tmpfile_name[32];
|
char tmpfile_name[32];
|
||||||
png_uint_16 colormap[256*4];
|
png_uint_16 colormap[256*4];
|
||||||
}
|
}
|
||||||
@@ -640,7 +665,7 @@ static void initimage(Image *image, png_uint_32 opts, const char *file_name,
|
|||||||
static void
|
static void
|
||||||
allocbuffer(Image *image)
|
allocbuffer(Image *image)
|
||||||
{
|
{
|
||||||
png_size_t size = PNG_IMAGE_BUFFER_SIZE(image->image, image->stride);
|
size_t size = PNG_IMAGE_BUFFER_SIZE(image->image, image->stride);
|
||||||
|
|
||||||
if (size+32 > image->bufsize)
|
if (size+32 > image->bufsize)
|
||||||
{
|
{
|
||||||
@@ -741,8 +766,15 @@ checkopaque(Image *image)
|
|||||||
return logerror(image, image->file_name, ": opaque not NULL", "");
|
return logerror(image, image->file_name, ": opaque not NULL", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (image->image.warning_or_error != 0 && (image->opts & STRICT) != 0)
|
/* Separate out the gamma+background_rgb_to_gray warning because it may
|
||||||
return logerror(image, image->file_name, " --strict", "");
|
* produce opaque component errors:
|
||||||
|
*/
|
||||||
|
else if (image->image.warning_or_error != 0 &&
|
||||||
|
(strcmp(image->image.message,
|
||||||
|
"libpng does not support gamma+background+rgb_to_gray") == 0 ?
|
||||||
|
(image->opts & GBG_ERROR) != 0 : (image->opts & STRICT) != 0))
|
||||||
|
return logerror(image, image->file_name, (image->opts & GBG_ERROR) != 0 ?
|
||||||
|
" --fault-gbg-warning" : " --strict", "");
|
||||||
|
|
||||||
else
|
else
|
||||||
return 1;
|
return 1;
|
||||||
@@ -1110,7 +1142,7 @@ get_pixel(png_uint_32 format))(Pixel *p, png_const_voidp pb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convertion between pixel formats. The code above effectively eliminates the
|
/* Conversion between pixel formats. The code above effectively eliminates the
|
||||||
* component ordering changes leaving three basic changes:
|
* component ordering changes leaving three basic changes:
|
||||||
*
|
*
|
||||||
* 1) Remove an alpha channel by pre-multiplication or compositing on a
|
* 1) Remove an alpha channel by pre-multiplication or compositing on a
|
||||||
@@ -2004,7 +2036,7 @@ typedef struct
|
|||||||
/* Precalculated values: */
|
/* Precalculated values: */
|
||||||
int in_opaque; /* Value of input alpha that is opaque */
|
int in_opaque; /* Value of input alpha that is opaque */
|
||||||
int is_palette; /* Sample values come from the palette */
|
int is_palette; /* Sample values come from the palette */
|
||||||
int accumulate; /* Accumlate component errors (don't log) */
|
int accumulate; /* Accumulate component errors (don't log) */
|
||||||
int output_8bit; /* Output is 8-bit (else 16-bit) */
|
int output_8bit; /* Output is 8-bit (else 16-bit) */
|
||||||
|
|
||||||
void (*in_gp)(Pixel*, png_const_voidp);
|
void (*in_gp)(Pixel*, png_const_voidp);
|
||||||
@@ -2578,9 +2610,9 @@ compare_two_images(Image *a, Image *b, int via_linear,
|
|||||||
const unsigned int b_sample = PNG_IMAGE_SAMPLE_SIZE(formatb);
|
const unsigned int b_sample = PNG_IMAGE_SAMPLE_SIZE(formatb);
|
||||||
int alpha_added, alpha_removed;
|
int alpha_added, alpha_removed;
|
||||||
int bchannels;
|
int bchannels;
|
||||||
int btoa[4];
|
|
||||||
png_uint_32 y;
|
png_uint_32 y;
|
||||||
Transform tr;
|
Transform tr;
|
||||||
|
int btoa[4]={0,0,0,0};
|
||||||
|
|
||||||
/* This should never happen: */
|
/* This should never happen: */
|
||||||
if (width != b->image.width || height != b->image.height)
|
if (width != b->image.width || height != b->image.height)
|
||||||
@@ -2713,22 +2745,27 @@ compare_two_images(Image *a, Image *b, int via_linear,
|
|||||||
*/
|
*/
|
||||||
else if ((a->opts & ACCUMULATE) == 0)
|
else if ((a->opts & ACCUMULATE) == 0)
|
||||||
{
|
{
|
||||||
|
# ifdef __GNUC__
|
||||||
|
# define BYTE_CHARS 20 /* 2^32: GCC sprintf warning */
|
||||||
|
# else
|
||||||
|
# define BYTE_CHARS 3 /* 2^8: real maximum value */
|
||||||
|
# endif
|
||||||
/* Check the original image first,
|
/* Check the original image first,
|
||||||
* TODO: deal with input images with bad pixel values?
|
* TODO: deal with input images with bad pixel values?
|
||||||
*/
|
*/
|
||||||
if (amax >= a->image.colormap_entries)
|
if (amax >= a->image.colormap_entries)
|
||||||
{
|
{
|
||||||
char pindex[9];
|
char pindex[3+2*BYTE_CHARS];
|
||||||
sprintf(pindex, "%d[%lu]", amax,
|
sprintf(pindex, "%d[%u]", amax,
|
||||||
(unsigned long)a->image.colormap_entries);
|
(png_byte)/*SAFE*/a->image.colormap_entries);
|
||||||
return logerror(a, a->file_name, ": bad pixel index: ", pindex);
|
return logerror(a, a->file_name, ": bad pixel index: ", pindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (bmax >= b->image.colormap_entries)
|
else if (bmax >= b->image.colormap_entries)
|
||||||
{
|
{
|
||||||
char pindex[9];
|
char pindex[3+2*BYTE_CHARS];
|
||||||
sprintf(pindex, "%d[%lu]", bmax,
|
sprintf(pindex, "%d[%u]", bmax,
|
||||||
(unsigned long)b->image.colormap_entries);
|
(png_byte)/*SAFE*/b->image.colormap_entries);
|
||||||
return logerror(b, b->file_name, ": bad pixel index: ", pindex);
|
return logerror(b, b->file_name, ": bad pixel index: ", pindex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2848,10 +2885,13 @@ compare_two_images(Image *a, Image *b, int via_linear,
|
|||||||
{
|
{
|
||||||
case 4:
|
case 4:
|
||||||
if (pua[btoa[3]] != pub[3]) break;
|
if (pua[btoa[3]] != pub[3]) break;
|
||||||
|
/* FALLTHROUGH */
|
||||||
case 3:
|
case 3:
|
||||||
if (pua[btoa[2]] != pub[2]) break;
|
if (pua[btoa[2]] != pub[2]) break;
|
||||||
|
/* FALLTHROUGH */
|
||||||
case 2:
|
case 2:
|
||||||
if (pua[btoa[1]] != pub[1]) break;
|
if (pua[btoa[1]] != pub[1]) break;
|
||||||
|
/* FALLTHROUGH */
|
||||||
case 1:
|
case 1:
|
||||||
if (pua[btoa[0]] != pub[0]) break;
|
if (pua[btoa[0]] != pub[0]) break;
|
||||||
if (alpha_added != 4 && pub[alpha_added] != 65535) break;
|
if (alpha_added != 4 && pub[alpha_added] != 65535) break;
|
||||||
@@ -2867,10 +2907,13 @@ compare_two_images(Image *a, Image *b, int via_linear,
|
|||||||
{
|
{
|
||||||
case 4:
|
case 4:
|
||||||
if (psa[btoa[3]] != psb[3]) break;
|
if (psa[btoa[3]] != psb[3]) break;
|
||||||
|
/* FALLTHROUGH */
|
||||||
case 3:
|
case 3:
|
||||||
if (psa[btoa[2]] != psb[2]) break;
|
if (psa[btoa[2]] != psb[2]) break;
|
||||||
|
/* FALLTHROUGH */
|
||||||
case 2:
|
case 2:
|
||||||
if (psa[btoa[1]] != psb[1]) break;
|
if (psa[btoa[1]] != psb[1]) break;
|
||||||
|
/* FALLTHROUGH */
|
||||||
case 1:
|
case 1:
|
||||||
if (psa[btoa[0]] != psb[0]) break;
|
if (psa[btoa[0]] != psb[0]) break;
|
||||||
if (alpha_added != 4 && psb[alpha_added] != 255) break;
|
if (alpha_added != 4 && psb[alpha_added] != 255) break;
|
||||||
@@ -3008,14 +3051,14 @@ read_file(Image *image, png_uint_32 format, png_const_colorp background)
|
|||||||
static int
|
static int
|
||||||
read_one_file(Image *image)
|
read_one_file(Image *image)
|
||||||
{
|
{
|
||||||
if (!(image->opts & READ_FILE) || (image->opts & USE_STDIO))
|
if (!(image->opts & USE_FILE) || (image->opts & USE_STDIO))
|
||||||
{
|
{
|
||||||
/* memory or stdio. */
|
/* memory or stdio. */
|
||||||
FILE *f = fopen(image->file_name, "rb");
|
FILE *f = fopen(image->file_name, "rb");
|
||||||
|
|
||||||
if (f != NULL)
|
if (f != NULL)
|
||||||
{
|
{
|
||||||
if (image->opts & READ_FILE)
|
if (image->opts & USE_FILE)
|
||||||
image->input_file = f;
|
image->input_file = f;
|
||||||
|
|
||||||
else /* memory */
|
else /* memory */
|
||||||
@@ -3096,7 +3139,8 @@ write_one_file(Image *output, Image *image, int convert_to_8bit)
|
|||||||
|
|
||||||
if (image->opts & USE_STDIO)
|
if (image->opts & USE_STDIO)
|
||||||
{
|
{
|
||||||
#ifndef PNG_USE_MKSTEMP
|
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
||||||
|
#ifndef __COVERITY__
|
||||||
FILE *f = tmpfile();
|
FILE *f = tmpfile();
|
||||||
#else
|
#else
|
||||||
/* Experimental. Coverity says tmpfile() is insecure because it
|
/* Experimental. Coverity says tmpfile() is insecure because it
|
||||||
@@ -3158,10 +3202,14 @@ write_one_file(Image *output, Image *image, int convert_to_8bit)
|
|||||||
|
|
||||||
else
|
else
|
||||||
return logerror(image, "tmpfile", ": open: ", strerror(errno));
|
return logerror(image, "tmpfile", ": open: ", strerror(errno));
|
||||||
|
#else /* SIMPLIFIED_WRITE_STDIO */
|
||||||
|
return logerror(image, "tmpfile", ": open: unsupported", "");
|
||||||
|
#endif /* SIMPLIFIED_WRITE_STDIO */
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else if (image->opts & USE_FILE)
|
||||||
{
|
{
|
||||||
|
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
||||||
static int counter = 0;
|
static int counter = 0;
|
||||||
char name[32];
|
char name[32];
|
||||||
|
|
||||||
@@ -3181,6 +3229,51 @@ write_one_file(Image *output, Image *image, int convert_to_8bit)
|
|||||||
|
|
||||||
else
|
else
|
||||||
return logerror(image, name, ": write failed", "");
|
return logerror(image, name, ": write failed", "");
|
||||||
|
#else /* SIMPLIFIED_WRITE_STDIO */
|
||||||
|
return logerror(image, "stdio", ": open: unsupported", "");
|
||||||
|
#endif /* SIMPLIFIED_WRITE_STDIO */
|
||||||
|
}
|
||||||
|
|
||||||
|
else /* use memory */
|
||||||
|
{
|
||||||
|
png_alloc_size_t size;
|
||||||
|
|
||||||
|
if (png_image_write_get_memory_size(image->image, size, convert_to_8bit,
|
||||||
|
image->buffer+16, (png_int_32)image->stride, image->colormap))
|
||||||
|
{
|
||||||
|
/* This is non-fatal but ignoring it was causing serious problems in
|
||||||
|
* the macro to be ignored:
|
||||||
|
*/
|
||||||
|
if (size > PNG_IMAGE_PNG_SIZE_MAX(image->image))
|
||||||
|
return logerror(image, "memory", ": PNG_IMAGE_SIZE_MAX wrong", "");
|
||||||
|
|
||||||
|
initimage(output, image->opts, "memory", image->stride_extra);
|
||||||
|
output->input_memory = malloc(size);
|
||||||
|
|
||||||
|
if (output->input_memory != NULL)
|
||||||
|
{
|
||||||
|
output->input_memory_size = size;
|
||||||
|
|
||||||
|
if (png_image_write_to_memory(&image->image, output->input_memory,
|
||||||
|
&output->input_memory_size, convert_to_8bit, image->buffer+16,
|
||||||
|
(png_int_32)image->stride, image->colormap))
|
||||||
|
{
|
||||||
|
/* This is also non-fatal but it safes safer to error out anyway:
|
||||||
|
*/
|
||||||
|
if (size != output->input_memory_size)
|
||||||
|
return logerror(image, "memory", ": memory size wrong", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return logerror(image, "memory", ": write failed", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return logerror(image, "memory", ": out of memory", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return logerror(image, "memory", ": get size:", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'output' has an initialized temporary image, read this back in and compare
|
/* 'output' has an initialized temporary image, read this back in and compare
|
||||||
@@ -3356,6 +3449,8 @@ test_one_file(const char *file_name, format_list *formats, png_uint_32 opts,
|
|||||||
int result;
|
int result;
|
||||||
Image image;
|
Image image;
|
||||||
|
|
||||||
|
if (!(opts & NO_RESEED))
|
||||||
|
reseed(); /* ensure that the random numbers don't depend on file order */
|
||||||
newimage(&image);
|
newimage(&image);
|
||||||
initimage(&image, opts, file_name, stride_extra);
|
initimage(&image, opts, file_name, stride_extra);
|
||||||
result = read_one_file(&image);
|
result = read_one_file(&image);
|
||||||
@@ -3393,7 +3488,7 @@ test_one_file(const char *file_name, format_list *formats, png_uint_32 opts,
|
|||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
png_uint_32 opts = FAST_WRITE;
|
png_uint_32 opts = FAST_WRITE | STRICT;
|
||||||
format_list formats;
|
format_list formats;
|
||||||
const char *touch = NULL;
|
const char *touch = NULL;
|
||||||
int log_pass = 0;
|
int log_pass = 0;
|
||||||
@@ -3402,11 +3497,17 @@ main(int argc, char **argv)
|
|||||||
int retval = 0;
|
int retval = 0;
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
|
#if PNG_LIBPNG_VER >= 10700
|
||||||
|
/* This error should not exist in 1.7 or later: */
|
||||||
|
opts |= GBG_ERROR;
|
||||||
|
#endif
|
||||||
|
|
||||||
init_sRGB_to_d();
|
init_sRGB_to_d();
|
||||||
#if 0
|
#if 0
|
||||||
init_error_via_linear();
|
init_error_via_linear();
|
||||||
#endif
|
#endif
|
||||||
format_init(&formats);
|
format_init(&formats);
|
||||||
|
reseed(); /* initialize random number seeds */
|
||||||
|
|
||||||
for (c=1; c<argc; ++c)
|
for (c=1; c<argc; ++c)
|
||||||
{
|
{
|
||||||
@@ -3421,17 +3522,17 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (strcmp(arg, "--file") == 0)
|
else if (strcmp(arg, "--file") == 0)
|
||||||
# ifdef PNG_STDIO_SUPPORTED
|
# ifdef PNG_STDIO_SUPPORTED
|
||||||
opts |= READ_FILE;
|
opts |= USE_FILE;
|
||||||
# else
|
# else
|
||||||
return 77; /* skipped: no support */
|
return SKIP; /* skipped: no support */
|
||||||
# endif
|
# endif
|
||||||
else if (strcmp(arg, "--memory") == 0)
|
else if (strcmp(arg, "--memory") == 0)
|
||||||
opts &= ~READ_FILE;
|
opts &= ~USE_FILE;
|
||||||
else if (strcmp(arg, "--stdio") == 0)
|
else if (strcmp(arg, "--stdio") == 0)
|
||||||
# ifdef PNG_STDIO_SUPPORTED
|
# ifdef PNG_STDIO_SUPPORTED
|
||||||
opts |= USE_STDIO;
|
opts |= USE_STDIO;
|
||||||
# else
|
# else
|
||||||
return 77; /* skipped: no support */
|
return SKIP; /* skipped: no support */
|
||||||
# endif
|
# endif
|
||||||
else if (strcmp(arg, "--name") == 0)
|
else if (strcmp(arg, "--name") == 0)
|
||||||
opts &= ~USE_STDIO;
|
opts &= ~USE_STDIO;
|
||||||
@@ -3457,10 +3558,16 @@ main(int argc, char **argv)
|
|||||||
opts &= ~KEEP_GOING;
|
opts &= ~KEEP_GOING;
|
||||||
else if (strcmp(arg, "--strict") == 0)
|
else if (strcmp(arg, "--strict") == 0)
|
||||||
opts |= STRICT;
|
opts |= STRICT;
|
||||||
|
else if (strcmp(arg, "--nostrict") == 0)
|
||||||
|
opts &= ~STRICT;
|
||||||
else if (strcmp(arg, "--sRGB-16bit") == 0)
|
else if (strcmp(arg, "--sRGB-16bit") == 0)
|
||||||
opts |= sRGB_16BIT;
|
opts |= sRGB_16BIT;
|
||||||
else if (strcmp(arg, "--linear-16bit") == 0)
|
else if (strcmp(arg, "--linear-16bit") == 0)
|
||||||
opts &= ~sRGB_16BIT;
|
opts &= ~sRGB_16BIT;
|
||||||
|
else if (strcmp(arg, "--noreseed") == 0)
|
||||||
|
opts |= NO_RESEED;
|
||||||
|
else if (strcmp(arg, "--fault-gbg-warning") == 0)
|
||||||
|
opts |= GBG_ERROR;
|
||||||
else if (strcmp(arg, "--tmpfile") == 0)
|
else if (strcmp(arg, "--tmpfile") == 0)
|
||||||
{
|
{
|
||||||
if (c+1 < argc)
|
if (c+1 < argc)
|
||||||
@@ -3717,6 +3824,6 @@ int main(void)
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "pngstest: no read support in libpng, test skipped\n");
|
fprintf(stderr, "pngstest: no read support in libpng, test skipped\n");
|
||||||
/* So the test is skipped: */
|
/* So the test is skipped: */
|
||||||
return 77;
|
return SKIP;
|
||||||
}
|
}
|
||||||
#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */
|
#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngunknown.c - test the read side unknown chunk handling
|
/* pngunknown.c - test the read side unknown chunk handling
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.10 [March 6, 2014]
|
* Last changed in libpng 1.6.32 [August 24, 2017]
|
||||||
* Copyright (c) 2014 Glenn Randers-Pehrson
|
* Copyright (c) 2015,2017 Glenn Randers-Pehrson
|
||||||
* Written by John Cunningham Bowler
|
* Written by John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
@@ -30,10 +30,21 @@
|
|||||||
# include "../../png.h"
|
# include "../../png.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* 1.6.1 added support for the configure test harness, which uses 77 to indicate
|
||||||
|
* a skipped test, in earlier versions we need to succeed on a skipped test, so:
|
||||||
|
*/
|
||||||
|
#if PNG_LIBPNG_VER >= 10601 && defined(HAVE_CONFIG_H)
|
||||||
|
# define SKIP 77
|
||||||
|
#else
|
||||||
|
# define SKIP 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Since this program tests the ability to change the unknown chunk handling
|
/* Since this program tests the ability to change the unknown chunk handling
|
||||||
* these must be defined:
|
* these must be defined:
|
||||||
*/
|
*/
|
||||||
#if defined(PNG_SET_UNKNOWN_CHUNKS_SUPPORTED) &&\
|
#if defined(PNG_SET_UNKNOWN_CHUNKS_SUPPORTED) &&\
|
||||||
|
defined(PNG_STDIO_SUPPORTED) &&\
|
||||||
defined(PNG_READ_SUPPORTED)
|
defined(PNG_READ_SUPPORTED)
|
||||||
|
|
||||||
/* One of these must be defined to allow us to find out what happened. It is
|
/* One of these must be defined to allow us to find out what happened. It is
|
||||||
@@ -74,7 +85,7 @@ typedef png_byte *png_const_bytep;
|
|||||||
#define PNG_WRITE_16BIT_SUPPORTED
|
#define PNG_WRITE_16BIT_SUPPORTED
|
||||||
#define PNG_READ_16BIT_SUPPORTED
|
#define PNG_READ_16BIT_SUPPORTED
|
||||||
|
|
||||||
/* This comes from pnglibconf.h afer 1.5: */
|
/* This comes from pnglibconf.h after 1.5: */
|
||||||
#define PNG_FP_1 100000
|
#define PNG_FP_1 100000
|
||||||
#define PNG_GAMMA_THRESHOLD_FIXED\
|
#define PNG_GAMMA_THRESHOLD_FIXED\
|
||||||
((png_fixed_point)(PNG_GAMMA_THRESHOLD * PNG_FP_1))
|
((png_fixed_point)(PNG_GAMMA_THRESHOLD * PNG_FP_1))
|
||||||
@@ -103,6 +114,7 @@ typedef png_byte *png_const_bytep;
|
|||||||
#define png_PLTE PNG_U32( 80, 76, 84, 69)
|
#define png_PLTE PNG_U32( 80, 76, 84, 69)
|
||||||
#define png_bKGD PNG_U32( 98, 75, 71, 68)
|
#define png_bKGD PNG_U32( 98, 75, 71, 68)
|
||||||
#define png_cHRM PNG_U32( 99, 72, 82, 77)
|
#define png_cHRM PNG_U32( 99, 72, 82, 77)
|
||||||
|
#define png_eXIf PNG_U32(101, 88, 73, 102) /* registered July 2017 */
|
||||||
#define png_fRAc PNG_U32(102, 82, 65, 99) /* registered, not defined */
|
#define png_fRAc PNG_U32(102, 82, 65, 99) /* registered, not defined */
|
||||||
#define png_gAMA PNG_U32(103, 65, 77, 65)
|
#define png_gAMA PNG_U32(103, 65, 77, 65)
|
||||||
#define png_gIFg PNG_U32(103, 73, 70, 103)
|
#define png_gIFg PNG_U32(103, 73, 70, 103)
|
||||||
@@ -199,6 +211,13 @@ static struct
|
|||||||
1,
|
1,
|
||||||
# endif
|
# endif
|
||||||
1, START, 0 },
|
1, START, 0 },
|
||||||
|
{ "eXIf", PNG_INFO_eXIf, png_eXIf,
|
||||||
|
# ifdef PNG_READ_eXIf_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, END, 0 },
|
||||||
{ "gAMA", PNG_INFO_gAMA, png_gAMA,
|
{ "gAMA", PNG_INFO_gAMA, png_gAMA,
|
||||||
# ifdef PNG_READ_gAMA_SUPPORTED
|
# ifdef PNG_READ_gAMA_SUPPORTED
|
||||||
0,
|
0,
|
||||||
@@ -467,7 +486,7 @@ get_valid(display *d, png_infop info_ptr)
|
|||||||
png_textp text;
|
png_textp text;
|
||||||
png_uint_32 ntext = png_get_text(d->png_ptr, info_ptr, &text, NULL);
|
png_uint_32 ntext = png_get_text(d->png_ptr, info_ptr, &text, NULL);
|
||||||
|
|
||||||
while (ntext-- > 0) switch (text[ntext].compression)
|
while (ntext > 0) switch (text[--ntext].compression)
|
||||||
{
|
{
|
||||||
case -1:
|
case -1:
|
||||||
flags |= PNG_INFO_tEXt;
|
flags |= PNG_INFO_tEXt;
|
||||||
@@ -603,7 +622,7 @@ get_unknown(display *d, png_infop info_ptr, int after_IDAT)
|
|||||||
++(d->error_count);
|
++(d->error_count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* FALL THROUGH (safe) */
|
/* FALLTHROUGH */ /* (safe) */
|
||||||
case PNG_HANDLE_CHUNK_ALWAYS:
|
case PNG_HANDLE_CHUNK_ALWAYS:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -615,7 +634,7 @@ get_unknown(display *d, png_infop info_ptr, int after_IDAT)
|
|||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
#else
|
#else /* SAVE_UNKNOWN_CHUNKS */
|
||||||
static png_uint_32
|
static png_uint_32
|
||||||
get_unknown(display *d, png_infop info_ptr, int after_IDAT)
|
get_unknown(display *d, png_infop info_ptr, int after_IDAT)
|
||||||
/* Otherwise this will return the cached values set by any user callback */
|
/* Otherwise this will return the cached values set by any user callback */
|
||||||
@@ -634,8 +653,8 @@ get_unknown(display *d, png_infop info_ptr, int after_IDAT)
|
|||||||
* a check to ensure the logic is correct.
|
* a check to ensure the logic is correct.
|
||||||
*/
|
*/
|
||||||
# error No store support and no user chunk support, this will not work
|
# error No store support and no user chunk support, this will not work
|
||||||
# endif
|
# endif /* READ_USER_CHUNKS */
|
||||||
#endif
|
#endif /* SAVE_UNKNOWN_CHUNKS */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
check(FILE *fp, int argc, const char **argv, png_uint_32p flags/*out*/,
|
check(FILE *fp, int argc, const char **argv, png_uint_32p flags/*out*/,
|
||||||
@@ -1001,6 +1020,20 @@ perform_one_test(FILE *fp, int argc, const char **argv,
|
|||||||
|
|
||||||
def = check(fp, argc, argv, flags[1], d, set_callback);
|
def = check(fp, argc, argv, flags[1], d, set_callback);
|
||||||
|
|
||||||
|
/* If IDAT is being handled as unknown the image read is skipped and all the
|
||||||
|
* IDATs after the first end up in the end info struct, so in this case add
|
||||||
|
* IDAT to the list of unknowns. (Do this after 'check' above sets the
|
||||||
|
* chunk_info 'keep' fields.)
|
||||||
|
*
|
||||||
|
* Note that the flag setting has to be in the 'known' field to avoid
|
||||||
|
* triggering the consistency check below and the flag must only be set if
|
||||||
|
* there are multiple IDATs, so if the check above did find an unknown IDAT
|
||||||
|
* after IDAT.
|
||||||
|
*/
|
||||||
|
if (chunk_info[0/*IDAT*/].keep != PNG_HANDLE_CHUNK_AS_DEFAULT &&
|
||||||
|
(flags[1][3] & PNG_INFO_IDAT) != 0)
|
||||||
|
flags[0][2] |= PNG_INFO_IDAT;
|
||||||
|
|
||||||
/* Chunks should either be known or unknown, never both and this should apply
|
/* Chunks should either be known or unknown, never both and this should apply
|
||||||
* whether the chunk is before or after the IDAT (actually, the app can
|
* whether the chunk is before or after the IDAT (actually, the app can
|
||||||
* probably change this by swapping the handling after the image, but this
|
* probably change this by swapping the handling after the image, but this
|
||||||
@@ -1065,7 +1098,7 @@ static const char *standard_tests[] =
|
|||||||
"sTER", "sTER=if-safe", 0,
|
"sTER", "sTER=if-safe", 0,
|
||||||
"IDAT", "default=discard", "IDAT=save", 0,
|
"IDAT", "default=discard", "IDAT=save", 0,
|
||||||
"sAPI", "bKGD=save", "cHRM=save", "gAMA=save", "all=discard", "iCCP=save",
|
"sAPI", "bKGD=save", "cHRM=save", "gAMA=save", "all=discard", "iCCP=save",
|
||||||
"sBIT=save", "sRGB=save", 0,
|
"sBIT=save", "sRGB=save", "eXIf=save", 0,
|
||||||
0/*end*/
|
0/*end*/
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1245,7 +1278,7 @@ main(void)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" test ignored: no support to find out about unknown chunks\n");
|
" test ignored: no support to find out about unknown chunks\n");
|
||||||
/* So the test is skipped: */
|
/* So the test is skipped: */
|
||||||
return 77;
|
return SKIP;
|
||||||
}
|
}
|
||||||
#endif /* READ_USER_CHUNKS || SAVE_UNKNOWN_CHUNKS */
|
#endif /* READ_USER_CHUNKS || SAVE_UNKNOWN_CHUNKS */
|
||||||
|
|
||||||
@@ -1256,6 +1289,6 @@ main(void)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" test ignored: no support to modify unknown chunk handling\n");
|
" test ignored: no support to modify unknown chunk handling\n");
|
||||||
/* So the test is skipped: */
|
/* So the test is skipped: */
|
||||||
return 77;
|
return SKIP;
|
||||||
}
|
}
|
||||||
#endif /* SET_UNKNOWN_CHUNKS && READ*/
|
#endif /* SET_UNKNOWN_CHUNKS && READ*/
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ read_png(FILE *fp)
|
|||||||
png_read_info(png_ptr, info_ptr);
|
png_read_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
{
|
{
|
||||||
png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
||||||
|
|
||||||
/* Failure to initialize these is harmless */
|
/* Failure to initialize these is harmless */
|
||||||
row = malloc(rowbytes);
|
row = malloc(rowbytes);
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
png_size_t index;
|
size_t index;
|
||||||
int state, failed = 0;
|
int state, failed = 0;
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (PNG_FP_IS_POSITIVE(state) && !(test > 0))
|
else if (PNG_FP_IS_POSITIVE(state) && !(test > 0))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%g[%d] -> '%s' but postive value not so reported\n",
|
fprintf(stderr, "%g[%d] -> '%s' but positive value not so reported\n",
|
||||||
test, precision, buffer);
|
test, precision, buffer);
|
||||||
failed = 1;
|
failed = 1;
|
||||||
assert(!PNG_FP_IS_NEGATIVE(state));
|
assert(!PNG_FP_IS_NEGATIVE(state));
|
||||||
@@ -329,7 +329,7 @@ static int check_one_character(checkfp_command *co, checkfp_control c, int ch)
|
|||||||
{
|
{
|
||||||
/* Test this character (ch) to ensure the parser does the correct thing.
|
/* Test this character (ch) to ensure the parser does the correct thing.
|
||||||
*/
|
*/
|
||||||
png_size_t index = 0;
|
size_t index = 0;
|
||||||
const char test = (char)ch;
|
const char test = (char)ch;
|
||||||
const int number_is_valid = png_check_fp_number(&test, 1, &c.state, &index);
|
const int number_is_valid = png_check_fp_number(&test, 1, &c.state, &index);
|
||||||
const int character_accepted = (index == 1);
|
const int character_accepted = (index == 1);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/* timepng.c
|
/* timepng.c
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013 John Cunningham Bowler
|
* Copyright (c) 2013,2016 John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.1 [March 28, 2013]
|
* Last changed in libpng 1.6.22 [May 26, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -10,15 +10,17 @@
|
|||||||
*
|
*
|
||||||
* Load an arbitrary number of PNG files (from the command line, or, if there
|
* Load an arbitrary number of PNG files (from the command line, or, if there
|
||||||
* are no arguments on the command line, from stdin) then run a time test by
|
* are no arguments on the command line, from stdin) then run a time test by
|
||||||
* reading each file by row. The test does nothing with the read result and
|
* reading each file by row or by image (possibly with transforms in the latter
|
||||||
* does no transforms. The only output is a time as a floating point number of
|
* case). The only output is a time as a floating point number of seconds with
|
||||||
* seconds with 9 decimal digits.
|
* 9 decimal digits.
|
||||||
*/
|
*/
|
||||||
#define _POSIX_C_SOURCE 199309L /* for clock_gettime */
|
#define _POSIX_C_SOURCE 199309L /* for clock_gettime */
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
@@ -35,36 +37,73 @@
|
|||||||
# include "../../png.h"
|
# include "../../png.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int read_png(FILE *fp)
|
/* The following is to support direct compilation of this file as C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
# define voidcast(type, value) static_cast<type>(value)
|
||||||
|
#else
|
||||||
|
# define voidcast(type, value) (value)
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/* 'CLOCK_PROCESS_CPUTIME_ID' is one of the clock timers for clock_gettime. It
|
||||||
|
* need not be supported even when clock_gettime is available. It returns the
|
||||||
|
* 'CPU' time the process has consumed. 'CPU' time is assumed to include time
|
||||||
|
* when the CPU is actually blocked by a pending cache fill but not time
|
||||||
|
* waiting for page faults. The attempt is to get a measure of the actual time
|
||||||
|
* the implementation takes to read a PNG ignoring the potentially very large IO
|
||||||
|
* overhead.
|
||||||
|
*/
|
||||||
|
#if defined (CLOCK_PROCESS_CPUTIME_ID) && defined(PNG_STDIO_SUPPORTED) &&\
|
||||||
|
defined(PNG_EASY_ACCESS_SUPPORTED) &&\
|
||||||
|
(PNG_LIBPNG_VER >= 10700 ? defined(PNG_READ_PNG_SUPPORTED) :\
|
||||||
|
defined (PNG_SEQUENTIAL_READ_SUPPORTED) &&\
|
||||||
|
defined(PNG_INFO_IMAGE_SUPPORTED))
|
||||||
|
|
||||||
|
typedef struct
|
||||||
{
|
{
|
||||||
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,0,0,0);
|
FILE *input;
|
||||||
png_infop info_ptr = NULL;
|
FILE *output;
|
||||||
png_bytep row = NULL, display = NULL;
|
} io_data;
|
||||||
|
|
||||||
if (png_ptr == NULL)
|
static PNG_CALLBACK(void, read_and_copy,
|
||||||
return 0;
|
(png_structp png_ptr, png_bytep buffer, size_t cb))
|
||||||
|
{
|
||||||
|
io_data *io = (io_data*)png_get_io_ptr(png_ptr);
|
||||||
|
|
||||||
if (setjmp(png_jmpbuf(png_ptr)))
|
if (fread(buffer, cb, 1, io->input) != 1)
|
||||||
|
png_error(png_ptr, strerror(errno));
|
||||||
|
|
||||||
|
if (fwrite(buffer, cb, 1, io->output) != 1)
|
||||||
{
|
{
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
perror("temporary file");
|
||||||
if (row != NULL) free(row);
|
fprintf(stderr, "temporary file PNG write failed\n");
|
||||||
if (display != NULL) free(display);
|
exit(1);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
png_init_io(png_ptr, fp);
|
static void read_by_row(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
FILE *write_ptr, FILE *read_ptr)
|
||||||
|
{
|
||||||
|
/* These don't get freed on error, this is fine; the program immediately
|
||||||
|
* exits.
|
||||||
|
*/
|
||||||
|
png_bytep row = NULL, display = NULL;
|
||||||
|
io_data io_copy;
|
||||||
|
|
||||||
info_ptr = png_create_info_struct(png_ptr);
|
if (write_ptr != NULL)
|
||||||
if (info_ptr == NULL)
|
{
|
||||||
png_error(png_ptr, "OOM allocating info structure");
|
/* Set up for a copy to the temporary file: */
|
||||||
|
io_copy.input = read_ptr;
|
||||||
|
io_copy.output = write_ptr;
|
||||||
|
png_set_read_fn(png_ptr, &io_copy, read_and_copy);
|
||||||
|
}
|
||||||
|
|
||||||
png_read_info(png_ptr, info_ptr);
|
png_read_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
{
|
{
|
||||||
png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
||||||
|
|
||||||
row = malloc(rowbytes);
|
row = voidcast(png_bytep,malloc(rowbytes));
|
||||||
display = malloc(rowbytes);
|
display = voidcast(png_bytep,malloc(rowbytes));
|
||||||
|
|
||||||
if (row == NULL || display == NULL)
|
if (row == NULL || display == NULL)
|
||||||
png_error(png_ptr, "OOM allocating row buffers");
|
png_error(png_ptr, "OOM allocating row buffers");
|
||||||
@@ -81,7 +120,8 @@ static int read_png(FILE *fp)
|
|||||||
png_uint_32 y = height;
|
png_uint_32 y = height;
|
||||||
|
|
||||||
/* NOTE: this trashes the row each time; interlace handling won't
|
/* NOTE: this trashes the row each time; interlace handling won't
|
||||||
* work, but this avoids memory thrashing for speed testing.
|
* work, but this avoids memory thrashing for speed testing and is
|
||||||
|
* somewhat representative of an application that works row-by-row.
|
||||||
*/
|
*/
|
||||||
while (y-- > 0)
|
while (y-- > 0)
|
||||||
png_read_row(png_ptr, row, display);
|
png_read_row(png_ptr, row, display);
|
||||||
@@ -91,9 +131,51 @@ static int read_png(FILE *fp)
|
|||||||
|
|
||||||
/* Make sure to read to the end of the file: */
|
/* Make sure to read to the end of the file: */
|
||||||
png_read_end(png_ptr, info_ptr);
|
png_read_end(png_ptr, info_ptr);
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
|
||||||
|
/* Free this up: */
|
||||||
free(row);
|
free(row);
|
||||||
free(display);
|
free(display);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PNG_CALLBACK(void, no_warnings, (png_structp png_ptr,
|
||||||
|
png_const_charp warning))
|
||||||
|
{
|
||||||
|
(void)png_ptr;
|
||||||
|
(void)warning;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int read_png(FILE *fp, png_int_32 transforms, FILE *write_file)
|
||||||
|
{
|
||||||
|
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,0,0,
|
||||||
|
no_warnings);
|
||||||
|
png_infop info_ptr = NULL;
|
||||||
|
|
||||||
|
if (png_ptr == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (setjmp(png_jmpbuf(png_ptr)))
|
||||||
|
{
|
||||||
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ifdef PNG_BENIGN_ERRORS_SUPPORTED
|
||||||
|
png_set_benign_errors(png_ptr, 1/*allowed*/);
|
||||||
|
# endif
|
||||||
|
png_init_io(png_ptr, fp);
|
||||||
|
|
||||||
|
info_ptr = png_create_info_struct(png_ptr);
|
||||||
|
|
||||||
|
if (info_ptr == NULL)
|
||||||
|
png_error(png_ptr, "OOM allocating info structure");
|
||||||
|
|
||||||
|
if (transforms < 0)
|
||||||
|
read_by_row(png_ptr, info_ptr, write_file, fp);
|
||||||
|
|
||||||
|
else
|
||||||
|
png_read_png(png_ptr, info_ptr, transforms, NULL/*params*/);
|
||||||
|
|
||||||
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,7 +190,7 @@ static int mytime(struct timespec *t)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int perform_one_test(FILE *fp, int nfiles)
|
static int perform_one_test(FILE *fp, int nfiles, png_int_32 transforms)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct timespec before, after;
|
struct timespec before, after;
|
||||||
@@ -120,7 +202,7 @@ static int perform_one_test(FILE *fp, int nfiles)
|
|||||||
{
|
{
|
||||||
for (i=0; i<nfiles; ++i)
|
for (i=0; i<nfiles; ++i)
|
||||||
{
|
{
|
||||||
if (read_png(fp))
|
if (read_png(fp, transforms, NULL/*write*/))
|
||||||
{
|
{
|
||||||
if (ferror(fp))
|
if (ferror(fp))
|
||||||
{
|
{
|
||||||
@@ -184,120 +266,343 @@ static int add_one_file(FILE *fp, char *name)
|
|||||||
|
|
||||||
if (ip != NULL)
|
if (ip != NULL)
|
||||||
{
|
{
|
||||||
int ch;
|
/* Read the file using libpng; this detects errors and also deals with
|
||||||
for (;;)
|
* files which contain data beyond the end of the file.
|
||||||
|
*/
|
||||||
|
int ok = 0;
|
||||||
|
fpos_t pos;
|
||||||
|
|
||||||
|
if (fgetpos(fp, &pos))
|
||||||
{
|
{
|
||||||
ch = getc(ip);
|
/* Fatal error reading the start: */
|
||||||
if (ch == EOF) break;
|
perror("temporary file");
|
||||||
putc(ch, fp);
|
fprintf(stderr, "temporary file fgetpos error\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ferror(ip))
|
if (read_png(ip, -1/*by row*/, fp/*output*/))
|
||||||
{
|
{
|
||||||
perror(name);
|
if (ferror(ip))
|
||||||
fprintf(stderr, "%s: read error\n", name);
|
{
|
||||||
return 0;
|
perror(name);
|
||||||
|
fprintf(stderr, "%s: read error\n", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
ok = 1; /* read ok */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
fprintf(stderr, "%s: file not added\n", name);
|
||||||
|
|
||||||
(void)fclose(ip);
|
(void)fclose(ip);
|
||||||
|
|
||||||
|
/* An error in the output is fatal; exit immediately: */
|
||||||
if (ferror(fp))
|
if (ferror(fp))
|
||||||
{
|
{
|
||||||
perror("temporary file");
|
perror("temporary file");
|
||||||
fprintf(stderr, "temporary file write error\n");
|
fprintf(stderr, "temporary file write error\n");
|
||||||
return 0;
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Did not read the file successfully, simply rewind the temporary
|
||||||
|
* file. This must happen after the ferror check above to avoid clearing
|
||||||
|
* the error.
|
||||||
|
*/
|
||||||
|
if (fsetpos(fp, &pos))
|
||||||
|
{
|
||||||
|
perror("temporary file");
|
||||||
|
fprintf(stderr, "temporary file fsetpos error\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* file open error: */
|
||||||
perror(name);
|
perror(name);
|
||||||
fprintf(stderr, "%s: open failed\n", name);
|
fprintf(stderr, "%s: open failed\n", name);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 0; /* file not added */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(FILE *fp)
|
||||||
|
{
|
||||||
|
if (fp != NULL) fclose(fp);
|
||||||
|
|
||||||
|
fprintf(stderr,
|
||||||
|
"Usage:\n"
|
||||||
|
" timepng --assemble <assembly> {files}\n"
|
||||||
|
" Read the files into <assembly>, output the count. Options are ignored.\n"
|
||||||
|
" timepng --dissemble <assembly> <count> [options]\n"
|
||||||
|
" Time <count> files from <assembly>, additional files may not be given.\n"
|
||||||
|
" Otherwise:\n"
|
||||||
|
" Read the files into a temporary file and time the decode\n"
|
||||||
|
"Transforms:\n"
|
||||||
|
" --by-image: read by image with png_read_png\n"
|
||||||
|
" --<transform>: implies by-image, use PNG_TRANSFORM_<transform>\n"
|
||||||
|
" Otherwise: read by row using png_read_row (to a single row buffer)\n"
|
||||||
|
/* ISO C90 string length max 509 */);fprintf(stderr,
|
||||||
|
"{files}:\n"
|
||||||
|
" PNG files to copy into the assembly and time. Invalid files are skipped\n"
|
||||||
|
" with appropriate error messages. If no files are given the list of files\n"
|
||||||
|
" is read from stdin with each file name terminated by a newline\n"
|
||||||
|
"Output:\n"
|
||||||
|
" For --assemble the output is the name of the assembly file followed by the\n"
|
||||||
|
" count of the files it contains; the arguments for --dissemble. Otherwise\n"
|
||||||
|
" the output is the total decode time in seconds.\n");
|
||||||
|
|
||||||
|
exit(99);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ok = 0;
|
int ok = 0;
|
||||||
FILE *fp = tmpfile();
|
int err = 0;
|
||||||
|
int nfiles = 0;
|
||||||
|
int transforms = -1; /* by row */
|
||||||
|
const char *assembly = NULL;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
if (fp != NULL)
|
if (argc > 2 && strcmp(argv[1], "--assemble") == 0)
|
||||||
{
|
{
|
||||||
int err = 0;
|
/* Just build the test file, argv[2] is the file name. */
|
||||||
int nfiles = 0;
|
assembly = argv[2];
|
||||||
|
fp = fopen(assembly, "wb");
|
||||||
if (argc > 1)
|
if (fp == NULL)
|
||||||
{
|
{
|
||||||
int i;
|
perror(assembly);
|
||||||
|
fprintf(stderr, "timepng --assemble %s: could not open for write\n",
|
||||||
|
assembly);
|
||||||
|
usage(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
for (i=1; i<argc; ++i)
|
argv += 2;
|
||||||
|
argc -= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (argc > 3 && strcmp(argv[1], "--dissemble") == 0)
|
||||||
|
{
|
||||||
|
fp = fopen(argv[2], "rb");
|
||||||
|
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
perror(argv[2]);
|
||||||
|
fprintf(stderr, "timepng --dissemble %s: could not open for read\n",
|
||||||
|
argv[2]);
|
||||||
|
usage(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
nfiles = atoi(argv[3]);
|
||||||
|
if (nfiles <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"timepng --dissemble <file> <count>: %s is not a count\n",
|
||||||
|
argv[3]);
|
||||||
|
exit(99);
|
||||||
|
}
|
||||||
|
#ifdef __COVERITY__
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nfiles &= PNG_UINT_31_MAX;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
argv += 3;
|
||||||
|
argc -= 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
else /* Else use a temporary file */
|
||||||
|
{
|
||||||
|
#ifndef __COVERITY__
|
||||||
|
fp = tmpfile();
|
||||||
|
#else
|
||||||
|
/* Experimental. Coverity says tmpfile() is insecure because it
|
||||||
|
* generates predictable names.
|
||||||
|
*
|
||||||
|
* It is possible to satisfy Coverity by using mkstemp(); however,
|
||||||
|
* any platform supporting mkstemp() undoubtedly has a secure tmpfile()
|
||||||
|
* implementation as well, and doesn't need the fix. Note that
|
||||||
|
* the fix won't work on platforms that don't support mkstemp().
|
||||||
|
*
|
||||||
|
* https://www.securecoding.cert.org/confluence/display/c/
|
||||||
|
* FIO21-C.+Do+not+create+temporary+files+in+shared+directories
|
||||||
|
* says that most historic implementations of tmpfile() provide
|
||||||
|
* only a limited number of possible temporary file names
|
||||||
|
* (usually 26) before file names are recycled. That article also
|
||||||
|
* provides a secure solution that unfortunately depends upon mkstemp().
|
||||||
|
*/
|
||||||
|
char tmpfile[] = "timepng-XXXXXX";
|
||||||
|
int filedes;
|
||||||
|
umask(0177);
|
||||||
|
filedes = mkstemp(tmpfile);
|
||||||
|
if (filedes < 0)
|
||||||
|
fp = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fp = fdopen(filedes,"w+");
|
||||||
|
/* Hide the filename immediately and ensure that the file does
|
||||||
|
* not exist after the program ends
|
||||||
|
*/
|
||||||
|
(void) unlink(tmpfile);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
perror("tmpfile");
|
||||||
|
fprintf(stderr, "timepng: could not open the temporary file\n");
|
||||||
|
exit(1); /* not a user error */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle the transforms: */
|
||||||
|
while (argc > 1 && argv[1][0] == '-' && argv[1][1] == '-')
|
||||||
|
{
|
||||||
|
const char *opt = *++argv + 2;
|
||||||
|
|
||||||
|
--argc;
|
||||||
|
|
||||||
|
/* Transforms turn on the by-image processing and maybe set some
|
||||||
|
* transforms:
|
||||||
|
*/
|
||||||
|
if (transforms == -1)
|
||||||
|
transforms = PNG_TRANSFORM_IDENTITY;
|
||||||
|
|
||||||
|
if (strcmp(opt, "by-image") == 0)
|
||||||
|
{
|
||||||
|
/* handled above */
|
||||||
|
}
|
||||||
|
|
||||||
|
# define OPT(name) else if (strcmp(opt, #name) == 0)\
|
||||||
|
transforms |= PNG_TRANSFORM_ ## name
|
||||||
|
|
||||||
|
OPT(STRIP_16);
|
||||||
|
OPT(STRIP_ALPHA);
|
||||||
|
OPT(PACKING);
|
||||||
|
OPT(PACKSWAP);
|
||||||
|
OPT(EXPAND);
|
||||||
|
OPT(INVERT_MONO);
|
||||||
|
OPT(SHIFT);
|
||||||
|
OPT(BGR);
|
||||||
|
OPT(SWAP_ALPHA);
|
||||||
|
OPT(SWAP_ENDIAN);
|
||||||
|
OPT(INVERT_ALPHA);
|
||||||
|
OPT(STRIP_FILLER);
|
||||||
|
OPT(STRIP_FILLER_BEFORE);
|
||||||
|
OPT(STRIP_FILLER_AFTER);
|
||||||
|
OPT(GRAY_TO_RGB);
|
||||||
|
OPT(EXPAND_16);
|
||||||
|
OPT(SCALE_16);
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "timepng %s: unrecognized transform\n", opt);
|
||||||
|
usage(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle the files: */
|
||||||
|
if (argc > 1 && nfiles > 0)
|
||||||
|
usage(fp); /* Additional files not valid with --dissemble */
|
||||||
|
|
||||||
|
else if (argc > 1)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=1; i<argc; ++i)
|
||||||
|
{
|
||||||
|
if (nfiles == INT_MAX)
|
||||||
{
|
{
|
||||||
if (add_one_file(fp, argv[i]))
|
fprintf(stderr, "%s: skipped, too many files\n", argv[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (add_one_file(fp, argv[i]))
|
||||||
|
++nfiles;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (nfiles == 0) /* Read from stdin withoout --dissemble */
|
||||||
|
{
|
||||||
|
char filename[FILENAME_MAX+1];
|
||||||
|
|
||||||
|
while (fgets(filename, FILENAME_MAX+1, stdin))
|
||||||
|
{
|
||||||
|
size_t len = strlen(filename);
|
||||||
|
|
||||||
|
if (filename[len-1] == '\n')
|
||||||
|
{
|
||||||
|
filename[len-1] = 0;
|
||||||
|
if (nfiles == INT_MAX)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: skipped, too many files\n", filename);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (add_one_file(fp, filename))
|
||||||
++nfiles;
|
++nfiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "timepng: file name too long: ...%s\n",
|
||||||
|
filename+len-32);
|
||||||
|
err = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ferror(stdin))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "timepng: stdin: read error\n");
|
||||||
|
err = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Perform the test, or produce the --assemble output: */
|
||||||
|
if (!err)
|
||||||
|
{
|
||||||
|
if (nfiles > 0)
|
||||||
|
{
|
||||||
|
if (assembly != NULL)
|
||||||
|
{
|
||||||
|
if (fflush(fp) && !ferror(fp) && fclose(fp))
|
||||||
|
{
|
||||||
|
perror(assembly);
|
||||||
|
fprintf(stderr, "%s: close failed\n", assembly);
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
err = 1;
|
printf("%s %d\n", assembly, nfiles);
|
||||||
break;
|
fflush(stdout);
|
||||||
|
ok = !ferror(stdout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok = perform_one_test(fp, nfiles, transforms);
|
||||||
|
(void)fclose(fp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
usage(fp);
|
||||||
char filename[FILENAME_MAX+1];
|
|
||||||
|
|
||||||
while (fgets(filename, FILENAME_MAX+1, stdin))
|
|
||||||
{
|
|
||||||
size_t len = strlen(filename);
|
|
||||||
|
|
||||||
if (filename[len-1] == '\n')
|
|
||||||
{
|
|
||||||
filename[len-1] = 0;
|
|
||||||
if (add_one_file(fp, filename))
|
|
||||||
++nfiles;
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
err = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fprintf(stderr, "timepng: truncated file name ...%s\n",
|
|
||||||
filename+len-32);
|
|
||||||
err = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ferror(stdin))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "timepng: stdin: read error\n");
|
|
||||||
err = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!err)
|
|
||||||
{
|
|
||||||
if (nfiles > 0)
|
|
||||||
ok = perform_one_test(fp, nfiles);
|
|
||||||
|
|
||||||
else
|
|
||||||
fprintf(stderr, "usage: timepng {files} or ls files | timepng\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
(void)fclose(fp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
fprintf(stderr, "timepng: could not open temporary file\n");
|
(void)fclose(fp);
|
||||||
|
|
||||||
/* Exit code 0 on success. */
|
/* Exit code 0 on success. */
|
||||||
return ok == 0;
|
return ok == 0;
|
||||||
}
|
}
|
||||||
|
#else /* !sufficient support */
|
||||||
|
int main(void) { return 77; }
|
||||||
|
#endif /* !sufficient support */
|
||||||
|
|||||||
83
contrib/mips-msa/README
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
OPERATING SYSTEM SPECIFIC MIPS MSA DETECTION
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
Detection of the ability to execute MIPS MSA on an MIPS processor requires
|
||||||
|
operating system support. (The information is not available in user mode.)
|
||||||
|
|
||||||
|
HOW TO USE THIS
|
||||||
|
---------------
|
||||||
|
|
||||||
|
This directory contains C code fragments that can be included in mips/mips_init.c
|
||||||
|
by setting the macro PNG_MIPS_MSA_FILE to the file name in "" or <> at build
|
||||||
|
time. This setting is not recorded in pnglibconf.h and can be changed simply by
|
||||||
|
rebuilding mips/msa_init.o with the required macro definition.
|
||||||
|
|
||||||
|
For any of this code to be used the MIPS MSA code must be enabled and run time
|
||||||
|
checks must be supported. I.e.:
|
||||||
|
|
||||||
|
#if PNG_MIPS_MSA_OPT > 0
|
||||||
|
#ifdef PNG_MIPS_MSA_CHECK_SUPPORTED
|
||||||
|
|
||||||
|
This is done in a 'configure' build by passing configure the argument:
|
||||||
|
|
||||||
|
--enable-mips-msa=check
|
||||||
|
|
||||||
|
Apart from the basic Linux implementation in contrib/mips-msa/linux.c this code
|
||||||
|
is unsupported. That means that it is not even compiled on a regular basis and
|
||||||
|
may be broken in any given minor release.
|
||||||
|
|
||||||
|
FILE FORMAT
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Each file documents its testing status as of the last time it was tested (which
|
||||||
|
may have been a long time ago):
|
||||||
|
|
||||||
|
STATUS: one of:
|
||||||
|
SUPPORTED: This indicates that the file is included in the regularly
|
||||||
|
performed test builds and bugs are fixed when discovered.
|
||||||
|
COMPILED: This indicates that the code did compile at least once. See the
|
||||||
|
more detailed description for the extent to which the result was
|
||||||
|
successful.
|
||||||
|
TESTED: This means the code was fully compiled into the libpng test programs
|
||||||
|
and these were run at least once.
|
||||||
|
|
||||||
|
BUG REPORTS: an email address to which to send reports of problems
|
||||||
|
|
||||||
|
The file is a fragment of C code. It should not define any 'extern' symbols;
|
||||||
|
everything should be static. It must define the function:
|
||||||
|
|
||||||
|
static int png_have_msa(png_structp png_ptr);
|
||||||
|
|
||||||
|
That function must return 1 if MIPS MSA instructions are supported, 0 if not.
|
||||||
|
It must not execute png_error unless it detects a bug. A png_error will prevent
|
||||||
|
the reading of the PNG and in the future, writing too.
|
||||||
|
|
||||||
|
BUG REPORTS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
If you mail a bug report for any file that is not SUPPORTED there may only be
|
||||||
|
limited response. Consider fixing it and sending a patch to fix the problem -
|
||||||
|
this is more likely to result in action.
|
||||||
|
|
||||||
|
CONTRIBUTIONS
|
||||||
|
-------------
|
||||||
|
|
||||||
|
You may send contributions of new implementations to
|
||||||
|
png-mng-implement@sourceforge.net. Please write code in strict C90 C where
|
||||||
|
possible. Obviously OS dependencies are to be expected. If you submit code you
|
||||||
|
must have the authors permission and it must have a license that is acceptable
|
||||||
|
to the current maintainer; in particular that license must permit modification
|
||||||
|
and redistribution.
|
||||||
|
|
||||||
|
Please try to make the contribution a single file and give the file a clear and
|
||||||
|
unambiguous name that identifies the target OS. If multiple files really are
|
||||||
|
required put them all in a sub-directory.
|
||||||
|
|
||||||
|
You must also be prepared to handle bug reports from users of the code, either
|
||||||
|
by joining the png-mng-implement mailing list or by providing an email for the
|
||||||
|
"BUG REPORTS" entry or both. Please make sure that the header of the file
|
||||||
|
contains the STATUS and BUG REPORTS fields as above.
|
||||||
|
|
||||||
|
Please list the OS requirements as precisely as possible. Ideally you should
|
||||||
|
also list the environment in which the code has been tested and certainly list
|
||||||
|
any environments where you suspect it might not work.
|
||||||
64
contrib/mips-msa/linux.c
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/* contrib/mips-msa/linux.c
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 Glenn Randers-Pehrson
|
||||||
|
* Written by Mandar Sahastrabuddhe, 2016.
|
||||||
|
* Last changed in libpng 1.6.25beta03 [August 29, 2016]
|
||||||
|
*
|
||||||
|
* This code is released under the libpng license.
|
||||||
|
* For conditions of distribution and use, see the disclaimer
|
||||||
|
* and license in png.h
|
||||||
|
*
|
||||||
|
* SEE contrib/mips-msa/README before reporting bugs
|
||||||
|
*
|
||||||
|
* STATUS: SUPPORTED
|
||||||
|
* BUG REPORTS: png-mng-implement@sourceforge.net
|
||||||
|
*
|
||||||
|
* png_have_msa implemented for Linux by reading the widely available
|
||||||
|
* pseudo-file /proc/cpuinfo.
|
||||||
|
*
|
||||||
|
* This code is strict ANSI-C and is probably moderately portable; it does
|
||||||
|
* however use <stdio.h> and it assumes that /proc/cpuinfo is never localized.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static int
|
||||||
|
png_have_msa(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
FILE *f = fopen("/proc/cpuinfo", "rb");
|
||||||
|
|
||||||
|
char *string = "msa";
|
||||||
|
char word[10];
|
||||||
|
|
||||||
|
if (f != NULL)
|
||||||
|
{
|
||||||
|
while(!feof(f))
|
||||||
|
{
|
||||||
|
int ch = fgetc(f);
|
||||||
|
static int i = 0;
|
||||||
|
|
||||||
|
while(!(ch <= 32))
|
||||||
|
{
|
||||||
|
word[i++] = ch;
|
||||||
|
ch = fgetc(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
int val = strcmp(string, word);
|
||||||
|
|
||||||
|
if (val == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
memset(word, 0, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
|
else
|
||||||
|
png_warning(png_ptr, "/proc/cpuinfo open failed");
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
25
contrib/oss-fuzz/Dockerfile
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
FROM gcr.io/oss-fuzz-base/base-builder
|
||||||
|
MAINTAINER glennrp@gmail.com
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y make autoconf automake libtool
|
||||||
|
|
||||||
|
RUN git clone --depth 1 https://github.com/madler/zlib.git
|
||||||
|
RUN git clone --depth 1 https://github.com/glennrp/libpng.git
|
||||||
|
RUN cp libpng/contrib/oss-fuzz/build.sh $SRC
|
||||||
|
WORKDIR libpng
|
||||||
37
contrib/oss-fuzz/README.txt
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
Last changed in libpng 1.6.33 [September 28, 2017]
|
||||||
|
Copyright (c) 2017 Glenn Randers-Pehrson
|
||||||
|
|
||||||
|
This code is released under the libpng license.
|
||||||
|
For conditions of distribution and use, see the disclaimer
|
||||||
|
and license in png.h
|
||||||
|
|
||||||
|
Files in this directory are used by the oss-fuzz project
|
||||||
|
(https://github.com/google/oss-fuzz/tree/master/projects/libpng).
|
||||||
|
for "fuzzing" libpng.
|
||||||
|
|
||||||
|
They were licensed by Google Inc, using the BSD-like Chromium license,
|
||||||
|
which may be found at https://cs.chromium.org/chromium/src/LICENSE, or, if
|
||||||
|
noted in the source, under the Apache-2.0 license, which may
|
||||||
|
be found at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||||
|
If they have been modified, the derivatives are copyright Glenn Randers-Pehrson
|
||||||
|
and are released under the same licenses as the originals. Several of
|
||||||
|
the original files (libpng_read_fuzzer.options, png.dict, project.yaml)
|
||||||
|
had no licensing information; we assumed that these were under the Chromium
|
||||||
|
license. Any new files are released under the libpng license (see png.h).
|
||||||
|
|
||||||
|
The files are
|
||||||
|
Original
|
||||||
|
Filename or derived Copyright License
|
||||||
|
========================= ========== ================ ==========
|
||||||
|
Dockerfile* derived 2017, Glenn R-P Apache 2.0
|
||||||
|
build.sh derived 2017, Glenn R-P Apache 2.0
|
||||||
|
libpng_read_fuzzer.cc derived 2017, Glenn R-P Chromium
|
||||||
|
libpng_read_fuzzer.options original 2015, Chrome Devs Chromium
|
||||||
|
png.dict original 2015, Chrome Devs Chromium
|
||||||
|
README.txt (this file) original 2017, Glenn R-P libpng
|
||||||
|
|
||||||
|
* Dockerfile is a copy of the file used by oss-fuzz. build.sh,
|
||||||
|
png.dict and libpng_read_fuzzer.* are the actual files used by oss-fuzz,
|
||||||
|
which retrieves them from the libpng repository at Github.
|
||||||
|
|
||||||
|
To do: exercise the progressive reader and the png encoder.
|
||||||
51
contrib/oss-fuzz/build.sh
Executable file
@@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/bash -eu
|
||||||
|
# Copyright 2017-2018 Glenn Randers-Pehrson
|
||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
# Last changed in libpng 1.6.35 [July 15, 2018]
|
||||||
|
#
|
||||||
|
# Revisions by Glenn Randers-Pehrson, 2017:
|
||||||
|
# 1. Build only the library, not the tools (changed "make -j$(nproc) all" to
|
||||||
|
# "make -j$(nproc) libpng16.la").
|
||||||
|
# 2. Disabled WARNING and WRITE options in pnglibconf.dfa.
|
||||||
|
# 3. Build zlib alongside libpng
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Disable logging via library build configuration control.
|
||||||
|
cat scripts/pnglibconf.dfa | \
|
||||||
|
sed -e "s/option STDIO/option STDIO disabled/" \
|
||||||
|
-e "s/option WARNING /option WARNING disabled/" \
|
||||||
|
-e "s/option WRITE enables WRITE_INT_FUNCTIONS/option WRITE disabled/" \
|
||||||
|
> scripts/pnglibconf.dfa.temp
|
||||||
|
mv scripts/pnglibconf.dfa.temp scripts/pnglibconf.dfa
|
||||||
|
|
||||||
|
# build the libpng library.
|
||||||
|
autoreconf -f -i
|
||||||
|
./configure --with-libpng-prefix=OSS_FUZZ_
|
||||||
|
make -j$(nproc) clean
|
||||||
|
make -j$(nproc) libpng16.la
|
||||||
|
|
||||||
|
# build libpng_read_fuzzer.
|
||||||
|
$CXX $CXXFLAGS -std=c++11 -I. \
|
||||||
|
$SRC/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc \
|
||||||
|
-o $OUT/libpng_read_fuzzer \
|
||||||
|
-lFuzzingEngine .libs/libpng16.a -lz
|
||||||
|
|
||||||
|
# add seed corpus.
|
||||||
|
find $SRC/libpng -name "*.png" | grep -v crashers | \
|
||||||
|
xargs zip $OUT/libpng_read_fuzzer_seed_corpus.zip
|
||||||
|
|
||||||
|
cp $SRC/libpng/contrib/oss-fuzz/*.dict \
|
||||||
|
$SRC/libpng/contrib/oss-fuzz/*.options $OUT/
|
||||||
190
contrib/oss-fuzz/libpng_read_fuzzer.cc
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
|
||||||
|
// libpng_read_fuzzer.cc
|
||||||
|
// Copyright 2017-2018 Glenn Randers-Pehrson
|
||||||
|
// Copyright 2015 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that may
|
||||||
|
// be found in the LICENSE file https://cs.chromium.org/chromium/src/LICENSE
|
||||||
|
|
||||||
|
// Last changed in libpng 1.6.35 [July 15, 2018]
|
||||||
|
|
||||||
|
// The modifications in 2017 by Glenn Randers-Pehrson include
|
||||||
|
// 1. addition of a PNG_CLEANUP macro,
|
||||||
|
// 2. setting the option to ignore ADLER32 checksums,
|
||||||
|
// 3. adding "#include <string.h>" which is needed on some platforms
|
||||||
|
// to provide memcpy().
|
||||||
|
// 4. adding read_end_info() and creating an end_info structure.
|
||||||
|
// 5. adding calls to png_set_*() transforms commonly used by browsers.
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
#define PNG_CLEANUP \
|
||||||
|
if(png_handler.png_ptr) \
|
||||||
|
{ \
|
||||||
|
if (png_handler.row_ptr) \
|
||||||
|
png_free(png_handler.png_ptr, png_handler.row_ptr); \
|
||||||
|
if (png_handler.end_info_ptr) \
|
||||||
|
png_destroy_read_struct(&png_handler.png_ptr, &png_handler.info_ptr,\
|
||||||
|
&png_handler.end_info_ptr); \
|
||||||
|
else if (png_handler.info_ptr) \
|
||||||
|
png_destroy_read_struct(&png_handler.png_ptr, &png_handler.info_ptr,\
|
||||||
|
nullptr); \
|
||||||
|
else \
|
||||||
|
png_destroy_read_struct(&png_handler.png_ptr, nullptr, nullptr); \
|
||||||
|
png_handler.png_ptr = nullptr; \
|
||||||
|
png_handler.row_ptr = nullptr; \
|
||||||
|
png_handler.info_ptr = nullptr; \
|
||||||
|
png_handler.end_info_ptr = nullptr; \
|
||||||
|
}
|
||||||
|
|
||||||
|
struct BufState {
|
||||||
|
const uint8_t* data;
|
||||||
|
size_t bytes_left;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PngObjectHandler {
|
||||||
|
png_infop info_ptr = nullptr;
|
||||||
|
png_structp png_ptr = nullptr;
|
||||||
|
png_infop end_info_ptr = nullptr;
|
||||||
|
png_voidp row_ptr = nullptr;
|
||||||
|
BufState* buf_state = nullptr;
|
||||||
|
|
||||||
|
~PngObjectHandler() {
|
||||||
|
if (row_ptr)
|
||||||
|
png_free(png_ptr, row_ptr);
|
||||||
|
if (end_info_ptr)
|
||||||
|
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info_ptr);
|
||||||
|
else if (info_ptr)
|
||||||
|
png_destroy_read_struct(&png_ptr, &info_ptr, nullptr);
|
||||||
|
else
|
||||||
|
png_destroy_read_struct(&png_ptr, nullptr, nullptr);
|
||||||
|
delete buf_state;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void user_read_data(png_structp png_ptr, png_bytep data, size_t length) {
|
||||||
|
BufState* buf_state = static_cast<BufState*>(png_get_io_ptr(png_ptr));
|
||||||
|
if (length > buf_state->bytes_left) {
|
||||||
|
png_error(png_ptr, "read error");
|
||||||
|
}
|
||||||
|
memcpy(data, buf_state->data, length);
|
||||||
|
buf_state->bytes_left -= length;
|
||||||
|
buf_state->data += length;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const int kPngHeaderSize = 8;
|
||||||
|
|
||||||
|
// Entry point for LibFuzzer.
|
||||||
|
// Roughly follows the libpng book example:
|
||||||
|
// http://www.libpng.org/pub/png/book/chapter13.html
|
||||||
|
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||||
|
if (size < kPngHeaderSize) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<unsigned char> v(data, data + size);
|
||||||
|
if (png_sig_cmp(v.data(), 0, kPngHeaderSize)) {
|
||||||
|
// not a PNG.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
PngObjectHandler png_handler;
|
||||||
|
png_handler.png_ptr = nullptr;
|
||||||
|
png_handler.row_ptr = nullptr;
|
||||||
|
png_handler.info_ptr = nullptr;
|
||||||
|
png_handler.end_info_ptr = nullptr;
|
||||||
|
|
||||||
|
png_handler.png_ptr = png_create_read_struct
|
||||||
|
(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
|
||||||
|
if (!png_handler.png_ptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
png_handler.info_ptr = png_create_info_struct(png_handler.png_ptr);
|
||||||
|
if (!png_handler.info_ptr) {
|
||||||
|
PNG_CLEANUP
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
png_handler.end_info_ptr = png_create_info_struct(png_handler.png_ptr);
|
||||||
|
if (!png_handler.end_info_ptr) {
|
||||||
|
PNG_CLEANUP
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
png_set_crc_action(png_handler.png_ptr, PNG_CRC_QUIET_USE, PNG_CRC_QUIET_USE);
|
||||||
|
#ifdef PNG_IGNORE_ADLER32
|
||||||
|
png_set_option(png_handler.png_ptr, PNG_IGNORE_ADLER32, PNG_OPTION_ON);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Setting up reading from buffer.
|
||||||
|
png_handler.buf_state = new BufState();
|
||||||
|
png_handler.buf_state->data = data + kPngHeaderSize;
|
||||||
|
png_handler.buf_state->bytes_left = size - kPngHeaderSize;
|
||||||
|
png_set_read_fn(png_handler.png_ptr, png_handler.buf_state, user_read_data);
|
||||||
|
png_set_sig_bytes(png_handler.png_ptr, kPngHeaderSize);
|
||||||
|
|
||||||
|
if (setjmp(png_jmpbuf(png_handler.png_ptr))) {
|
||||||
|
PNG_CLEANUP
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reading.
|
||||||
|
png_read_info(png_handler.png_ptr, png_handler.info_ptr);
|
||||||
|
|
||||||
|
// reset error handler to put png_deleter into scope.
|
||||||
|
if (setjmp(png_jmpbuf(png_handler.png_ptr))) {
|
||||||
|
PNG_CLEANUP
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32 width, height;
|
||||||
|
int bit_depth, color_type, interlace_type, compression_type;
|
||||||
|
int filter_type;
|
||||||
|
|
||||||
|
if (!png_get_IHDR(png_handler.png_ptr, png_handler.info_ptr, &width,
|
||||||
|
&height, &bit_depth, &color_type, &interlace_type,
|
||||||
|
&compression_type, &filter_type)) {
|
||||||
|
PNG_CLEANUP
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is going to be too slow.
|
||||||
|
if (width && height > 100000000 / width) {
|
||||||
|
PNG_CLEANUP
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set several transforms that browsers typically use:
|
||||||
|
png_set_gray_to_rgb(png_handler.png_ptr);
|
||||||
|
png_set_expand(png_handler.png_ptr);
|
||||||
|
png_set_packing(png_handler.png_ptr);
|
||||||
|
png_set_scale_16(png_handler.png_ptr);
|
||||||
|
png_set_tRNS_to_alpha(png_handler.png_ptr);
|
||||||
|
|
||||||
|
int passes = png_set_interlace_handling(png_handler.png_ptr);
|
||||||
|
|
||||||
|
png_read_update_info(png_handler.png_ptr, png_handler.info_ptr);
|
||||||
|
|
||||||
|
png_handler.row_ptr = png_malloc(
|
||||||
|
png_handler.png_ptr, png_get_rowbytes(png_handler.png_ptr,
|
||||||
|
png_handler.info_ptr));
|
||||||
|
|
||||||
|
for (int pass = 0; pass < passes; ++pass) {
|
||||||
|
for (png_uint_32 y = 0; y < height; ++y) {
|
||||||
|
png_read_row(png_handler.png_ptr,
|
||||||
|
static_cast<png_bytep>(png_handler.row_ptr), nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
png_read_end(png_handler.png_ptr, png_handler.end_info_ptr);
|
||||||
|
|
||||||
|
PNG_CLEANUP
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
2
contrib/oss-fuzz/libpng_read_fuzzer.options
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[libfuzzer]
|
||||||
|
dict = png.dict
|
||||||
39
contrib/oss-fuzz/png.dict
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#
|
||||||
|
# AFL dictionary for PNG images
|
||||||
|
# -----------------------------
|
||||||
|
#
|
||||||
|
# Just the basic, standard-originating sections; does not include vendor
|
||||||
|
# extensions.
|
||||||
|
#
|
||||||
|
# Created by Michal Zalewski <lcamtuf@google.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
header_png="\x89PNG\x0d\x0a\x1a\x0a"
|
||||||
|
|
||||||
|
section_IDAT="IDAT"
|
||||||
|
section_IEND="IEND"
|
||||||
|
section_IHDR="IHDR"
|
||||||
|
section_PLTE="PLTE"
|
||||||
|
section_bKGD="bKGD"
|
||||||
|
section_cHRM="cHRM"
|
||||||
|
section_eXIf="eXIf"
|
||||||
|
section_fRAc="fRAc"
|
||||||
|
section_gAMA="gAMA"
|
||||||
|
section_gIFg="gIFg"
|
||||||
|
section_gIFt="gIFt"
|
||||||
|
section_gIFx="gIFx"
|
||||||
|
section_hIST="hIST"
|
||||||
|
section_iCCP="iCCP"
|
||||||
|
section_iTXt="iTXt"
|
||||||
|
section_oFFs="oFFs"
|
||||||
|
section_pCAL="pCAL"
|
||||||
|
section_pHYs="pHYs"
|
||||||
|
section_sBIT="sBIT"
|
||||||
|
section_sCAL="sCAL"
|
||||||
|
section_sPLT="sPLT"
|
||||||
|
section_sRGB="sRGB"
|
||||||
|
section_sTER="sTER"
|
||||||
|
section_tEXt="tEXt"
|
||||||
|
section_tIME="tIME"
|
||||||
|
section_tRNS="tRNS"
|
||||||
|
section_zTXt="zTXt"
|
||||||
@@ -17,7 +17,7 @@ express or implied warranty.
|
|||||||
Some history
|
Some history
|
||||||
------------
|
------------
|
||||||
Soon after the creation of PNG in 1995, the need was felt for a set of
|
Soon after the creation of PNG in 1995, the need was felt for a set of
|
||||||
pnmtopng / pngtopnm utilities. Independantly Alexander Lehmann and I
|
pnmtopng / pngtopnm utilities. Independently Alexander Lehmann and I
|
||||||
(Willem van Schaik) started such a project. Luckily we discovered this
|
(Willem van Schaik) started such a project. Luckily we discovered this
|
||||||
and merged the two together into pnmtopng.tar.gz, which is available
|
and merged the two together into pnmtopng.tar.gz, which is available
|
||||||
from a/o ftp://ftp.simplesystems.org/pub/libpng/png/.
|
from a/o ftp://ftp.simplesystems.org/pub/libpng/png/.
|
||||||
@@ -146,7 +146,7 @@ The Turbo bug
|
|||||||
The end
|
The end
|
||||||
-------
|
-------
|
||||||
Willem van Schaik
|
Willem van Schaik
|
||||||
mailto:willem@schaik.com
|
mailto:willem at schaik.com
|
||||||
http://www.schaik.com/png/
|
http://www.schaik.com/png/
|
||||||
-------
|
-------
|
||||||
Oct 1999
|
Oct 1999
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ png2pnm.exe -noraw ..\pngsuite\basn0g16.png basn0g16.pgm
|
|||||||
REM -- full-color
|
REM -- full-color
|
||||||
png2pnm.exe -noraw ..\pngsuite\basn2c08.png basn2c08.ppm
|
png2pnm.exe -noraw ..\pngsuite\basn2c08.png basn2c08.ppm
|
||||||
png2pnm.exe -noraw ..\pngsuite\basn2c16.png basn2c16.ppm
|
png2pnm.exe -noraw ..\pngsuite\basn2c16.png basn2c16.ppm
|
||||||
REM -- palletted
|
REM -- paletted
|
||||||
png2pnm.exe -noraw ..\pngsuite\basn3p01.png basn3p01.ppm
|
png2pnm.exe -noraw ..\pngsuite\basn3p01.png basn3p01.ppm
|
||||||
png2pnm.exe -noraw ..\pngsuite\basn3p02.png basn3p02.ppm
|
png2pnm.exe -noraw ..\pngsuite\basn3p02.png basn3p02.ppm
|
||||||
png2pnm.exe -noraw ..\pngsuite\basn3p04.png basn3p04.ppm
|
png2pnm.exe -noraw ..\pngsuite\basn3p04.png basn3p04.ppm
|
||||||
@@ -27,7 +27,7 @@ png2pnm.exe -raw ..\pngsuite\basn0g16.png rawn0g16.pgm
|
|||||||
REM -- full-color
|
REM -- full-color
|
||||||
png2pnm.exe -raw ..\pngsuite\basn2c08.png rawn2c08.ppm
|
png2pnm.exe -raw ..\pngsuite\basn2c08.png rawn2c08.ppm
|
||||||
png2pnm.exe -raw ..\pngsuite\basn2c16.png rawn2c16.ppm
|
png2pnm.exe -raw ..\pngsuite\basn2c16.png rawn2c16.ppm
|
||||||
REM -- palletted
|
REM -- paletted
|
||||||
png2pnm.exe -raw ..\pngsuite\basn3p01.png rawn3p01.ppm
|
png2pnm.exe -raw ..\pngsuite\basn3p01.png rawn3p01.ppm
|
||||||
png2pnm.exe -raw ..\pngsuite\basn3p02.png rawn3p02.ppm
|
png2pnm.exe -raw ..\pngsuite\basn3p02.png rawn3p02.ppm
|
||||||
png2pnm.exe -raw ..\pngsuite\basn3p04.png rawn3p04.ppm
|
png2pnm.exe -raw ..\pngsuite\basn3p04.png rawn3p04.ppm
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* png2pnm.c --- conversion from PNG-file to PGM/PPM-file
|
* png2pnm.c --- conversion from PNG-file to PGM/PPM-file
|
||||||
* copyright (C) 1999 by Willem van Schaik <willem@schaik.com>
|
* copyright (C) 1999,2017 by Willem van Schaik <willem at schaik.com>
|
||||||
*
|
*
|
||||||
* version 1.0 - 1999.10.15 - First version.
|
* version 1.0 - 1999.10.15 - First version.
|
||||||
|
* 1.1 - 2017.04.22 - Add buffer-size check (Glenn Randers-Pehrson)
|
||||||
|
* 1.2 - 2017.08.24 - Fix potential overflow in buffer-size check
|
||||||
|
* (Glenn Randers-Pehrson)
|
||||||
|
* 1.3 - 2017.08.28 - Add PNGMINUS_UNUSED (Christian Hesse)
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Permission to use, copy, modify, and distribute this software and
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
* its documentation for any purpose and without fee is hereby granted,
|
||||||
@@ -41,6 +45,7 @@
|
|||||||
#define PNG_DEBUG 0
|
#define PNG_DEBUG 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */
|
/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */
|
||||||
@@ -48,6 +53,14 @@
|
|||||||
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef PNGMINUS_UNUSED
|
||||||
|
/* Unused formal parameter warnings are silenced using the following macro
|
||||||
|
* which is expected to have no bad effects on performance (optimizing
|
||||||
|
* compilers will probably remove it entirely).
|
||||||
|
*/
|
||||||
|
# define PNGMINUS_UNUSED(param) (void)param
|
||||||
|
#endif
|
||||||
|
|
||||||
/* function prototypes */
|
/* function prototypes */
|
||||||
|
|
||||||
int main (int argc, char *argv[]);
|
int main (int argc, char *argv[]);
|
||||||
@@ -320,14 +333,21 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
|
|||||||
/* row_bytes is the width x number of channels x (bit-depth / 8) */
|
/* row_bytes is the width x number of channels x (bit-depth / 8) */
|
||||||
row_bytes = png_get_rowbytes (png_ptr, info_ptr);
|
row_bytes = png_get_rowbytes (png_ptr, info_ptr);
|
||||||
|
|
||||||
|
if ((row_bytes == 0 || (size_t)height > ((size_t)(-1))/(size_t)row_bytes))
|
||||||
|
{
|
||||||
|
/* too big */
|
||||||
|
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
if ((png_pixels = (png_byte *)
|
if ((png_pixels = (png_byte *)
|
||||||
malloc (row_bytes * height * sizeof (png_byte))) == NULL) {
|
malloc ((size_t)row_bytes * (size_t)height * sizeof (png_byte))) == NULL)
|
||||||
|
{
|
||||||
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((row_pointers = (png_byte **)
|
if ((row_pointers = (png_byte **)
|
||||||
malloc (height * sizeof (png_bytep))) == NULL)
|
malloc ((size_t)height * sizeof (png_bytep))) == NULL)
|
||||||
{
|
{
|
||||||
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
|
||||||
free (png_pixels);
|
free (png_pixels);
|
||||||
@@ -408,7 +428,8 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
|
|||||||
if (raw)
|
if (raw)
|
||||||
fputc ((int) *pix_ptr++ , alpha_file);
|
fputc ((int) *pix_ptr++ , alpha_file);
|
||||||
else
|
else
|
||||||
if (bit_depth == 16){
|
if (bit_depth == 16)
|
||||||
|
{
|
||||||
dep_16 = (long) *pix_ptr++;
|
dep_16 = (long) *pix_ptr++;
|
||||||
fprintf (alpha_file, "%ld ", (dep_16 << 8) + (long) *pix_ptr++);
|
fprintf (alpha_file, "%ld ", (dep_16 << 8) + (long) *pix_ptr++);
|
||||||
}
|
}
|
||||||
@@ -432,6 +453,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
|
|||||||
if (png_pixels != (unsigned char*) NULL)
|
if (png_pixels != (unsigned char*) NULL)
|
||||||
free (png_pixels);
|
free (png_pixels);
|
||||||
|
|
||||||
|
PNGMINUS_UNUSED(raw); /* to quiet a Coverity defect */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
} /* end of source */
|
} /* end of source */
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
# -- full-color
|
# -- full-color
|
||||||
./png2pnm -noraw ../pngsuite/basn2c08.png basn2c08.ppm
|
./png2pnm -noraw ../pngsuite/basn2c08.png basn2c08.ppm
|
||||||
./png2pnm -noraw ../pngsuite/basn2c16.png basn2c16.ppm
|
./png2pnm -noraw ../pngsuite/basn2c16.png basn2c16.ppm
|
||||||
# -- palletted
|
# -- paletted
|
||||||
./png2pnm -noraw ../pngsuite/basn3p01.png basn3p01.ppm
|
./png2pnm -noraw ../pngsuite/basn3p01.png basn3p01.ppm
|
||||||
./png2pnm -noraw ../pngsuite/basn3p02.png basn3p02.ppm
|
./png2pnm -noraw ../pngsuite/basn3p02.png basn3p02.ppm
|
||||||
./png2pnm -noraw ../pngsuite/basn3p04.png basn3p04.ppm
|
./png2pnm -noraw ../pngsuite/basn3p04.png basn3p04.ppm
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
# -- full-color
|
# -- full-color
|
||||||
./png2pnm -raw ../pngsuite/basn2c08.png rawn2c08.ppm
|
./png2pnm -raw ../pngsuite/basn2c08.png rawn2c08.ppm
|
||||||
./png2pnm -raw ../pngsuite/basn2c16.png rawn2c16.ppm
|
./png2pnm -raw ../pngsuite/basn2c16.png rawn2c16.ppm
|
||||||
# -- palletted
|
# -- paletted
|
||||||
./png2pnm -raw ../pngsuite/basn3p01.png rawn3p01.ppm
|
./png2pnm -raw ../pngsuite/basn3p01.png rawn3p01.ppm
|
||||||
./png2pnm -raw ../pngsuite/basn3p02.png rawn3p02.ppm
|
./png2pnm -raw ../pngsuite/basn3p02.png rawn3p02.ppm
|
||||||
./png2pnm -raw ../pngsuite/basn3p04.png rawn3p04.ppm
|
./png2pnm -raw ../pngsuite/basn3p04.png rawn3p04.ppm
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ pnm2png.exe basn0g16.pgm basn0g16.png
|
|||||||
REM -- full-color
|
REM -- full-color
|
||||||
pnm2png.exe basn2c08.ppm basn2c08.png
|
pnm2png.exe basn2c08.ppm basn2c08.png
|
||||||
pnm2png.exe basn2c16.ppm basn2c16.png
|
pnm2png.exe basn2c16.ppm basn2c16.png
|
||||||
REM -- palletted
|
REM -- paletted
|
||||||
pnm2png.exe basn3p01.ppm basn3p01.png
|
pnm2png.exe basn3p01.ppm basn3p01.png
|
||||||
pnm2png.exe basn3p02.ppm basn3p02.png
|
pnm2png.exe basn3p02.ppm basn3p02.png
|
||||||
pnm2png.exe basn3p04.ppm basn3p04.png
|
pnm2png.exe basn3p04.ppm basn3p04.png
|
||||||
@@ -27,7 +27,7 @@ pnm2png.exe rawn0g16.pgm rawn0g16.png
|
|||||||
REM -- full-color
|
REM -- full-color
|
||||||
pnm2png.exe rawn2c08.ppm rawn2c08.png
|
pnm2png.exe rawn2c08.ppm rawn2c08.png
|
||||||
pnm2png.exe rawn2c16.ppm rawn2c16.png
|
pnm2png.exe rawn2c16.ppm rawn2c16.png
|
||||||
REM -- palletted
|
REM -- paletted
|
||||||
pnm2png.exe rawn3p01.ppm rawn3p01.png
|
pnm2png.exe rawn3p01.ppm rawn3p01.png
|
||||||
pnm2png.exe rawn3p02.ppm rawn3p02.png
|
pnm2png.exe rawn3p02.ppm rawn3p02.png
|
||||||
pnm2png.exe rawn3p04.ppm rawn3p04.png
|
pnm2png.exe rawn3p04.ppm rawn3p04.png
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
/*
|
/*
|
||||||
* pnm2png.c --- conversion from PBM/PGM/PPM-file to PNG-file
|
* pnm2png.c --- conversion from PBM/PGM/PPM-file to PNG-file
|
||||||
* copyright (C) 1999 by Willem van Schaik <willem@schaik.com>
|
* copyright (C) 1999,2015,2017 by Willem van Schaik <willem at schaik.com>
|
||||||
*
|
*
|
||||||
* version 1.0 - 1999.10.15 - First version.
|
* version 1.0 - 1999.10.15 - First version.
|
||||||
* version 1.1 - 2015.07.29 - Fixed leaks (Glenn Randers-Pehrson)
|
* version 1.1 - 2015.07.29 - Fixed leaks (Glenn Randers-Pehrson)
|
||||||
|
* version 1.2 - 2017.04.22 - Add buffer-size check
|
||||||
|
* 1.3 - 2017.08.24 - Fix potential overflow in buffer-size check
|
||||||
|
* (Glenn Randers-Pehrson)
|
||||||
|
* 1.4 - 2017.08.28 - Add PNGMINUS_UNUSED (Christian Hesse)
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Permission to use, copy, modify, and distribute this software and
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
* its documentation for any purpose and without fee is hereby granted,
|
||||||
@@ -47,6 +51,15 @@
|
|||||||
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef PNGMINUS_UNUSED
|
||||||
|
/* Unused formal parameter warnings are silenced using the following macro
|
||||||
|
* which is expected to have no bad effects on performance (optimizing
|
||||||
|
* compilers will probably remove it entirely).
|
||||||
|
*/
|
||||||
|
# define PNGMINUS_UNUSED(param) (void)param
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* function prototypes */
|
/* function prototypes */
|
||||||
|
|
||||||
int main (int argc, char *argv[]);
|
int main (int argc, char *argv[]);
|
||||||
@@ -370,11 +383,16 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
row_bytes = (width * channels * bit_depth + 7) / 8;
|
row_bytes = (width * channels * bit_depth + 7) / 8;
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
/* row_bytes is the width x number of channels x (bit-depth / 8) */
|
/* row_bytes is the width x number of channels x (bit-depth / 8) */
|
||||||
row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2);
|
row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2);
|
||||||
|
|
||||||
|
if ((row_bytes == 0 || (size_t)height > ((size_t)(-1))/(size_t)row_bytes))
|
||||||
|
{
|
||||||
|
/* too big */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
if ((png_pixels = (png_byte *)
|
if ((png_pixels = (png_byte *)
|
||||||
malloc (row_bytes * height * sizeof (png_byte))) == NULL)
|
malloc ((size_t)row_bytes * (size_t)height * sizeof (png_byte))) == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* read data from PNM file */
|
/* read data from PNM file */
|
||||||
@@ -383,7 +401,8 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
for (row = 0; row < (int) height; row++)
|
for (row = 0; row < (int) height; row++)
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
if (packed_bitmap) {
|
if (packed_bitmap)
|
||||||
|
{
|
||||||
for (i = 0; i < (int) row_bytes; i++)
|
for (i = 0; i < (int) row_bytes; i++)
|
||||||
/* png supports this format natively so no conversion is needed */
|
/* png supports this format natively so no conversion is needed */
|
||||||
*pix_ptr++ = get_data (pnm_file, 8);
|
*pix_ptr++ = get_data (pnm_file, 8);
|
||||||
@@ -504,6 +523,8 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
if (png_pixels != (unsigned char*) NULL)
|
if (png_pixels != (unsigned char*) NULL)
|
||||||
free (png_pixels);
|
free (png_pixels);
|
||||||
|
|
||||||
|
PNGMINUS_UNUSED(raw); /* Quiet a Coverity defect */
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} /* end of pnm2png */
|
} /* end of pnm2png */
|
||||||
|
|
||||||
@@ -520,7 +541,8 @@ void get_token(FILE *pnm_file, char *token)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
ret = fgetc(pnm_file);
|
ret = fgetc(pnm_file);
|
||||||
if (ret == '#') {
|
if (ret == '#')
|
||||||
|
{
|
||||||
/* the rest of this line is a comment */
|
/* the rest of this line is a comment */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
# -- full-color
|
# -- full-color
|
||||||
./pnm2png basn2c08.ppm basn2c08.png
|
./pnm2png basn2c08.ppm basn2c08.png
|
||||||
./pnm2png basn2c16.ppm basn2c16.png
|
./pnm2png basn2c16.ppm basn2c16.png
|
||||||
# -- palletted
|
# -- paletted
|
||||||
./pnm2png basn3p01.ppm basn3p01.png
|
./pnm2png basn3p01.ppm basn3p01.png
|
||||||
./pnm2png basn3p02.ppm basn3p02.png
|
./pnm2png basn3p02.ppm basn3p02.png
|
||||||
./pnm2png basn3p04.ppm basn3p04.png
|
./pnm2png basn3p04.ppm basn3p04.png
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
# -- full-color
|
# -- full-color
|
||||||
./pnm2png rawn2c08.ppm rawn2c08.png
|
./pnm2png rawn2c08.ppm rawn2c08.png
|
||||||
./pnm2png rawn2c16.ppm rawn2c16.png
|
./pnm2png rawn2c16.ppm rawn2c16.png
|
||||||
# -- palletted
|
# -- paletted
|
||||||
./pnm2png rawn3p01.ppm rawn3p01.png
|
./pnm2png rawn3p01.ppm rawn3p01.png
|
||||||
./pnm2png rawn3p02.ppm rawn3p02.png
|
./pnm2png rawn3p02.ppm rawn3p02.png
|
||||||
./pnm2png rawn3p04.ppm rawn3p04.png
|
./pnm2png rawn3p04.ppm rawn3p04.png
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ chunks, etc.
|
|||||||
The "ft*.png" images are "free/libre" replacements for the transparent
|
The "ft*.png" images are "free/libre" replacements for the transparent
|
||||||
corresponding t*.png images in the PngSuite.
|
corresponding t*.png images in the PngSuite.
|
||||||
|
|
||||||
|
The "i*.png" images are the same images, but interlaced.
|
||||||
|
|
||||||
The images in this directory represent the basic PNG color-types:
|
The images in this directory represent the basic PNG color-types:
|
||||||
grayscale (1-16 bit deep), full color (8 or 16 bit), paletted
|
grayscale (1-16 bit deep), full color (8 or 16 bit), paletted
|
||||||
(1-8 bit) and grayscale or color images with alpha channel. You
|
(1-8 bit) and grayscale or color images with alpha channel. You
|
||||||
@@ -101,5 +103,5 @@ Testing basn6a16.png: PASS (1072 zero samples)
|
|||||||
libpng passes test
|
libpng passes test
|
||||||
|
|
||||||
Willem van Schaik
|
Willem van Schaik
|
||||||
<willem@schaik.com>
|
<willem at schaik.com>
|
||||||
October 1999
|
October 1999
|
||||||
|
|||||||
9
contrib/pngsuite/bad_interlace_conversions.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
basn0g01.png
|
||||||
|
basn0g02.png
|
||||||
|
basn0g04.png
|
||||||
|
basn3p01.png
|
||||||
|
basn3p02.png
|
||||||
|
basn3p04.png
|
||||||
|
ftbbn0g01.png
|
||||||
|
ftbbn0g02.png
|
||||||
|
ftbbn0g04.png
|
||||||
BIN
contrib/pngsuite/ibasn0g08.png
Normal file
|
After Width: | Height: | Size: 237 B |
BIN
contrib/pngsuite/ibasn0g16.png
Normal file
|
After Width: | Height: | Size: 274 B |
BIN
contrib/pngsuite/ibasn2c08.png
Normal file
|
After Width: | Height: | Size: 299 B |
BIN
contrib/pngsuite/ibasn2c16.png
Normal file
|
After Width: | Height: | Size: 558 B |
BIN
contrib/pngsuite/ibasn3p08.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
contrib/pngsuite/ibasn4a08.png
Normal file
|
After Width: | Height: | Size: 198 B |
BIN
contrib/pngsuite/ibasn4a16.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
contrib/pngsuite/ibasn6a08.png
Normal file
|
After Width: | Height: | Size: 339 B |
BIN
contrib/pngsuite/ibasn6a16.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
contrib/pngsuite/iftbbn2c16.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
contrib/pngsuite/iftbbn3p08.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
contrib/pngsuite/iftbgn2c16.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
contrib/pngsuite/iftbgn3p08.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
contrib/pngsuite/iftbrn2c08.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
contrib/pngsuite/iftbwn0g16.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
contrib/pngsuite/iftbwn3p08.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
contrib/pngsuite/iftbyn3p08.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
contrib/pngsuite/iftp0n0g08.png
Normal file
|
After Width: | Height: | Size: 847 B |
BIN
contrib/pngsuite/iftp0n2c08.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
contrib/pngsuite/iftp0n3p08.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
contrib/pngsuite/iftp1n3p08.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
2
contrib/pngsuite/interlaced/README
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
These images fail the "pngimage-quick" and "pngimage-full" tests.
|
||||||
BIN
contrib/pngsuite/interlaced/ibasn0g01.png
Normal file
|
After Width: | Height: | Size: 201 B |
BIN
contrib/pngsuite/interlaced/ibasn0g02.png
Normal file
|
After Width: | Height: | Size: 138 B |
BIN
contrib/pngsuite/interlaced/ibasn0g04.png
Normal file
|
After Width: | Height: | Size: 231 B |
BIN
contrib/pngsuite/interlaced/ibasn3p01.png
Normal file
|
After Width: | Height: | Size: 116 B |
BIN
contrib/pngsuite/interlaced/ibasn3p02.png
Normal file
|
After Width: | Height: | Size: 163 B |
BIN
contrib/pngsuite/interlaced/ibasn3p04.png
Normal file
|
After Width: | Height: | Size: 288 B |
BIN
contrib/pngsuite/interlaced/iftbbn0g01.png
Normal file
|
After Width: | Height: | Size: 214 B |
BIN
contrib/pngsuite/interlaced/iftbbn0g02.png
Normal file
|
After Width: | Height: | Size: 211 B |
BIN
contrib/pngsuite/interlaced/iftbbn0g04.png
Normal file
|
After Width: | Height: | Size: 489 B |
81
contrib/powerpc-vsx/README
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
OPERATING SYSTEM SPECIFIC POWERPC DETECTION
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
Detection of the ability to execute POWERPC on processor requires
|
||||||
|
operating system support. (The information is not available in user mode.)
|
||||||
|
|
||||||
|
Currently only this feature is supported only for linux platform.
|
||||||
|
|
||||||
|
HOW TO USE THIS
|
||||||
|
---------------
|
||||||
|
|
||||||
|
This directory contains C code fragments that can be included in powerpc/powerpc_init.c
|
||||||
|
by setting the macro PNG_POWERPC_VSX_FILE to the file name in "" or <> at build
|
||||||
|
time. This setting is not recorded in pnglibconf.h and can be changed simply by
|
||||||
|
rebuilding arm/arm_init.o with the required macro definition.
|
||||||
|
|
||||||
|
For any of this code to be used the POWERPC code must be enabled and run time
|
||||||
|
checks must be supported. I.e.:
|
||||||
|
|
||||||
|
#if PNG_POWERPC_VSX_OPT > 0
|
||||||
|
#ifdef PNG_POWERPC_VSX_CHECK_SUPPORTED
|
||||||
|
|
||||||
|
This is done in a 'configure' build by passing configure the argument:
|
||||||
|
|
||||||
|
--enable-powerpc-vsx=check
|
||||||
|
|
||||||
|
FILE FORMAT
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Each file documents its testing status as of the last time it was tested (which
|
||||||
|
may have been a long time ago):
|
||||||
|
|
||||||
|
STATUS: one of:
|
||||||
|
SUPPORTED: This indicates that the file is included in the regularly
|
||||||
|
performed test builds and bugs are fixed when discovered.
|
||||||
|
COMPILED: This indicates that the code did compile at least once. See the
|
||||||
|
more detailed description for the extent to which the result was
|
||||||
|
successful.
|
||||||
|
TESTED: This means the code was fully compiled into the libpng test programs
|
||||||
|
and these were run at least once.
|
||||||
|
|
||||||
|
BUG REPORTS: an email address to which to send reports of problems
|
||||||
|
|
||||||
|
The file is a fragment of C code. It should not define any 'extern' symbols;
|
||||||
|
everything should be static. It must define the function:
|
||||||
|
|
||||||
|
static int png_have_vsx(png_structp png_ptr);
|
||||||
|
|
||||||
|
That function must return 1 if POWERPC_VSX instructions are supported, 0 if not.
|
||||||
|
It must not execute png_error unless it detects a bug. A png_error will prevent
|
||||||
|
the reading of the PNG and in the future, writing too.
|
||||||
|
|
||||||
|
BUG REPORTS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
If you mail a bug report for any file that is not SUPPORTED there may only be
|
||||||
|
limited response. Consider fixing it and sending a patch to fix the problem -
|
||||||
|
this is more likely to result in action.
|
||||||
|
|
||||||
|
CONTRIBUTIONS
|
||||||
|
-------------
|
||||||
|
|
||||||
|
You may send contributions of new implementations to
|
||||||
|
png-mng-implement@sourceforge.net. Please write code in strict C90 C where
|
||||||
|
possible. Obviously OS dependencies are to be expected. If you submit code you
|
||||||
|
must have the authors permission and it must have a license that is acceptable
|
||||||
|
to the current maintainer; in particular that license must permit modification
|
||||||
|
and redistribution.
|
||||||
|
|
||||||
|
Please try to make the contribution a single file and give the file a clear and
|
||||||
|
unambiguous name that identifies the target OS. If multiple files really are
|
||||||
|
required put them all in a sub-directory.
|
||||||
|
|
||||||
|
You must also be prepared to handle bug reports from users of the code, either
|
||||||
|
by joining the png-mng-implement mailing list or by providing an email for the
|
||||||
|
"BUG REPORTS" entry or both. Please make sure that the header of the file
|
||||||
|
contains the STATUS and BUG REPORTS fields as above.
|
||||||
|
|
||||||
|
Please list the OS requirements as precisely as possible. Ideally you should
|
||||||
|
also list the environment in which the code has been tested and certainly list
|
||||||
|
any environments where you suspect it might not work.
|
||||||
57
contrib/powerpc-vsx/linux.c
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/* contrib/powerpc-vsx/linux.c
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017 Glenn Randers-Pehrson
|
||||||
|
* Written by Vadim Barkov, 2017.
|
||||||
|
* Last changed in libpng 1.6.29 [March 16, 2017]
|
||||||
|
*
|
||||||
|
* This code is released under the libpng license.
|
||||||
|
* For conditions of distribution and use, see the disclaimer
|
||||||
|
* and license in png.h
|
||||||
|
*
|
||||||
|
* STATUS: TESTED
|
||||||
|
* BUG REPORTS: png-mng-implement@sourceforge.net
|
||||||
|
*
|
||||||
|
* png_have_vsx implemented for Linux by reading the widely available
|
||||||
|
* pseudo-file /proc/cpuinfo.
|
||||||
|
*
|
||||||
|
* This code is strict ANSI-C and is probably moderately portable; it does
|
||||||
|
* however use <stdio.h> and it assumes that /proc/cpuinfo is never localized.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
#ifndef MAXLINE
|
||||||
|
# define MAXLINE 1024
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int
|
||||||
|
png_have_vsx(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
const char *string = "altivec supported";
|
||||||
|
char input[MAXLINE];
|
||||||
|
char *token = NULL;
|
||||||
|
|
||||||
|
PNG_UNUSED(png_ptr)
|
||||||
|
|
||||||
|
f = fopen("/proc/cpuinfo", "r");
|
||||||
|
if (f != NULL)
|
||||||
|
{
|
||||||
|
memset(input,0,MAXLINE);
|
||||||
|
while(fgets(input,MAXLINE,f) != NULL)
|
||||||
|
{
|
||||||
|
token = strstr(input,string);
|
||||||
|
if(token != NULL)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
|
else
|
||||||
|
png_warning(png_ptr, "/proc/cpuinfo open failed");
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
36
contrib/powerpc-vsx/linux_aux.c
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/* contrib/powerpc-vsx/linux_aux.c
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017 Glenn Randers-Pehrson
|
||||||
|
* Written by Vadim Barkov, 2017.
|
||||||
|
* Last changed in libpng 1.6.29 [March 16, 2017]
|
||||||
|
*
|
||||||
|
* This code is released under the libpng license.
|
||||||
|
* For conditions of distribution and use, see the disclaimer
|
||||||
|
* and license in png.h
|
||||||
|
*
|
||||||
|
* STATUS: TESTED
|
||||||
|
* BUG REPORTS: png-mng-implement@sourceforge.net
|
||||||
|
*
|
||||||
|
* png_have_vsx implemented for Linux by using the auxiliary vector mechanism.
|
||||||
|
*
|
||||||
|
* This code is strict ANSI-C and is probably moderately portable; it does
|
||||||
|
* however use <stdio.h> and it assumes that /proc/cpuinfo is never localized.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sys/auxv.h"
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
static int
|
||||||
|
png_have_vsx(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
|
||||||
|
const unsigned long auxv = getauxval( AT_HWCAP );
|
||||||
|
|
||||||
|
PNG_UNUSED(png_ptr)
|
||||||
|
|
||||||
|
if(auxv & (PPC_FEATURE_HAS_ALTIVEC|PPC_FEATURE_HAS_VSX ))
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
BIN
contrib/testpngs/crashers/bad_iCCP.png
Normal file
|
After Width: | Height: | Size: 321 B |
BIN
contrib/testpngs/crashers/badadler.png
Normal file
|
After Width: | Height: | Size: 67 B |
BIN
contrib/testpngs/crashers/badcrc.png
Normal file
|
After Width: | Height: | Size: 67 B |
BIN
contrib/testpngs/crashers/empty_ancillary_chunks.png
Normal file
|
After Width: | Height: | Size: 730 B |
BIN
contrib/testpngs/crashers/huge_IDAT.png
Normal file
|
After Width: | Height: | Size: 79 B |