Home | History | Annotate | Download | only in libpng
      1 # Makefile.am:
      2 #   Source file for Makefile.in (and hence Makefile)
      3 #
      4 
      5 PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@
      6 
      7 ACLOCAL_AMFLAGS = -I scripts
      8 
      9 # test programs - run on make check, make distcheck
     10 check_PROGRAMS= pngtest pngunknown pngstest pngvalid pngimage
     11 
     12 # Utilities - installed
     13 bin_PROGRAMS= pngfix png-fix-itxt
     14 
     15 # This ensures that pnglibconf.h gets built at the start of 'make all' or
     16 # 'make check', but it does not add dependencies to the individual programs,
     17 # this is done below.
     18 #
     19 # IMPORTANT: always add the object modules of new programs to the list below
     20 # because otherwise the sequence 'configure; make new-program' will *sometimes*
     21 # result in the installed (system) pnglibconf.h being used and the result is
     22 # always wrong and always very confusing.
     23 BUILT_SOURCES = pnglibconf.h
     24 
     25 pngtest_SOURCES = pngtest.c
     26 pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
     27 
     28 pngvalid_SOURCES = contrib/libtests/pngvalid.c
     29 pngvalid_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
     30 
     31 pngstest_SOURCES = contrib/libtests/pngstest.c
     32 pngstest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
     33 
     34 pngunknown_SOURCES = contrib/libtests/pngunknown.c
     35 pngunknown_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
     36 
     37 pngimage_SOURCES = contrib/libtests/pngimage.c
     38 pngimage_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
     39 
     40 pngfix_SOURCES = contrib/tools/pngfix.c
     41 pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
     42 
     43 png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c
     44 
     45 # Generally these are single line shell scripts to run a test with a particular
     46 # set of parameters:
     47 TESTS =\
     48    tests/pngtest\
     49    tests/pngvalid-gamma-16-to-8 tests/pngvalid-gamma-alpha-mode\
     50    tests/pngvalid-gamma-background tests/pngvalid-gamma-expand16-alpha-mode\
     51    tests/pngvalid-gamma-expand16-background\
     52    tests/pngvalid-gamma-expand16-transform tests/pngvalid-gamma-sbit\
     53    tests/pngvalid-gamma-threshold tests/pngvalid-gamma-transform\
     54    tests/pngvalid-progressive-interlace-size\
     55    tests/pngvalid-progressive-interlace-standard\
     56    tests/pngvalid-progressive-interlace-transform\
     57    tests/pngvalid-progressive-standard tests/pngvalid-standard\
     58    tests/pngstest-0g01 tests/pngstest-0g02 tests/pngstest-0g04\
     59    tests/pngstest-0g08 tests/pngstest-0g16 tests/pngstest-2c08\
     60    tests/pngstest-2c16 tests/pngstest-3p01 tests/pngstest-3p02\
     61    tests/pngstest-3p04 tests/pngstest-3p08 tests/pngstest-4a08\
     62    tests/pngstest-4a16 tests/pngstest-6a08 tests/pngstest-6a16\
     63    tests/pngstest-error tests/pngunknown-IDAT\
     64    tests/pngunknown-discard tests/pngunknown-if-safe tests/pngunknown-sAPI\
     65    tests/pngunknown-sTER tests/pngunknown-save tests/pngunknown-vpAg\
     66    tests/pngimage-quick tests/pngimage-full
     67 
     68 # These tests are expected, and required, to fail:
     69 XFAIL_TESTS = tests/pngstest-error
     70 
     71 # man pages
     72 dist_man_MANS= libpng.3 libpngpf.3 png.5
     73 
     74 # generate the -config scripts if required
     75 binconfigs= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config
     76 EXTRA_SCRIPTS= libpng-config libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config
     77 bin_SCRIPTS= @binconfigs@
     78 
     79 # rules to build libpng, only build the old library on request
     80 lib_LTLIBRARIES=libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
     81 # EXTRA_LTLIBRARIES= libpng.la
     82 libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c\
     83 	pngget.c pngmem.c pngpread.c pngread.c pngrio.c pngrtran.c pngrutil.c\
     84 	pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c pngwutil.c\
     85 	png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngusr.dfa
     86 
     87 if PNG_ARM_NEON
     88 libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/arm_init.c\
     89 	arm/filter_neon.S arm/filter_neon_intrinsics.c
     90 endif
     91 
     92 nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h
     93 
     94 libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined -export-dynamic \
     95 	-version-number @PNGLIB_MAJOR@@PNGLIB_MINOR@:@PNGLIB_RELEASE@:0
     96 
     97 if HAVE_LD_VERSION_SCRIPT
     98 #   Versioned symbols and restricted exports
     99 if HAVE_SOLARIS_LD
    100   libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -Wl,-M -Wl,libpng.vers
    101 else
    102   libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -Wl,--version-script=libpng.vers
    103 endif
    104 
    105   libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.vers
    106 else
    107 #   Only restricted exports when possible
    108   libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -export-symbols libpng.sym
    109   libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.sym
    110 endif
    111 
    112 #distribute headers in /usr/include/libpng/*
    113 pkgincludedir= $(includedir)/$(PNGLIB_BASENAME)
    114 pkginclude_HEADERS= png.h pngconf.h
    115 nodist_pkginclude_HEADERS= pnglibconf.h
    116 
    117 # pkg-config stuff, note that libpng.pc is always required in order
    118 # to get the correct library
    119 pkgconfigdir = @pkgconfigdir@
    120 pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc
    121 
    122 # Extra source distribution files, '${srcdir}' is used below to stop build files
    123 # from those directories being included.  This only works if the configure is
    124 # not done in the source directory!
    125 EXTRA_DIST= \
    126 	ANNOUNCE CHANGES INSTALL LICENSE README TODO \
    127 	pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \
    128 	${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \
    129 	$(TESTS) $(XFAIL_TESTS) tests/pngstest \
    130 	CMakeLists.txt example.c libpng-manual.txt
    131 
    132 SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.dfn
    133 
    134 CLEANFILES= *.tf? pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
    135 	libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \
    136 	check.new pnglibconf.* pngprefix.h symbols.new pngtest-log.txt \
    137 	$(SCRIPT_CLEANFILES)
    138 
    139 MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
    140 config.sub configure depcomp install-sh ltmain.sh missing
    141 
    142 # PNG_COPTS give extra options for the C compiler to be used on all compilation
    143 # steps (unless targe_CFLAGS is specified; that will take precedence over
    144 # AM_CFLAGS)
    145 PNG_COPTS = @PNG_COPTS@
    146 AM_CFLAGS = ${PNG_COPTS}
    147 
    148 # DFNCPP is normally just CPP - the C preprocessor - but on Solaris and maybe
    149 # other operating systems (NeXT?) the C preprocessor selected by configure
    150 # checks input tokens for validity - effectively it performs part of the ANSI-C
    151 # parsing - and therefore fails with the .df files.  configure.ac has special
    152 # checks for this and sets DFNCPP appropriately.
    153 DFNCPP = @DFNCPP@
    154 
    155 SUFFIXES = .chk .dfn .out
    156 
    157 $(PNGLIB_BASENAME).pc: libpng.pc
    158 	cp libpng.pc $@
    159 
    160 $(PNGLIB_BASENAME)-config: libpng-config
    161 	cp libpng-config $@
    162 
    163 scripts/sym.out scripts/vers.out: png.h pngconf.h pnglibconf.h
    164 scripts/prefix.out: png.h pngconf.h pnglibconf.out
    165 scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt
    166 scripts/intprefix.out: pnglibconf.h
    167 
    168 libpng.sym: scripts/sym.out
    169 	rm -f $@
    170 	cp $? $@
    171 libpng.vers: scripts/vers.out
    172 	rm -f $@
    173 	cp $? $@
    174 
    175 if DO_PNG_PREFIX
    176 # Rename functions in scripts/prefix.out with a PNG_PREFIX prefix.
    177 # Rename macros in scripts/macro.lst from PNG_PREFIXpng_ to PNG_ (the actual
    178 # implementation of the macro).
    179 pnglibconf.h: pnglibconf.out scripts/prefix.out scripts/macro.lst
    180 	rm -f $@
    181 	$(AWK) 's==0 && NR>1{print prev}\
    182 	   s==0{prev=$$0}\
    183 	   s==1{print "#define", $$1, "@PNG_PREFIX@" $$1}\
    184 	   s==2{print "#define @PNG_PREFIX@png_" $$1, "PNG_" $$1}\
    185 	   END{print prev}' s=0 pnglibconf.out s=1 scripts/prefix.out\
    186 	   s=2 ${srcdir}/scripts/macro.lst >pnglibconf.tf8
    187 	mv pnglibconf.tf8 $@
    188 
    189 pngprefix.h: scripts/intprefix.out
    190 	rm -f pngprefix.tf1
    191 	$(AWK) '{print "#define", $$1, "@PNG_PREFIX@" $$1}' $? >pngprefix.tf1
    192 	mv pngprefix.tf1 $@
    193 else
    194 pnglibconf.h: pnglibconf.out
    195 	rm -f $@
    196 	cp $? $@
    197 
    198 pngprefix.h: # is empty
    199 	:>$@
    200 endif
    201 
    202 $(srcdir)/scripts/pnglibconf.h.prebuilt:
    203 	@echo "Attempting to build $@" >&2
    204 	@echo "This is a machine generated file, but if you want to make" >&2
    205 	@echo "a new one simply make 'scripts/pnglibconf.out', copy that" >&2
    206 	@echo "AND set PNG_ZLIB_VERNUM to 0 (you MUST do this)" >&2
    207 	@exit 1
    208 
    209 # The following is necessary to ensure that the local pnglibconf.h is used, not
    210 # an installed one (this can happen immediately after on a clean system if
    211 # 'make test' is the first thing the user does.)  Only files which include
    212 # one of the png source files (typically png.h or pngpriv.h) need to be listed
    213 # here:
    214 pngtest.o: pnglibconf.h
    215 
    216 contrib/libtests/makepng.o: pnglibconf.h
    217 contrib/libtests/pngstest.o: pnglibconf.h
    218 contrib/libtests/pngunknown.o: pnglibconf.h
    219 contrib/libtests/pngimage.o: pnglibconf.h
    220 contrib/libtests/pngvalid.o: pnglibconf.h
    221 contrib/libtests/readpng.o: pnglibconf.h
    222 contrib/libtests/tarith.o: pnglibconf.h
    223 contrib/libtests/timepng.o: pnglibconf.h
    224 
    225 contrib/tools/makesRGB.o: pnglibconf.h
    226 contrib/tools/pngfix.o: pnglibconf.h
    227 
    228 # We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
    229 # be built with PNG_USE_READ_MACROS; this prevents the read macros from
    230 # interfering with the symbol file format.
    231 SYMBOL_CFLAGS = -DPNGLIB_LIBNAME='PNG@PNGLIB_MAJOR@@PNGLIB_MINOR@_0'\
    232 		-DPNGLIB_VERSION='@PNGLIB_VERSION@'\
    233 		-DSYMBOL_PREFIX='$(SYMBOL_PREFIX)'\
    234 		-DPNG_NO_USE_READ_MACROS -DPNG_BUILDING_SYMBOL_TABLE
    235 
    236 if DO_PNG_PREFIX
    237 SYMBOL_CFLAGS += -DPNG_PREFIX='@PNG_PREFIX@'
    238 endif
    239 
    240 .dfn.out:
    241 	rm -f $@ $*.c $*.tf[12]
    242 	test -d scripts || mkdir scripts || test -d scripts
    243 	echo '#include "$<"' >$*.c
    244 	$(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\
    245 	    $(CPPFLAGS) $(SYMBOL_CFLAGS) $*.c > $*.tf1
    246 	$(AWK) -f "${srcdir}/scripts/dfn.awk" out="$*.tf2" $*.tf1 1>&2
    247 	rm -f $*.c $*.tf1
    248 	mv $*.tf2 $@
    249 
    250 # The .dfn file for pnglibconf.h is machine generated
    251 pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA)
    252 	rm -f $@ $*.tf[45]
    253 	$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\
    254 	    ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
    255 	    ${srcdir}/pngusr.dfa $(DFA_XTRA) 1>&2
    256 	$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf5 $*.tf4 1>&2
    257 	rm $*.tf4
    258 	mv $*.tf5 $@
    259 
    260 # Symbol checks (.def and .out files should match)
    261 scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.out
    262 
    263 .out.chk:
    264 	rm -f $@ $*.new
    265 	$(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\
    266 	    of="$*.new" $< >&2
    267 	mv $*.new $@
    268 
    269 # used on demand to regenerate the standard header, CPPFLAGS should
    270 # be empty - no non-standard defines
    271 scripts/pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
    272 	rm -f $@ pnglibconf.tf[67]
    273 	test -z "$(CPPFLAGS)"
    274 	echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
    275 	$(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf6\
    276 	    logunsupported=1 version=search ${srcdir}/pngconf.h -\
    277 	    ${srcdir}/scripts/pnglibconf.dfa 1>&2
    278 	$(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf7\
    279 	    pnglibconf.tf6 1>&2
    280 	rm pnglibconf.tf6
    281 	mv pnglibconf.tf7 $@
    282 
    283 $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h \
    284 	pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h pngprefix.h
    285 
    286 test: check-am
    287 
    288 # Extra checks
    289 check: scripts/symbols.chk
    290 
    291 # Don't distribute the generated script files
    292 dist-hook:
    293 	cd '$(top_distdir)'; rm -f $(SCRIPT_CLEANFILES)
    294 
    295 # Make links between installed files with release-specific names and the generic
    296 # file names.  If this install rule is run the generic names will be deleted and
    297 # recreated - this has obvious issues for systems with multiple installations.
    298 
    299 install-header-links:
    300 	@set -ex; cd '$(DESTDIR)$(includedir)'; for f in $(HEADERS); do \
    301 	   rm -f "$$f"; $(LN_S) "$(PNGLIB_BASENAME)/$$f" "$$f"; done
    302 
    303 uninstall-header-links:
    304 	cd '$(DESTDIR)$(includedir)'; rm -f $(HEADERS)
    305 
    306 install-libpng-pc:
    307 	@set -ex; cd '$(DESTDIR)$(pkgconfigdir)'; rm -f libpng.pc; \
    308 	   $(LN_S) '$(PNGLIB_BASENAME).pc' libpng.pc
    309 
    310 uninstall-libpng-pc:
    311 	rm -f '$(DESTDIR)$(pkgconfigdir)/libpng.pc'
    312 
    313 # EXT_LIST is a list of the possibly library directory extensions, this exists
    314 # because we can't find a good way of discovering the file extensions that are
    315 # actually installed on a given system, so instead we check for every extension
    316 # we have seen.
    317 
    318 EXT_LIST = a dll.a so so.@PNGLIB_MAJOR@@PNGLIB_MINOR@.@PNGLIB_RELEASE@ la sl dylib
    319 
    320 install-library-links:
    321 	@set -x; cd '$(DESTDIR)$(libdir)';\
    322 	for ext in $(EXT_LIST); do\
    323 	   rm -f "libpng.$$ext";\
    324            if test -f "$(PNGLIB_BASENAME).$$ext"; then\
    325               $(LN_S) "$(PNGLIB_BASENAME).$$ext" "libpng.$$ext" || exit 1;\
    326            fi;\
    327 	done
    328 
    329 uninstall-library-links:
    330 	@set -x; cd '$(DESTDIR)$(libdir)'; for ext in $(EXT_LIST); do\
    331 	   rm -f "libpng.$$ext"; done
    332 
    333 install-libpng-config:
    334 	@set -ex; cd '$(DESTDIR)$(bindir)'; rm -f libpng-config; \
    335 	   $(LN_S) '$(PNGLIB_BASENAME)-config' libpng-config
    336 
    337 uninstall-libpng-config:
    338 	rm -f '$(DESTDIR)$(bindir)/libpng-config'
    339 
    340 if DO_INSTALL_LINKS
    341 # If --enable-unversioned-links is specified the header and lib file links
    342 # will be automatically made on a 'make install':
    343 
    344 install-data-hook: install-header-links
    345 uninstall-hook: uninstall-header-links
    346 install-exec-hook: install-library-links
    347 uninstall-hook: uninstall-library-links
    348 endif
    349 
    350 if DO_INSTALL_LIBPNG_PC
    351 # Likewise, --install-pc causes libpng.pc to be constructed:
    352 
    353 install-data-hook: install-libpng-pc
    354 uninstall-hook: uninstall-libpng-pc
    355 endif
    356 
    357 if DO_INSTALL_LIBPNG_CONFIG
    358 # And --install-config:
    359 
    360 install-exec-hook: install-libpng-config
    361 uninstall-hook: uninstall-libpng-config
    362 endif
    363 
    364 # The following addition ensures that 'make all' always builds the test programs
    365 # too.  It used to, but some change either in libpng or configure stopped this
    366 # working.
    367 all-am: $(check_PROGRAMS)
    368