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