Home | History | Annotate | Download | only in owatcom
      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 #
     11 DELETE=rm -f
     12 ECHO=echo
     13 COPY=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:
     18 CFLAGS=
     19 CC=wcl386
     20 CPP=$(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
     26 AWK=$(%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
     39 DFNFLAGS = $(DEFS) $(CPPFLAGS) $(CFLAGS)
     40 
     41 pnglibconf.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
     55 This is a locally configurable build of libpng.lib; for configuration
     56 instructions consult and edit projects/openwatcom/pngconfig.dfa
     57 <<
     58  $(DELETE) dfn.c dfn1.out dfn2.out
     59 
     60 pnglibconf.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 #
     81 pnglibconf.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
     94 This is the default configuration of libpng.lib, if you wish to
     95 change the configuration please consult the instructions in
     96 projects/owatcom/pngconfig.dfa.
     97 <<
     98 
     99 !endif
    100 
    101 # Make the default files
    102 defaults: .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 $#     http://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 
    152 clean:: .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 
    159 distclean:: clean .symbolic
    160  $(DELETE) zlib.inf awk.inf config.inf pngconfig.dfa
    161