Makefile.am 7.9 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
G
[devel]  
Glenn Randers-Pehrson 已提交
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
TESTS = test-pngtest.sh test-pngvalid-simple.sh test-pngvalid-full.sh
21
TESTS_ENVIRONMENT= srcdir=$(srcdir)
22 23

# man pages
24 25
dist_man_MANS= libpng.3 libpngpf.3 png.5

26
# generate the -config scripts if required
27
binconfigs= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config
28
EXTRA_SCRIPTS= libpng-config libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config
29 30 31
bin_SCRIPTS= @binconfigs@

# rules to build libpng, only build the old library on request
32 33
lib_LTLIBRARIES=libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
# EXTRA_LTLIBRARIES= libpng.la
34
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c\
G
[devel]  
Glenn Randers-Pehrson 已提交
35 36 37
	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
38

39 40 41 42
if PNG_ARM_NEON
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/filter_neon.S
endif

43 44
nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h

45
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_CPPFLAGS = @LIBPNG_DEFINES@
46

47 48
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined -export-dynamic \
	-version-number @PNGLIB_MAJOR@@PNGLIB_MINOR@:@PNGLIB_RELEASE@:0
49 50

if HAVE_LD_VERSION_SCRIPT
51 52
#   Versioned symbols and restricted exports
if HAVE_SOLARIS_LD
53
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -Wl,-M -Wl,libpng.vers
54
else
55
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -Wl,--version-script=libpng.vers
56 57
endif

58
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.vers
59
else
60
#   Only restricted exports when possible
61 62
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -export-symbols libpng.sym
  libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.sym
63
endif
64

65
#distribute headers in /usr/include/libpng/*
66
pkgincludedir= $(includedir)/$(PNGLIB_BASENAME)
67
pkginclude_HEADERS= png.h pngconf.h
68
nodist_pkginclude_HEADERS= pnglibconf.h
69

70 71 72
# pkg-config stuff, note that libpng.pc is always required in order
# to get the correct library
pkgconfigdir = @pkgconfigdir@
73
pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc
74

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

83 84
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.dfn

85
CLEANFILES= dfn.c dfn?.out pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
86
	libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \
87
	check.new pnglibconf.* symbols.new pngtest-log.txt \
88
	$(SCRIPT_CLEANFILES)
89

90
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
91
config.sub configure depcomp install-sh ltmain.sh missing
92

93 94 95 96 97 98 99
# 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@

100
SUFFIXES = .chk .dfn .out
101

102 103
$(PNGLIB_BASENAME).pc: libpng.pc
	cp libpng.pc $@
104

105 106
$(PNGLIB_BASENAME)-config: libpng-config
	cp libpng-config $@
107

108
scripts/sym.out scripts/vers.out: png.h pngconf.h pnglibconf.h
109
scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt
110 111 112 113 114 115 116

libpng.sym: scripts/sym.out
	rm -f $@
	cp $? $@
libpng.vers: scripts/vers.out
	rm -f $@
	cp $? $@
117
pnglibconf.h: pnglibconf.out
118 119
	rm -f $@
	cp $? $@
120 121
$(srcdir)/scripts/pnglibconf.h.prebuilt:
	@echo "Attempting to build $@" >&2
122 123 124
	@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
125

126 127 128 129 130
# 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.)
pngvalid.o pngtest.o: pnglibconf.h

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

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

151 152 153
# The .dfn file for pnglibconf.h is machine generated
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk
	rm -f $@ dfn?.out
154 155 156
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out\
	    ${srcdir}/scripts/pnglibconf.dfa $(DFA_XTRA) 1>&2
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2
157 158 159 160 161 162
	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:
163
	rm -f $@ symbols.new
164 165
	$(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\
	    $< >&2
166 167
	mv symbols.new $@

168 169 170 171
# used on demand to regenerate the standard header, CPPFLAGS should
# be empty - no non-standard defines
scripts/pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk
	rm -f $@ dfn?.out
172
	test -z "$(CPPFLAGS)"
173
	echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
174
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out\
175
	    logunsupported=1 - ${srcdir}/scripts/pnglibconf.dfa 1>&2
176
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2
177 178 179 180 181 182 183 184 185
	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
186
check: scripts/symbols.chk
187

188 189 190
# Don't distribute the generated script files
dist-hook:
	cd '$(top_distdir)'; rm -f $(SCRIPT_CLEANFILES)
191

192 193
# install the .../include headers as links to the new ones
install-data-hook:
194
	cd $(DESTDIR)$(includedir); rm -f png.h pngconf.h pnglibconf.h
195
	cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/png.h png.h
196 197
	cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/pngconf.h \
		pngconf.h
198 199
	cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/pnglibconf.h \
		pnglibconf.h
200 201
	cd $(DESTDIR)$(pkgconfigdir); rm -f libpng.pc
	cd $(DESTDIR)$(pkgconfigdir); $(LN_S) $(PNGLIB_BASENAME).pc libpng.pc
202

203
# do evil things to libpng to cause libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ to be used
204
install-exec-hook:
205 206
	cd $(DESTDIR)$(bindir); rm -f libpng-config
	cd $(DESTDIR)$(bindir); $(LN_S) $(PNGLIB_BASENAME)-config libpng-config
207 208
	@set -x;\
	cd $(DESTDIR)$(libdir);\
209
	for ext in a la so so.@PNGLIB_MAJOR@@PNGLIB_MINOR@.@PNGLIB_RELEASE@ sl dylib dll.a; do\
210
		rm -f libpng.$$ext;\
211 212 213
                if test -f $(PNGLIB_BASENAME).$$ext; then\
                       $(LN_S) $(PNGLIB_BASENAME).$$ext libpng.$$ext;\
                fi;\
214
	done
215 216

uninstall-hook:
217
	cd $(DESTDIR)$(includedir); rm -f png.h pngconf.h pnglibconf.h
218 219
	rm -f $(DESTDIR)$(pkgconfigdir)/libpng.pc
	rm -f $(DESTDIR)$(bindir)/libpng-config
220 221
	rm -f $(DESTDIR)$(libdir)/libpng.a
	rm -f $(DESTDIR)$(libdir)/libpng.la