GNUmakefile.in revision cccfff9309743f173c504dd265fae173caa5b47f
1# -*- Makefile -*-
2
3top_builddir = @top_builddir@
4builddir     = @builddir@
5top_srcdir   = @top_srcdir@
6srcdir       = @srcdir@
7ksourcedir   = @ksourcedir@
8prefix       = @prefix@
9exec_prefix  = @exec_prefix@
10libdir       = @libdir@
11libexecdir   = @libexecdir@
12xtlibdir     = @xtlibdir@
13
14CC                 = @CC@
15CCLD               = ${CC}
16CFLAGS             = @CFLAGS@
17CPPFLAGS           = @CPPFLAGS@
18LDFLAGS            = @LDFLAGS@
19regular_CFLAGS     = @regular_CFLAGS@
20regular_CPPFLAGS   = @regular_CPPFLAGS@
21kinclude_CPPFLAGS  = @kinclude_CPPFLAGS@
22
23AM_CFLAGS       = ${regular_CFLAGS}
24AM_CPPFLAGS     = ${regular_CPPFLAGS} -I${top_builddir}/include -I${top_builddir} -I${top_srcdir}/include ${kinclude_CPPFLAGS}
25AM_DEPFLAGS     = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@
26AM_LDFLAGS      = @noundef_LDFLAGS@
27
28ifeq (${V},)
29AM_LIBTOOL_SILENT = --silent
30AM_VERBOSE_CC     = @echo "  CC      " $@;
31AM_VERBOSE_CCLD   = @echo "  CCLD    " $@;
32AM_VERBOSE_CXX    = @echo "  CXX     " $@;
33AM_VERBOSE_CXXLD  = @echo "  CXXLD   " $@;
34AM_VERBOSE_AR     = @echo "  AR      " $@;
35AM_VERBOSE_GEN    = @echo "  GEN     " $@;
36AM_VERBOSE_NULL   = @
37endif
38
39#
40#	Wildcard module list
41#
42pfx_build_mod := $(patsubst ${srcdir}/libxt_%.c,%,$(sort $(wildcard ${srcdir}/libxt_*.c)))
43pfx_symlinks  := NOTRACK state
44@ENABLE_IPV4_TRUE@ pf4_build_mod := $(patsubst ${srcdir}/libipt_%.c,%,$(sort $(wildcard ${srcdir}/libipt_*.c)))
45@ENABLE_IPV6_TRUE@ pf6_build_mod := $(patsubst ${srcdir}/libip6t_%.c,%,$(sort $(wildcard ${srcdir}/libip6t_*.c)))
46pfx_build_mod := $(filter-out @blacklist_modules@,${pfx_build_mod})
47pf4_build_mod := $(filter-out @blacklist_modules@,${pf4_build_mod})
48pf6_build_mod := $(filter-out @blacklist_modules@,${pf6_build_mod})
49pfx_objs      := $(patsubst %,libxt_%.o,${pfx_build_mod})
50pf4_objs      := $(patsubst %,libipt_%.o,${pf4_build_mod})
51pf6_objs      := $(patsubst %,libip6t_%.o,${pf6_build_mod})
52pfx_solibs    := $(patsubst %,libxt_%.so,${pfx_build_mod} ${pfx_symlinks})
53pf4_solibs    := $(patsubst %,libipt_%.so,${pf4_build_mod})
54pf6_solibs    := $(patsubst %,libip6t_%.so,${pf6_build_mod})
55
56
57#
58# Building blocks
59#
60targets := libext.a libext4.a libext6.a matches.man targets.man
61targets_install :=
62@ENABLE_STATIC_TRUE@ libext_objs := ${pfx_objs}
63@ENABLE_STATIC_TRUE@ libext4_objs := ${pf4_objs}
64@ENABLE_STATIC_TRUE@ libext6_objs := ${pf6_objs}
65@ENABLE_STATIC_FALSE@ targets += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs}
66@ENABLE_STATIC_FALSE@ targets_install += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs}
67
68.SECONDARY:
69
70.PHONY: all install clean distclean FORCE
71
72all: ${targets}
73
74install: ${targets_install}
75	@mkdir -p "${DESTDIR}${xtlibdir}";
76	if test -n "${targets_install}"; then install -pm0755 $^ "${DESTDIR}${xtlibdir}/"; fi;
77
78clean:
79	rm -f *.la *.o *.lo *.so *.a {matches,targets}.man initext.c initext4.c initext6.c;
80	rm -f .*.d .*.dd;
81
82distclean: clean
83
84init%.o: init%.c
85	${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<;
86
87-include .*.d
88
89
90#
91#	Shared libraries
92#
93lib%.so: lib%.la
94	${AM_VERBOSE_NULL} ln -fs .libs/$@ $@
95
96lib%.la: lib%.lo
97	${AM_VERBOSE_CCLD} ../libtool ${AM_LIBTOOL_SILENT} --tag=CC --mode=link ${CCLD} ${AM_LDFLAGS} -module ${LDFLAGS} -o $@ $< ../libxtables/libxtables.la ${$*_LIBADD} -rpath ${xtlibdir}
98
99lib%.lo: ${srcdir}/lib%.c
100	${AM_VERBOSE_CC} ../libtool ${AM_LIBTOOL_SILENT} --tag=CC --mode=compile ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<
101
102libxt_NOTRACK.so: libxt_CT.so
103	${AM_VERBOSE_GEN} ln -fs $< $@
104libxt_state.so: libxt_conntrack.so
105	${AM_VERBOSE_GEN} ln -fs $< $@
106
107# Need the LIBADDs in iptables/Makefile.am too for libxtables_la_LIBADD
108xt_RATEEST_LIBADD   = -lm
109xt_statistic_LIBADD = -lm
110
111#
112#	Static bits
113#
114#	If static building is disabled, libext*.a will still be generated,
115#	but will be empty. This is good since we can do with less case
116#	handling code in the Makefiles.
117#
118lib%.o: ${srcdir}/lib%.c
119	${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -DNO_SHARED_LIBS=1 -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<;
120
121libext.a: initext.o ${libext_objs}
122	${AM_VERBOSE_AR} ${AR} crs $@ $^;
123
124libext4.a: initext4.o ${libext4_objs}
125	${AM_VERBOSE_AR} ${AR} crs $@ $^;
126
127libext6.a: initext6.o ${libext6_objs}
128	${AM_VERBOSE_AR} ${AR} crs $@ $^;
129
130initext_func  := $(addprefix xt_,${pfx_build_mod})
131initext4_func := $(addprefix ipt_,${pf4_build_mod})
132initext6_func := $(addprefix ip6t_,${pf6_build_mod})
133
134.initext.dd: FORCE
135	@echo "${initext_func}" >$@.tmp; \
136	cmp -s $@ $@.tmp || mv $@.tmp $@; \
137	rm -f $@.tmp;
138
139.initext4.dd: FORCE
140	@echo "${initext4_func}" >$@.tmp; \
141	cmp -s $@ $@.tmp || mv $@.tmp $@; \
142	rm -f $@.tmp;
143
144.initext6.dd: FORCE
145	@echo "${initext6_func}" >$@.tmp; \
146	cmp -s $@ $@.tmp || mv $@.tmp $@; \
147	rm -f $@.tmp;
148
149initext.c: .initext.dd
150	${AM_VERBOSE_GEN}
151	@( \
152	echo "" >$@; \
153	for i in ${initext_func}; do \
154		echo "extern void lib$${i}_init(void);" >>$@; \
155	done; \
156	echo "void init_extensions(void);" >>$@; \
157	echo "void init_extensions(void)" >>$@; \
158	echo "{" >>$@; \
159	for i in ${initext_func}; do \
160		echo  " ""lib$${i}_init();" >>$@; \
161	done; \
162	echo "}" >>$@; \
163	);
164
165initext4.c: .initext4.dd
166	${AM_VERBOSE_GEN}
167	@( \
168	echo "" >$@; \
169	for i in ${initext4_func}; do \
170		echo "extern void lib$${i}_init(void);" >>$@; \
171	done; \
172	echo "void init_extensions4(void);" >>$@; \
173	echo "void init_extensions4(void)" >>$@; \
174	echo "{" >>$@; \
175	for i in ${initext4_func}; do \
176		echo  " ""lib$${i}_init();" >>$@; \
177	done; \
178	echo "}" >>$@; \
179	);
180
181initext6.c: .initext6.dd
182	${AM_VERBOSE_GEN}
183	@( \
184	echo "" >$@; \
185	for i in ${initext6_func}; do \
186		echo "extern void lib$${i}_init(void);" >>$@; \
187	done; \
188	echo "void init_extensions6(void);" >>$@; \
189	echo "void init_extensions6(void)" >>$@; \
190	echo "{" >>$@; \
191	for i in ${initext6_func}; do \
192		echo " ""lib$${i}_init();" >>$@; \
193	done; \
194	echo "}" >>$@; \
195	);
196
197#
198#	Manual pages
199#
200ex_matches = $(shell echo ${1} | LC_ALL=POSIX grep -Eo '\b[[:lower:][:digit:]_]+\b')
201ex_targets = $(shell echo ${1} | LC_ALL=POSIX grep -Eo '\b[[:upper:][:digit:]_]+\b')
202man_run    = \
203	${AM_VERBOSE_GEN} \
204	for ext in $(sort ${1}); do \
205		f="${srcdir}/libxt_$$ext.man"; \
206		if [ -f "$$f" ]; then \
207			echo -e "\t+ $$f" >&2; \
208			echo ".SS $$ext"; \
209			cat "$$f" || exit $$?; \
210		fi; \
211		f="${srcdir}/libip6t_$$ext.man"; \
212		if [ -f "$$f" ]; then \
213			echo -e "\t+ $$f" >&2; \
214			echo ".SS $$ext (IPv6-specific)"; \
215			cat "$$f" || exit $$?; \
216		fi; \
217		f="${srcdir}/libipt_$$ext.man"; \
218		if [ -f "$$f" ]; then \
219			echo -e "\t+ $$f" >&2; \
220			echo ".SS $$ext (IPv4-specific)"; \
221			cat "$$f" || exit $$?; \
222		fi; \
223	done >$@;
224
225matches.man: .initext.dd .initext4.dd .initext6.dd $(wildcard ${srcdir}/lib*.man)
226	$(call man_run,$(call ex_matches,${pfx_build_mod} ${pf4_build_mod} ${pf6_build_mod} ${pfx_symlinks}))
227
228targets.man: .initext.dd .initext4.dd .initext6.dd $(wildcard ${srcdir}/lib*.man)
229	$(call man_run,$(call ex_targets,${pfx_build_mod} ${pf4_build_mod} ${pf6_build_mod} ${pfx_symlinks}))
230