1# MiniUPnP project 2# (c) 2015 Tomofumi Hayashi 3# http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ 4# Author : Tomofumi Hayashi 5# for use with GNU Make 6# 7# options can be passed to genconfig.sh through CONFIG_OPTIONS : 8# $ CONFIG_OPTIONS="--ipv6 --igd2" make -f Makefile.linux 9# 10# To install use : 11# $ DESTDIR=/dummyinstalldir make -f Makefile.linux_nft install 12# or : 13# $ INSTALLPREFIX=/usr/local make -f Makefile.linux_nft install 14# or : 15# $ make -f Makefile.linux install 16# (default INSTALLPREFIX is /usr) 17# 18# 19CFLAGS = -O -g #-DDEBUG 20CFLAGS ?= -Os 21CFLAGS += -fno-strict-aliasing 22CFLAGS += -fno-common 23CPPFLAGS += -D_GNU_SOURCE 24CFLAGS += -Wall 25CFLAGS += -Wextra -Wstrict-prototypes -Wdeclaration-after-statement 26#CFLAGS += -Wno-missing-field-initializers 27CC ?= gcc 28RM = rm -f 29INSTALL = install 30STRIP ?= strip 31PKG_CONFIG ?= pkg-config 32CP = cp 33 34 35INSTALLPREFIX ?= $(PREFIX)/usr 36SBININSTALLDIR = $(INSTALLPREFIX)/sbin 37ETCINSTALLDIR = $(PREFIX)/etc/miniupnpd 38MANINSTALLDIR = $(INSTALLPREFIX)/share/man/man8 39 40BASEOBJS = miniupnpd.o upnphttp.o upnpdescgen.o upnpsoap.o \ 41 upnpreplyparse.o minixml.o portinuse.o \ 42 upnpredirect.o getifaddr.o daemonize.o upnpglobalvars.o \ 43 options.o upnppermissions.o minissdp.o natpmp.o pcpserver.o \ 44 upnpevents.o upnputils.o getconnstatus.o \ 45 upnppinhole.o pcplearndscp.o asyncsendto.o 46 47LNXOBJS = linux/getifstats.o linux/ifacewatcher.o linux/getroute.o 48NETFILTEROBJS = netfilter_nft/nftnlrdr.o netfilter_nft/nfct_get.o netfilter_nft/nftnlrdr_misc.o 49 50ALLOBJS = $(BASEOBJS) $(LNXOBJS) $(NETFILTEROBJS) 51 52PCFILE_FOUND := $(shell $(PKG_CONFIG) --exists libnftnl; echo $$?) 53 54ifeq (${PCFILE_FOUND},0) 55 56PKG_CONFIG_LIBS = libnftnl libmnl 57CFLAGS += $(shell $(PKG_CONFIG) --cflags $(PKG_CONFIG_LIBS)) 58LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l $(PKG_CONFIG_LIBS)) 59LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-L $(PKG_CONFIG_LIBS)) 60LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-other $(PKG_CONFIG_LIBS)) 61else 62 63ARCH ?= $(shell uname -m | grep -q "x86_64" && echo 64) 64endif # ifdef PCFILE_FOUND 65 66#LDLIBS += -lnfnetlink 67 68TEST := $(shell $(PKG_CONFIG) --atleast-version=1.0.2 libnetfilter_conntrack && $(PKG_CONFIG) --atleast-version=1.0.3 libmnl && echo 1) 69ifeq ($(TEST),1) 70CPPFLAGS += -DUSE_NFCT 71LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l libmnl) 72LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l libnetfilter_conntrack) 73endif # ($(TEST),1) 74 75LDLIBS += $(shell $(PKG_CONFIG) --static --libs-only-l libssl) 76 77TESTUPNPDESCGENOBJS = testupnpdescgen.o upnpdescgen.o 78 79EXECUTABLES = miniupnpd testupnpdescgen testgetifstats \ 80 testupnppermissions miniupnpdctl testgetifaddr \ 81 testgetroute testasyncsendto testportinuse 82 83.PHONY: all clean install depend genuuid 84 85all: $(EXECUTABLES) 86 87clean: 88 $(RM) $(ALLOBJS) 89 $(RM) $(EXECUTABLES) 90 $(RM) testupnpdescgen.o testgetifstats.o 91 $(RM) testupnppermissions.o testgetifaddr.o 92 $(RM) testgetroute.o testasyncsendto.o 93 $(RM) testportinuse.o 94 $(RM) miniupnpdctl.o 95 96install: miniupnpd miniupnpd.8 miniupnpd.conf genuuid \ 97 netfilter/iptables_init.sh netfilter/iptables_removeall.sh \ 98 netfilter/ip6tables_init.sh netfilter/ip6tables_removeall.sh \ 99 linux/miniupnpd.init.d.script 100 $(STRIP) miniupnpd 101 $(INSTALL) -d $(DESTDIR)$(SBININSTALLDIR) 102 $(INSTALL) miniupnpd $(DESTDIR)$(SBININSTALLDIR) 103 $(INSTALL) -d $(DESTDIR)$(ETCINSTALLDIR) 104 $(INSTALL) netfilter/iptables_init.sh $(DESTDIR)$(ETCINSTALLDIR) 105 $(INSTALL) netfilter/iptables_removeall.sh $(DESTDIR)$(ETCINSTALLDIR) 106 $(INSTALL) netfilter/ip6tables_init.sh $(DESTDIR)$(ETCINSTALLDIR) 107 $(INSTALL) netfilter/ip6tables_removeall.sh $(DESTDIR)$(ETCINSTALLDIR) 108 $(INSTALL) --mode=0644 -b miniupnpd.conf $(DESTDIR)$(ETCINSTALLDIR) 109 $(INSTALL) -d $(DESTDIR)$(PREFIX)/etc/init.d 110 $(INSTALL) linux/miniupnpd.init.d.script $(DESTDIR)$(PREFIX)/etc/init.d/miniupnpd 111 $(INSTALL) -d $(DESTDIR)$(MANINSTALLDIR) 112 $(INSTALL) --mode=0644 miniupnpd.8 $(DESTDIR)$(MANINSTALLDIR) 113 gzip -f $(DESTDIR)$(MANINSTALLDIR)/miniupnpd.8 114 115# genuuid is using the uuidgen CLI tool which is part of libuuid 116# from the e2fsprogs 117# 'cat /proc/sys/kernel/random/uuid' could be also used 118genuuid: 119ifeq ($(TARGET_OPENWRT),) 120 sed -i -e "s/^uuid=[-0-9a-f]*/uuid=`(genuuid||uuidgen||uuid) 2>/dev/null`/" miniupnpd.conf 121else 122 sed -i -e "s/^uuid=[-0-9a-f]*/uuid=`($(STAGING_DIR_HOST)/bin/genuuid||$(STAGING_DIR_HOST)/bin/uuidgen||$(STAGING_DIR_HOST)/bin/uuid) 2>/dev/null`/" miniupnpd.conf 123endif 124 125miniupnpd: $(BASEOBJS) $(LNXOBJS) $(NETFILTEROBJS) 126 127testupnpdescgen: $(TESTUPNPDESCGENOBJS) 128 129testgetifstats: testgetifstats.o linux/getifstats.o 130 131testupnppermissions: testupnppermissions.o upnppermissions.o 132 133testgetifaddr: testgetifaddr.o getifaddr.o 134 135testgetroute: testgetroute.o linux/getroute.o upnputils.o 136 137testasyncsendto: testasyncsendto.o asyncsendto.o upnputils.o \ 138 linux/getroute.o 139 140testportinuse: testportinuse.o portinuse.o getifaddr.o \ 141 netfilter_nft/nftnlrdr.o netfilter_nft/nftnlrdr_misc.o 142 143miniupnpdctl: miniupnpdctl.o 144 145config.h: genconfig.sh VERSION 146 ./genconfig.sh $(CONFIG_OPTIONS) 147 148depend: config.h 149 makedepend -f$(MAKEFILE_LIST) -Y \ 150 $(ALLOBJS:.o=.c) $(TESTUPNPDESCGENOBJS:.o=.c) \ 151 testgetifstats.c testupnppermissions.c testgetifaddr.c \ 152 testgetroute.c testasyncsendto.c testportinuse.c \ 153 miniupnpdctl.c 2>/dev/null 154 155# DO NOT DELETE 156 157miniupnpd.o: config.h macros.h upnpglobalvars.h upnppermissions.h 158miniupnpd.o: miniupnpdtypes.h upnphttp.h upnpdescgen.h miniupnpdpath.h 159miniupnpd.o: getifaddr.h upnpsoap.h options.h minissdp.h upnpredirect.h 160miniupnpd.o: upnppinhole.h daemonize.h upnpevents.h asyncsendto.h natpmp.h 161miniupnpd.o: pcpserver.h commonrdr.h upnputils.h ifacewatcher.h 162upnphttp.o: config.h upnphttp.h upnpdescgen.h miniupnpdpath.h upnpsoap.h 163upnphttp.o: upnpevents.h upnputils.h 164upnpdescgen.o: config.h getifaddr.h upnpredirect.h upnpdescgen.h 165upnpdescgen.o: miniupnpdpath.h upnpglobalvars.h upnppermissions.h 166upnpdescgen.o: miniupnpdtypes.h upnpdescstrings.h upnpurns.h getconnstatus.h 167upnpsoap.o: macros.h config.h upnpglobalvars.h upnppermissions.h 168upnpsoap.o: miniupnpdtypes.h upnphttp.h upnpsoap.h upnpreplyparse.h 169upnpsoap.o: upnpredirect.h upnppinhole.h getifaddr.h getifstats.h 170upnpsoap.o: getconnstatus.h upnpurns.h 171upnpreplyparse.o: upnpreplyparse.h minixml.h 172minixml.o: minixml.h 173portinuse.o: macros.h config.h upnpglobalvars.h upnppermissions.h 174portinuse.o: miniupnpdtypes.h getifaddr.h portinuse.h netfilter_nft/nftnlrdr.h 175portinuse.o: commonrdr.h 176upnpredirect.o: macros.h config.h upnpredirect.h upnpglobalvars.h 177upnpredirect.o: upnppermissions.h miniupnpdtypes.h upnpevents.h portinuse.h 178upnpredirect.o: netfilter_nft/nftnlrdr.h commonrdr.h 179getifaddr.o: config.h getifaddr.h 180daemonize.o: daemonize.h config.h 181upnpglobalvars.o: config.h upnpglobalvars.h upnppermissions.h 182upnpglobalvars.o: miniupnpdtypes.h upnpdescstrings.h 183options.o: config.h options.h upnppermissions.h upnpglobalvars.h 184options.o: miniupnpdtypes.h 185upnppermissions.o: config.h upnppermissions.h 186minissdp.o: config.h upnpdescstrings.h miniupnpdpath.h upnphttp.h 187minissdp.o: upnpglobalvars.h upnppermissions.h miniupnpdtypes.h minissdp.h 188minissdp.o: upnputils.h getroute.h asyncsendto.h codelength.h 189natpmp.o: macros.h config.h natpmp.h upnpglobalvars.h upnppermissions.h 190natpmp.o: miniupnpdtypes.h getifaddr.h upnpredirect.h commonrdr.h upnputils.h 191natpmp.o: portinuse.h asyncsendto.h 192pcpserver.o: config.h pcpserver.h macros.h upnpglobalvars.h upnppermissions.h 193pcpserver.o: miniupnpdtypes.h pcplearndscp.h upnpredirect.h commonrdr.h 194pcpserver.o: getifaddr.h asyncsendto.h pcp_msg_struct.h netfilter_nft/nftnlrdr.h 195pcpserver.o: commonrdr.h 196upnpevents.o: config.h upnpevents.h miniupnpdpath.h upnpglobalvars.h 197upnpevents.o: upnppermissions.h miniupnpdtypes.h upnpdescgen.h upnputils.h 198upnputils.o: config.h upnputils.h upnpglobalvars.h upnppermissions.h 199upnputils.o: miniupnpdtypes.h getroute.h 200getconnstatus.o: getconnstatus.h getifaddr.h 201upnppinhole.o: macros.h config.h upnpredirect.h upnpglobalvars.h 202upnppinhole.o: upnppermissions.h miniupnpdtypes.h upnpevents.h 203#upnppinhole.o: netfilter/iptpinhole.h 204pcplearndscp.o: config.h upnpglobalvars.h upnppermissions.h miniupnpdtypes.h 205pcplearndscp.o: pcplearndscp.h 206asyncsendto.o: asyncsendto.h 207linux/getifstats.o: config.h getifstats.h 208linux/ifacewatcher.o: config.h ifacewatcher.h config.h minissdp.h 209linux/ifacewatcher.o: miniupnpdtypes.h getifaddr.h upnpglobalvars.h 210linux/ifacewatcher.o: upnppermissions.h natpmp.h 211linux/getroute.o: getroute.h upnputils.h 212netfilter_nft/nftnlrdr.o: macros.h config.h netfilter_nft/nftnlrdr.h commonrdr.h 213netfilter_nft/nftnlrdr.o: config.h upnpglobalvars.h upnppermissions.h 214netfilter_nft/nftnlrdr.o: miniupnpdtypes.h 215netfilter_nft/iptpinhole.o: config.h netfilter_nft/iptpinhole.h upnpglobalvars.h 216netfilter_nft/iptpinhole.o: upnppermissions.h config.h miniupnpdtypes.h 217testupnpdescgen.o: macros.h config.h upnpdescgen.h upnpdescstrings.h 218testupnpdescgen.o: getifaddr.h 219upnpdescgen.o: config.h getifaddr.h upnpredirect.h upnpdescgen.h 220upnpdescgen.o: miniupnpdpath.h upnpglobalvars.h upnppermissions.h 221upnpdescgen.o: miniupnpdtypes.h upnpdescstrings.h upnpurns.h getconnstatus.h 222testgetifstats.o: getifstats.h 223testupnppermissions.o: upnppermissions.h config.h 224testgetifaddr.o: config.h getifaddr.h 225testgetroute.o: getroute.h upnputils.h upnpglobalvars.h upnppermissions.h 226testgetroute.o: config.h miniupnpdtypes.h 227testasyncsendto.o: miniupnpdtypes.h config.h upnputils.h asyncsendto.h 228testportinuse.o: macros.h config.h portinuse.h 229miniupnpdctl.o: macros.h 230