3 top_builddir = @top_builddir@
5 top_srcdir = @top_srcdir@
7 ksourcedir = @ksourcedir@
9 exec_prefix = @exec_prefix@
11 libexecdir = @libexecdir@
19 regular_CFLAGS = @regular_CFLAGS@
20 regular_CPPFLAGS = @regular_CPPFLAGS@
21 kinclude_CPPFLAGS = @kinclude_CPPFLAGS@
23 AM_CFLAGS = ${regular_CFLAGS}
24 AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_builddir}/include -I${top_builddir} -I${top_srcdir}/include ${kinclude_CPPFLAGS}
25 AM_DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@
26 AM_LDFLAGS = @noundef_LDFLAGS@
29 AM_LIBTOOL_SILENT = --silent
30 AM_VERBOSE_CC = @echo " CC " $@;
31 AM_VERBOSE_CCLD = @echo " CCLD " $@;
32 AM_VERBOSE_CXX = @echo " CXX " $@;
33 AM_VERBOSE_CXXLD = @echo " CXXLD " $@;
34 AM_VERBOSE_AR = @echo " AR " $@;
35 AM_VERBOSE_GEN = @echo " GEN " $@;
39 # Wildcard module list
41 pfx_build_mod := $(patsubst ${srcdir}/libxt_%.c,%,$(sort $(wildcard ${srcdir}/libxt_*.c)))
42 @ENABLE_IPV4_TRUE@ pf4_build_mod := $(patsubst ${srcdir}/libipt_%.c,%,$(sort $(wildcard ${srcdir}/libipt_*.c)))
43 @ENABLE_IPV6_TRUE@ pf6_build_mod := $(patsubst ${srcdir}/libip6t_%.c,%,$(sort $(wildcard ${srcdir}/libip6t_*.c)))
44 pfx_build_mod := $(filter-out @blacklist_modules@,${pfx_build_mod})
45 pf4_build_mod := $(filter-out @blacklist_modules@,${pf4_build_mod})
46 pf6_build_mod := $(filter-out @blacklist_modules@,${pf6_build_mod})
47 pfx_objs := $(patsubst %,libxt_%.o,${pfx_build_mod})
48 pf4_objs := $(patsubst %,libipt_%.o,${pf4_build_mod})
49 pf6_objs := $(patsubst %,libip6t_%.o,${pf6_build_mod})
50 pfx_solibs := $(patsubst %,libxt_%.so,${pfx_build_mod})
51 pf4_solibs := $(patsubst %,libipt_%.so,${pf4_build_mod})
52 pf6_solibs := $(patsubst %,libip6t_%.so,${pf6_build_mod})
58 targets := libext.a libext4.a libext6.a \
59 matches4.man matches6.man \
60 targets4.man targets6.man
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}
70 .PHONY: all install clean distclean FORCE
74 install: ${targets_install}
75 @mkdir -p "${DESTDIR}${xtlibdir}";
76 if test -n "${targets_install}"; then install -pm0755 $^ "${DESTDIR}${xtlibdir}/"; fi;
79 rm -f *.o *.oo *.so *.a {matches,targets}[46].man initext.c initext4.c initext6.c;
85 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<;
94 ${AM_VERBOSE_CCLD} ${CCLD} ${AM_LDFLAGS} -shared ${LDFLAGS} -o $@ $< -L../libxtables/.libs -lxtables ${$*_LIBADD};
96 lib%.oo: ${srcdir}/lib%.c
97 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=lib$*_init -DPIC -fPIC ${CFLAGS} -o $@ -c $<;
99 # Need the LIBADDs in iptables/Makefile.am too for libxtables_la_LIBADD
100 xt_RATEEST_LIBADD = -lm
101 xt_statistic_LIBADD = -lm
107 # If static building is disabled, libext*.a will still be generated,
108 # but will be empty. This is good since we can do with less case
109 # handling code in the Makefiles.
111 lib%.o: ${srcdir}/lib%.c
112 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -DNO_SHARED_LIBS=1 -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<;
114 libext.a: initext.o ${libext_objs}
115 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
117 libext4.a: initext4.o ${libext4_objs}
118 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
120 libext6.a: initext6.o ${libext6_objs}
121 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
123 initext_func := $(addprefix xt_,${pfx_build_mod})
124 initext4_func := $(addprefix ipt_,${pf4_build_mod})
125 initext6_func := $(addprefix ip6t_,${pf6_build_mod})
128 @echo "${initext_func}" >$@.tmp; \
129 cmp -s $@ $@.tmp || mv $@.tmp $@; \
133 @echo "${initext4_func}" >$@.tmp; \
134 cmp -s $@ $@.tmp || mv $@.tmp $@; \
138 @echo "${initext6_func}" >$@.tmp; \
139 cmp -s $@ $@.tmp || mv $@.tmp $@; \
142 initext.c: .initext.dd
146 for i in ${initext_func}; do \
147 echo "extern void lib$${i}_init(void);" >>$@; \
149 echo "void init_extensions(void);" >>$@; \
150 echo "void init_extensions(void)" >>$@; \
152 for i in ${initext_func}; do \
153 echo " ""lib$${i}_init();" >>$@; \
158 initext4.c: .initext4.dd
162 for i in ${initext4_func}; do \
163 echo "extern void lib$${i}_init(void);" >>$@; \
165 echo "void init_extensions4(void);" >>$@; \
166 echo "void init_extensions4(void)" >>$@; \
168 for i in ${initext4_func}; do \
169 echo " ""lib$${i}_init();" >>$@; \
174 initext6.c: .initext6.dd
178 for i in ${initext6_func}; do \
179 echo "extern void lib$${i}_init(void);" >>$@; \
181 echo "void init_extensions6(void);" >>$@; \
182 echo "void init_extensions6(void)" >>$@; \
184 for i in ${initext6_func}; do \
185 echo " ""lib$${i}_init();" >>$@; \
193 ex_matches = $(shell echo ${1} | LC_ALL=POSIX grep -Eo '\b[[:lower:][:digit:]_]+\b')
194 ex_targets = $(shell echo ${1} | LC_ALL=POSIX grep -Eo '\b[[:upper:][:digit:]_]+\b')
197 for ext in $(sort ${1}); do \
198 f="${srcdir}/libxt_$$ext.man"; \
199 cf="${srcdir}/libxt_$$ext.c"; \
200 if [ -f "$$f" ] && grep -Eq "$(3)|NFPROTO_UNSPEC" "$$cf"; then \
201 echo -e "\t+ $$f" >&2; \
203 cat "$$f" || exit $$?; \
206 f="${srcdir}/lib$(2)t_$$ext.man"; \
207 if [ -f "$$f" ]; then \
208 echo -e "\t+ $$f" >&2; \
210 cat "$$f" || exit $$?; \
215 matches4.man: .initext.dd .initext4.dd $(wildcard ${srcdir}/lib*.man)
216 $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf4_build_mod}),ip,NFPROTO_IPV4)
218 matches6.man: .initext.dd .initext6.dd $(wildcard ${srcdir}/lib*.man)
219 $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf6_build_mod}),ip6,NFPROTO_IPV6)
221 targets4.man: .initext.dd .initext4.dd $(wildcard ${srcdir}/lib*.man)
222 $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf4_build_mod}),ip,NFPROTO_IPV4)
224 targets6.man: .initext.dd .initext6.dd $(wildcard ${srcdir}/lib*.man)
225 $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf6_build_mod}),ip6,NFPROTO_IPV6)