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