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