1ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#!/bin/sh
2ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#
3ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Copyright (c) 2013 John Cunningham Bowler
4ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#
5ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Last changed in libpng 1.6.0 [February 14, 2013]
6ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#
7ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# This code is released under the libpng license.
8ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# For conditions of distribution and use, see the disclaimer
9ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# and license in png.h
10ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#
11ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Generate a set of PNG test images.  The images are generated in a
12ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# sub-directory called 'tests' by default, however a command line argument will
13ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# change that name.  The generation requires a built version of makepng in the
14ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# current directory.
15ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#
16ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikusage(){
17ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   exec >&2
18ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "$0 [<directory>]"
19ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo '  Generate a set of PNG test files in "directory" ("tests" by default)'
20ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   exit 1
21ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
22ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
23ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikmp="$PWD/makepng"
24ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktest -x "$mp" || {
25ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   exec >&2
26ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "$0: the 'makepng' program must exist"
27ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "  in the directory within which this program:"
28ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "    $mp"
29ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "  is executed"
30ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   usage
31ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
32ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
33ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Just one argument: the directory
34ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktestdir="tests"
35ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktest $# -gt 1 && {
36ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   testdir="$1"
37ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   shift
38ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
39ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktest $# -eq 0 || usage
40ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
41ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Take care not to clobber something
42ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikif test -e "$testdir"
43ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikthen
44ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   test -d "$testdir" || usage
45ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikelse
46ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   # mkdir -p isn't portable, so do the following
47ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   mkdir "$testdir" 2>/dev/null || mkdir -p "$testdir" || usage
48ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikfi
49ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
50ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# This fails in a very satisfactory way if it's not accessible
51ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikcd "$testdir"
52ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik:>"test$$.png" || {
53ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   exec >&2
54ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "$testdir: directory not writable"
55ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   usage
56ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
57ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikrm "test$$.png" || {
58ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   exec >&2
59ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "$testdir: you have create but not write privileges here."
60ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "  This is unexpected.  You have a spurion; "'"'"test$$.png"'"'"."
61ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   echo "  You need to remove this yourself.  Try a different directory."
62ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   exit 1
63ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
64ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
65ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Now call makepng ($mp) to create every file we can think of with a
66ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# reasonable name
67ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikdoit(){
68ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   for gamma in "" --sRGB --linear --1.8
69ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   do
70ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      case "$gamma" in
71ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         "")
72ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            gname=;;
73ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         --sRGB)
74ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            gname="-srgb";;
75ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         --linear)
76ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            gname="-lin";;
77ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         --1.8)
78ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            gname="-18";;
79ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *)
80ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            gname="-$gamma";;
81ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      esac
82ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      "$mp" $gamma "$1" "$2" "test-$1-$2$gname.png"
83ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   done
84ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
85ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#
86ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikfor ct in gray palette
87ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikdo
88ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   for bd in 1 2 4 8
89ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   do
90ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      doit "$ct" "$bd"
91ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   done
92ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikdone
93ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#
94ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikdoit "gray" "16"
95ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#
96ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikfor ct in gray-alpha rgb rgb-alpha
97ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikdo
98ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   for bd in 8 16
99ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   do
100ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      doit "$ct" "$bd"
101ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   done
102ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikdone
103