1ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# This is an OpenWatcom make file which builds pnglibconf.h - the libpng 2ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# configuration header. You can ignore this file if you don't need to 3ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# configure libpng; a default configuration will be built. 4ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 5ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# For more information build libpng.wpj under the IDE and then read the 6ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# generated files: 7ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 8ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# config.inf: Basic configuration information for a standard build. 9ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# pngconfig.dfa: Advanced configuration for non-standard libpng builds. 10ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 11ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikDELETE=rm -f 12ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikECHO=echo 13ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikCOPY=copy 14ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 15ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# If your configuration needs to test compiler flags when building 16ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# pnglibconf.h you may need to override the following on the wmake command 17ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# line: 18ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikCFLAGS= 19ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikCC=wcl386 20ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikCPP=$(CC) -pw0 21ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 22ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Read awk from the environment if set, else it can be set on the command 23ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# line (the default approach is to set the %awk% environment variable in the 24ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# IDE libpng.wpj 'before' rule - this setting is local.) 25ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik!ifdef %awk 26ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikAWK=$(%awk) 27ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik!endif 28ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 29ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# pnglibconf.h must exist in the source directory, this is the final rule 30ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# which copies the local built version (and this is the default target for 31ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# this makefile.) 32ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik..\..\pnglibconf.h: pnglibconf.h 33ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(COPY) pnglibconf.h $@ 34ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 35ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik!ifdef AWK 36ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# CPPFLAGS should contain the options to control the result, 37ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# but DEFS and CFLAGS are also supported here, override 38ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# as appropriate 39ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikDFNFLAGS = $(DEFS) $(CPPFLAGS) $(CFLAGS) 40ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 41ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpnglibconf.h: pnglibconf.dfn 42ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) $@ dfn.c dfn1.out dfn2.out 43ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(ECHO) $#include "pnglibconf.dfn" >dfn.c 44ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(CPP) $(DFNFLAGS) dfn.c >dfn1.out 45ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(AWK) -f << dfn1.out >dfn2.out 46ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/^.*PNG_DEFN_MAGIC-.*-PNG_DEFN_END.*$$/{ 47ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik sub(/^.*PNG_DEFN_MAGIC-/, "") 48ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik sub(/ *-PNG_DEFN_END.*$$/, "") 49ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik gsub(/ *@@@ */, "") 50ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik print 51ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik} 52ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik<< 53ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(COPY) dfn2.out $@ 54ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @type << >pngconfig.inf 55ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikThis is a locally configurable build of libpng.lib; for configuration 56ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikinstructions consult and edit projects/openwatcom/pngconfig.dfa 57ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik<< 58ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) dfn.c dfn1.out dfn2.out 59ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 60ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpnglibconf.dfn: ..\..\scripts\pnglibconf.dfa ..\..\scripts\options.awk pngconfig.dfa ..\..\pngconf.h 61ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) $@ dfn1.out dfn2.out 62ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(AWK) -f ..\..\scripts\options.awk out=dfn1.out version=search ..\..\pngconf.h ..\..\scripts\pnglibconf.dfa pngconfig.dfa $(DFA_XTRA) 1>&2 63ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(AWK) -f ..\..\scripts\options.awk out=dfn2.out dfn1.out 1>&2 64ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(COPY) dfn2.out $@ 65ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) dfn1.out dfn2.out 66ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 67ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik!else 68ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# The following lines are used to copy scripts\pnglibconf.h.prebuilt and make 69ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# the required change to the calling convention. 70ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 71ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# By default libpng is built to use the __cdecl calling convention on 72ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Windows. This gives compatibility with MSVC and GCC. Unfortunately it 73ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# does not work with OpenWatcom because OpenWatcom implements longjmp using 74ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# the __watcall convention (compared with both MSVC and GCC which use __cdecl 75ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# for library functions.) 76ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 77ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Thus the default must be changed to build on OpenWatcom and, once changed, 78ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# the result will not be compatible with applications built using other 79ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# compilers (in fact attempts to build will fail at compile time.) 80ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 81ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpnglibconf.h: ..\..\scripts\pnglibconf.h.prebuilt .existsonly 82ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) . 83ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) . 84ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) $$(AWK) NOT AVAILABLE: COPYING scripts\pnglibconf.h.prebuilt 85ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) . 86ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) . 87ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik vi -q -k ":1,$$s/PNG_API_RULE 0$$/PNG_API_RULE 2/\n:w! $@\n:q!\n" ..\..\scripts\pnglibconf.h.prebuilt 88ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) . 89ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) . 90ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) YOU HAVE A DEFAULT CONFIGURATION BECAUSE YOU DO NOT HAVE AWK! 91ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) . 92ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(ECHO) . 93ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @type << >pngconfig.inf 94ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikThis is the default configuration of libpng.lib, if you wish to 95ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikchange the configuration please consult the instructions in 96ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikprojects/owatcom/pngconfig.dfa. 97ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik<< 98ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 99ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik!endif 100ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 101ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Make the default files 102ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikdefaults: .symbolic 103ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(COPY) << config.inf 104ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# The libpng project is incompletely configured. To complete configuration 105ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# please complete the following steps: 106ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 107ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 1) Edit the 'before' rule of libpng.wpj (from the IDE) to define the 108ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# locations of the zlib include file zlib.h and the built zlib library, 109ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# zlib.lib. 110ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 111ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 2) If you want to change libpng to a non-standard configuration also 112ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# change the definition of 'awk' in the before rule to the name of your 113ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# awk command. For more instructions on configuration read 114ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# pngconfig.dfa. 115ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 116ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 3) Delete this file (config.inf). 117ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik<< 118ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik @$(COPY) << pngconfig.dfa 119ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# pngconfig.dfa: this file contains configuration options for libpng. 120ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# If emtpy the standard configuration will be built. For this file to be 121ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# used a working version of the program 'awk' is required and the program 122ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# must be identified in the 'before' rule of the project. 123ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 124ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# If you don't already have 'awk', or the version of awk you have seems not 125ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# to work, download Brian Kernighan's awk (Brian Kernighan is the author of 126ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# awk.) You can find source code and a built executable (called awk95.exe) 127ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# here: 128ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 129ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# http://www.cs.princeton.edu/~bwk/btl.mirror/ 130ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 131ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# The executable works just fine. 132ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 133ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# If build issues errors after a change to pngconfig.dfa you have entered 134ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# inconsistent feature requests, or even malformed requests, in 135ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# pngconfig.dfa. The error messages from awk should be comprehensible, but 136ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# if not simply go back to the start (nothing but comments in this file) and 137ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# enter configuration lines one by one until one produces an error. (Or, of 138ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# course, do the standard binary chop.) 139ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 140ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# You need to rebuild everything after a change to pnglibconf.dfa - i.e. you 141ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# must do Actions/Mark All Targets for Remake. This is because the compiler 142ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# generated dependency information (as of OpenWatcom 1.9) does not record the 143ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# dependency on pnglibconf.h correctly. 144ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 145ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# If awk isn't set then this file is bypassed. If you just want the standard 146ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# configuration it is automatically produced from the distributed version 147ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# (scripts\pnglibconf.h.prebuilt) by editting PNG_API_RULE to 2 (to force use 148ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# of the OpenWatcom library calling convention.) 149ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik$# 150ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik<< 151ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 152ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikclean:: .symbolic 153ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) ..\..\pnglibconf.h pnglibconf.* dfn.c *.out pngconfig.inf 154ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) *.obj *.mbr *.sym *.err *.pch libpng.mk 155ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) libpng.lib libpng.lbr libpng.lb1 libpng.cbr libpng.mk1 156ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) pngtest.exe pngtest.map pngtest.lk1 pngtest.mk1 157ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) pngvalid.exe pngvalid.map pngvalid.lk1 pngvalid.mk1 158ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 159ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikdistclean:: clean .symbolic 160ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik $(DELETE) zlib.inf awk.inf config.inf pngconfig.dfa 161