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 14AR = @AR@ 15CC = @CC@ 16CCLD = ${CC} 17CFLAGS = @CFLAGS@ 18CPPFLAGS = @CPPFLAGS@ 19LDFLAGS = @LDFLAGS@ 20regular_CFLAGS = @regular_CFLAGS@ 21regular_CPPFLAGS = @regular_CPPFLAGS@ 22kinclude_CPPFLAGS = @kinclude_CPPFLAGS@ 23 24AM_CFLAGS = ${regular_CFLAGS} 25AM_CPPFLAGS = ${regular_CPPFLAGS} \ 26 -I${top_builddir}/include \ 27 -I${top_builddir} \ 28 -I${top_srcdir}/include \ 29 -I${top_srcdir} \ 30 ${kinclude_CPPFLAGS} \ 31 ${CPPFLAGS} \ 32 @libnetfilter_conntrack_CFLAGS@ \ 33 @libnftnl_CFLAGS@ 34AM_DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@ 35AM_LDFLAGS = @noundef_LDFLAGS@ @regular_LDFLAGS@ 36 37AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 38am__v_AR_0 = @echo " AR " $@; 39am__v_CC_0 = @echo " CC " $@; 40am__v_CCLD_0 = @echo " CCLD " $@; 41am__v_GEN_0 = @echo " GEN " $@; 42am__v_LN_0 = @echo " LN " $@; 43am__v_AR_ = ${am__v_AR_@AM_DEFAULT_V@} 44am__v_CC_ = ${am__v_CC_@AM_DEFAULT_V@} 45am__v_CCLD_ = ${am__v_CCLD_@AM_DEFAULT_V@} 46am__v_GEN_ = ${am__v_GEN_@AM_DEFAULT_V@} 47am__v_LN_ = ${am__v_LN_@AM_DEFAULT_V@} 48AM_V_AR = ${am__v_AR_@AM_V@} 49AM_V_CC = ${am__v_CC_@AM_V@} 50AM_V_CCLD = ${am__v_CCLD_@AM_V@} 51AM_V_GEN = ${am__v_GEN_@AM_V@} 52AM_V_LN = ${am__v_LN_@AM_V@} 53 54# 55# Wildcard module list 56# 57pfx_build_mod := $(patsubst ${srcdir}/libxt_%.c,%,$(sort $(wildcard ${srcdir}/libxt_*.c))) 58@ENABLE_NFTABLES_TRUE@ pfb_build_mod := $(patsubst ${srcdir}/libebt_%.c,%,$(sort $(wildcard ${srcdir}/libebt_*.c))) 59@ENABLE_NFTABLES_TRUE@ pfa_build_mod := $(patsubst ${srcdir}/libarpt_%.c,%,$(sort $(wildcard ${srcdir}/libarpt_*.c))) 60pfx_symlinks := NOTRACK state REDIRECT MASQUERADE SNAT DNAT 61@ENABLE_IPV4_TRUE@ pf4_build_mod := $(patsubst ${srcdir}/libipt_%.c,%,$(sort $(wildcard ${srcdir}/libipt_*.c))) 62@ENABLE_IPV6_TRUE@ pf6_build_mod := $(patsubst ${srcdir}/libip6t_%.c,%,$(sort $(wildcard ${srcdir}/libip6t_*.c))) 63pfx_build_mod := $(filter-out @blacklist_modules@ @blacklist_x_modules@,${pfx_build_mod}) 64pfb_build_mod := $(filter-out @blacklist_modules@ @blacklist_b_modules@,${pfb_build_mod}) 65pfa_build_mod := $(filter-out @blacklist_modules@ @blacklist_a_modules@,${pfa_build_mod}) 66pf4_build_mod := $(filter-out @blacklist_modules@ @blacklist_4_modules@,${pf4_build_mod}) 67pf6_build_mod := $(filter-out @blacklist_modules@ @blacklist_6_modules@,${pf6_build_mod}) 68pfx_objs := $(patsubst %,libxt_%.o,${pfx_build_mod}) 69pfb_objs := $(patsubst %,libebt_%.o,${pfb_build_mod}) 70pfa_objs := $(patsubst %,libarpt_%.o,${pfa_build_mod}) 71pf4_objs := $(patsubst %,libipt_%.o,${pf4_build_mod}) 72pf6_objs := $(patsubst %,libip6t_%.o,${pf6_build_mod}) 73pfx_solibs := $(patsubst %,libxt_%.so,${pfx_build_mod}) 74pfb_solibs := $(patsubst %,libebt_%.so,${pfb_build_mod}) 75pfa_solibs := $(patsubst %,libarpt_%.so,${pfa_build_mod}) 76pf4_solibs := $(patsubst %,libipt_%.so,${pf4_build_mod}) 77pf6_solibs := $(patsubst %,libip6t_%.so,${pf6_build_mod}) 78pfx_symlink_files := $(patsubst %,libxt_%.so,${pfx_symlinks}) 79 80 81# 82# Building blocks 83# 84targets := libext.a libext4.a libext6.a libext_ebt.a libext_arpt.a matches.man targets.man 85targets_install := 86@ENABLE_STATIC_TRUE@ libext_objs := ${pfx_objs} 87@ENABLE_STATIC_TRUE@ libext_ebt_objs := ${pfb_objs} 88@ENABLE_STATIC_TRUE@ libext_arpt_objs := ${pfa_objs} 89@ENABLE_STATIC_TRUE@ libext4_objs := ${pf4_objs} 90@ENABLE_STATIC_TRUE@ libext6_objs := ${pf6_objs} 91@ENABLE_STATIC_FALSE@ targets += ${pfx_solibs} ${pfb_solibs} ${pf4_solibs} ${pf6_solibs} ${pfa_solibs} ${pfx_symlink_files} 92@ENABLE_STATIC_FALSE@ targets_install += ${pfx_solibs} ${pfb_solibs} ${pf4_solibs} ${pf6_solibs} ${pfa_solibs} 93@ENABLE_STATIC_FALSE@ symlinks_install := ${pfx_symlink_files} 94 95.SECONDARY: 96 97.PHONY: all install uninstall clean distclean FORCE dvi check installcheck 98 99all: ${targets} 100 101install: ${targets_install} ${symlinks_install} 102 @mkdir -p "${DESTDIR}${xtlibdir}"; 103 if test -n "${targets_install}"; then \ 104 install -pm0755 ${targets_install} "${DESTDIR}${xtlibdir}/"; \ 105 fi; 106 if test -n "${symlinks_install}"; then \ 107 cp -P ${symlinks_install} "${DESTDIR}${xtlibdir}/"; \ 108 fi; 109 110uninstall: 111 dir=${DESTDIR}${xtlibdir}; { \ 112 test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; \ 113 } || { \ 114 test -z "${targets_install}" || ( \ 115 cd "$$dir" && rm -f ${targets_install} \ 116 ); \ 117 test -z "${symlinks_install}" || ( \ 118 cd "$$dir" && rm -f ${symlinks_install} \ 119 ); \ 120 rmdir -p --ignore-fail-on-non-empty "$$dir"; \ 121 } 122 123clean: 124 rm -f *.o *.oo *.so *.a matches.man targets.man 125 rm -f initext.c initext4.c initext6.c initextb.c initexta.c 126 rm -f .*.d .*.dd; 127 128distclean: clean 129 130init%.o: init%.c 131 ${AM_V_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<; 132 133-include .*.d 134 135 136# 137# Shared libraries 138# 139lib%.so: lib%.oo 140 ${AM_V_CCLD} ${CCLD} ${AM_LDFLAGS} ${LDFLAGS} -shared -o $@ $< -L../libxtables/.libs -lxtables ${$*_LIBADD}; 141 142lib%.oo: ${srcdir}/lib%.c 143 ${AM_V_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=lib$*_init -DPIC -fPIC ${CFLAGS} -o $@ -c $<; 144 145libxt_NOTRACK.so: libxt_CT.so 146 ${AM_V_LN} ln -fs $< $@ 147libxt_state.so: libxt_conntrack.so 148 ${AM_V_LN} ln -fs $< $@ 149libxt_REDIRECT.so: libxt_NAT.so 150 ${AM_V_LN} ln -fs $< $@ 151libxt_MASQUERADE.so: libxt_NAT.so 152 ${AM_V_LN} ln -fs $< $@ 153libxt_SNAT.so: libxt_NAT.so 154 ${AM_V_LN} ln -fs $< $@ 155libxt_DNAT.so: libxt_NAT.so 156 ${AM_V_LN} ln -fs $< $@ 157 158# Need the LIBADDs in iptables/Makefile.am too for libxtables_la_LIBADD 159xt_RATEEST_LIBADD = -lm 160xt_statistic_LIBADD = -lm 161xt_connlabel_LIBADD = @libnetfilter_conntrack_LIBS@ 162 163# 164# Static bits 165# 166# If static building is disabled, libext*.a will still be generated, 167# but will be empty. This is good since we can do with less case 168# handling code in the Makefiles. 169# 170lib%.o: ${srcdir}/lib%.c 171 ${AM_V_CC} ${CC} ${AM_CPPFLAGS} ${AM_DEPFLAGS} ${AM_CFLAGS} -DNO_SHARED_LIBS=1 -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<; 172 173libext.a: initext.o ${libext_objs} 174 ${AM_V_AR} ${AR} crs $@ $^; 175 176libext_ebt.a: initextb.o ${libext_ebt_objs} 177 ${AM_V_AR} ${AR} crs $@ $^; 178 179libext_arpt.a: initexta.o ${libext_arpt_objs} 180 ${AM_V_AR} ${AR} crs $@ $^; 181 182libext4.a: initext4.o ${libext4_objs} 183 ${AM_V_AR} ${AR} crs $@ $^; 184 185libext6.a: initext6.o ${libext6_objs} 186 ${AM_V_AR} ${AR} crs $@ $^; 187 188initext_func := $(addprefix xt_,${pfx_build_mod}) 189initextb_func := $(addprefix ebt_,${pfb_build_mod}) 190initexta_func := $(addprefix arpt_,${pfa_build_mod}) 191initext4_func := $(addprefix ipt_,${pf4_build_mod}) 192initext6_func := $(addprefix ip6t_,${pf6_build_mod}) 193 194initexts := ext exta extb ext4 ext6 195initext_depfiles = $(patsubst %,.init%.dd,${initexts}) 196initext_sources = $(patsubst %,init%.c,${initexts}) 197 198${initext_depfiles}: FORCE 199 @echo "$(value $(patsubst .%.dd,%,$@)_func)" >$@.tmp; \ 200 cmp -s $@ $@.tmp || mv $@.tmp $@; \ 201 rm -f $@.tmp; 202 203${initext_sources}: %.c: .%.dd 204 ${AM_V_GEN} 205 @( \ 206 initext_func="$(value $(basename $@)_func)"; \ 207 funcname="init_extensions$(patsubst initext%.c,%,$@)"; \ 208 echo "" >$@; \ 209 for i in $${initext_func}; do \ 210 echo "extern void lib$${i}_init(void);" >>$@; \ 211 done; \ 212 echo "void $${funcname}(void);" >>$@; \ 213 echo "void $${funcname}(void)" >>$@; \ 214 echo "{" >>$@; \ 215 for i in $${initext_func}; do \ 216 echo " ""lib$${i}_init();" >>$@; \ 217 done; \ 218 echo "}" >>$@; \ 219 ); 220 221# 222# Manual pages 223# 224ex_matches = $(shell echo ${1} | LC_ALL=POSIX grep -Eo '\b[[:lower:][:digit:]_]+\b') 225ex_targets = $(shell echo ${1} | LC_ALL=POSIX grep -Eo '\b[[:upper:][:digit:]_]+\b') 226man_run = \ 227 ${AM_V_GEN} \ 228 for ext in $(sort ${1}); do \ 229 f="${srcdir}/libxt_$$ext.man"; \ 230 if [ -f "$$f" ]; then \ 231 printf "\t+ $$f\n" >&2; \ 232 echo ".SS $$ext"; \ 233 cat "$$f" || exit $$?; \ 234 fi; \ 235 f="${srcdir}/libip6t_$$ext.man"; \ 236 if [ -f "$$f" ]; then \ 237 printf "\t+ $$f\n" >&2; \ 238 echo ".SS $$ext (IPv6-specific)"; \ 239 cat "$$f" || exit $$?; \ 240 fi; \ 241 f="${srcdir}/libipt_$$ext.man"; \ 242 if [ -f "$$f" ]; then \ 243 printf "\t+ $$f\n" >&2; \ 244 echo ".SS $$ext (IPv4-specific)"; \ 245 cat "$$f" || exit $$?; \ 246 fi; \ 247 done >$@; 248 249matches.man: ${initext_depfiles} $(wildcard ${srcdir}/lib*.man) 250 $(call man_run,$(call ex_matches,${pfx_build_mod} ${pfb_build_mod} ${pfa_build_mod} ${pf4_build_mod} ${pf6_build_mod} ${pfx_symlinks})) 251 252targets.man: ${initext_depfiles} $(wildcard ${srcdir}/lib*.man) 253 $(call man_run,$(call ex_targets,${pfx_build_mod} ${pfb_build_mod} ${pfa_build_mod} ${pf4_build_mod} ${pf6_build_mod} ${pfx_symlinks})) 254 255dist_initext_src = $(addprefix $(srcdir)/,${initext_sources}) 256dist_sources = $(filter-out ${dist_initext_src},$(wildcard $(srcdir)/*.[ch])) 257 258distdir: 259 mkdir -p $(distdir) 260 cp -p ${dist_sources} $(distdir)/ 261 cp -p $(wildcard ${srcdir}/lib*.man) $(distdir)/ 262 cp -p $(wildcard ${srcdir}/*.t ${srcdir}/*.txlate) $(distdir)/ 263 264dvi: 265check: all 266installcheck: 267