Makefile.am 8.2 KB
Newer Older
1 2 3 4
# Makefile.am:
#   Source file for Makefile.in (and hence Makefile)
#

5
PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@
6 7

# libpng does not follow GNU file name conventions
8 9 10 11 12

# "color-tests" requires automake 1.11.1 or later.  Enable it if you like,
# to get red "FAIL" and green "PASS" notations during tests.
# AUTOMAKE_OPTIONS = foreign color-tests
AUTOMAKE_OPTIONS = foreign
13 14

# test programs - run on make check, make distcheck
15 16
TESTS_ENVIRONMENT= srcdir=$(srcdir)
check_PROGRAMS= pngtest
17
pngtest_SOURCES = pngtest.c
18
pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
19
TESTS = test-pngtest.sh
20

21
# Only do the following if the contrib directory is present.
22
check_PROGRAMS+= pngvalid pngstest
23
pngvalid_SOURCES = contrib/libtests/pngvalid.c
24
pngstest_SOURCES = contrib/libtests/pngstest.c
25
pngvalid_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
26
pngstest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
27
TESTS += test-pngvalid-simple.sh test-pngvalid-full.sh test-pngstest.sh
28 29

# man pages
30 31
dist_man_MANS= libpng.3 libpngpf.3 png.5

32
# generate the -config scripts if required
33
binconfigs= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config
34
EXTRA_SCRIPTS= libpng-config libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config
35 36 37
bin_SCRIPTS= @binconfigs@

# rules to build libpng, only build the old library on request
38 39
lib_LTLIBRARIES=libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
# EXTRA_LTLIBRARIES= libpng.la
40
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c\
G
[devel]  
Glenn Randers-Pehrson 已提交
41 42
	pngget.c pngmem.c pngpread.c pngread.c pngrio.c pngrtran.c pngrutil.c\
	pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c pngwutil.c\
43
	png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h
44

45 46 47 48
if PNG_ARM_NEON
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/filter_neon.S
endif

49 50
nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h

51 52
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined -export-dynamic \
	-version-number @PNGLIB_MAJOR@@PNGLIB_MINOR@:@PNGLIB_RELEASE@:0
53 54

if HAVE_LD_VERSION_SCRIPT
55 56
#   Versioned symbols and restricted exports
if HAVE_SOLARIS_LD
57
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -Wl,-M -Wl,libpng.vers
58
else
59
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -Wl,--version-script=libpng.vers
60 61
endif

62
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.vers
63
else
64
#   Only restricted exports when possible
65 66
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -export-symbols libpng.sym
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.sym
67
endif
68

69
#distribute headers in /usr/include/libpng/*
70
pkgincludedir= $(includedir)/$(PNGLIB_BASENAME)
71
pkginclude_HEADERS= png.h pngconf.h
72
nodist_pkginclude_HEADERS= pnglibconf.h
73

74 75 76
# pkg-config stuff, note that libpng.pc is always required in order
# to get the correct library
pkgconfigdir = @pkgconfigdir@
77
pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc
78

79
#extra source distribution files.
80
EXTRA_DIST= \
81
	ANNOUNCE CHANGES INSTALL LICENSE README TODO \
82
	pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \
