blob: 780e71507c519b5ace3f92a965d0f05222e194aa [file] [log] [blame]
Jan Engelhardtf82070f2008-01-20 13:14:00 +00001# -*- Makefile -*-
2
Jan Engelhardt32d85322011-12-18 04:04:37 +01003top_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@
Jan Engelhardtf82070f2008-01-20 13:14:00 +000013
Jan Engelhardt32d85322011-12-18 04:04:37 +010014CC = @CC@
15CCLD = ${CC}
16CFLAGS = @CFLAGS@
17CPPFLAGS = @CPPFLAGS@
18LDFLAGS = @LDFLAGS@
19regular_CFLAGS = @regular_CFLAGS@
20regular_CPPFLAGS = @regular_CPPFLAGS@
21kinclude_CPPFLAGS = @kinclude_CPPFLAGS@
Jan Engelhardtf82070f2008-01-20 13:14:00 +000022
Jan Engelhardt32d85322011-12-18 04:04:37 +010023AM_CFLAGS = ${regular_CFLAGS}
Jan Engelhardt76e230e2013-08-13 21:02:06 +020024AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_builddir}/include -I${top_builddir} -I${top_srcdir}/include ${kinclude_CPPFLAGS} @libnetfilter_conntrack_CFLAGS@
Jan Engelhardtf82070f2008-01-20 13:14:00 +000025AM_DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@
Jan Engelhardt79cefab2011-12-30 02:14:00 +010026AM_LDFLAGS = @noundef_LDFLAGS@
Jan Engelhardtf82070f2008-01-20 13:14:00 +000027
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 " $@;
36endif
37
38#
39# Wildcard module list
40#
Jan Engelhardt5e5ea1c2011-09-08 17:08:37 +020041pfx_build_mod := $(patsubst ${srcdir}/libxt_%.c,%,$(sort $(wildcard ${srcdir}/libxt_*.c)))
Jan Engelhardt269655d2012-10-08 12:04:56 +000042pfx_symlinks := NOTRACK state
Jan Engelhardt5e5ea1c2011-09-08 17:08:37 +020043@ENABLE_IPV4_TRUE@ pf4_build_mod := $(patsubst ${srcdir}/libipt_%.c,%,$(sort $(wildcard ${srcdir}/libipt_*.c)))
44@ENABLE_IPV6_TRUE@ pf6_build_mod := $(patsubst ${srcdir}/libip6t_%.c,%,$(sort $(wildcard ${srcdir}/libip6t_*.c)))
Jan Engelhardt2c570e72008-06-05 19:54:48 +020045pfx_build_mod := $(filter-out @blacklist_modules@,${pfx_build_mod})
46pf4_build_mod := $(filter-out @blacklist_modules@,${pf4_build_mod})
47pf6_build_mod := $(filter-out @blacklist_modules@,${pf6_build_mod})
Jan Engelhardtf82070f2008-01-20 13:14:00 +000048pfx_objs := $(patsubst %,libxt_%.o,${pfx_build_mod})
49pf4_objs := $(patsubst %,libipt_%.o,${pf4_build_mod})
50pf6_objs := $(patsubst %,libip6t_%.o,${pf6_build_mod})
Jan Engelhardt269655d2012-10-08 12:04:56 +000051pfx_solibs := $(patsubst %,libxt_%.so,${pfx_build_mod} ${pfx_symlinks})
Jan Engelhardtf82070f2008-01-20 13:14:00 +000052pf4_solibs := $(patsubst %,libipt_%.so,${pf4_build_mod})
53pf6_solibs := $(patsubst %,libip6t_%.so,${pf6_build_mod})
54
55
56#
57# Building blocks
58#
Jan Engelhardt44968012012-09-28 10:43:06 +020059targets := libext.a libext4.a libext6.a matches.man targets.man
Jan Engelhardtf82070f2008-01-20 13:14:00 +000060targets_install :=
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -070061@ENABLE_STATIC_TRUE@ libext_objs := ${pfx_objs}
62@ENABLE_STATIC_TRUE@ libext4_objs := ${pf4_objs}
63@ENABLE_STATIC_TRUE@ libext6_objs := ${pf6_objs}
Jan Engelhardtb79ec692009-07-23 17:41:21 +020064@ENABLE_STATIC_FALSE@ targets += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs}
65@ENABLE_STATIC_FALSE@ targets_install += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs}
Jan Engelhardtf82070f2008-01-20 13:14:00 +000066
67.SECONDARY:
68
69.PHONY: all install clean distclean FORCE
70
Jan Engelhardt79cefab2011-12-30 02:14:00 +010071all: ${targets}
Jan Engelhardtf82070f2008-01-20 13:14:00 +000072
73install: ${targets_install}
Jan Engelhardt21b41ee2008-02-11 01:02:00 +010074 @mkdir -p "${DESTDIR}${xtlibdir}";
Jan Engelhardte1456212008-06-12 12:10:47 +020075 if test -n "${targets_install}"; then install -pm0755 $^ "${DESTDIR}${xtlibdir}/"; fi;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000076
77clean:
Pablo Neira Ayuso37b19d02013-03-16 12:15:30 +010078 rm -f *.o *.oo *.so *.a {matches,targets}.man initext.c initext4.c initext6.c;
Jan Engelhardt33710a52012-09-10 15:04:49 +020079 rm -f .*.d .*.dd;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000080
81distclean: clean
Jan Engelhardtf82070f2008-01-20 13:14:00 +000082
Jan Engelhardt79638452008-08-13 14:43:56 +020083init%.o: init%.c
Jan Engelhardt8e336252011-06-01 02:16:05 +020084 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000085
86-include .*.d
87
88
89#
90# Shared libraries
91#
Pablo Neira Ayuso37b19d02013-03-16 12:15:30 +010092lib%.so: lib%.oo
93 ${AM_VERBOSE_CCLD} ${CCLD} ${AM_LDFLAGS} -shared ${LDFLAGS} -o $@ $< -L../libxtables/.libs -lxtables ${$*_LIBADD};
Jan Engelhardtf82070f2008-01-20 13:14:00 +000094
Pablo Neira Ayuso37b19d02013-03-16 12:15:30 +010095lib%.oo: ${srcdir}/lib%.c
Jan Engelhardt76e230e2013-08-13 21:02:06 +020096 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=lib$*_init -DPIC -fPIC ${CFLAGS} -o $@ -c $<;
Jan Engelhardtf82070f2008-01-20 13:14:00 +000097
Jan Engelhardt50f19192012-09-04 05:38:48 +020098libxt_NOTRACK.so: libxt_CT.so
Pablo Neira Ayuso37b19d02013-03-16 12:15:30 +010099 ln -fs $< $@
Jan Engelhardt0d701632012-09-28 00:12:42 +0200100libxt_state.so: libxt_conntrack.so
Pablo Neira Ayuso37b19d02013-03-16 12:15:30 +0100101 ln -fs $< $@
Jan Engelhardt50f19192012-09-04 05:38:48 +0200102
Jan Engelhardtd4e72dc2011-09-03 13:34:40 +0200103# Need the LIBADDs in iptables/Makefile.am too for libxtables_la_LIBADD
Jan Engelhardt9249ad32011-09-03 13:35:53 +0200104xt_RATEEST_LIBADD = -lm
Jan Engelhardtd4e72dc2011-09-03 13:34:40 +0200105xt_statistic_LIBADD = -lm
Jan Engelhardt76e230e2013-08-13 21:02:06 +0200106xt_connlabel_LIBADD = @libnetfilter_conntrack_LIBS@
Jan Engelhardtd4e72dc2011-09-03 13:34:40 +0200107
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000108#
109# Static bits
110#
111# If static building is disabled, libext*.a will still be generated,
112# but will be empty. This is good since we can do with less case
113# handling code in the Makefiles.
114#
115lib%.o: ${srcdir}/lib%.c
Jan Engelhardt8e336252011-06-01 02:16:05 +0200116 ${AM_VERBOSE_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -DNO_SHARED_LIBS=1 -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<;
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000117
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700118libext.a: initext.o ${libext_objs}
119 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
120
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000121libext4.a: initext4.o ${libext4_objs}
122 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
123
124libext6.a: initext6.o ${libext6_objs}
125 ${AM_VERBOSE_AR} ${AR} crs $@ $^;
126
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700127initext_func := $(addprefix xt_,${pfx_build_mod})
128initext4_func := $(addprefix ipt_,${pf4_build_mod})
129initext6_func := $(addprefix ip6t_,${pf6_build_mod})
130
131.initext.dd: FORCE
132 @echo "${initext_func}" >$@.tmp; \
133 cmp -s $@ $@.tmp || mv $@.tmp $@; \
134 rm -f $@.tmp;
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000135
136.initext4.dd: FORCE
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700137 @echo "${initext4_func}" >$@.tmp; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000138 cmp -s $@ $@.tmp || mv $@.tmp $@; \
139 rm -f $@.tmp;
140
141.initext6.dd: FORCE
142 @echo "${initext6_func}" >$@.tmp; \
143 cmp -s $@ $@.tmp || mv $@.tmp $@; \
144 rm -f $@.tmp;
145
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700146initext.c: .initext.dd
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000147 ${AM_VERBOSE_GEN}
148 @( \
149 echo "" >$@; \
150 for i in ${initext_func}; do \
151 echo "extern void lib$${i}_init(void);" >>$@; \
152 done; \
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700153 echo "void init_extensions(void);" >>$@; \
154 echo "void init_extensions(void)" >>$@; \
155 echo "{" >>$@; \
156 for i in ${initext_func}; do \
157 echo " ""lib$${i}_init();" >>$@; \
158 done; \
159 echo "}" >>$@; \
160 );
161
162initext4.c: .initext4.dd
163 ${AM_VERBOSE_GEN}
164 @( \
165 echo "" >$@; \
166 for i in ${initext4_func}; do \
167 echo "extern void lib$${i}_init(void);" >>$@; \
168 done; \
Maciej Zenczykowski5e8f9472011-04-04 15:32:39 +0200169 echo "void init_extensions4(void);" >>$@; \
170 echo "void init_extensions4(void)" >>$@; \
Thomas Jacobf858d372008-05-20 17:17:02 +0200171 echo "{" >>$@; \
Maciej Żenczykowski9a9694f2011-04-06 13:35:11 -0700172 for i in ${initext4_func}; do \
Thomas Jacobf858d372008-05-20 17:17:02 +0200173 echo " ""lib$${i}_init();" >>$@; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000174 done; \
175 echo "}" >>$@; \
176 );
177
178initext6.c: .initext6.dd
179 ${AM_VERBOSE_GEN}
180 @( \
181 echo "" >$@; \
182 for i in ${initext6_func}; do \
183 echo "extern void lib$${i}_init(void);" >>$@; \
184 done; \
Maciej Zenczykowski49d8c5d2011-04-04 15:33:25 +0200185 echo "void init_extensions6(void);" >>$@; \
186 echo "void init_extensions6(void)" >>$@; \
Thomas Jacobf858d372008-05-20 17:17:02 +0200187 echo "{" >>$@; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000188 for i in ${initext6_func}; do \
Thomas Jacobf858d372008-05-20 17:17:02 +0200189 echo " ""lib$${i}_init();" >>$@; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000190 done; \
191 echo "}" >>$@; \
192 );
193
194#
195# Manual pages
196#
Jan Engelhardt5e5ea1c2011-09-08 17:08:37 +0200197ex_matches = $(shell echo ${1} | LC_ALL=POSIX grep -Eo '\b[[:lower:][:digit:]_]+\b')
198ex_targets = $(shell echo ${1} | LC_ALL=POSIX grep -Eo '\b[[:upper:][:digit:]_]+\b')
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000199man_run = \
200 ${AM_VERBOSE_GEN} \
Jan Engelhardt5e5ea1c2011-09-08 17:08:37 +0200201 for ext in $(sort ${1}); do \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000202 f="${srcdir}/libxt_$$ext.man"; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000203 if [ -f "$$f" ]; then \
Jan Engelhardtcdcfd882009-06-01 11:52:07 +0200204 echo -e "\t+ $$f" >&2; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000205 echo ".SS $$ext"; \
Jan Engelhardta3f10132010-12-11 03:35:48 +0100206 cat "$$f" || exit $$?; \
Jan Engelhardt44968012012-09-28 10:43:06 +0200207 fi; \
208 f="${srcdir}/libip6t_$$ext.man"; \
209 if [ -f "$$f" ]; then \
210 echo -e "\t+ $$f" >&2; \
211 echo ".SS $$ext (IPv6-specific)"; \
212 cat "$$f" || exit $$?; \
213 fi; \
214 f="${srcdir}/libipt_$$ext.man"; \
215 if [ -f "$$f" ]; then \
216 echo -e "\t+ $$f" >&2; \
217 echo ".SS $$ext (IPv4-specific)"; \
218 cat "$$f" || exit $$?; \
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000219 fi; \
220 done >$@;
221
Jan Engelhardt44968012012-09-28 10:43:06 +0200222matches.man: .initext.dd .initext4.dd .initext6.dd $(wildcard ${srcdir}/lib*.man)
Jan Engelhardt269655d2012-10-08 12:04:56 +0000223 $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf4_build_mod} ${pf6_build_mod} ${pfx_symlinks}))
Jan Engelhardtf82070f2008-01-20 13:14:00 +0000224
Jan Engelhardt44968012012-09-28 10:43:06 +0200225targets.man: .initext.dd .initext4.dd .initext6.dd $(wildcard ${srcdir}/lib*.man)
Jan Engelhardt269655d2012-10-08 12:04:56 +0000226 $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf4_build_mod} ${pf6_build_mod} ${pfx_symlinks}))