GNUmakefile.in 6.9 KB

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