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
check_PROGRAMS= pngtest pngvalid
16
pngtest_SOURCES = pngtest.c
17
pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
G
[devel]  
Glenn Randers-Pehrson 已提交
18 19
pngvalid_SOURCES = pngvalid.c
pngvalid_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
20 21 22 23 24
TESTS = test-pngtest.sh test-pngvalid-simple.sh test-pngvalid-full.sh
TESTS_ENVIRONMENT= srcdir=$(srcdir)

# Do the following only if the contrib directory is present.
check_PROGRAMS+= pngstest
25 26
pngstest_SOURCES = contrib/libtests/pngstest.c
pngstest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
27
TESTS += 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 43
	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\
	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
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_CPPFLAGS = @LIBPNG_DEFINES@
52

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

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

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

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

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

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

89 90
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.dfn

91
CLEANFILES= dfn.c dfn?.out pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
92
	libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \
93
	check.new pnglibconf.* symbols.new pngtest-log.txt \
94
	$(SCRIPT_CLEANFILES)
95

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

99 100 101 102 103 104 105
# 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@

106
SUFFIXES = .chk .dfn .out
107

108 109
$(PNGLIB_BASENAME).pc: libpng.pc
	cp libpng.pc $@
110

111 112
$(PNGLIB_BASENAME)-config: libpng-config
	cp libpng-config $@
113

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

libpng.sym: scripts/sym.out
	rm -f $@
	cp $? $@
libpng.vers: scripts/vers.out
	rm -f $@
	cp $? $@
123
pnglibconf.h: pnglibconf.out
124 125
	rm -f $@
	cp $? $@
126 127
$(srcdir)/scripts/pnglibconf.h.prebuilt:
	@echo "Attempting to build $@" >&2
128 129 130
	@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
131

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

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

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

157
# The .dfn file for pnglibconf.h is machine generated
158
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
159
	rm -f $@ dfn?.out
160 161 162
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out version=search\
	    ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
	    $(DFA_XTRA) 1>&2
163
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2
164 165 166 167 168 169
	rm dfn1.out
	mv dfn2.out $@

# Symbol checks (.def and .out files should match)
scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.out
.out.chk:
170
	rm -f $@ symbols.new
171 172
	$(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\
	    $< >&2
173 174
	mv symbols.new $@

175 176
# used on demand to regenerate the standard header, CPPFLAGS should
# be empty - no non-standard defines
177
scripts/pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
178
	rm -f $@ dfn?.out
179
	test -z "$(CPPFLAGS)"
180
	echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
181 182 183
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out logunsupported=1
		version=search ${srcdir}/pngconf.h -\
		${srcdir}/scripts/pnglibconf.dfa 1>&2
184
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2
185 186 187 188 189 190 191 192 193
	rm dfn1.out
	mv dfn2.out $@

$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h \
	pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h

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