-libpng.sym: png.h pngconf.h
- rm -f $@ $@.new
- $(CPP) @LIBPNG_DEFINES@ $(CPPFLAGS) -DPNG_BUILDSYMS $(srcdir)/png.h | \
- $(SED) -n -e \
- 's|^.*PNG_FUNCTION_EXPORT[ ]*\([$(AN)]*\).*$$|$(SYMBOL_PREFIX)\1|p' \
- -e 's|^.*PNG_DATA_EXPORT[ ]*\([$(AN)]*\).*$$|$(SYMBOL_PREFIX)\1|p' \
- >$@.new
- mv $@.new $@
-
-libpng.vers: libpng.sym
- rm -f $@ $@.new
- echo PNG@PNGLIB_MAJOR@@PNGLIB_MINOR@_0 '{global:' > $@.new
- $(SED) s/$$/\;/ libpng.sym >> $@.new
- echo 'local: *; };' >> $@.new
- mv $@.new $@
-
-test: check
-
-# install the .../include headers as links to the new ones
-install-data-hook:
- cd $(DESTDIR)$(includedir); rm -f png.h pngconf.h
- cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/png.h png.h
- cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/pngconf.h pngconf.h
- cd $(DESTDIR)$(pkgconfigdir); rm -f libpng.pc
- cd $(DESTDIR)$(pkgconfigdir); $(LN_S) $(PNGLIB_BASENAME).pc libpng.pc
-
-# do evil things to libpng to cause libpng12 to be used
-install-exec-hook:
- cd $(DESTDIR)$(bindir); rm -f libpng-config
- cd $(DESTDIR)$(bindir); $(LN_S) $(PNGLIB_BASENAME)-config libpng-config
- @set -x;\
- cd $(DESTDIR)$(libdir);\
- for ext in a la so sl dylib; do\
- rm -f libpng.$$ext;\
- if test -f $(PNGLIB_BASENAME).$$ext; then\
- $(LN_S) $(PNGLIB_BASENAME).$$ext libpng.$$ext;\
- fi;\
+scripts/sym.out scripts/vers.out: png.h pngconf.h pnglibconf.h
+scripts/prefix.out: png.h pngconf.h pnglibconf.out
+scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt
+scripts/intprefix.out: pnglibconf.h
+
+libpng.sym: scripts/sym.out
+ rm -f $@
+ cp $? $@
+libpng.vers: scripts/vers.out
+ rm -f $@
+ cp $? $@
+
+if DO_PNG_PREFIX
+# Rename functions in scripts/prefix.out with a PNG_PREFIX prefix.
+# Rename macros in scripts/macro.lst from PNG_PREFIXpng_ to PNG_ (the actual
+# implementation of the macro).
+pnglibconf.h: pnglibconf.out scripts/prefix.out scripts/macro.lst
+ rm -f $@
+ $(AWK) 's==0 && NR>1{print prev}\
+ s==0{prev=$$0}\
+ s==1{print "#define", $$1, "@PNG_PREFIX@" $$1}\
+ s==2{print "#define @PNG_PREFIX@png_" $$1, "PNG_" $$1}\
+ END{print prev}' s=0 pnglibconf.out s=1 scripts/prefix.out\
+ s=2 ${srcdir}/scripts/macro.lst >pnglibconf.tf8
+ mv pnglibconf.tf8 $@
+
+pngprefix.h: scripts/intprefix.out
+ rm -f pngprefix.tf1
+ $(AWK) '{print "#define", $$1, "@PNG_PREFIX@" $$1}' $? >pngprefix.tf1
+ mv pngprefix.tf1 $@
+else
+pnglibconf.h: pnglibconf.out
+ rm -f $@
+ cp $? $@
+
+pngprefix.h: # is empty
+ :>$@
+endif
+
+$(srcdir)/scripts/pnglibconf.h.prebuilt:
+ @echo "Attempting to build $@" >&2
+ @echo "This is a machine generated file, but if you want to make" >&2
+ @echo "a new one simply make 'scripts/pnglibconf.out', copy that" >&2
+ @echo "AND set PNG_ZLIB_VERNUM to 0 (you MUST do this)" >&2
+ @exit 1
+
+# The following is necessary to ensure that the local pnglibconf.h is used, not
+# an installed one (this can happen immediately after on a clean system if
+# 'make test' is the first thing the user does.) Only files which include
+# one of the png source files (typically png.h or pngpriv.h) need to be listed
+# here:
+pngtest.o: pnglibconf.h
+
+contrib/libtests/makepng.o: pnglibconf.h
+contrib/libtests/pngstest.o: pnglibconf.h
+contrib/libtests/pngunknown.o: pnglibconf.h
+contrib/libtests/pngimage.o: pnglibconf.h
+contrib/libtests/pngvalid.o: pnglibconf.h
+contrib/libtests/readpng.o: pnglibconf.h
+contrib/libtests/tarith.o: pnglibconf.h
+contrib/libtests/timepng.o: pnglibconf.h
+
+contrib/tools/makesRGB.o: pnglibconf.h
+contrib/tools/pngfix.o: pnglibconf.h
+contrib/tools/pngcp.o: pnglibconf.h
+
+# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
+# be built with PNG_USE_READ_MACROS; this prevents the read macros from
+# interfering with the symbol file format.
+SYMBOL_CFLAGS = -DPNGLIB_LIBNAME='PNG@PNGLIB_MAJOR@@PNGLIB_MINOR@_0'\
+ -DPNGLIB_VERSION='@PNGLIB_VERSION@'\
+ -DSYMBOL_PREFIX='$(SYMBOL_PREFIX)'\
+ -DPNG_NO_USE_READ_MACROS -DPNG_BUILDING_SYMBOL_TABLE
+
+if DO_PNG_PREFIX
+SYMBOL_CFLAGS += -DPNG_PREFIX='@PNG_PREFIX@'
+endif
+
+.c.out:
+ rm -f $@ $*.tf[12]
+ test -d scripts || mkdir scripts || test -d scripts
+ $(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\
+ $(CPPFLAGS) $(SYMBOL_CFLAGS) $< > $*.tf1
+ $(AWK) -f "${srcdir}/scripts/dfn.awk" out="$*.tf2" $*.tf1 1>&2
+ rm -f $*.tf1
+ mv $*.tf2 $@
+
+# The .c file for pnglibconf.h is machine generated
+pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA)
+ rm -f $@ $*.tf[45]
+ $(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\
+ ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
+ ${srcdir}/pngusr.dfa $(DFA_XTRA) 1>&2
+ $(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf5 $*.tf4 1>&2
+ rm $*.tf4
+ mv $*.tf5 $@
+
+# Symbol checks (.def and .out files should match)
+scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.out
+
+.out.chk:
+ rm -f $@ $*.new
+ $(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\
+ of="$*.new" $< >&2
+ mv $*.new $@
+
+# used on demand to regenerate the standard header, CPPFLAGS should
+# be empty - no non-standard defines
+scripts/pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
+ rm -f $@ pnglibconf.tf[67]
+ test -z "$(CPPFLAGS)"
+ echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
+ $(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf6\
+ logunsupported=1 version=search ${srcdir}/pngconf.h -\
+ ${srcdir}/scripts/pnglibconf.dfa 1>&2
+ $(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf7\
+ pnglibconf.tf6 1>&2
+ rm pnglibconf.tf6
+ mv pnglibconf.tf7 $@
+
+$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h \
+ pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h pngprefix.h
+
+test: check-am
+
+# Extra checks
+check: scripts/symbols.chk
+
+# Don't distribute the generated script files
+dist-hook:
+ cd '$(top_distdir)'; rm -f $(SCRIPT_CLEANFILES)
+
+# Make links between installed files with release-specific names and the generic
+# file names. If this install rule is run the generic names will be deleted and
+# recreated - this has obvious issues for systems with multiple installations.
+
+install-header-links:
+ @set -ex; cd '$(DESTDIR)$(includedir)'; for f in $(HEADERS); do \
+ rm -f "$$f"; $(LN_S) "$(PNGLIB_BASENAME)/$$f" "$$f"; done
+
+uninstall-header-links:
+ cd '$(DESTDIR)$(includedir)'; rm -f $(HEADERS)
+
+install-libpng-pc:
+ @set -ex; cd '$(DESTDIR)$(pkgconfigdir)'; rm -f libpng.pc; \
+ $(LN_S) '$(PNGLIB_BASENAME).pc' libpng.pc
+
+uninstall-libpng-pc:
+ rm -f '$(DESTDIR)$(pkgconfigdir)/libpng.pc'
+
+# EXT_LIST is a list of the possibly library directory extensions, this exists
+# because we can't find a good way of discovering the file extensions that are
+# actually installed on a given system, so instead we check for every extension
+# we have seen.
+
+EXT_LIST = a dll.a so so.@PNGLIB_MAJOR@@PNGLIB_MINOR@.@PNGLIB_RELEASE@ la sl dylib
+
+install-library-links:
+ @set -x; cd '$(DESTDIR)$(libdir)';\
+ for ext in $(EXT_LIST); do\
+ rm -f "libpng.$$ext";\
+ if test -f "$(PNGLIB_BASENAME).$$ext"; then\
+ $(LN_S) "$(PNGLIB_BASENAME).$$ext" "libpng.$$ext" || exit 1;\
+ fi;\