83
	${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \
84
	$(TESTS) \
85
	CMakeLists.txt example.c libpng-manual.txt
86

87 88
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.dfn

89
CLEANFILES= *.tf? pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
90
	libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \
91
	check.new pnglibconf.* symbols.new pngtest-log.txt \
92
	$(SCRIPT_CLEANFILES)
93

94
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
95
config.sub configure depcomp install-sh ltmain.sh missing
96

97 98 99 100 101 102 103
# DFNCPP is normally just CPP - the C preprocessor - but on Solaris and maybe
# other operating systems (NeXT?) the C preprocessor selected by configure
# checks input tokens for validity - effectively it performs part of the ANSI-C
# parsing - and therefore fails with the .df files.  configure.ac has special
# checks for this and sets DFNCPP appropriately.
DFNCPP = @DFNCPP@

104
SUFFIXES = .chk .dfn .out
105

106 107
$(PNGLIB_BASENAME).pc: libpng.pc
	cp libpng.pc $@
108

109 110
$(PNGLIB_BASENAME)-config: libpng-config
	cp libpng-config $@
111

112 113
scripts/sym.out scripts/vers.out: png.h pngconf.h pnglibconf.h
scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt
114 115 116 117 118 119 120

libpng.sym: scripts/sym.out
	rm -f $@
	cp $? $@
libpng.vers: scripts/vers.out
	rm -f $@
	cp $? $@
121
pnglibconf.h: pnglibconf.out
122 123
	rm -f $@
	cp $? $@
124 125
$(srcdir)/scripts/pnglibconf.h.prebuilt:
	@echo "Attempting to build $@" >&2
126 127 128
	@echo "This is a machine generated file, but if you want to make" >&2
	@echo "a new one simply make 'scripts/pnglibconf.out' and copy that" >&2
	@exit 1
129

130 131 132
# 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.)
133
contrib/libtests/pngstest.o contrib/libtests/pngvalid.o pngtest.o: pnglibconf.h
134

135
# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
136 137
# be built with PNG_USE_READ_MACROS; this prevents the read macros from
# interfering with the symbol file format.
138 139
SYMBOL_CFLAGS = -DPNGLIB_LIBNAME='PNG@PNGLIB_MAJOR@@PNGLIB_MINOR@_0'\
		-DPNGLIB_VERSION='@PNGLIB_VERSION@'\
140
		-DSYMBOL_PREFIX='$(SYMBOL_PREFIX)'\
141
		-DPNG_NO_USE_READ_MACROS -DPNG_BUILDING_SYMBOL_TABLE
142

143
.dfn.out:
144
	rm -f $@ $*.c $*.tf[123]
145
	test -d scripts || mkdir scripts
146
	echo '#include "$<"' >$*.c
147
	$(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\
148
	    $(CPPFLAGS) $(SYMBOL_CFLAGS) $*.c > $*.tf1
149
	$(SED) -n -e 's|^.*PNG_DEFN_MAGIC *-\(.*\)- *PNG_DEFN_END.*$$|\1|p'\
150 151 152 153
	    $*.tf1 >$*.tf2
	$(SED) -e 's| *PNG_JOIN *||g' -e 's| *$$||' $*.tf2 >$*.tf3
	rm -f $*.c $*.tf[12]
	mv $*.tf3 $@
154

155
# The .dfn file for pnglibconf.h is machine generated
156
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
157 158
	rm -f $@ $*.tf[45]
	$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\
159 160
	    ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
	    $(DFA_XTRA) 1>&2
161 162 163
	$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf5 $*.tf4 1>&2
	rm $*.tf4
	mv $*.tf5 $@
164 165 166

# Symbol checks (.def and .out files should match)
scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.out
167

168
.out.chk:
169
	rm -f $@ $*.new
170
	$(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\
171 172
	    of="$*.new" $< >&2
	mv $*.new $@
173

174 175
# used on demand to regenerate the standard header, CPPFLAGS should
# be empty - no non-standard defines
176
scripts/pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
177
	rm -f $@ pnglibconf.tf[67]
178
	test -z "$(CPPFLAGS)"
179
	echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
180 181 182 183 184 185 186
	$(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 $@
187 188

$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h \
189
	pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h
190 191 192 193

test: check-am

# Extra checks
194
check: scripts/symbols.chk
195

196 197 198
# Don't distribute the generated script files
dist-hook:
	cd '$(top_distdir)'; rm -f $(SCRIPT_CLEANFILES)
199

200 201
# install the .../include headers as links to the new ones
install-data-hook:
202
	cd $(DESTDIR)$(includedir); rm -f png.h pngconf.h pnglibconf.h
203
	cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/png.h png.h
204 205
	cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/pngconf.h \
		pngconf.h
206 207
	cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/pnglibconf.h \
		pnglibconf.h
208 209
	cd $(DESTDIR)$(pkgconfigdir); rm -f libpng.pc
	cd $(DESTDIR)$(pkgconfigdir); $(LN_S) $(PNGLIB_BASENAME).pc libpng.pc
210

211
# do evil things to libpng to cause libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ to be used
212
install-exec-hook:
213 214
	cd $(DESTDIR)$(bindir); rm -f libpng-config
	cd $(DESTDIR)$(bindir); $(LN_S) $(PNGLIB_BASENAME)-config libpng-config
215 216
	@set -x;\
	cd $(DESTDIR)$(libdir);\
217
	for ext in a la so so.@PNGLIB_MAJOR@@PNGLIB_MINOR@.@PNGLIB_RELEASE@ sl dylib dll.a; do\
218
		rm -f libpng.$$ext;\
219 220 221
                if test -f $(PNGLIB_BASENAME).$$ext; then\
                       $(LN_S) $(PNGLIB_BASENAME).$$ext libpng.$$ext;\
                fi;\
222
	done
223 224

uninstall-hook:
225
	cd $(DESTDIR)$(includedir); rm -f png.h pngconf.h pnglibconf.h
226 227
	rm -f $(DESTDIR)$(pkgconfigdir)/libpng.pc
	rm -f $(DESTDIR)$(bindir)/libpng-config
228 229
	rm -f $(DESTDIR)$(libdir)/libpng.a
	rm -f $(DESTDIR)$(libdir)/libpng.la
230
	rm -f $(DESTDIR)$(libdir)/libpng.dll.a