From 55d2535a6f9cb9b388ee598c2a94accfcffda5cb Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Sat, 2 May 2020 18:08:59 +0200 Subject: [PATCH] miniupnpd: move many scripts from Makefile.linux to configure --- miniupnpd/INSTALL | 6 ++-- miniupnpd/Makefile.linux | 57 ++---------------------------------- miniupnpd/configure | 63 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 67 insertions(+), 59 deletions(-) diff --git a/miniupnpd/INSTALL b/miniupnpd/INSTALL index e26a157..a6851a0 100644 --- a/miniupnpd/INSTALL +++ b/miniupnpd/INSTALL @@ -82,7 +82,8 @@ To Build and install : - Build the daemon > make If not using iptables from your system, - > IPTABLESPATH=/path/to/iptables-1.4.1 make + > ./configure --iptablespath=/path/to/iptables-1.4.1 + > make - install as root using : > make install - A miniupnpd script should be installed to /etc/init.d @@ -108,7 +109,8 @@ How to get libiptc with its headers on debian : > ./configure --enable-static > make - it is now possible to compile miniupnpd using the following command : - > IPTABLESPATH=/path/to/iptables-x.x.x make + > ./configure --iptablespath=/path/to/iptables-x.x.x + > make ======================== Linux/netfilter nftables ========================= diff --git a/miniupnpd/Makefile.linux b/miniupnpd/Makefile.linux index 3107637..c846b67 100644 --- a/miniupnpd/Makefile.linux +++ b/miniupnpd/Makefile.linux @@ -75,60 +75,6 @@ LDLIBS ?= -lip4tc CPPFLAGS := -DIPTABLES_143 $(CPPFLAGS) endif -ARCH ?= $(shell uname -m | grep -q "x86_64" && echo 64) -ifdef IPTABLESPATH -CPPFLAGS := $(CPPFLAGS) -I$(IPTABLESPATH)/include/ -LDFLAGS := $(LDFLAGS) -L$(IPTABLESPATH)/libiptc/ -# get iptables version and set IPTABLES_143 macro if needed -ifeq ($(TARGET_OPENWRT),) -IPTABLESVERSION := $(shell grep "\#define VERSION" $(IPTABLESPATH)/config.h | tr -d \" |cut -d" " -f3 ) -IPTVER1 := $(shell echo $(IPTABLESVERSION) | cut -d. -f1 ) -IPTVER2 := $(shell echo $(IPTABLESVERSION) | cut -d. -f2 ) -IPTVER3 := $(shell echo $(IPTABLESVERSION) | cut -d. -f3 ) -# test if iptables version >= 1.4.3 -TEST := $(shell [ $(IPTVER1) -gt 1 ] || \ - [ \( $(IPTVER1) -eq 1 \) -a \ - \( \( $(IPTVER2) -gt 4 \) -o \ - \( \( $(IPTVER2) -eq 4 \) -a \( $(IPTVER3) -ge 3 \) \) \) ] && echo 1 ) -ifeq ($(TEST), 1) -CPPFLAGS := $(CPPFLAGS) -DIPTABLES_143 -# the following sucks, but works -LDLIBS = $(IPTABLESPATH)/libiptc/.libs/libip4tc.o -#LDLIBS = $(IPTABLESPATH)/libiptc/.libs/libiptc.a -else # ifeq ($(TEST), 1) -LDLIBS = $(IPTABLESPATH)/libiptc/libiptc.a -endif # ifeq ($(TEST), 1) -else # ($(TARGET_OPENWRT),) -# openWRT : -# check for system-wide iptables files. Test if iptables version >= 1.4.3 -# the following test has to be verified : -TEST := $(shell test -f /usr/include/iptables/internal.h && grep -q "\#define IPTABLES_VERSION" /usr/include/iptables/internal.h && echo 1) -ifeq ($(TEST), 1) -CPPFLAGS := $(CPPFLAGS) -DIPTABLES_143 -LDLIBS = -liptc -endif # ($(TEST), 1) -TEST_LIB := $(shell test -f /usr/lib$(ARCH)/libiptc.a && echo 1) -ifeq ($(TEST_LIB), 1) -LDLIBS = -liptc /usr/lib$(ARCH)/libiptc.a -endif # ($(TEST_LIB), 1) -endif # ($(TARGET_OPENWRT),) -else # ifdef IPTABLESPATH -# IPTABLESPATH not defined -# the following test has to be verified : -TEST := $(shell test -f /usr/include/xtables.h && grep -q "XTABLES_VERSION_CODE" /usr/include/xtables.h && echo 1) -ifeq ($(TEST), 1) -CPPFLAGS := $(CPPFLAGS) -DIPTABLES_143 -LDLIBS = -liptc -TESTIP4TC := $(shell test -f /lib/libip4tc.so && echo 1) -ifeq ($(TESTIP4TC), 1) -LDLIBS := $(LDLIBS) -lip4tc -endif # ($(TESTIP4TC), 1) -TESTIP6TC := $(shell test -f /lib/libip6tc.so && echo 1) -ifeq ($(TESTIP6TC), 1) -LDLIBS := $(LDLIBS) -lip6tc -endif # ($(TESTIP6TC), 1) -endif # ($(TEST), 1) -endif # ifdef IPTABLESPATH endif # ifneq ($(IPTABLES_PCFILE_FOUND),1) #LDLIBS += -lnfnetlink @@ -164,6 +110,9 @@ EXECUTABLES = miniupnpd testupnpdescgen testgetifstats \ all: $(EXECUTABLES) +config.mk: configure + ./configure $(CONFIG_OPTIONS) + clean: $(RM) config.h $(RM) $(ALLOBJS) diff --git a/miniupnpd/configure b/miniupnpd/configure index b432253..3d9ed64 100755 --- a/miniupnpd/configure +++ b/miniupnpd/configure @@ -13,6 +13,11 @@ UPNP_VERSION_MAJOR=1 UPNP_VERSION_MINOR=1 +# input environment variables : +# IPV6, IGD2, STRICT, DEBUG, LEASFILE, VENDORCFG, PCP_PEER, +# PORTINUSE, DISABLEPPPCONN, FW, IPTABLESPATH, TARGET_OPENWRT, +# PKG_CONFIG + for argv; do case "$argv" in --ipv6) IPV6=1 ;; @@ -35,6 +40,8 @@ case "$argv" in --disable-pppconn) DISABLEPPPCONN=1 ;; --firewall=*) FW=$(echo $argv | cut -d= -f2) ;; + --iptablespath=*) + IPTABLESPATH=$(echo $argv | cut -d= -f2) ;; --help|-h) echo "Usage : $0 [options]" echo " --ipv6 enable IPv6" @@ -48,6 +55,7 @@ case "$argv" in echo " --uda-version=x.x set advertised UPnP version (default to ${UPNP_VERSION_MAJOR}.${UPNP_VERSION_MINOR})" echo " --disable-pppconn disable WANPPPConnection" echo " --firewall= force the firewall type (nftables, iptables, pf, ipf, ipfw)" + echo " --iptablespath=/path/to/iptables use a specific version of iptables" exit 1 ;; *) @@ -78,6 +86,7 @@ LOG_MINIUPNPD="LOG_DAEMON" # detecting the OS name and version OS_NAME=`uname -s` OS_VERSION=`uname -r` +OS_MACHINE=`uname -m` # Makefile to use MAKEFILE= @@ -424,15 +433,14 @@ case $FW in ;; iptables) MAKEFILE=Makefile.linux - touch config.mk echo "#define USE_NETFILTER 1" >> ${CONFIGFILE} echo "#define USE_IPTABLES 1" >> ${CONFIGFILE} + echo "# generated by $0 on `date`" > config.mk if [ "$PKG_CONFIG" ] ; then - echo "# generated by $0 on `date`" > config.mk if ${PKG_CONFIG} --exists libiptc ; then IPTABLESVERSION=`${PKG_CONFIG} --modversion libiptc` echo "detected libiptc version $IPTABLESVERSION" - echo "# libiptc version $IPTABLESVERSION" >> config.mk + echo "# detected libiptc version $IPTABLESVERSION" >> config.mk echo "IPTABLES_PCFILE_FOUND = 1" >> config.mk IPTVER1=`echo $IPTABLESVERSION | cut -d. -f1` IPTVER2=`echo $IPTABLESVERSION | cut -d. -f2` @@ -452,6 +460,55 @@ case $FW in echo "LDLIBS += `${PKG_CONFIG} --static --libs-only-l libmnl libnetfilter_conntrack`" >> config.mk fi fi + if [ "$IPTABLESPATH" ] ; then + echo "CPPFLAGS += -I${IPTABLESPATH}/include/" >> config.mk + echo "LDFLAGS += -L${IPTABLESPATH}/libiptc/" >> config.mk + # to test : change the following test to [ "$OS_NAME" != "OpenWRT" ] + if [ -z "$TARGET_OPENWRT" ] ; then + IPTABLESVERSION=`grep "\#define VERSION" ${IPTABLESPATH}/config.h | tr -d \" |cut -d" " -f3` + echo "detected libiptc version $IPTABLESVERSION" + echo "# detected libiptc version $IPTABLESVERSION" >> config.mk + IPTVER1=`echo $IPTABLESVERSION | cut -d. -f1` + IPTVER2=`echo $IPTABLESVERSION | cut -d. -f2` + IPTVER3=`echo $IPTABLESVERSION | cut -d. -f3` + if [ $IPTVER1 -gt 1 ] || \ + [ \( $IPTVER1 -eq 1 \) -a \( \( $IPTVER2 -gt 4 \) \ + -o \( \( $IPTVER2 -eq 4 \) -a \( $IPTVER3 -ge 3 \) \) \) ] ; then + IPTABLES_143=1 + fi + if [ "$IPTABLES_143" -eq 1 ] ; then + echo "LDLIBS += ${IPTABLESPATH}/libiptc/.libs/libip4tc.o" >> config.mk + else + echo "LDLIBS += ${IPTABLESPATH}/libiptc/libiptc.a" >> config.mk + fi + else + # OpenWRT + # check for system-wide iptables files. Test if iptables version >= 1.4.3 + # the following test has to be verified : + if test -f /usr/include/iptables/internal.h && \ + grep -q "\#define IPTABLES_VERSION" /usr/include/iptables/internal.h ; then + IPTABLES_143=1 + echo "LDLIBS += -liptc" >> config.mk + fi + arch=`echo $OS_MACHINE | grep -q x86_64 && echo 64` + if test -f /usr/lib${arch}/libiptc.a ; then + echo "LDLIBS += -liptc /usr/lib${arch}/libiptc.a" >> config.mk + fi + fi + elif [ -z "${PKG_CONFIG}" ] ; then + # IPTABLESPATH not defined and no pkg-config + if test -f /usr/include/xtables.h && \ + grep -q "XTABLES_VERSION_CODE" /usr/include/xtables.h ; then + IPTABLES_143=1 + echo "LDLIBS += -liptc" >> config.mk + if test -f /lib/libip4tc.so ; then + echo "LDLIBS += -lip4tc" >> config.mk + fi + if test -f /lib/libip6tc.so ; then + echo "LDLIBS += -lip6tc" >> config.mk + fi + fi + fi echo "/* when IPTABLES_143 is defined, miniupnpd uses the new API" >> ${CONFIGFILE} echo " * from libiptc 1.4.3+ */ " >> ${CONFIGFILE} if [ "$IPTABLES_143" -eq 1 ] ; then